OSDN Git Service

* optimize.c (maybe_clone_body): Remove DECL_INLINE.
[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 ("specialization of %qD in different namespace", tmpl);
714       permerror ("  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 ("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 ("specializing %q#T in different namespace", type);
815               permerror ("  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
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 /* Complain 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 void
2818 check_template_shadow (tree decl)
2819 {
2820   tree olddecl;
2821
2822   /* If we're not in a template, we can't possibly shadow a template
2823      parameter.  */
2824   if (!current_template_parms)
2825     return;
2826
2827   /* Figure out what we're shadowing.  */
2828   if (TREE_CODE (decl) == OVERLOAD)
2829     decl = OVL_CURRENT (decl);
2830   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2831
2832   /* If there's no previous binding for this name, we're not shadowing
2833      anything, let alone a template parameter.  */
2834   if (!olddecl)
2835     return;
2836
2837   /* If we're not shadowing a template parameter, we're done.  Note
2838      that OLDDECL might be an OVERLOAD (or perhaps even an
2839      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2840      node.  */
2841   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2842     return;
2843
2844   /* We check for decl != olddecl to avoid bogus errors for using a
2845      name inside a class.  We check TPFI to avoid duplicate errors for
2846      inline member templates.  */
2847   if (decl == olddecl
2848       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2849     return;
2850
2851   error ("declaration of %q+#D", decl);
2852   error (" shadows template parm %q+#D", olddecl);
2853 }
2854
2855 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2856    ORIG_LEVEL, DECL, and TYPE.  */
2857
2858 static tree
2859 build_template_parm_index (int index,
2860                            int level,
2861                            int orig_level,
2862                            tree decl,
2863                            tree type)
2864 {
2865   tree t = make_node (TEMPLATE_PARM_INDEX);
2866   TEMPLATE_PARM_IDX (t) = index;
2867   TEMPLATE_PARM_LEVEL (t) = level;
2868   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2869   TEMPLATE_PARM_DECL (t) = decl;
2870   TREE_TYPE (t) = type;
2871   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2872   TREE_READONLY (t) = TREE_READONLY (decl);
2873
2874   return t;
2875 }
2876
2877 /* Find the canonical type parameter for the given template type
2878    parameter.  Returns the canonical type parameter, which may be TYPE
2879    if no such parameter existed.  */
2880 static tree
2881 canonical_type_parameter (tree type)
2882 {
2883   tree list;
2884   int idx = TEMPLATE_TYPE_IDX (type);
2885   if (!canonical_template_parms)
2886     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2887
2888   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2889     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2890
2891   list = VEC_index (tree, canonical_template_parms, idx);
2892   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2893     list = TREE_CHAIN (list);
2894
2895   if (list)
2896     return TREE_VALUE (list);
2897   else
2898     {
2899       VEC_replace(tree, canonical_template_parms, idx,
2900                   tree_cons (NULL_TREE, type, 
2901                              VEC_index (tree, canonical_template_parms, idx)));
2902       return type;
2903     }
2904 }
2905
2906 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2907    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2908    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2909    new one is created.  */
2910
2911 static tree
2912 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2913                             tsubst_flags_t complain)
2914 {
2915   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2916       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2917           != TEMPLATE_PARM_LEVEL (index) - levels))
2918     {
2919       tree orig_decl = TEMPLATE_PARM_DECL (index);
2920       tree decl, t;
2921
2922       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2923       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2924       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2925       DECL_ARTIFICIAL (decl) = 1;
2926       SET_DECL_TEMPLATE_PARM_P (decl);
2927
2928       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2929                                      TEMPLATE_PARM_LEVEL (index) - levels,
2930                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2931                                      decl, type);
2932       TEMPLATE_PARM_DESCENDANTS (index) = t;
2933       TEMPLATE_PARM_PARAMETER_PACK (t) 
2934         = TEMPLATE_PARM_PARAMETER_PACK (index);
2935
2936         /* Template template parameters need this.  */
2937       if (TREE_CODE (decl) == TEMPLATE_DECL)
2938         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2939           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2940            args, complain);
2941     }
2942
2943   return TEMPLATE_PARM_DESCENDANTS (index);
2944 }
2945
2946 /* Process information from new template parameter PARM and append it to the
2947    LIST being built.  This new parameter is a non-type parameter iff
2948    IS_NON_TYPE is true. This new parameter is a parameter
2949    pack iff IS_PARAMETER_PACK is true.  */
2950
2951 tree
2952 process_template_parm (tree list, tree parm, bool is_non_type, 
2953                        bool is_parameter_pack)
2954 {
2955   tree decl = 0;
2956   tree defval;
2957   tree err_parm_list;
2958   int idx = 0;
2959
2960   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2961   defval = TREE_PURPOSE (parm);
2962
2963   if (list)
2964     {
2965       tree p = tree_last (list);
2966
2967       if (p && TREE_VALUE (p) != error_mark_node)
2968         {
2969           p = TREE_VALUE (p);
2970           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2971             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2972           else
2973             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2974         }
2975
2976       ++idx;
2977     }
2978   else
2979     idx = 0;
2980
2981   if (is_non_type)
2982     {
2983       parm = TREE_VALUE (parm);
2984
2985       SET_DECL_TEMPLATE_PARM_P (parm);
2986
2987       if (TREE_TYPE (parm) == error_mark_node)
2988         {
2989           err_parm_list = build_tree_list (defval, parm);
2990           TREE_VALUE (err_parm_list) = error_mark_node;
2991            return chainon (list, err_parm_list);
2992         }
2993       else
2994       {
2995         /* [temp.param]
2996
2997            The top-level cv-qualifiers on the template-parameter are
2998            ignored when determining its type.  */
2999         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3000         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3001           {
3002             err_parm_list = build_tree_list (defval, parm);
3003             TREE_VALUE (err_parm_list) = error_mark_node;
3004              return chainon (list, err_parm_list);
3005           }
3006
3007         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3008           {
3009             /* This template parameter is not a parameter pack, but it
3010                should be. Complain about "bare" parameter packs.  */
3011             check_for_bare_parameter_packs (TREE_TYPE (parm));
3012             
3013             /* Recover by calling this a parameter pack.  */
3014             is_parameter_pack = true;
3015           }
3016       }
3017
3018       /* A template parameter is not modifiable.  */
3019       TREE_CONSTANT (parm) = 1;
3020       TREE_READONLY (parm) = 1;
3021       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3022       TREE_CONSTANT (decl) = 1;
3023       TREE_READONLY (decl) = 1;
3024       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3025         = build_template_parm_index (idx, processing_template_decl,
3026                                      processing_template_decl,
3027                                      decl, TREE_TYPE (parm));
3028
3029       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3030         = is_parameter_pack;
3031     }
3032   else
3033     {
3034       tree t;
3035       parm = TREE_VALUE (TREE_VALUE (parm));
3036
3037       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3038         {
3039           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3040           /* This is for distinguishing between real templates and template
3041              template parameters */
3042           TREE_TYPE (parm) = t;
3043           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3044           decl = parm;
3045         }
3046       else
3047         {
3048           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3049           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3050           decl = build_decl (TYPE_DECL, parm, t);
3051         }
3052
3053       TYPE_NAME (t) = decl;
3054       TYPE_STUB_DECL (t) = decl;
3055       parm = decl;
3056       TEMPLATE_TYPE_PARM_INDEX (t)
3057         = build_template_parm_index (idx, processing_template_decl,
3058                                      processing_template_decl,
3059                                      decl, TREE_TYPE (parm));
3060       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3061       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3062     }
3063   DECL_ARTIFICIAL (decl) = 1;
3064   SET_DECL_TEMPLATE_PARM_P (decl);
3065   pushdecl (decl);
3066   parm = build_tree_list (defval, parm);
3067   return chainon (list, parm);
3068 }
3069
3070 /* The end of a template parameter list has been reached.  Process the
3071    tree list into a parameter vector, converting each parameter into a more
3072    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3073    as PARM_DECLs.  */
3074
3075 tree
3076 end_template_parm_list (tree parms)
3077 {
3078   int nparms;
3079   tree parm, next;
3080   tree saved_parmlist = make_tree_vec (list_length (parms));
3081
3082   current_template_parms
3083     = tree_cons (size_int (processing_template_decl),
3084                  saved_parmlist, current_template_parms);
3085
3086   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3087     {
3088       next = TREE_CHAIN (parm);
3089       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3090       TREE_CHAIN (parm) = NULL_TREE;
3091     }
3092
3093   --processing_template_parmlist;
3094
3095   return saved_parmlist;
3096 }
3097
3098 /* end_template_decl is called after a template declaration is seen.  */
3099
3100 void
3101 end_template_decl (void)
3102 {
3103   reset_specialization ();
3104
3105   if (! processing_template_decl)
3106     return;
3107
3108   /* This matches the pushlevel in begin_template_parm_list.  */
3109   finish_scope ();
3110
3111   --processing_template_decl;
3112   current_template_parms = TREE_CHAIN (current_template_parms);
3113 }
3114
3115 /* Within the declaration of a template, return all levels of template
3116    parameters that apply.  The template parameters are represented as
3117    a TREE_VEC, in the form documented in cp-tree.h for template
3118    arguments.  */
3119
3120 static tree
3121 current_template_args (void)
3122 {
3123   tree header;
3124   tree args = NULL_TREE;
3125   int length = TMPL_PARMS_DEPTH (current_template_parms);
3126   int l = length;
3127
3128   /* If there is only one level of template parameters, we do not
3129      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3130      TREE_VEC containing the arguments.  */
3131   if (length > 1)
3132     args = make_tree_vec (length);
3133
3134   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3135     {
3136       tree a = copy_node (TREE_VALUE (header));
3137       int i;
3138
3139       TREE_TYPE (a) = NULL_TREE;
3140       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3141         {
3142           tree t = TREE_VEC_ELT (a, i);
3143
3144           /* T will be a list if we are called from within a
3145              begin/end_template_parm_list pair, but a vector directly
3146              if within a begin/end_member_template_processing pair.  */
3147           if (TREE_CODE (t) == TREE_LIST)
3148             {
3149               t = TREE_VALUE (t);
3150
3151               if (!error_operand_p (t))
3152                 {
3153                   if (TREE_CODE (t) == TYPE_DECL
3154                       || TREE_CODE (t) == TEMPLATE_DECL)
3155                     {
3156                       t = TREE_TYPE (t);
3157                       
3158                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3159                         {
3160                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3161                              with a single element, which expands T.  */
3162                           tree vec = make_tree_vec (1);
3163                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3164                           
3165                           t = make_node (TYPE_ARGUMENT_PACK);
3166                           SET_ARGUMENT_PACK_ARGS (t, vec);
3167                         }
3168                     }
3169                   else
3170                     {
3171                       t = DECL_INITIAL (t);
3172                       
3173                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3174                         {
3175                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3176                              with a single element, which expands T.  */
3177                           tree vec = make_tree_vec (1);
3178                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3179                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3180                           
3181                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3182                           SET_ARGUMENT_PACK_ARGS (t, vec);
3183                           TREE_TYPE (t) = type;
3184                         }
3185                     }
3186                   TREE_VEC_ELT (a, i) = t;
3187                 }
3188             }
3189         }
3190
3191       if (length > 1)
3192         TREE_VEC_ELT (args, --l) = a;
3193       else
3194         args = a;
3195     }
3196
3197   return args;
3198 }
3199
3200 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3201    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3202    a member template.  Used by push_template_decl below.  */
3203
3204 static tree
3205 build_template_decl (tree decl, tree parms, bool member_template_p)
3206 {
3207   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3208   DECL_TEMPLATE_PARMS (tmpl) = parms;
3209   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3210   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3211   if (DECL_LANG_SPECIFIC (decl))
3212     {
3213       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3214       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3215       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3216       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3217       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3218       if (DECL_OVERLOADED_OPERATOR_P (decl))
3219         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3220                                       DECL_OVERLOADED_OPERATOR_P (decl));
3221     }
3222
3223   return tmpl;
3224 }
3225
3226 struct template_parm_data
3227 {
3228   /* The level of the template parameters we are currently
3229      processing.  */
3230   int level;
3231
3232   /* The index of the specialization argument we are currently
3233      processing.  */
3234   int current_arg;
3235
3236   /* An array whose size is the number of template parameters.  The
3237      elements are nonzero if the parameter has been used in any one
3238      of the arguments processed so far.  */
3239   int* parms;
3240
3241   /* An array whose size is the number of template arguments.  The
3242      elements are nonzero if the argument makes use of template
3243      parameters of this level.  */
3244   int* arg_uses_template_parms;
3245 };
3246
3247 /* Subroutine of push_template_decl used to see if each template
3248    parameter in a partial specialization is used in the explicit
3249    argument list.  If T is of the LEVEL given in DATA (which is
3250    treated as a template_parm_data*), then DATA->PARMS is marked
3251    appropriately.  */
3252
3253 static int
3254 mark_template_parm (tree t, void* data)
3255 {
3256   int level;
3257   int idx;
3258   struct template_parm_data* tpd = (struct template_parm_data*) data;
3259
3260   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3261     {
3262       level = TEMPLATE_PARM_LEVEL (t);
3263       idx = TEMPLATE_PARM_IDX (t);
3264     }
3265   else
3266     {
3267       level = TEMPLATE_TYPE_LEVEL (t);
3268       idx = TEMPLATE_TYPE_IDX (t);
3269     }
3270
3271   if (level == tpd->level)
3272     {
3273       tpd->parms[idx] = 1;
3274       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3275     }
3276
3277   /* Return zero so that for_each_template_parm will continue the
3278      traversal of the tree; we want to mark *every* template parm.  */
3279   return 0;
3280 }
3281
3282 /* Process the partial specialization DECL.  */
3283
3284 static tree
3285 process_partial_specialization (tree decl)
3286 {
3287   tree type = TREE_TYPE (decl);
3288   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3289   tree specargs = CLASSTYPE_TI_ARGS (type);
3290   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3291   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3292   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3293   int nargs = TREE_VEC_LENGTH (inner_args);
3294   int ntparms = TREE_VEC_LENGTH (inner_parms);
3295   int  i;
3296   int did_error_intro = 0;
3297   struct template_parm_data tpd;
3298   struct template_parm_data tpd2;
3299
3300   /* We check that each of the template parameters given in the
3301      partial specialization is used in the argument list to the
3302      specialization.  For example:
3303
3304        template <class T> struct S;
3305        template <class T> struct S<T*>;
3306
3307      The second declaration is OK because `T*' uses the template
3308      parameter T, whereas
3309
3310        template <class T> struct S<int>;
3311
3312      is no good.  Even trickier is:
3313
3314        template <class T>
3315        struct S1
3316        {
3317           template <class U>
3318           struct S2;
3319           template <class U>
3320           struct S2<T>;
3321        };
3322
3323      The S2<T> declaration is actually invalid; it is a
3324      full-specialization.  Of course,
3325
3326           template <class U>
3327           struct S2<T (*)(U)>;
3328
3329      or some such would have been OK.  */
3330   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3331   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3332   memset (tpd.parms, 0, sizeof (int) * ntparms);
3333
3334   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3335   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3336   for (i = 0; i < nargs; ++i)
3337     {
3338       tpd.current_arg = i;
3339       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3340                               &mark_template_parm,
3341                               &tpd,
3342                               NULL,
3343                               /*include_nondeduced_p=*/false);
3344     }
3345   for (i = 0; i < ntparms; ++i)
3346     if (tpd.parms[i] == 0)
3347       {
3348         /* One of the template parms was not used in the
3349            specialization.  */
3350         if (!did_error_intro)
3351           {
3352             error ("template parameters not used in partial specialization:");
3353             did_error_intro = 1;
3354           }
3355
3356         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3357       }
3358
3359   /* [temp.class.spec]
3360
3361      The argument list of the specialization shall not be identical to
3362      the implicit argument list of the primary template.  */
3363   if (comp_template_args
3364       (inner_args,
3365        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3366                                                    (maintmpl)))))
3367     error ("partial specialization %qT does not specialize any template arguments", type);
3368
3369   /* [temp.class.spec]
3370
3371      A partially specialized non-type argument expression shall not
3372      involve template parameters of the partial specialization except
3373      when the argument expression is a simple identifier.
3374
3375      The type of a template parameter corresponding to a specialized
3376      non-type argument shall not be dependent on a parameter of the
3377      specialization. 
3378
3379      Also, we verify that pack expansions only occur at the
3380      end of the argument list.  */
3381   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3382   tpd2.parms = 0;
3383   for (i = 0; i < nargs; ++i)
3384     {
3385       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3386       tree arg = TREE_VEC_ELT (inner_args, i);
3387       tree packed_args = NULL_TREE;
3388       int j, len = 1;
3389
3390       if (ARGUMENT_PACK_P (arg))
3391         {
3392           /* Extract the arguments from the argument pack. We'll be
3393              iterating over these in the following loop.  */
3394           packed_args = ARGUMENT_PACK_ARGS (arg);
3395           len = TREE_VEC_LENGTH (packed_args);
3396         }
3397
3398       for (j = 0; j < len; j++)
3399         {
3400           if (packed_args)
3401             /* Get the Jth argument in the parameter pack.  */
3402             arg = TREE_VEC_ELT (packed_args, j);
3403
3404           if (PACK_EXPANSION_P (arg))
3405             {
3406               /* Pack expansions must come at the end of the
3407                  argument list.  */
3408               if ((packed_args && j < len - 1)
3409                   || (!packed_args && i < nargs - 1))
3410                 {
3411                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3412                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3413                   else
3414                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3415
3416                   if (packed_args)
3417                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3418                 }
3419             }
3420
3421           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3422             /* We only care about the pattern.  */
3423             arg = PACK_EXPANSION_PATTERN (arg);
3424
3425           if (/* These first two lines are the `non-type' bit.  */
3426               !TYPE_P (arg)
3427               && TREE_CODE (arg) != TEMPLATE_DECL
3428               /* This next line is the `argument expression is not just a
3429                  simple identifier' condition and also the `specialized
3430                  non-type argument' bit.  */
3431               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3432             {
3433               if ((!packed_args && tpd.arg_uses_template_parms[i])
3434                   || (packed_args && uses_template_parms (arg)))
3435                 error ("template argument %qE involves template parameter(s)",
3436                        arg);
3437               else 
3438                 {
3439                   /* Look at the corresponding template parameter,
3440                      marking which template parameters its type depends
3441                      upon.  */
3442                   tree type = TREE_TYPE (parm);
3443
3444                   if (!tpd2.parms)
3445                     {
3446                       /* We haven't yet initialized TPD2.  Do so now.  */
3447                       tpd2.arg_uses_template_parms 
3448                         = (int *) alloca (sizeof (int) * nargs);
3449                       /* The number of parameters here is the number in the
3450                          main template, which, as checked in the assertion
3451                          above, is NARGS.  */
3452                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3453                       tpd2.level = 
3454                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3455                     }
3456
3457                   /* Mark the template parameters.  But this time, we're
3458                      looking for the template parameters of the main
3459                      template, not in the specialization.  */
3460                   tpd2.current_arg = i;
3461                   tpd2.arg_uses_template_parms[i] = 0;
3462                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3463                   for_each_template_parm (type,
3464                                           &mark_template_parm,
3465                                           &tpd2,
3466                                           NULL,
3467                                           /*include_nondeduced_p=*/false);
3468
3469                   if (tpd2.arg_uses_template_parms [i])
3470                     {
3471                       /* The type depended on some template parameters.
3472                          If they are fully specialized in the
3473                          specialization, that's OK.  */
3474                       int j;
3475                       for (j = 0; j < nargs; ++j)
3476                         if (tpd2.parms[j] != 0
3477                             && tpd.arg_uses_template_parms [j])
3478                           {
3479                             error ("type %qT of template argument %qE depends "
3480                                    "on template parameter(s)", 
3481                                    type,
3482                                    arg);
3483                             break;
3484                           }
3485                     }
3486                 }
3487             }
3488         }
3489     }
3490
3491   if (retrieve_specialization (maintmpl, specargs,
3492                                /*class_specializations_p=*/true))
3493     /* We've already got this specialization.  */
3494     return decl;
3495
3496   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3497     = tree_cons (specargs, inner_parms,
3498                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3499   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3500   return decl;
3501 }
3502
3503 /* Check that a template declaration's use of default arguments and
3504    parameter packs is not invalid.  Here, PARMS are the template
3505    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3506    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3507    specialization.
3508    
3509
3510    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3511    declaration (but not a definition); 1 indicates a declaration, 2
3512    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3513    emitted for extraneous default arguments.
3514
3515    Returns TRUE if there were no errors found, FALSE otherwise. */
3516
3517 bool
3518 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3519                          int is_partial, int is_friend_decl)
3520 {
3521   const char *msg;
3522   int last_level_to_check;
3523   tree parm_level;
3524   bool no_errors = true;
3525
3526   /* [temp.param]
3527
3528      A default template-argument shall not be specified in a
3529      function template declaration or a function template definition, nor
3530      in the template-parameter-list of the definition of a member of a
3531      class template.  */
3532
3533   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3534     /* You can't have a function template declaration in a local
3535        scope, nor you can you define a member of a class template in a
3536        local scope.  */
3537     return true;
3538
3539   if (current_class_type
3540       && !TYPE_BEING_DEFINED (current_class_type)
3541       && DECL_LANG_SPECIFIC (decl)
3542       /* If this is either a friend defined in the scope of the class
3543          or a member function.  */
3544       && (DECL_FUNCTION_MEMBER_P (decl)
3545           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3546           : DECL_FRIEND_CONTEXT (decl)
3547           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3548           : false)
3549       /* And, if it was a member function, it really was defined in
3550          the scope of the class.  */
3551       && (!DECL_FUNCTION_MEMBER_P (decl)
3552           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3553     /* We already checked these parameters when the template was
3554        declared, so there's no need to do it again now.  This function
3555        was defined in class scope, but we're processing it's body now
3556        that the class is complete.  */
3557     return true;
3558
3559   /* Core issue 226 (C++0x only): the following only applies to class
3560      templates.  */
3561   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3562     {
3563       /* [temp.param]
3564
3565          If a template-parameter has a default template-argument, all
3566          subsequent template-parameters shall have a default
3567          template-argument supplied.  */
3568       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3569         {
3570           tree inner_parms = TREE_VALUE (parm_level);
3571           int ntparms = TREE_VEC_LENGTH (inner_parms);
3572           int seen_def_arg_p = 0;
3573           int i;
3574
3575           for (i = 0; i < ntparms; ++i)
3576             {
3577               tree parm = TREE_VEC_ELT (inner_parms, i);
3578
3579               if (parm == error_mark_node)
3580                 continue;
3581
3582               if (TREE_PURPOSE (parm))
3583                 seen_def_arg_p = 1;
3584               else if (seen_def_arg_p)
3585                 {
3586                   error ("no default argument for %qD", TREE_VALUE (parm));
3587                   /* For better subsequent error-recovery, we indicate that
3588                      there should have been a default argument.  */
3589                   TREE_PURPOSE (parm) = error_mark_node;
3590                   no_errors = false;
3591                 }
3592               else if (is_primary
3593                        && !is_partial
3594                        && !is_friend_decl
3595                        && TREE_CODE (decl) == TYPE_DECL
3596                        && i < ntparms - 1
3597                        && template_parameter_pack_p (TREE_VALUE (parm)))
3598                 {
3599                   /* A primary class template can only have one
3600                      parameter pack, at the end of the template
3601                      parameter list.  */
3602
3603                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3604                     error ("parameter pack %qE must be at the end of the"
3605                            " template parameter list", TREE_VALUE (parm));
3606                   else
3607                     error ("parameter pack %qT must be at the end of the"
3608                            " template parameter list", 
3609                            TREE_TYPE (TREE_VALUE (parm)));
3610
3611                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3612                     = error_mark_node;
3613                   no_errors = false;
3614                 }
3615             }
3616         }
3617     }
3618
3619   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3620       || is_partial 
3621       || !is_primary
3622       || is_friend_decl)
3623     /* For an ordinary class template, default template arguments are
3624        allowed at the innermost level, e.g.:
3625          template <class T = int>
3626          struct S {};
3627        but, in a partial specialization, they're not allowed even
3628        there, as we have in [temp.class.spec]:
3629
3630          The template parameter list of a specialization shall not
3631          contain default template argument values.
3632
3633        So, for a partial specialization, or for a function template
3634        (in C++98/C++03), we look at all of them.  */
3635     ;
3636   else
3637     /* But, for a primary class template that is not a partial
3638        specialization we look at all template parameters except the
3639        innermost ones.  */
3640     parms = TREE_CHAIN (parms);
3641
3642   /* Figure out what error message to issue.  */
3643   if (is_friend_decl == 2)
3644     msg = "default template arguments may not be used in function template friend re-declaration";
3645   else if (is_friend_decl)
3646     msg = "default template arguments may not be used in function template friend declarations";
3647   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3648     msg = "default template arguments may not be used in function templates";
3649   else if (is_partial)
3650     msg = "default template arguments may not be used in partial specializations";
3651   else
3652     msg = "default argument for template parameter for class enclosing %qD";
3653
3654   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3655     /* If we're inside a class definition, there's no need to
3656        examine the parameters to the class itself.  On the one
3657        hand, they will be checked when the class is defined, and,
3658        on the other, default arguments are valid in things like:
3659          template <class T = double>
3660          struct S { template <class U> void f(U); };
3661        Here the default argument for `S' has no bearing on the
3662        declaration of `f'.  */
3663     last_level_to_check = template_class_depth (current_class_type) + 1;
3664   else
3665     /* Check everything.  */
3666     last_level_to_check = 0;
3667
3668   for (parm_level = parms;
3669        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3670        parm_level = TREE_CHAIN (parm_level))
3671     {
3672       tree inner_parms = TREE_VALUE (parm_level);
3673       int i;
3674       int ntparms;
3675
3676       ntparms = TREE_VEC_LENGTH (inner_parms);
3677       for (i = 0; i < ntparms; ++i)
3678         {
3679           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3680             continue;
3681
3682           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3683             {
3684               if (msg)
3685                 {
3686                   no_errors = false;
3687                   if (is_friend_decl == 2)
3688                     return no_errors;
3689
3690                   error (msg, decl);
3691                   msg = 0;
3692                 }
3693
3694               /* Clear out the default argument so that we are not
3695                  confused later.  */
3696               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3697             }
3698         }
3699
3700       /* At this point, if we're still interested in issuing messages,
3701          they must apply to classes surrounding the object declared.  */
3702       if (msg)
3703         msg = "default argument for template parameter for class enclosing %qD";
3704     }
3705
3706   return no_errors;
3707 }
3708
3709 /* Worker for push_template_decl_real, called via
3710    for_each_template_parm.  DATA is really an int, indicating the
3711    level of the parameters we are interested in.  If T is a template
3712    parameter of that level, return nonzero.  */
3713
3714 static int
3715 template_parm_this_level_p (tree t, void* data)
3716 {
3717   int this_level = *(int *)data;
3718   int level;
3719
3720   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3721     level = TEMPLATE_PARM_LEVEL (t);
3722   else
3723     level = TEMPLATE_TYPE_LEVEL (t);
3724   return level == this_level;
3725 }
3726
3727 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3728    parameters given by current_template_args, or reuses a
3729    previously existing one, if appropriate.  Returns the DECL, or an
3730    equivalent one, if it is replaced via a call to duplicate_decls.
3731
3732    If IS_FRIEND is true, DECL is a friend declaration.  */
3733
3734 tree
3735 push_template_decl_real (tree decl, bool is_friend)
3736 {
3737   tree tmpl;
3738   tree args;
3739   tree info;
3740   tree ctx;
3741   int primary;
3742   int is_partial;
3743   int new_template_p = 0;
3744   /* True if the template is a member template, in the sense of
3745      [temp.mem].  */
3746   bool member_template_p = false;
3747
3748   if (decl == error_mark_node)
3749     return decl;
3750
3751   /* See if this is a partial specialization.  */
3752   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3753                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3754                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3755
3756   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3757     is_friend = true;
3758
3759   if (is_friend)
3760     /* For a friend, we want the context of the friend function, not
3761        the type of which it is a friend.  */
3762     ctx = DECL_CONTEXT (decl);
3763   else if (CP_DECL_CONTEXT (decl)
3764            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3765     /* In the case of a virtual function, we want the class in which
3766        it is defined.  */
3767     ctx = CP_DECL_CONTEXT (decl);
3768   else
3769     /* Otherwise, if we're currently defining some class, the DECL
3770        is assumed to be a member of the class.  */
3771     ctx = current_scope ();
3772
3773   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3774     ctx = NULL_TREE;
3775
3776   if (!DECL_CONTEXT (decl))
3777     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3778
3779   /* See if this is a primary template.  */
3780   if (is_friend && ctx)
3781     /* A friend template that specifies a class context, i.e.
3782          template <typename T> friend void A<T>::f();
3783        is not primary.  */
3784     primary = 0;
3785   else
3786     primary = template_parm_scope_p ();
3787
3788   if (primary)
3789     {
3790       if (DECL_CLASS_SCOPE_P (decl))
3791         member_template_p = true;
3792       if (TREE_CODE (decl) == TYPE_DECL
3793           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3794         {
3795           error ("template class without a name");
3796           return error_mark_node;
3797         }
3798       else if (TREE_CODE (decl) == FUNCTION_DECL)
3799         {
3800           if (DECL_DESTRUCTOR_P (decl))
3801             {
3802               /* [temp.mem]
3803
3804                  A destructor shall not be a member template.  */
3805               error ("destructor %qD declared as member template", decl);
3806               return error_mark_node;
3807             }
3808           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3809               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3810                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3811                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3812                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3813                       == void_list_node)))
3814             {
3815               /* [basic.stc.dynamic.allocation]
3816
3817                  An allocation function can be a function
3818                  template. ... Template allocation functions shall
3819                  have two or more parameters.  */
3820               error ("invalid template declaration of %qD", decl);
3821               return error_mark_node;
3822             }
3823         }
3824       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3825                && CLASS_TYPE_P (TREE_TYPE (decl)))
3826         /* OK */;
3827       else
3828         {
3829           error ("template declaration of %q#D", decl);
3830           return error_mark_node;
3831         }
3832     }
3833
3834   /* Check to see that the rules regarding the use of default
3835      arguments are not being violated.  */
3836   check_default_tmpl_args (decl, current_template_parms,
3837                            primary, is_partial, /*is_friend_decl=*/0);
3838
3839   /* Ensure that there are no parameter packs in the type of this
3840      declaration that have not been expanded.  */
3841   if (TREE_CODE (decl) == FUNCTION_DECL)
3842     {
3843       /* Check each of the arguments individually to see if there are
3844          any bare parameter packs.  */
3845       tree type = TREE_TYPE (decl);
3846       tree arg = DECL_ARGUMENTS (decl);
3847       tree argtype = TYPE_ARG_TYPES (type);
3848
3849       while (arg && argtype)
3850         {
3851           if (!FUNCTION_PARAMETER_PACK_P (arg)
3852               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3853             {
3854             /* This is a PARM_DECL that contains unexpanded parameter
3855                packs. We have already complained about this in the
3856                check_for_bare_parameter_packs call, so just replace
3857                these types with ERROR_MARK_NODE.  */
3858               TREE_TYPE (arg) = error_mark_node;
3859               TREE_VALUE (argtype) = error_mark_node;
3860             }
3861
3862           arg = TREE_CHAIN (arg);
3863           argtype = TREE_CHAIN (argtype);
3864         }
3865
3866       /* Check for bare parameter packs in the return type and the
3867          exception specifiers.  */
3868       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3869         /* Errors were already issued, set return type to int
3870            as the frontend doesn't expect error_mark_node as
3871            the return type.  */
3872         TREE_TYPE (type) = integer_type_node;
3873       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3874         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3875     }
3876   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3877     {
3878       TREE_TYPE (decl) = error_mark_node;
3879       return error_mark_node;
3880     }
3881
3882   if (is_partial)
3883     return process_partial_specialization (decl);
3884
3885   args = current_template_args ();
3886
3887   if (!ctx
3888       || TREE_CODE (ctx) == FUNCTION_DECL
3889       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3890       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3891     {
3892       if (DECL_LANG_SPECIFIC (decl)
3893           && DECL_TEMPLATE_INFO (decl)
3894           && DECL_TI_TEMPLATE (decl))
3895         tmpl = DECL_TI_TEMPLATE (decl);
3896       /* If DECL is a TYPE_DECL for a class-template, then there won't
3897          be DECL_LANG_SPECIFIC.  The information equivalent to
3898          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3899       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3900                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3901                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3902         {
3903           /* Since a template declaration already existed for this
3904              class-type, we must be redeclaring it here.  Make sure
3905              that the redeclaration is valid.  */
3906           redeclare_class_template (TREE_TYPE (decl),
3907                                     current_template_parms);
3908           /* We don't need to create a new TEMPLATE_DECL; just use the
3909              one we already had.  */
3910           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3911         }
3912       else
3913         {
3914           tmpl = build_template_decl (decl, current_template_parms,
3915                                       member_template_p);
3916           new_template_p = 1;
3917
3918           if (DECL_LANG_SPECIFIC (decl)
3919               && DECL_TEMPLATE_SPECIALIZATION (decl))
3920             {
3921               /* A specialization of a member template of a template
3922                  class.  */
3923               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3924               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3925               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3926             }
3927         }
3928     }
3929   else
3930     {
3931       tree a, t, current, parms;
3932       int i;
3933       tree tinfo = get_template_info (decl);
3934
3935       if (!tinfo)
3936         {
3937           error ("template definition of non-template %q#D", decl);
3938           return error_mark_node;
3939         }
3940
3941       tmpl = TI_TEMPLATE (tinfo);
3942
3943       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3944           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3945           && DECL_TEMPLATE_SPECIALIZATION (decl)
3946           && DECL_MEMBER_TEMPLATE_P (tmpl))
3947         {
3948           tree new_tmpl;
3949
3950           /* The declaration is a specialization of a member
3951              template, declared outside the class.  Therefore, the
3952              innermost template arguments will be NULL, so we
3953              replace them with the arguments determined by the
3954              earlier call to check_explicit_specialization.  */
3955           args = DECL_TI_ARGS (decl);
3956
3957           new_tmpl
3958             = build_template_decl (decl, current_template_parms,
3959                                    member_template_p);
3960           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3961           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3962           DECL_TI_TEMPLATE (decl) = new_tmpl;
3963           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3964           DECL_TEMPLATE_INFO (new_tmpl)
3965             = tree_cons (tmpl, args, NULL_TREE);
3966
3967           register_specialization (new_tmpl,
3968                                    most_general_template (tmpl),
3969                                    args,
3970                                    is_friend);
3971           return decl;
3972         }
3973
3974       /* Make sure the template headers we got make sense.  */
3975
3976       parms = DECL_TEMPLATE_PARMS (tmpl);
3977       i = TMPL_PARMS_DEPTH (parms);
3978       if (TMPL_ARGS_DEPTH (args) != i)
3979         {
3980           error ("expected %d levels of template parms for %q#D, got %d",
3981                  i, decl, TMPL_ARGS_DEPTH (args));
3982         }
3983       else
3984         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3985           {
3986             a = TMPL_ARGS_LEVEL (args, i);
3987             t = INNERMOST_TEMPLATE_PARMS (parms);
3988
3989             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3990               {
3991                 if (current == decl)
3992                   error ("got %d template parameters for %q#D",
3993                          TREE_VEC_LENGTH (a), decl);
3994                 else
3995                   error ("got %d template parameters for %q#T",
3996                          TREE_VEC_LENGTH (a), current);
3997                 error ("  but %d required", TREE_VEC_LENGTH (t));
3998                 return error_mark_node;
3999               }
4000
4001             if (current == decl)
4002               current = ctx;
4003             else
4004               current = (TYPE_P (current)
4005                          ? TYPE_CONTEXT (current)
4006                          : DECL_CONTEXT (current));
4007           }
4008
4009       /* Check that the parms are used in the appropriate qualifying scopes
4010          in the declarator.  */
4011       if (!comp_template_args
4012           (TI_ARGS (tinfo),
4013            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4014         {
4015           error ("\
4016 template arguments to %qD do not match original template %qD",
4017                  decl, DECL_TEMPLATE_RESULT (tmpl));
4018           if (!uses_template_parms (TI_ARGS (tinfo)))
4019             inform ("use template<> for an explicit specialization");
4020           /* Avoid crash in import_export_decl.  */
4021           DECL_INTERFACE_KNOWN (decl) = 1;
4022           return error_mark_node;
4023         }
4024     }
4025
4026   DECL_TEMPLATE_RESULT (tmpl) = decl;
4027   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4028
4029   /* Push template declarations for global functions and types.  Note
4030      that we do not try to push a global template friend declared in a
4031      template class; such a thing may well depend on the template
4032      parameters of the class.  */
4033   if (new_template_p && !ctx
4034       && !(is_friend && template_class_depth (current_class_type) > 0))
4035     {
4036       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4037       if (tmpl == error_mark_node)
4038         return error_mark_node;
4039
4040       /* Hide template friend classes that haven't been declared yet.  */
4041       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4042         {
4043           DECL_ANTICIPATED (tmpl) = 1;
4044           DECL_FRIEND_P (tmpl) = 1;
4045         }
4046     }
4047
4048   if (primary)
4049     {
4050       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4051       int i;
4052
4053       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4054       if (DECL_CONV_FN_P (tmpl))
4055         {
4056           int depth = TMPL_PARMS_DEPTH (parms);
4057
4058           /* It is a conversion operator. See if the type converted to
4059              depends on innermost template operands.  */
4060
4061           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4062                                          depth))
4063             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4064         }
4065
4066       /* Give template template parms a DECL_CONTEXT of the template
4067          for which they are a parameter.  */
4068       parms = INNERMOST_TEMPLATE_PARMS (parms);
4069       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4070         {
4071           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4072           if (TREE_CODE (parm) == TEMPLATE_DECL)
4073             DECL_CONTEXT (parm) = tmpl;
4074         }
4075     }
4076
4077   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4078      back to its most general template.  If TMPL is a specialization,
4079      ARGS may only have the innermost set of arguments.  Add the missing
4080      argument levels if necessary.  */
4081   if (DECL_TEMPLATE_INFO (tmpl))
4082     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4083
4084   info = tree_cons (tmpl, args, NULL_TREE);
4085
4086   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4087     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4088   else if (DECL_LANG_SPECIFIC (decl))
4089     DECL_TEMPLATE_INFO (decl) = info;
4090
4091   return DECL_TEMPLATE_RESULT (tmpl);
4092 }
4093
4094 tree
4095 push_template_decl (tree decl)
4096 {
4097   return push_template_decl_real (decl, false);
4098 }
4099
4100 /* Called when a class template TYPE is redeclared with the indicated
4101    template PARMS, e.g.:
4102
4103      template <class T> struct S;
4104      template <class T> struct S {};  */
4105
4106 bool
4107 redeclare_class_template (tree type, tree parms)
4108 {
4109   tree tmpl;
4110   tree tmpl_parms;
4111   int i;
4112
4113   if (!TYPE_TEMPLATE_INFO (type))
4114     {
4115       error ("%qT is not a template type", type);
4116       return false;
4117     }
4118
4119   tmpl = TYPE_TI_TEMPLATE (type);
4120   if (!PRIMARY_TEMPLATE_P (tmpl))
4121     /* The type is nested in some template class.  Nothing to worry
4122        about here; there are no new template parameters for the nested
4123        type.  */
4124     return true;
4125
4126   if (!parms)
4127     {
4128       error ("template specifiers not specified in declaration of %qD",
4129              tmpl);
4130       return false;
4131     }
4132
4133   parms = INNERMOST_TEMPLATE_PARMS (parms);
4134   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4135
4136   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4137     {
4138       error ("redeclared with %d template parameter(s)", 
4139              TREE_VEC_LENGTH (parms));
4140       inform ("previous declaration %q+D used %d template parameter(s)", 
4141              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4142       return false;
4143     }
4144
4145   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4146     {
4147       tree tmpl_parm;
4148       tree parm;
4149       tree tmpl_default;
4150       tree parm_default;
4151
4152       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4153           || TREE_VEC_ELT (parms, i) == error_mark_node)
4154         continue;
4155
4156       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4157       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4158       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4159       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4160
4161       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4162          TEMPLATE_DECL.  */
4163       if (tmpl_parm != error_mark_node
4164           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4165               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4166                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4167               || (TREE_CODE (tmpl_parm) != PARM_DECL
4168                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4169                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4170               || (TREE_CODE (tmpl_parm) == PARM_DECL
4171                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4172                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4173         {
4174           error ("template parameter %q+#D", tmpl_parm);
4175           error ("redeclared here as %q#D", parm);
4176           return false;
4177         }
4178
4179       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4180         {
4181           /* We have in [temp.param]:
4182
4183              A template-parameter may not be given default arguments
4184              by two different declarations in the same scope.  */
4185           error ("redefinition of default argument for %q#D", parm);
4186           inform ("%Joriginal definition appeared here", tmpl_parm);
4187           return false;
4188         }
4189
4190       if (parm_default != NULL_TREE)
4191         /* Update the previous template parameters (which are the ones
4192            that will really count) with the new default value.  */
4193         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4194       else if (tmpl_default != NULL_TREE)
4195         /* Update the new parameters, too; they'll be used as the
4196            parameters for any members.  */
4197         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4198     }
4199
4200     return true;
4201 }
4202
4203 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4204    (possibly simplified) expression.  */
4205
4206 tree
4207 fold_non_dependent_expr (tree expr)
4208 {
4209   if (expr == NULL_TREE)
4210     return NULL_TREE;
4211
4212   /* If we're in a template, but EXPR isn't value dependent, simplify
4213      it.  We're supposed to treat:
4214
4215        template <typename T> void f(T[1 + 1]);
4216        template <typename T> void f(T[2]);
4217
4218      as two declarations of the same function, for example.  */
4219   if (processing_template_decl
4220       && !type_dependent_expression_p (expr)
4221       && !value_dependent_expression_p (expr))
4222     {
4223       HOST_WIDE_INT saved_processing_template_decl;
4224
4225       saved_processing_template_decl = processing_template_decl;
4226       processing_template_decl = 0;
4227       expr = tsubst_copy_and_build (expr,
4228                                     /*args=*/NULL_TREE,
4229                                     tf_error,
4230                                     /*in_decl=*/NULL_TREE,
4231                                     /*function_p=*/false,
4232                                     /*integral_constant_expression_p=*/true);
4233       processing_template_decl = saved_processing_template_decl;
4234     }
4235   return expr;
4236 }
4237
4238 /* EXPR is an expression which is used in a constant-expression context.
4239    For instance, it could be a VAR_DECL with a constant initializer.
4240    Extract the innermost constant expression.
4241
4242    This is basically a more powerful version of
4243    integral_constant_value, which can be used also in templates where
4244    initializers can maintain a syntactic rather than semantic form
4245    (even if they are non-dependent, for access-checking purposes).  */
4246
4247 static tree
4248 fold_decl_constant_value (tree expr)
4249 {
4250   tree const_expr = expr;
4251   do
4252     {
4253       expr = fold_non_dependent_expr (const_expr);
4254       const_expr = integral_constant_value (expr);
4255     }
4256   while (expr != const_expr);
4257
4258   return expr;
4259 }
4260
4261 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4262    must be a function or a pointer-to-function type, as specified
4263    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4264    and check that the resulting function has external linkage.  */
4265
4266 static tree
4267 convert_nontype_argument_function (tree type, tree expr)
4268 {
4269   tree fns = expr;
4270   tree fn, fn_no_ptr;
4271
4272   fn = instantiate_type (type, fns, tf_none);
4273   if (fn == error_mark_node)
4274     return error_mark_node;
4275
4276   fn_no_ptr = fn;
4277   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4278     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4279   if (TREE_CODE (fn_no_ptr) == BASELINK)
4280     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4281  
4282   /* [temp.arg.nontype]/1
4283
4284      A template-argument for a non-type, non-template template-parameter
4285      shall be one of:
4286      [...]
4287      -- the address of an object or function with external linkage.  */
4288   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4289     {
4290       error ("%qE is not a valid template argument for type %qT "
4291              "because function %qD has not external linkage",
4292              expr, type, fn_no_ptr);
4293       return NULL_TREE;
4294     }
4295
4296   return fn;
4297 }
4298
4299 /* Attempt to convert the non-type template parameter EXPR to the
4300    indicated TYPE.  If the conversion is successful, return the
4301    converted value.  If the conversion is unsuccessful, return
4302    NULL_TREE if we issued an error message, or error_mark_node if we
4303    did not.  We issue error messages for out-and-out bad template
4304    parameters, but not simply because the conversion failed, since we
4305    might be just trying to do argument deduction.  Both TYPE and EXPR
4306    must be non-dependent.
4307
4308    The conversion follows the special rules described in
4309    [temp.arg.nontype], and it is much more strict than an implicit
4310    conversion.
4311
4312    This function is called twice for each template argument (see
4313    lookup_template_class for a more accurate description of this
4314    problem). This means that we need to handle expressions which
4315    are not valid in a C++ source, but can be created from the
4316    first call (for instance, casts to perform conversions). These
4317    hacks can go away after we fix the double coercion problem.  */
4318
4319 static tree
4320 convert_nontype_argument (tree type, tree expr)
4321 {
4322   tree expr_type;
4323
4324   /* Detect immediately string literals as invalid non-type argument.
4325      This special-case is not needed for correctness (we would easily
4326      catch this later), but only to provide better diagnostic for this
4327      common user mistake. As suggested by DR 100, we do not mention
4328      linkage issues in the diagnostic as this is not the point.  */
4329   if (TREE_CODE (expr) == STRING_CST)
4330     {
4331       error ("%qE is not a valid template argument for type %qT "
4332              "because string literals can never be used in this context",
4333              expr, type);
4334       return NULL_TREE;
4335     }
4336
4337   /* If we are in a template, EXPR may be non-dependent, but still
4338      have a syntactic, rather than semantic, form.  For example, EXPR
4339      might be a SCOPE_REF, rather than the VAR_DECL to which the
4340      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4341      so that access checking can be performed when the template is
4342      instantiated -- but here we need the resolved form so that we can
4343      convert the argument.  */
4344   expr = fold_non_dependent_expr (expr);
4345   if (error_operand_p (expr))
4346     return error_mark_node;
4347   expr_type = TREE_TYPE (expr);
4348
4349   /* HACK: Due to double coercion, we can get a
4350      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4351      which is the tree that we built on the first call (see
4352      below when coercing to reference to object or to reference to
4353      function). We just strip everything and get to the arg.
4354      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4355      for examples.  */
4356   if (TREE_CODE (expr) == NOP_EXPR)
4357     {
4358       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4359         {
4360           /* ??? Maybe we could use convert_from_reference here, but we
4361              would need to relax its constraints because the NOP_EXPR
4362              could actually change the type to something more cv-qualified,
4363              and this is not folded by convert_from_reference.  */
4364           tree addr = TREE_OPERAND (expr, 0);
4365           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4366           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4367           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4368           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4369                       (TREE_TYPE (expr_type),
4370                        TREE_TYPE (TREE_TYPE (addr))));
4371
4372           expr = TREE_OPERAND (addr, 0);
4373           expr_type = TREE_TYPE (expr);
4374         }
4375
4376       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4377          parameter is a pointer to object, through decay and
4378          qualification conversion. Let's strip everything.  */
4379       else if (TYPE_PTROBV_P (type))
4380         {
4381           STRIP_NOPS (expr);
4382           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4383           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4384           /* Skip the ADDR_EXPR only if it is part of the decay for
4385              an array. Otherwise, it is part of the original argument
4386              in the source code.  */
4387           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4388             expr = TREE_OPERAND (expr, 0);
4389           expr_type = TREE_TYPE (expr);
4390         }
4391     }
4392
4393   /* [temp.arg.nontype]/5, bullet 1
4394
4395      For a non-type template-parameter of integral or enumeration type,
4396      integral promotions (_conv.prom_) and integral conversions
4397      (_conv.integral_) are applied.  */
4398   if (INTEGRAL_TYPE_P (type))
4399     {
4400       if (!INTEGRAL_TYPE_P (expr_type))
4401         return error_mark_node;
4402
4403       expr = fold_decl_constant_value (expr);
4404       /* Notice that there are constant expressions like '4 % 0' which
4405          do not fold into integer constants.  */
4406       if (TREE_CODE (expr) != INTEGER_CST)
4407         {
4408           error ("%qE is not a valid template argument for type %qT "
4409                  "because it is a non-constant expression", expr, type);
4410           return NULL_TREE;
4411         }
4412
4413       /* At this point, an implicit conversion does what we want,
4414          because we already know that the expression is of integral
4415          type.  */
4416       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4417       if (expr == error_mark_node)
4418         return error_mark_node;
4419
4420       /* Conversion was allowed: fold it to a bare integer constant.  */
4421       expr = fold (expr);
4422     }
4423   /* [temp.arg.nontype]/5, bullet 2
4424
4425      For a non-type template-parameter of type pointer to object,
4426      qualification conversions (_conv.qual_) and the array-to-pointer
4427      conversion (_conv.array_) are applied.  */
4428   else if (TYPE_PTROBV_P (type))
4429     {
4430       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4431
4432          A template-argument for a non-type, non-template template-parameter
4433          shall be one of: [...]
4434
4435          -- the name of a non-type template-parameter;
4436          -- the address of an object or function with external linkage, [...]
4437             expressed as "& id-expression" where the & is optional if the name
4438             refers to a function or array, or if the corresponding
4439             template-parameter is a reference.
4440
4441         Here, we do not care about functions, as they are invalid anyway
4442         for a parameter of type pointer-to-object.  */
4443
4444       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4445         /* Non-type template parameters are OK.  */
4446         ;
4447       else if (TREE_CODE (expr) != ADDR_EXPR
4448                && TREE_CODE (expr_type) != ARRAY_TYPE)
4449         {
4450           if (TREE_CODE (expr) == VAR_DECL)
4451             {
4452               error ("%qD is not a valid template argument "
4453                      "because %qD is a variable, not the address of "
4454                      "a variable",
4455                      expr, expr);
4456               return NULL_TREE;
4457             }
4458           /* Other values, like integer constants, might be valid
4459              non-type arguments of some other type.  */
4460           return error_mark_node;
4461         }
4462       else
4463         {
4464           tree decl;
4465
4466           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4467                   ? TREE_OPERAND (expr, 0) : expr);
4468           if (TREE_CODE (decl) != VAR_DECL)
4469             {
4470               error ("%qE is not a valid template argument of type %qT "
4471                      "because %qE is not a variable",
4472                      expr, type, decl);
4473               return NULL_TREE;
4474             }
4475           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4476             {
4477               error ("%qE is not a valid template argument of type %qT "
4478                      "because %qD does not have external linkage",
4479                      expr, type, decl);
4480               return NULL_TREE;
4481             }
4482         }
4483
4484       expr = decay_conversion (expr);
4485       if (expr == error_mark_node)
4486         return error_mark_node;
4487
4488       expr = perform_qualification_conversions (type, expr);
4489       if (expr == error_mark_node)
4490         return error_mark_node;
4491     }
4492   /* [temp.arg.nontype]/5, bullet 3
4493
4494      For a non-type template-parameter of type reference to object, no
4495      conversions apply. The type referred to by the reference may be more
4496      cv-qualified than the (otherwise identical) type of the
4497      template-argument. The template-parameter is bound directly to the
4498      template-argument, which must be an lvalue.  */
4499   else if (TYPE_REF_OBJ_P (type))
4500     {
4501       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4502                                                       expr_type))
4503         return error_mark_node;
4504
4505       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4506         {
4507           error ("%qE is not a valid template argument for type %qT "
4508                  "because of conflicts in cv-qualification", expr, type);
4509           return NULL_TREE;
4510         }
4511
4512       if (!real_lvalue_p (expr))
4513         {
4514           error ("%qE is not a valid template argument for type %qT "
4515                  "because it is not an lvalue", expr, type);
4516           return NULL_TREE;
4517         }
4518
4519       /* [temp.arg.nontype]/1
4520
4521          A template-argument for a non-type, non-template template-parameter
4522          shall be one of: [...]
4523
4524          -- the address of an object or function with external linkage.  */
4525       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4526         {
4527           error ("%qE is not a valid template argument for type %qT "
4528                  "because object %qD has not external linkage",
4529                  expr, type, expr);
4530           return NULL_TREE;
4531         }
4532
4533       expr = build_nop (type, build_address (expr));
4534     }
4535   /* [temp.arg.nontype]/5, bullet 4
4536
4537      For a non-type template-parameter of type pointer to function, only
4538      the function-to-pointer conversion (_conv.func_) is applied. If the
4539      template-argument represents a set of overloaded functions (or a
4540      pointer to such), the matching function is selected from the set
4541      (_over.over_).  */
4542   else if (TYPE_PTRFN_P (type))
4543     {
4544       /* If the argument is a template-id, we might not have enough
4545          context information to decay the pointer.  */
4546       if (!type_unknown_p (expr_type))
4547         {
4548           expr = decay_conversion (expr);
4549           if (expr == error_mark_node)
4550             return error_mark_node;
4551         }
4552
4553       expr = convert_nontype_argument_function (type, expr);
4554       if (!expr || expr == error_mark_node)
4555         return expr;
4556     }
4557   /* [temp.arg.nontype]/5, bullet 5
4558
4559      For a non-type template-parameter of type reference to function, no
4560      conversions apply. If the template-argument represents a set of
4561      overloaded functions, the matching function is selected from the set
4562      (_over.over_).  */
4563   else if (TYPE_REFFN_P (type))
4564     {
4565       if (TREE_CODE (expr) == ADDR_EXPR)
4566         {
4567           error ("%qE is not a valid template argument for type %qT "
4568                  "because it is a pointer", expr, type);
4569           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4570           return NULL_TREE;
4571         }
4572
4573       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4574       if (!expr || expr == error_mark_node)
4575         return expr;
4576
4577       expr = build_nop (type, build_address (expr));
4578     }
4579   /* [temp.arg.nontype]/5, bullet 6
4580
4581      For a non-type template-parameter of type pointer to member function,
4582      no conversions apply. If the template-argument represents a set of
4583      overloaded member functions, the matching member function is selected
4584      from the set (_over.over_).  */
4585   else if (TYPE_PTRMEMFUNC_P (type))
4586     {
4587       expr = instantiate_type (type, expr, tf_none);
4588       if (expr == error_mark_node)
4589         return error_mark_node;
4590
4591       /* There is no way to disable standard conversions in
4592          resolve_address_of_overloaded_function (called by
4593          instantiate_type). It is possible that the call succeeded by
4594          converting &B::I to &D::I (where B is a base of D), so we need
4595          to reject this conversion here.
4596
4597          Actually, even if there was a way to disable standard conversions,
4598          it would still be better to reject them here so that we can
4599          provide a superior diagnostic.  */
4600       if (!same_type_p (TREE_TYPE (expr), type))
4601         {
4602           /* Make sure we are just one standard conversion off.  */
4603           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4604           error ("%qE is not a valid template argument for type %qT "
4605                  "because it is of type %qT", expr, type,
4606                  TREE_TYPE (expr));
4607           inform ("standard conversions are not allowed in this context");
4608           return NULL_TREE;
4609         }
4610     }
4611   /* [temp.arg.nontype]/5, bullet 7
4612
4613      For a non-type template-parameter of type pointer to data member,
4614      qualification conversions (_conv.qual_) are applied.  */
4615   else if (TYPE_PTRMEM_P (type))
4616     {
4617       expr = perform_qualification_conversions (type, expr);
4618       if (expr == error_mark_node)
4619         return expr;
4620     }
4621   /* A template non-type parameter must be one of the above.  */
4622   else
4623     gcc_unreachable ();
4624
4625   /* Sanity check: did we actually convert the argument to the
4626      right type?  */
4627   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4628   return expr;
4629 }
4630
4631 /* Subroutine of coerce_template_template_parms, which returns 1 if
4632    PARM_PARM and ARG_PARM match using the rule for the template
4633    parameters of template template parameters. Both PARM and ARG are
4634    template parameters; the rest of the arguments are the same as for
4635    coerce_template_template_parms.
4636  */
4637 static int
4638 coerce_template_template_parm (tree parm,
4639                               tree arg,
4640                               tsubst_flags_t complain,
4641                               tree in_decl,
4642                               tree outer_args)
4643 {
4644   if (arg == NULL_TREE || arg == error_mark_node
4645       || parm == NULL_TREE || parm == error_mark_node)
4646     return 0;
4647   
4648   if (TREE_CODE (arg) != TREE_CODE (parm))
4649     return 0;
4650   
4651   switch (TREE_CODE (parm))
4652     {
4653     case TEMPLATE_DECL:
4654       /* We encounter instantiations of templates like
4655          template <template <template <class> class> class TT>
4656          class C;  */
4657       {
4658         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4659         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4660         
4661         if (!coerce_template_template_parms
4662             (parmparm, argparm, complain, in_decl, outer_args))
4663           return 0;
4664       }
4665       /* Fall through.  */
4666       
4667     case TYPE_DECL:
4668       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4669           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4670         /* Argument is a parameter pack but parameter is not.  */
4671         return 0;
4672       break;
4673       
4674     case PARM_DECL:
4675       /* The tsubst call is used to handle cases such as
4676          
4677            template <int> class C {};
4678            template <class T, template <T> class TT> class D {};
4679            D<int, C> d;
4680
4681          i.e. the parameter list of TT depends on earlier parameters.  */
4682       if (!dependent_type_p (TREE_TYPE (arg))
4683           && !same_type_p
4684                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4685                  TREE_TYPE (arg)))
4686         return 0;
4687       
4688       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4689           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4690         /* Argument is a parameter pack but parameter is not.  */
4691         return 0;
4692       
4693       break;
4694
4695     default:
4696       gcc_unreachable ();
4697     }
4698
4699   return 1;
4700 }
4701
4702
4703 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4704    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4705    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4706    or PARM_DECL.
4707
4708    Consider the example:
4709      template <class T> class A;
4710      template<template <class U> class TT> class B;
4711
4712    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4713    the parameters to A, and OUTER_ARGS contains A.  */
4714
4715 static int
4716 coerce_template_template_parms (tree parm_parms,
4717                                 tree arg_parms,
4718                                 tsubst_flags_t complain,
4719                                 tree in_decl,
4720                                 tree outer_args)
4721 {
4722   int nparms, nargs, i;
4723   tree parm, arg;
4724   int variadic_p = 0;
4725
4726   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4727   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4728
4729   nparms = TREE_VEC_LENGTH (parm_parms);
4730   nargs = TREE_VEC_LENGTH (arg_parms);
4731
4732   /* Determine whether we have a parameter pack at the end of the
4733      template template parameter's template parameter list.  */
4734   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4735     {
4736       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4737       
4738       switch (TREE_CODE (parm))
4739         {
4740         case TEMPLATE_DECL:
4741         case TYPE_DECL:
4742           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4743             variadic_p = 1;
4744           break;
4745           
4746         case PARM_DECL:
4747           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4748             variadic_p = 1;
4749           break;
4750           
4751         default:
4752           gcc_unreachable ();
4753         }
4754     }
4755  
4756   if (nargs != nparms
4757       && !(variadic_p && nargs >= nparms - 1))
4758     return 0;
4759
4760   /* Check all of the template parameters except the parameter pack at
4761      the end (if any).  */
4762   for (i = 0; i < nparms - variadic_p; ++i)
4763     {
4764       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4765           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4766         continue;
4767
4768       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4769       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4770
4771       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4772                                           outer_args))
4773         return 0;
4774
4775     }
4776
4777   if (variadic_p)
4778     {
4779       /* Check each of the template parameters in the template
4780          argument against the template parameter pack at the end of
4781          the template template parameter.  */
4782       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4783         return 0;
4784
4785       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4786
4787       for (; i < nargs; ++i)
4788         {
4789           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4790             continue;
4791  
4792           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4793  
4794           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4795                                               outer_args))
4796             return 0;
4797         }
4798     }
4799
4800   return 1;
4801 }
4802
4803 /* Verifies that the deduced template arguments (in TARGS) for the
4804    template template parameters (in TPARMS) represent valid bindings,
4805    by comparing the template parameter list of each template argument
4806    to the template parameter list of its corresponding template
4807    template parameter, in accordance with DR150. This
4808    routine can only be called after all template arguments have been
4809    deduced. It will return TRUE if all of the template template
4810    parameter bindings are okay, FALSE otherwise.  */
4811 bool 
4812 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4813 {
4814   int i, ntparms = TREE_VEC_LENGTH (tparms);
4815   bool ret = true;
4816
4817   /* We're dealing with template parms in this process.  */
4818   ++processing_template_decl;
4819
4820   targs = INNERMOST_TEMPLATE_ARGS (targs);
4821
4822   for (i = 0; i < ntparms; ++i)
4823     {
4824       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4825       tree targ = TREE_VEC_ELT (targs, i);
4826
4827       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4828         {
4829           tree packed_args = NULL_TREE;
4830           int idx, len = 1;
4831
4832           if (ARGUMENT_PACK_P (targ))
4833             {
4834               /* Look inside the argument pack.  */
4835               packed_args = ARGUMENT_PACK_ARGS (targ);
4836               len = TREE_VEC_LENGTH (packed_args);
4837             }
4838
4839           for (idx = 0; idx < len; ++idx)
4840             {
4841               tree targ_parms = NULL_TREE;
4842
4843               if (packed_args)
4844                 /* Extract the next argument from the argument
4845                    pack.  */
4846                 targ = TREE_VEC_ELT (packed_args, idx);
4847
4848               if (PACK_EXPANSION_P (targ))
4849                 /* Look at the pattern of the pack expansion.  */
4850                 targ = PACK_EXPANSION_PATTERN (targ);
4851
4852               /* Extract the template parameters from the template
4853                  argument.  */
4854               if (TREE_CODE (targ) == TEMPLATE_DECL)
4855                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4856               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4857                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4858
4859               /* Verify that we can coerce the template template
4860                  parameters from the template argument to the template
4861                  parameter.  This requires an exact match.  */
4862               if (targ_parms
4863                   && !coerce_template_template_parms
4864                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4865                         targ_parms,
4866                         tf_none,
4867                         tparm,
4868                         targs))
4869                 {
4870                   ret = false;
4871                   goto out;
4872                 }
4873             }
4874         }
4875     }
4876
4877  out:
4878
4879   --processing_template_decl;
4880   return ret;
4881 }
4882
4883 /* Convert the indicated template ARG as necessary to match the
4884    indicated template PARM.  Returns the converted ARG, or
4885    error_mark_node if the conversion was unsuccessful.  Error and
4886    warning messages are issued under control of COMPLAIN.  This
4887    conversion is for the Ith parameter in the parameter list.  ARGS is
4888    the full set of template arguments deduced so far.  */
4889
4890 static tree
4891 convert_template_argument (tree parm,
4892                            tree arg,
4893                            tree args,
4894                            tsubst_flags_t complain,
4895                            int i,
4896                            tree in_decl)
4897 {
4898   tree orig_arg;
4899   tree val;
4900   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4901
4902   if (TREE_CODE (arg) == TREE_LIST
4903       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4904     {
4905       /* The template argument was the name of some
4906          member function.  That's usually
4907          invalid, but static members are OK.  In any
4908          case, grab the underlying fields/functions
4909          and issue an error later if required.  */
4910       orig_arg = TREE_VALUE (arg);
4911       TREE_TYPE (arg) = unknown_type_node;
4912     }
4913
4914   orig_arg = arg;
4915
4916   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4917   requires_type = (TREE_CODE (parm) == TYPE_DECL
4918                    || requires_tmpl_type);
4919
4920   /* When determining whether an argument pack expansion is a template,
4921      look at the pattern.  */
4922   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4923     arg = PACK_EXPANSION_PATTERN (arg);
4924
4925   is_tmpl_type = 
4926     ((TREE_CODE (arg) == TEMPLATE_DECL
4927       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4928      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4929      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4930
4931   if (is_tmpl_type
4932       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4933           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4934     arg = TYPE_STUB_DECL (arg);
4935
4936   is_type = TYPE_P (arg) || is_tmpl_type;
4937
4938   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4939       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4940     {
4941       permerror ("to refer to a type member of a template parameter, "
4942                  "use %<typename %E%>", orig_arg);
4943
4944       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4945                                      TREE_OPERAND (arg, 1),
4946                                      typename_type,
4947                                      complain & tf_error);
4948       arg = orig_arg;
4949       is_type = 1;
4950     }
4951   if (is_type != requires_type)
4952     {
4953       if (in_decl)
4954         {
4955           if (complain & tf_error)
4956             {
4957               error ("type/value mismatch at argument %d in template "
4958                      "parameter list for %qD",
4959                      i + 1, in_decl);
4960               if (is_type)
4961                 error ("  expected a constant of type %qT, got %qT",
4962                        TREE_TYPE (parm),
4963                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4964               else if (requires_tmpl_type)
4965                 error ("  expected a class template, got %qE", orig_arg);
4966               else
4967                 error ("  expected a type, got %qE", orig_arg);
4968             }
4969         }
4970       return error_mark_node;
4971     }
4972   if (is_tmpl_type ^ requires_tmpl_type)
4973     {
4974       if (in_decl && (complain & tf_error))
4975         {
4976           error ("type/value mismatch at argument %d in template "
4977                  "parameter list for %qD",
4978                  i + 1, in_decl);
4979           if (is_tmpl_type)
4980             error ("  expected a type, got %qT", DECL_NAME (arg));
4981           else
4982             error ("  expected a class template, got %qT", orig_arg);
4983         }
4984       return error_mark_node;
4985     }
4986
4987   if (is_type)
4988     {
4989       if (requires_tmpl_type)
4990         {
4991           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4992             /* The number of argument required is not known yet.
4993                Just accept it for now.  */
4994             val = TREE_TYPE (arg);
4995           else
4996             {
4997               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4998               tree argparm;
4999
5000               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5001
5002               if (coerce_template_template_parms (parmparm, argparm,
5003                                                   complain, in_decl,
5004                                                   args))
5005                 {
5006                   val = orig_arg;
5007
5008                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5009                      TEMPLATE_DECL.  */
5010                   if (val != error_mark_node)
5011                     {
5012                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5013                         val = TREE_TYPE (val);
5014                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5015                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5016                         {
5017                           val = TREE_TYPE (arg);
5018                           val = make_pack_expansion (val);
5019                         }
5020                     }
5021                 }
5022               else
5023                 {
5024                   if (in_decl && (complain & tf_error))
5025                     {
5026                       error ("type/value mismatch at argument %d in "
5027                              "template parameter list for %qD",
5028                              i + 1, in_decl);
5029                       error ("  expected a template of type %qD, got %qD",
5030                              parm, orig_arg);
5031                     }
5032
5033                   val = error_mark_node;
5034                 }
5035             }
5036         }
5037       else
5038         val = orig_arg;
5039       /* We only form one instance of each template specialization.
5040          Therefore, if we use a non-canonical variant (i.e., a
5041          typedef), any future messages referring to the type will use
5042          the typedef, which is confusing if those future uses do not
5043          themselves also use the typedef.  */
5044       if (TYPE_P (val))
5045         val = canonical_type_variant (val);
5046     }
5047   else
5048     {
5049       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5050
5051       if (invalid_nontype_parm_type_p (t, complain))
5052         return error_mark_node;
5053
5054       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5055         /* We used to call digest_init here.  However, digest_init
5056            will report errors, which we don't want when complain
5057            is zero.  More importantly, digest_init will try too
5058            hard to convert things: for example, `0' should not be
5059            converted to pointer type at this point according to
5060            the standard.  Accepting this is not merely an
5061            extension, since deciding whether or not these
5062            conversions can occur is part of determining which
5063            function template to call, or whether a given explicit
5064            argument specification is valid.  */
5065         val = convert_nontype_argument (t, orig_arg);
5066       else
5067         val = orig_arg;
5068
5069       if (val == NULL_TREE)
5070         val = error_mark_node;
5071       else if (val == error_mark_node && (complain & tf_error))
5072         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5073     }
5074
5075   return val;
5076 }
5077
5078 /* Coerces the remaining template arguments in INNER_ARGS (from
5079    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5080    Returns the coerced argument pack. PARM_IDX is the position of this
5081    parameter in the template parameter list. ARGS is the original
5082    template argument list.  */
5083 static tree
5084 coerce_template_parameter_pack (tree parms,
5085                                 int parm_idx,
5086                                 tree args,
5087                                 tree inner_args,
5088                                 int arg_idx,
5089                                 tree new_args,
5090                                 int* lost,
5091                                 tree in_decl,
5092                                 tsubst_flags_t complain)
5093 {
5094   tree parm = TREE_VEC_ELT (parms, parm_idx);
5095   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5096   tree packed_args;
5097   tree argument_pack;
5098   tree packed_types = NULL_TREE;
5099
5100   if (arg_idx > nargs)
5101     arg_idx = nargs;
5102
5103   packed_args = make_tree_vec (nargs - arg_idx);
5104
5105   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5106       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5107     {
5108       /* When the template parameter is a non-type template
5109          parameter pack whose type uses parameter packs, we need
5110          to look at each of the template arguments
5111          separately. Build a vector of the types for these
5112          non-type template parameters in PACKED_TYPES.  */
5113       tree expansion 
5114         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5115       packed_types = tsubst_pack_expansion (expansion, args,
5116                                             complain, in_decl);
5117
5118       if (packed_types == error_mark_node)
5119         return error_mark_node;
5120
5121       /* Check that we have the right number of arguments.  */
5122       if (arg_idx < nargs
5123           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5124           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5125         {
5126           int needed_parms 
5127             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5128           error ("wrong number of template arguments (%d, should be %d)",
5129                  nargs, needed_parms);
5130           return error_mark_node;
5131         }
5132
5133       /* If we aren't able to check the actual arguments now
5134          (because they haven't been expanded yet), we can at least
5135          verify that all of the types used for the non-type
5136          template parameter pack are, in fact, valid for non-type
5137          template parameters.  */
5138       if (arg_idx < nargs 
5139           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5140         {
5141           int j, len = TREE_VEC_LENGTH (packed_types);
5142           for (j = 0; j < len; ++j)
5143             {
5144               tree t = TREE_VEC_ELT (packed_types, j);
5145               if (invalid_nontype_parm_type_p (t, complain))
5146                 return error_mark_node;
5147             }
5148         }
5149     }
5150
5151   /* Convert the remaining arguments, which will be a part of the
5152      parameter pack "parm".  */
5153   for (; arg_idx < nargs; ++arg_idx)
5154     {
5155       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5156       tree actual_parm = TREE_VALUE (parm);
5157
5158       if (packed_types && !PACK_EXPANSION_P (arg))
5159         {
5160           /* When we have a vector of types (corresponding to the
5161              non-type template parameter pack that uses parameter
5162              packs in its type, as mention above), and the
5163              argument is not an expansion (which expands to a
5164              currently unknown number of arguments), clone the
5165              parm and give it the next type in PACKED_TYPES.  */
5166           actual_parm = copy_node (actual_parm);
5167           TREE_TYPE (actual_parm) = 
5168             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5169         }
5170
5171       if (arg != error_mark_node)
5172         arg = convert_template_argument (actual_parm, 
5173                                          arg, new_args, complain, parm_idx,
5174                                          in_decl);
5175       if (arg == error_mark_node)
5176         (*lost)++;
5177       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5178     }
5179
5180   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5181       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5182     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5183   else
5184     {
5185       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5186       TREE_TYPE (argument_pack) 
5187         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5188       TREE_CONSTANT (argument_pack) = 1;
5189     }
5190
5191   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5192   return argument_pack;
5193 }
5194
5195 /* Convert all template arguments to their appropriate types, and
5196    return a vector containing the innermost resulting template
5197    arguments.  If any error occurs, return error_mark_node. Error and
5198    warning messages are issued under control of COMPLAIN.
5199
5200    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5201    for arguments not specified in ARGS.  Otherwise, if
5202    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5203    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5204    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5205    ARGS.  */
5206
5207 static tree
5208 coerce_template_parms (tree parms,
5209                        tree args,
5210                        tree in_decl,
5211                        tsubst_flags_t complain,
5212                        bool require_all_args,
5213                        bool use_default_args)
5214 {
5215   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5216   tree inner_args;
5217   tree new_args;
5218   tree new_inner_args;
5219   bool saved_skip_evaluation;
5220
5221   /* When used as a boolean value, indicates whether this is a
5222      variadic template parameter list. Since it's an int, we can also
5223      subtract it from nparms to get the number of non-variadic
5224      parameters.  */
5225   int variadic_p = 0;
5226
5227   inner_args 
5228     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5229
5230   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5231   nparms = TREE_VEC_LENGTH (parms);
5232
5233   /* Determine if there are any parameter packs.  */
5234   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5235     {
5236       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5237       if (template_parameter_pack_p (tparm))
5238         {
5239           variadic_p = 1;
5240           break;
5241         }
5242     }
5243
5244   if ((nargs > nparms - variadic_p && !variadic_p)
5245       || (nargs < nparms - variadic_p
5246           && require_all_args
5247           && (!use_default_args
5248               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5249                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5250     {
5251       if (complain & tf_error)
5252         {
5253           const char *or_more = "";
5254           if (variadic_p)
5255             {
5256               or_more = " or more";
5257               --nparms;
5258             }
5259
5260           error ("wrong number of template arguments (%d, should be %d%s)",
5261                  nargs, nparms, or_more);
5262
5263           if (in_decl)
5264             error ("provided for %q+D", in_decl);
5265         }
5266
5267       return error_mark_node;
5268     }
5269
5270   /* We need to evaluate the template arguments, even though this
5271      template-id may be nested within a "sizeof".  */
5272   saved_skip_evaluation = skip_evaluation;
5273   skip_evaluation = false;
5274   new_inner_args = make_tree_vec (nparms);
5275   new_args = add_outermost_template_args (args, new_inner_args);
5276   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5277     {
5278       tree arg;
5279       tree parm;
5280
5281       /* Get the Ith template parameter.  */
5282       parm = TREE_VEC_ELT (parms, parm_idx);
5283  
5284       if (parm == error_mark_node)
5285       {
5286         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5287         continue;
5288       }
5289
5290       /* Calculate the next argument.  */
5291       if (template_parameter_pack_p (TREE_VALUE (parm)))
5292         {
5293           /* All remaining arguments will be placed in the
5294              template parameter pack PARM.  */
5295           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5296                                                 inner_args, arg_idx,
5297                                                 new_args, &lost,
5298                                                 in_decl, complain);
5299           
5300           /* Store this argument.  */
5301           if (arg == error_mark_node)
5302             lost++;
5303           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5304
5305           /* We are done with all of the arguments.  */
5306           arg_idx = nargs;
5307
5308           continue;
5309         }
5310       else if (arg_idx < nargs)
5311         {
5312           arg = TREE_VEC_ELT (inner_args, arg_idx);
5313
5314           if (arg && PACK_EXPANSION_P (arg))
5315             {
5316               if (complain & tf_error)
5317                 {
5318                   /* If ARG is a pack expansion, but PARM is not a
5319                      template parameter pack (if it were, we would have
5320                      handled it above), we're trying to expand into a
5321                      fixed-length argument list.  */
5322                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5323                     error ("cannot expand %<%E%> into a fixed-length "
5324                            "argument list", arg);
5325                   else
5326                     error ("cannot expand %<%T%> into a fixed-length "
5327                            "argument list", arg);
5328                 }
5329               return error_mark_node;
5330             }
5331         }
5332       else if (require_all_args)
5333         /* There must be a default arg in this case.  */
5334         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5335                                    complain, in_decl);
5336       else
5337         break;
5338
5339       if (arg == error_mark_node)
5340         {
5341           if (complain & tf_error)
5342             error ("template argument %d is invalid", arg_idx + 1);
5343         }
5344       else if (!arg)
5345         /* This only occurs if there was an error in the template
5346            parameter list itself (which we would already have
5347            reported) that we are trying to recover from, e.g., a class
5348            template with a parameter list such as
5349            template<typename..., typename>.  */
5350         return error_mark_node;
5351       else
5352         arg = convert_template_argument (TREE_VALUE (parm),
5353                                          arg, new_args, complain, 
5354                                          parm_idx, in_decl);
5355
5356       if (arg == error_mark_node)
5357         lost++;
5358       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5359     }
5360   skip_evaluation = saved_skip_evaluation;
5361
5362   if (lost)
5363     return error_mark_node;
5364
5365   return new_inner_args;
5366 }
5367
5368 /* Returns 1 if template args OT and NT are equivalent.  */
5369
5370 static int
5371 template_args_equal (tree ot, tree nt)
5372 {
5373   if (nt == ot)
5374     return 1;
5375
5376   if (TREE_CODE (nt) == TREE_VEC)
5377     /* For member templates */
5378     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5379   else if (PACK_EXPANSION_P (ot))
5380     return PACK_EXPANSION_P (nt) 
5381       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5382                               PACK_EXPANSION_PATTERN (nt));
5383   else if (TYPE_P (nt))
5384     return TYPE_P (ot) && same_type_p (ot, nt);
5385   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5386     return 0;
5387   else
5388     return cp_tree_equal (ot, nt);
5389 }
5390
5391 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5392    of template arguments.  Returns 0 otherwise.  */
5393
5394 int
5395 comp_template_args (tree oldargs, tree newargs)
5396 {
5397   int i;
5398
5399   oldargs = expand_template_argument_pack (oldargs);
5400   newargs = expand_template_argument_pack (newargs);
5401
5402   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5403     return 0;
5404
5405   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5406     {
5407       tree nt = TREE_VEC_ELT (newargs, i);
5408       tree ot = TREE_VEC_ELT (oldargs, i);
5409
5410       if (! template_args_equal (ot, nt))
5411         return 0;
5412     }
5413   return 1;
5414 }
5415
5416 static void
5417 add_pending_template (tree d)
5418 {
5419   tree ti = (TYPE_P (d)
5420              ? CLASSTYPE_TEMPLATE_INFO (d)
5421              : DECL_TEMPLATE_INFO (d));
5422   struct pending_template *pt;
5423   int level;
5424
5425   if (TI_PENDING_TEMPLATE_FLAG (ti))
5426     return;
5427
5428   /* We are called both from instantiate_decl, where we've already had a
5429      tinst_level pushed, and instantiate_template, where we haven't.
5430      Compensate.  */
5431   level = !current_tinst_level || current_tinst_level->decl != d;
5432
5433   if (level)
5434     push_tinst_level (d);
5435
5436   pt = GGC_NEW (struct pending_template);
5437   pt->next = NULL;
5438   pt->tinst = current_tinst_level;
5439   if (last_pending_template)
5440     last_pending_template->next = pt;
5441   else
5442     pending_templates = pt;
5443
5444   last_pending_template = pt;
5445
5446   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5447
5448   if (level)
5449     pop_tinst_level ();
5450 }
5451
5452
5453 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5454    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5455    documentation for TEMPLATE_ID_EXPR.  */
5456
5457 tree
5458 lookup_template_function (tree fns, tree arglist)
5459 {
5460   tree type;
5461
5462   if (fns == error_mark_node || arglist == error_mark_node)
5463     return error_mark_node;
5464
5465   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5466   gcc_assert (fns && (is_overloaded_fn (fns)
5467                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5468
5469   if (BASELINK_P (fns))
5470     {
5471       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5472                                          unknown_type_node,
5473                                          BASELINK_FUNCTIONS (fns),
5474                                          arglist);
5475       return fns;
5476     }
5477
5478   type = TREE_TYPE (fns);
5479   if (TREE_CODE (fns) == OVERLOAD || !type)
5480     type = unknown_type_node;
5481
5482   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5483 }
5484
5485 /* Within the scope of a template class S<T>, the name S gets bound
5486    (in build_self_reference) to a TYPE_DECL for the class, not a
5487    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5488    or one of its enclosing classes, and that type is a template,
5489    return the associated TEMPLATE_DECL.  Otherwise, the original
5490    DECL is returned.  */
5491
5492 tree
5493 maybe_get_template_decl_from_type_decl (tree decl)
5494 {
5495   return (decl != NULL_TREE
5496           && TREE_CODE (decl) == TYPE_DECL
5497           && DECL_ARTIFICIAL (decl)
5498           && CLASS_TYPE_P (TREE_TYPE (decl))
5499           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5500     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5501 }
5502
5503 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5504    parameters, find the desired type.
5505
5506    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5507
5508    IN_DECL, if non-NULL, is the template declaration we are trying to
5509    instantiate.
5510
5511    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5512    the class we are looking up.
5513
5514    Issue error and warning messages under control of COMPLAIN.
5515
5516    If the template class is really a local class in a template
5517    function, then the FUNCTION_CONTEXT is the function in which it is
5518    being instantiated.
5519
5520    ??? Note that this function is currently called *twice* for each
5521    template-id: the first time from the parser, while creating the
5522    incomplete type (finish_template_type), and the second type during the
5523    real instantiation (instantiate_template_class). This is surely something
5524    that we want to avoid. It also causes some problems with argument
5525    coercion (see convert_nontype_argument for more information on this).  */
5526
5527 tree
5528 lookup_template_class (tree d1,
5529                        tree arglist,
5530                        tree in_decl,
5531                        tree context,
5532                        int entering_scope,
5533                        tsubst_flags_t complain)
5534 {
5535   tree templ = NULL_TREE, parmlist;
5536   tree t;
5537
5538   timevar_push (TV_NAME_LOOKUP);
5539
5540   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5541     {
5542       tree value = innermost_non_namespace_value (d1);
5543       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5544         templ = value;
5545       else
5546         {
5547           if (context)
5548             push_decl_namespace (context);
5549           templ = lookup_name (d1);
5550           templ = maybe_get_template_decl_from_type_decl (templ);
5551           if (context)
5552             pop_decl_namespace ();
5553         }
5554       if (templ)
5555         context = DECL_CONTEXT (templ);
5556     }
5557   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5558     {
5559       tree type = TREE_TYPE (d1);
5560
5561       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5562          an implicit typename for the second A.  Deal with it.  */
5563       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5564         type = TREE_TYPE (type);
5565
5566       if (CLASSTYPE_TEMPLATE_INFO (type))
5567         {
5568           templ = CLASSTYPE_TI_TEMPLATE (type);
5569           d1 = DECL_NAME (templ);
5570         }
5571     }
5572   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5573            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5574     {
5575       templ = TYPE_TI_TEMPLATE (d1);
5576       d1 = DECL_NAME (templ);
5577     }
5578   else if (TREE_CODE (d1) == TEMPLATE_DECL
5579            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5580     {
5581       templ = d1;
5582       d1 = DECL_NAME (templ);
5583       context = DECL_CONTEXT (templ);
5584     }
5585
5586   /* Issue an error message if we didn't find a template.  */
5587   if (! templ)
5588     {
5589       if (complain & tf_error)
5590         error ("%qT is not a template", d1);
5591       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5592     }
5593
5594   if (TREE_CODE (templ) != TEMPLATE_DECL
5595          /* Make sure it's a user visible template, if it was named by
5596             the user.  */
5597       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
5598           && !PRIMARY_TEMPLATE_P (templ)))
5599     {
5600       if (complain & tf_error)
5601         {
5602           error ("non-template type %qT used as a template", d1);
5603           if (in_decl)
5604             error ("for template declaration %q+D", in_decl);
5605         }
5606       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5607     }
5608
5609   complain &= ~tf_user;
5610
5611   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
5612     {
5613       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5614          template arguments */
5615
5616       tree parm;
5617       tree arglist2;
5618       tree outer;
5619
5620       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
5621
5622       /* Consider an example where a template template parameter declared as
5623
5624            template <class T, class U = std::allocator<T> > class TT
5625
5626          The template parameter level of T and U are one level larger than
5627          of TT.  To proper process the default argument of U, say when an
5628          instantiation `TT<int>' is seen, we need to build the full
5629          arguments containing {int} as the innermost level.  Outer levels,
5630          available when not appearing as default template argument, can be
5631          obtained from the arguments of the enclosing template.
5632
5633          Suppose that TT is later substituted with std::vector.  The above
5634          instantiation is `TT<int, std::allocator<T> >' with TT at
5635          level 1, and T at level 2, while the template arguments at level 1
5636          becomes {std::vector} and the inner level 2 is {int}.  */
5637
5638       outer = DECL_CONTEXT (templ);
5639       if (outer)
5640         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5641       else if (current_template_parms)
5642         /* This is an argument of the current template, so we haven't set
5643            DECL_CONTEXT yet.  */
5644         outer = current_template_args ();
5645
5646       if (outer)
5647         arglist = add_to_template_args (outer, arglist);
5648
5649       arglist2 = coerce_template_parms (parmlist, arglist, templ,
5650                                         complain,
5651                                         /*require_all_args=*/true,
5652                                         /*use_default_args=*/true);
5653       if (arglist2 == error_mark_node
5654           || (!uses_template_parms (arglist2)
5655               && check_instantiated_args (templ, arglist2, complain)))
5656         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5657
5658       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
5659       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5660     }
5661   else
5662     {
5663       tree template_type = TREE_TYPE (templ);
5664       tree gen_tmpl;
5665       tree type_decl;
5666       tree found = NULL_TREE;
5667       int arg_depth;
5668       int parm_depth;
5669       int is_partial_instantiation;
5670
5671       gen_tmpl = most_general_template (templ);
5672       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5673       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5674       arg_depth = TMPL_ARGS_DEPTH (arglist);
5675
5676       if (arg_depth == 1 && parm_depth > 1)
5677         {
5678           /* We've been given an incomplete set of template arguments.
5679              For example, given:
5680
5681                template <class T> struct S1 {
5682                  template <class U> struct S2 {};
5683                  template <class U> struct S2<U*> {};
5684                 };
5685
5686              we will be called with an ARGLIST of `U*', but the
5687              TEMPLATE will be `template <class T> template
5688              <class U> struct S1<T>::S2'.  We must fill in the missing
5689              arguments.  */
5690           arglist
5691             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
5692                                            arglist);
5693           arg_depth = TMPL_ARGS_DEPTH (arglist);
5694         }
5695
5696       /* Now we should have enough arguments.  */
5697       gcc_assert (parm_depth == arg_depth);
5698
5699       /* From here on, we're only interested in the most general
5700          template.  */
5701       templ = gen_tmpl;
5702
5703       /* Calculate the BOUND_ARGS.  These will be the args that are
5704          actually tsubst'd into the definition to create the
5705          instantiation.  */
5706       if (parm_depth > 1)
5707         {
5708           /* We have multiple levels of arguments to coerce, at once.  */
5709           int i;
5710           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5711
5712           tree bound_args = make_tree_vec (parm_depth);
5713
5714           for (i = saved_depth,
5715                  t = DECL_TEMPLATE_PARMS (templ);
5716                i > 0 && t != NULL_TREE;
5717                --i, t = TREE_CHAIN (t))
5718             {
5719               tree a = coerce_template_parms (TREE_VALUE (t),
5720                                               arglist, templ,
5721                                               complain,
5722                                               /*require_all_args=*/true,
5723                                               /*use_default_args=*/true);
5724
5725               /* Don't process further if one of the levels fails.  */
5726               if (a == error_mark_node)
5727                 {
5728                   /* Restore the ARGLIST to its full size.  */
5729                   TREE_VEC_LENGTH (arglist) = saved_depth;
5730                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5731                 }
5732
5733               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5734
5735               /* We temporarily reduce the length of the ARGLIST so
5736                  that coerce_template_parms will see only the arguments
5737                  corresponding to the template parameters it is
5738                  examining.  */
5739               TREE_VEC_LENGTH (arglist)--;
5740             }
5741
5742           /* Restore the ARGLIST to its full size.  */
5743           TREE_VEC_LENGTH (arglist) = saved_depth;
5744
5745           arglist = bound_args;
5746         }
5747       else
5748         arglist
5749           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5750                                    INNERMOST_TEMPLATE_ARGS (arglist),
5751                                    templ,
5752                                    complain,
5753                                    /*require_all_args=*/true,
5754                                    /*use_default_args=*/true);
5755
5756       if (arglist == error_mark_node)
5757         /* We were unable to bind the arguments.  */
5758         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5759
5760       /* In the scope of a template class, explicit references to the
5761          template class refer to the type of the template, not any
5762          instantiation of it.  For example, in:
5763
5764            template <class T> class C { void f(C<T>); }
5765
5766          the `C<T>' is just the same as `C'.  Outside of the
5767          class, however, such a reference is an instantiation.  */
5768       if (comp_template_args (TYPE_TI_ARGS (template_type),
5769                               arglist))
5770         {
5771           found = template_type;
5772
5773           if (!entering_scope && PRIMARY_TEMPLATE_P (templ))
5774             {
5775               tree ctx;
5776
5777               for (ctx = current_class_type;
5778                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5779                    ctx = (TYPE_P (ctx)
5780                           ? TYPE_CONTEXT (ctx)
5781                           : DECL_CONTEXT (ctx)))
5782                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5783                   goto found_ctx;
5784
5785               /* We're not in the scope of the class, so the
5786                  TEMPLATE_TYPE is not the type we want after all.  */
5787               found = NULL_TREE;
5788             found_ctx:;
5789             }
5790         }
5791       if (found)
5792         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5793
5794       /* If we already have this specialization, return it.  */
5795       found = retrieve_specialization (templ, arglist,
5796                                        /*class_specializations_p=*/false);
5797       if (found)
5798         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5799
5800       /* This type is a "partial instantiation" if any of the template
5801          arguments still involve template parameters.  Note that we set
5802          IS_PARTIAL_INSTANTIATION for partial specializations as
5803          well.  */
5804       is_partial_instantiation = uses_template_parms (arglist);
5805
5806       /* If the deduced arguments are invalid, then the binding
5807          failed.  */
5808       if (!is_partial_instantiation
5809           && check_instantiated_args (templ,
5810                                       INNERMOST_TEMPLATE_ARGS (arglist),
5811                                       complain))
5812         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5813
5814       if (!is_partial_instantiation
5815           && !PRIMARY_TEMPLATE_P (templ)
5816           && TREE_CODE (CP_DECL_CONTEXT (templ)) == NAMESPACE_DECL)
5817         {
5818           found = xref_tag_from_type (TREE_TYPE (templ),
5819                                       DECL_NAME (templ),
5820                                       /*tag_scope=*/ts_global);
5821           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5822         }
5823
5824       context = tsubst (DECL_CONTEXT (templ), arglist,
5825                         complain, in_decl);
5826       if (!context)
5827         context = global_namespace;
5828
5829       /* Create the type.  */
5830       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5831         {
5832           if (!is_partial_instantiation)
5833             {
5834               set_current_access_from_decl (TYPE_NAME (template_type));
5835               t = start_enum (TYPE_IDENTIFIER (template_type));
5836             }
5837           else
5838             /* We don't want to call start_enum for this type, since
5839                the values for the enumeration constants may involve
5840                template parameters.  And, no one should be interested
5841                in the enumeration constants for such a type.  */
5842             t = make_node (ENUMERAL_TYPE);
5843         }
5844       else
5845         {
5846           t = make_class_type (TREE_CODE (template_type));
5847           CLASSTYPE_DECLARED_CLASS (t)
5848             = CLASSTYPE_DECLARED_CLASS (template_type);
5849           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5850           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5851
5852           /* A local class.  Make sure the decl gets registered properly.  */
5853           if (context == current_function_decl)
5854             pushtag (DECL_NAME (templ), t, /*tag_scope=*/ts_current);
5855
5856           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5857             /* This instantiation is another name for the primary
5858                template type. Set the TYPE_CANONICAL field
5859                appropriately. */
5860             TYPE_CANONICAL (t) = template_type;
5861           else if (any_template_arguments_need_structural_equality_p (arglist))
5862             /* Some of the template arguments require structural
5863                equality testing, so this template class requires
5864                structural equality testing. */
5865             SET_TYPE_STRUCTURAL_EQUALITY (t);
5866         }
5867
5868       /* If we called start_enum or pushtag above, this information
5869          will already be set up.  */
5870       if (!TYPE_NAME (t))
5871         {
5872           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5873
5874           type_decl = create_implicit_typedef (DECL_NAME (templ), t);
5875           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5876           TYPE_STUB_DECL (t) = type_decl;
5877           DECL_SOURCE_LOCATION (type_decl)
5878             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5879         }
5880       else
5881         type_decl = TYPE_NAME (t);
5882
5883       TREE_PRIVATE (type_decl)
5884         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5885       TREE_PROTECTED (type_decl)
5886         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5887       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5888         {
5889           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5890           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5891         }
5892
5893       /* Set up the template information.  We have to figure out which
5894          template is the immediate parent if this is a full
5895          instantiation.  */
5896       if (parm_depth == 1 || is_partial_instantiation
5897           || !PRIMARY_TEMPLATE_P (templ))
5898         /* This case is easy; there are no member templates involved.  */
5899         found = templ;
5900       else
5901         {
5902           /* This is a full instantiation of a member template.  Look
5903              for a partial instantiation of which this is an instance.  */
5904
5905           for (found = DECL_TEMPLATE_INSTANTIATIONS (templ);
5906                found; found = TREE_CHAIN (found))
5907             {
5908               int success;
5909               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5910
5911               /* We only want partial instantiations, here, not
5912                  specializations or full instantiations.  */
5913               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5914                   || !uses_template_parms (TREE_VALUE (found)))
5915                 continue;
5916
5917               /* Temporarily reduce by one the number of levels in the
5918                  ARGLIST and in FOUND so as to avoid comparing the
5919                  last set of arguments.  */
5920               TREE_VEC_LENGTH (arglist)--;
5921               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5922
5923               /* See if the arguments match.  If they do, then TMPL is
5924                  the partial instantiation we want.  */
5925               success = comp_template_args (TREE_PURPOSE (found), arglist);
5926
5927               /* Restore the argument vectors to their full size.  */
5928               TREE_VEC_LENGTH (arglist)++;
5929               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5930
5931               if (success)
5932                 {
5933                   found = tmpl;
5934                   break;
5935                 }
5936             }
5937
5938           if (!found)
5939             {
5940               /* There was no partial instantiation. This happens
5941                  where C<T> is a member template of A<T> and it's used
5942                  in something like
5943
5944                   template <typename T> struct B { A<T>::C<int> m; };
5945                   B<float>;
5946
5947                  Create the partial instantiation.
5948                */
5949               TREE_VEC_LENGTH (arglist)--;
5950               found = tsubst (templ, arglist, complain, NULL_TREE);
5951               TREE_VEC_LENGTH (arglist)++;
5952             }
5953         }
5954
5955       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5956       DECL_TEMPLATE_INSTANTIATIONS (templ)
5957         = tree_cons (arglist, t,
5958                      DECL_TEMPLATE_INSTANTIATIONS (templ));
5959
5960       if (TREE_CODE (t) == ENUMERAL_TYPE
5961           && !is_partial_instantiation)
5962         /* Now that the type has been registered on the instantiations
5963            list, we set up the enumerators.  Because the enumeration
5964            constants may involve the enumeration type itself, we make
5965            sure to register the type first, and then create the
5966            constants.  That way, doing tsubst_expr for the enumeration
5967            constants won't result in recursive calls here; we'll find
5968            the instantiation and exit above.  */
5969         tsubst_enum (template_type, t, arglist);
5970
5971       if (is_partial_instantiation)
5972         /* If the type makes use of template parameters, the
5973            code that generates debugging information will crash.  */
5974         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5975
5976       /* Possibly limit visibility based on template args.  */
5977       TREE_PUBLIC (type_decl) = 1;
5978       determine_visibility (type_decl);
5979
5980       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5981     }
5982   timevar_pop (TV_NAME_LOOKUP);
5983 }
5984 \f
5985 struct pair_fn_data
5986 {
5987   tree_fn_t fn;
5988   void *data;
5989   /* True when we should also visit template parameters that occur in
5990      non-deduced contexts.  */
5991   bool include_nondeduced_p;
5992   struct pointer_set_t *visited;
5993 };
5994
5995 /* Called from for_each_template_parm via walk_tree.  */
5996
5997 static tree
5998 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5999 {
6000   tree t = *tp;
6001   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6002   tree_fn_t fn = pfd->fn;
6003   void *data = pfd->data;
6004
6005   if (TYPE_P (t)
6006       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6007       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6008                                  pfd->include_nondeduced_p))
6009     return error_mark_node;
6010
6011   switch (TREE_CODE (t))
6012     {
6013     case RECORD_TYPE:
6014       if (TYPE_PTRMEMFUNC_P (t))
6015         break;
6016       /* Fall through.  */
6017
6018     case UNION_TYPE:
6019     case ENUMERAL_TYPE:
6020       if (!TYPE_TEMPLATE_INFO (t))
6021         *walk_subtrees = 0;
6022       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6023                                        fn, data, pfd->visited, 
6024                                        pfd->include_nondeduced_p))
6025         return error_mark_node;
6026       break;
6027
6028     case INTEGER_TYPE:
6029       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6030                                   fn, data, pfd->visited, 
6031                                   pfd->include_nondeduced_p)
6032           || for_each_template_parm (TYPE_MAX_VALUE (t),
6033                                      fn, data, pfd->visited,
6034                                      pfd->include_nondeduced_p))
6035         return error_mark_node;
6036       break;
6037
6038     case METHOD_TYPE:
6039       /* Since we're not going to walk subtrees, we have to do this
6040          explicitly here.  */
6041       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6042                                   pfd->visited, pfd->include_nondeduced_p))
6043         return error_mark_node;
6044       /* Fall through.  */
6045
6046     case FUNCTION_TYPE:
6047       /* Check the return type.  */
6048       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6049                                   pfd->include_nondeduced_p))
6050         return error_mark_node;
6051
6052       /* Check the parameter types.  Since default arguments are not
6053          instantiated until they are needed, the TYPE_ARG_TYPES may
6054          contain expressions that involve template parameters.  But,
6055          no-one should be looking at them yet.  And, once they're
6056          instantiated, they don't contain template parameters, so
6057          there's no point in looking at them then, either.  */
6058       {
6059         tree parm;
6060
6061         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6062           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6063                                       pfd->visited, pfd->include_nondeduced_p))
6064             return error_mark_node;
6065
6066         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6067            want walk_tree walking into them itself.  */
6068         *walk_subtrees = 0;
6069       }
6070       break;
6071
6072     case TYPEOF_TYPE:
6073       if (pfd->include_nondeduced_p
6074           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6075                                      pfd->visited, 
6076                                      pfd->include_nondeduced_p))
6077         return error_mark_node;
6078       break;
6079
6080     case FUNCTION_DECL:
6081     case VAR_DECL:
6082       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6083           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6084                                      pfd->visited, pfd->include_nondeduced_p))
6085         return error_mark_node;
6086       /* Fall through.  */
6087
6088     case PARM_DECL:
6089     case CONST_DECL:
6090       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6091           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6092                                      pfd->visited, pfd->include_nondeduced_p))
6093         return error_mark_node;
6094       if (DECL_CONTEXT (t)
6095           && pfd->include_nondeduced_p
6096           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6097                                      pfd->visited, pfd->include_nondeduced_p))
6098         return error_mark_node;
6099       break;
6100
6101     case BOUND_TEMPLATE_TEMPLATE_PARM:
6102       /* Record template parameters such as `T' inside `TT<T>'.  */
6103       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6104                                   pfd->include_nondeduced_p))
6105         return error_mark_node;
6106       /* Fall through.  */
6107
6108     case TEMPLATE_TEMPLATE_PARM:
6109     case TEMPLATE_TYPE_PARM:
6110     case TEMPLATE_PARM_INDEX:
6111       if (fn && (*fn)(t, data))
6112         return error_mark_node;
6113       else if (!fn)
6114         return error_mark_node;
6115       break;
6116
6117     case TEMPLATE_DECL:
6118       /* A template template parameter is encountered.  */
6119       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6120           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6121                                      pfd->include_nondeduced_p))
6122         return error_mark_node;
6123
6124       /* Already substituted template template parameter */
6125       *walk_subtrees = 0;
6126       break;
6127
6128     case TYPENAME_TYPE:
6129       if (!fn
6130           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6131                                      data, pfd->visited, 
6132                                      pfd->include_nondeduced_p))
6133         return error_mark_node;
6134       break;
6135
6136     case CONSTRUCTOR:
6137       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6138           && pfd->include_nondeduced_p
6139           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6140                                      (TREE_TYPE (t)), fn, data,
6141                                      pfd->visited, pfd->include_nondeduced_p))
6142         return error_mark_node;
6143       break;
6144
6145     case INDIRECT_REF:
6146     case COMPONENT_REF:
6147       /* If there's no type, then this thing must be some expression
6148          involving template parameters.  */
6149       if (!fn && !TREE_TYPE (t))
6150         return error_mark_node;
6151       break;
6152
6153     case MODOP_EXPR:
6154     case CAST_EXPR:
6155     case REINTERPRET_CAST_EXPR:
6156     case CONST_CAST_EXPR:
6157     case STATIC_CAST_EXPR:
6158     case DYNAMIC_CAST_EXPR:
6159     case ARROW_EXPR:
6160     case DOTSTAR_EXPR:
6161     case TYPEID_EXPR:
6162     case PSEUDO_DTOR_EXPR:
6163       if (!fn)
6164         return error_mark_node;
6165       break;
6166
6167     default:
6168       break;
6169     }
6170
6171   /* We didn't find any template parameters we liked.  */
6172   return NULL_TREE;
6173 }
6174
6175 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6176    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6177    call FN with the parameter and the DATA.
6178    If FN returns nonzero, the iteration is terminated, and
6179    for_each_template_parm returns 1.  Otherwise, the iteration
6180    continues.  If FN never returns a nonzero value, the value
6181    returned by for_each_template_parm is 0.  If FN is NULL, it is
6182    considered to be the function which always returns 1.
6183
6184    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6185    parameters that occur in non-deduced contexts.  When false, only
6186    visits those template parameters that can be deduced.  */
6187
6188 static int
6189 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6190                         struct pointer_set_t *visited,
6191                         bool include_nondeduced_p)
6192 {
6193   struct pair_fn_data pfd;
6194   int result;
6195
6196   /* Set up.  */
6197   pfd.fn = fn;
6198   pfd.data = data;
6199   pfd.include_nondeduced_p = include_nondeduced_p;
6200
6201   /* Walk the tree.  (Conceptually, we would like to walk without
6202      duplicates, but for_each_template_parm_r recursively calls
6203      for_each_template_parm, so we would need to reorganize a fair
6204      bit to use walk_tree_without_duplicates, so we keep our own
6205      visited list.)  */
6206   if (visited)
6207     pfd.visited = visited;
6208   else
6209     pfd.visited = pointer_set_create ();
6210   result = cp_walk_tree (&t,
6211                          for_each_template_parm_r,
6212                          &pfd,
6213                          pfd.visited) != NULL_TREE;
6214
6215   /* Clean up.  */
6216   if (!visited)
6217     {
6218       pointer_set_destroy (pfd.visited);
6219       pfd.visited = 0;
6220     }
6221
6222   return result;
6223 }
6224
6225 /* Returns true if T depends on any template parameter.  */
6226
6227 int
6228 uses_template_parms (tree t)
6229 {
6230   bool dependent_p;
6231   int saved_processing_template_decl;
6232
6233   saved_processing_template_decl = processing_template_decl;
6234   if (!saved_processing_template_decl)
6235     processing_template_decl = 1;
6236   if (TYPE_P (t))
6237     dependent_p = dependent_type_p (t);
6238   else if (TREE_CODE (t) == TREE_VEC)
6239     dependent_p = any_dependent_template_arguments_p (t);
6240   else if (TREE_CODE (t) == TREE_LIST)
6241     dependent_p = (uses_template_parms (TREE_VALUE (t))
6242                    || uses_template_parms (TREE_CHAIN (t)));
6243   else if (TREE_CODE (t) == TYPE_DECL)
6244     dependent_p = dependent_type_p (TREE_TYPE (t));
6245   else if (DECL_P (t)
6246            || EXPR_P (t)
6247            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6248            || TREE_CODE (t) == OVERLOAD
6249            || TREE_CODE (t) == BASELINK
6250            || TREE_CODE (t) == IDENTIFIER_NODE
6251            || TREE_CODE (t) == TRAIT_EXPR
6252            || CONSTANT_CLASS_P (t))
6253     dependent_p = (type_dependent_expression_p (t)
6254                    || value_dependent_expression_p (t));
6255   else
6256     {
6257       gcc_assert (t == error_mark_node);
6258       dependent_p = false;
6259     }
6260
6261   processing_template_decl = saved_processing_template_decl;
6262
6263   return dependent_p;
6264 }
6265
6266 /* Returns true if T depends on any template parameter with level LEVEL.  */
6267
6268 int
6269 uses_template_parms_level (tree t, int level)
6270 {
6271   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6272                                  /*include_nondeduced_p=*/true);
6273 }
6274
6275 static int tinst_depth;
6276 extern int max_tinst_depth;
6277 #ifdef GATHER_STATISTICS
6278 int depth_reached;
6279 #endif
6280 static int tinst_level_tick;
6281 static int last_template_error_tick;
6282
6283 /* We're starting to instantiate D; record the template instantiation context
6284    for diagnostics and to restore it later.  */
6285
6286 static int
6287 push_tinst_level (tree d)
6288 {
6289   struct tinst_level *new_level;
6290
6291   if (tinst_depth >= max_tinst_depth)
6292     {
6293       /* If the instantiation in question still has unbound template parms,
6294          we don't really care if we can't instantiate it, so just return.
6295          This happens with base instantiation for implicit `typename'.  */
6296       if (uses_template_parms (d))
6297         return 0;
6298
6299       last_template_error_tick = tinst_level_tick;
6300       error ("template instantiation depth exceeds maximum of %d (use "
6301              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6302              max_tinst_depth, d);
6303
6304       print_instantiation_context ();
6305
6306       return 0;
6307     }
6308
6309   new_level = GGC_NEW (struct tinst_level);
6310   new_level->decl = d;
6311   new_level->locus = input_location;
6312   new_level->in_system_header_p = in_system_header;
6313   new_level->next = current_tinst_level;
6314   current_tinst_level = new_level;
6315
6316   ++tinst_depth;
6317 #ifdef GATHER_STATISTICS
6318   if (tinst_depth > depth_reached)
6319     depth_reached = tinst_depth;
6320 #endif
6321
6322   ++tinst_level_tick;
6323   return 1;
6324 }
6325
6326 /* We're done instantiating this template; return to the instantiation
6327    context.  */
6328
6329 static void
6330 pop_tinst_level (void)
6331 {
6332   /* Restore the filename and line number stashed away when we started
6333      this instantiation.  */
6334   input_location = current_tinst_level->locus;
6335   current_tinst_level = current_tinst_level->next;
6336   --tinst_depth;
6337   ++tinst_level_tick;
6338 }
6339
6340 /* We're instantiating a deferred template; restore the template
6341    instantiation context in which the instantiation was requested, which
6342    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6343
6344 static tree
6345 reopen_tinst_level (struct tinst_level *level)
6346 {
6347   struct tinst_level *t;
6348
6349   tinst_depth = 0;
6350   for (t = level; t; t = t->next)
6351     ++tinst_depth;
6352
6353   current_tinst_level = level;
6354   pop_tinst_level ();
6355   return level->decl;
6356 }
6357
6358 /* Returns the TINST_LEVEL which gives the original instantiation
6359    context.  */
6360
6361 struct tinst_level *
6362 outermost_tinst_level (void)
6363 {
6364   struct tinst_level *level = current_tinst_level;
6365   if (level)
6366     while (level->next)
6367       level = level->next;
6368   return level;
6369 }
6370
6371 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6372    vector of template arguments, as for tsubst.
6373
6374    Returns an appropriate tsubst'd friend declaration.  */
6375
6376 static tree
6377 tsubst_friend_function (tree decl, tree args)
6378 {
6379   tree new_friend;
6380
6381   if (TREE_CODE (decl) == FUNCTION_DECL
6382       && DECL_TEMPLATE_INSTANTIATION (decl)
6383       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6384     /* This was a friend declared with an explicit template
6385        argument list, e.g.:
6386
6387        friend void f<>(T);
6388
6389        to indicate that f was a template instantiation, not a new
6390        function declaration.  Now, we have to figure out what
6391        instantiation of what template.  */
6392     {
6393       tree template_id, arglist, fns;
6394       tree new_args;
6395       tree tmpl;
6396       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6397
6398       /* Friend functions are looked up in the containing namespace scope.
6399          We must enter that scope, to avoid finding member functions of the
6400          current class with same name.  */
6401       push_nested_namespace (ns);
6402       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6403                          tf_warning_or_error, NULL_TREE,
6404                          /*integral_constant_expression_p=*/false);
6405       pop_nested_namespace (ns);
6406       arglist = tsubst (DECL_TI_ARGS (decl), args,
6407                         tf_warning_or_error, NULL_TREE);
6408       template_id = lookup_template_function (fns, arglist);
6409
6410       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6411       tmpl = determine_specialization (template_id, new_friend,
6412                                        &new_args,
6413                                        /*need_member_template=*/0,
6414                                        TREE_VEC_LENGTH (args),
6415                                        tsk_none);
6416       return instantiate_template (tmpl, new_args, tf_error);
6417     }
6418
6419   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6420
6421   /* The NEW_FRIEND will look like an instantiation, to the
6422      compiler, but is not an instantiation from the point of view of
6423      the language.  For example, we might have had:
6424
6425      template <class T> struct S {
6426        template <class U> friend void f(T, U);
6427      };
6428
6429      Then, in S<int>, template <class U> void f(int, U) is not an
6430      instantiation of anything.  */
6431   if (new_friend == error_mark_node)
6432     return error_mark_node;
6433
6434   DECL_USE_TEMPLATE (new_friend) = 0;
6435   if (TREE_CODE (decl) == TEMPLATE_DECL)
6436     {
6437       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6438       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6439         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6440     }
6441
6442   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6443      is not a template instantiation and should not be mangled like
6444      one.  Therefore, we forget the mangling here; we'll recompute it
6445      later if we need it.  */
6446   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6447     {
6448       SET_DECL_RTL (new_friend, NULL_RTX);
6449       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6450     }
6451
6452   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6453     {
6454       tree old_decl;
6455       tree new_friend_template_info;
6456       tree new_friend_result_template_info;
6457       tree ns;
6458       int  new_friend_is_defn;
6459
6460       /* We must save some information from NEW_FRIEND before calling
6461          duplicate decls since that function will free NEW_FRIEND if
6462          possible.  */
6463       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6464       new_friend_is_defn =
6465             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6466                            (template_for_substitution (new_friend)))
6467              != NULL_TREE);
6468       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6469         {
6470           /* This declaration is a `primary' template.  */
6471           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6472
6473           new_friend_result_template_info
6474             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6475         }
6476       else
6477         new_friend_result_template_info = NULL_TREE;
6478
6479       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6480       if (new_friend_is_defn)
6481         DECL_INITIAL (new_friend) = error_mark_node;
6482
6483       /* Inside pushdecl_namespace_level, we will push into the
6484          current namespace. However, the friend function should go
6485          into the namespace of the template.  */
6486       ns = decl_namespace_context (new_friend);
6487       push_nested_namespace (ns);
6488       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6489       pop_nested_namespace (ns);
6490
6491       if (old_decl == error_mark_node)
6492         return error_mark_node;
6493
6494       if (old_decl != new_friend)
6495         {
6496           /* This new friend declaration matched an existing
6497              declaration.  For example, given:
6498
6499                template <class T> void f(T);
6500                template <class U> class C {
6501                  template <class T> friend void f(T) {}
6502                };
6503
6504              the friend declaration actually provides the definition
6505              of `f', once C has been instantiated for some type.  So,
6506              old_decl will be the out-of-class template declaration,
6507              while new_friend is the in-class definition.
6508
6509              But, if `f' was called before this point, the
6510              instantiation of `f' will have DECL_TI_ARGS corresponding
6511              to `T' but not to `U', references to which might appear
6512              in the definition of `f'.  Previously, the most general
6513              template for an instantiation of `f' was the out-of-class
6514              version; now it is the in-class version.  Therefore, we
6515              run through all specialization of `f', adding to their
6516              DECL_TI_ARGS appropriately.  In particular, they need a
6517              new set of outer arguments, corresponding to the
6518              arguments for this class instantiation.
6519
6520              The same situation can arise with something like this:
6521
6522                friend void f(int);
6523                template <class T> class C {
6524                  friend void f(T) {}
6525                };
6526
6527              when `C<int>' is instantiated.  Now, `f(int)' is defined
6528              in the class.  */
6529
6530           if (!new_friend_is_defn)
6531             /* On the other hand, if the in-class declaration does
6532                *not* provide a definition, then we don't want to alter
6533                existing definitions.  We can just leave everything
6534                alone.  */
6535             ;
6536           else
6537             {
6538               /* Overwrite whatever template info was there before, if
6539                  any, with the new template information pertaining to
6540                  the declaration.  */
6541               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6542
6543               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6544                 reregister_specialization (new_friend,
6545                                            most_general_template (old_decl),
6546                                            old_decl);
6547               else
6548                 {
6549                   tree t;
6550                   tree new_friend_args;
6551
6552                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6553                     = new_friend_result_template_info;
6554
6555                   new_friend_args = TI_ARGS (new_friend_template_info);
6556                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6557                        t != NULL_TREE;
6558                        t = TREE_CHAIN (t))
6559                     {
6560                       tree spec = TREE_VALUE (t);
6561
6562                       DECL_TI_ARGS (spec)
6563                         = add_outermost_template_args (new_friend_args,
6564                                                        DECL_TI_ARGS (spec));
6565                     }
6566
6567                   /* Now, since specializations are always supposed to
6568                      hang off of the most general template, we must move
6569                      them.  */
6570                   t = most_general_template (old_decl);
6571                   if (t != old_decl)
6572                     {
6573                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6574                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6575                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6576                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6577                     }
6578                 }
6579             }
6580
6581           /* The information from NEW_FRIEND has been merged into OLD_DECL
6582              by duplicate_decls.  */
6583           new_friend = old_decl;
6584         }
6585     }
6586   else
6587     {
6588       tree context = DECL_CONTEXT (new_friend);
6589       bool dependent_p;
6590
6591       /* In the code
6592            template <class T> class C {
6593              template <class U> friend void C1<U>::f (); // case 1
6594              friend void C2<T>::f ();                    // case 2
6595            };
6596          we only need to make sure CONTEXT is a complete type for
6597          case 2.  To distinguish between the two cases, we note that
6598          CONTEXT of case 1 remains dependent type after tsubst while
6599          this isn't true for case 2.  */
6600       ++processing_template_decl;
6601       dependent_p = dependent_type_p (context);
6602       --processing_template_decl;
6603
6604       if (!dependent_p
6605           && !complete_type_or_else (context, NULL_TREE))
6606         return error_mark_node;
6607
6608       if (COMPLETE_TYPE_P (context))
6609         {
6610           /* Check to see that the declaration is really present, and,
6611              possibly obtain an improved declaration.  */
6612           tree fn = check_classfn (context,
6613                                    new_friend, NULL_TREE);
6614
6615           if (fn)
6616             new_friend = fn;
6617         }
6618     }
6619
6620   return new_friend;
6621 }
6622
6623 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6624    template arguments, as for tsubst.
6625
6626    Returns an appropriate tsubst'd friend type or error_mark_node on
6627    failure.  */
6628
6629 static tree
6630 tsubst_friend_class (tree friend_tmpl, tree args)
6631 {
6632   tree friend_type;
6633   tree tmpl;
6634   tree context;
6635
6636   context = DECL_CONTEXT (friend_tmpl);
6637
6638   if (context)
6639     {
6640       if (TREE_CODE (context) == NAMESPACE_DECL)
6641         push_nested_namespace (context);
6642       else
6643         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6644     }
6645
6646   /* Look for a class template declaration.  We look for hidden names
6647      because two friend declarations of the same template are the
6648      same.  For example, in:
6649
6650        struct A { 
6651          template <typename> friend class F;
6652        };
6653        template <typename> struct B { 
6654          template <typename> friend class F;
6655        };
6656
6657      both F templates are the same.  */
6658   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6659                            /*block_p=*/true, 0, 
6660                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6661
6662   /* But, if we don't find one, it might be because we're in a
6663      situation like this:
6664
6665        template <class T>
6666        struct S {
6667          template <class U>
6668          friend struct S;
6669        };
6670
6671      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6672      for `S<int>', not the TEMPLATE_DECL.  */
6673   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6674     {
6675       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6676       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6677     }
6678
6679   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6680     {
6681       /* The friend template has already been declared.  Just
6682          check to see that the declarations match, and install any new
6683          default parameters.  We must tsubst the default parameters,
6684          of course.  We only need the innermost template parameters
6685          because that is all that redeclare_class_template will look
6686          at.  */
6687       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6688           > TMPL_ARGS_DEPTH (args))
6689         {
6690           tree parms;
6691           location_t saved_input_location;
6692           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6693                                          args, tf_warning_or_error);
6694
6695           saved_input_location = input_location;
6696           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6697           redeclare_class_template (TREE_TYPE (tmpl), parms);
6698           input_location = saved_input_location;
6699           
6700         }
6701
6702       friend_type = TREE_TYPE (tmpl);
6703     }
6704   else
6705     {
6706       /* The friend template has not already been declared.  In this
6707          case, the instantiation of the template class will cause the
6708          injection of this template into the global scope.  */
6709       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6710       if (tmpl == error_mark_node)
6711         return error_mark_node;
6712
6713       /* The new TMPL is not an instantiation of anything, so we
6714          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6715          the new type because that is supposed to be the corresponding
6716          template decl, i.e., TMPL.  */
6717       DECL_USE_TEMPLATE (tmpl) = 0;
6718       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6719       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6720       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6721         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6722
6723       /* Inject this template into the global scope.  */
6724       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6725     }
6726
6727   if (context)
6728     {
6729       if (TREE_CODE (context) == NAMESPACE_DECL)
6730         pop_nested_namespace (context);
6731       else
6732         pop_nested_class ();
6733     }
6734
6735   return friend_type;
6736 }
6737
6738 /* Returns zero if TYPE cannot be completed later due to circularity.
6739    Otherwise returns one.  */
6740
6741 static int
6742 can_complete_type_without_circularity (tree type)
6743 {
6744   if (type == NULL_TREE || type == error_mark_node)
6745     return 0;
6746   else if (COMPLETE_TYPE_P (type))
6747     return 1;
6748   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6749     return can_complete_type_without_circularity (TREE_TYPE (type));
6750   else if (CLASS_TYPE_P (type)
6751            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6752     return 0;
6753   else
6754     return 1;
6755 }
6756
6757 /* Apply any attributes which had to be deferred until instantiation
6758    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6759    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6760
6761 static void
6762 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6763                                 tree args, tsubst_flags_t complain, tree in_decl)
6764 {
6765   tree last_dep = NULL_TREE;
6766   tree t;
6767   tree *p;
6768
6769   for (t = attributes; t; t = TREE_CHAIN (t))
6770     if (ATTR_IS_DEPENDENT (t))
6771       {
6772         last_dep = t;
6773         attributes = copy_list (attributes);
6774         break;
6775       }
6776
6777   if (DECL_P (*decl_p))
6778     {
6779       if (TREE_TYPE (*decl_p) == error_mark_node)
6780         return;
6781       p = &DECL_ATTRIBUTES (*decl_p);
6782     }
6783   else
6784     p = &TYPE_ATTRIBUTES (*decl_p);
6785
6786   if (last_dep)
6787     {
6788       tree late_attrs = NULL_TREE;
6789       tree *q = &late_attrs;
6790
6791       for (*p = attributes; *p; )
6792         {
6793           t = *p;
6794           if (ATTR_IS_DEPENDENT (t))
6795             {
6796               *p = TREE_CHAIN (t);
6797               TREE_CHAIN (t) = NULL_TREE;
6798               /* If the first attribute argument is an identifier, don't
6799                  pass it through tsubst.  Attributes like mode, format,
6800                  cleanup and several target specific attributes expect it
6801                  unmodified.  */
6802               if (TREE_VALUE (t)
6803                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6804                   && TREE_VALUE (TREE_VALUE (t))
6805                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6806                       == IDENTIFIER_NODE))
6807                 {
6808                   tree chain
6809                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6810                                    in_decl,
6811                                    /*integral_constant_expression_p=*/false);
6812                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6813                     TREE_VALUE (t)
6814                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6815                                    chain);
6816                 }
6817               else
6818                 TREE_VALUE (t)
6819                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6820                                  /*integral_constant_expression_p=*/false);
6821               *q = t;
6822               q = &TREE_CHAIN (t);
6823             }
6824           else
6825             p = &TREE_CHAIN (t);
6826         }
6827
6828       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6829     }
6830 }
6831
6832 tree
6833 instantiate_class_template (tree type)
6834 {
6835   tree templ, args, pattern, t, member;
6836   tree typedecl;
6837   tree pbinfo;
6838   tree base_list;
6839
6840   if (type == error_mark_node)
6841     return error_mark_node;
6842
6843   if (TYPE_BEING_DEFINED (type)
6844       || COMPLETE_TYPE_P (type)
6845       || dependent_type_p (type))
6846     return type;
6847
6848   /* Figure out which template is being instantiated.  */
6849   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6850   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6851
6852   /* Determine what specialization of the original template to
6853      instantiate.  */
6854   t = most_specialized_class (type, templ);
6855   if (t == error_mark_node)
6856     {
6857       TYPE_BEING_DEFINED (type) = 1;
6858       return error_mark_node;
6859     }
6860   else if (t)
6861     {
6862       /* This TYPE is actually an instantiation of a partial
6863          specialization.  We replace the innermost set of ARGS with
6864          the arguments appropriate for substitution.  For example,
6865          given:
6866
6867            template <class T> struct S {};
6868            template <class T> struct S<T*> {};
6869
6870          and supposing that we are instantiating S<int*>, ARGS will
6871          presently be {int*} -- but we need {int}.  */
6872       pattern = TREE_TYPE (t);
6873       args = TREE_PURPOSE (t);
6874     }
6875   else
6876     {
6877       pattern = TREE_TYPE (templ);
6878       args = CLASSTYPE_TI_ARGS (type);
6879     }
6880
6881   /* If the template we're instantiating is incomplete, then clearly
6882      there's nothing we can do.  */
6883   if (!COMPLETE_TYPE_P (pattern))
6884     return type;
6885
6886   /* If we've recursively instantiated too many templates, stop.  */
6887   if (! push_tinst_level (type))
6888     return type;
6889
6890   /* Now we're really doing the instantiation.  Mark the type as in
6891      the process of being defined.  */
6892   TYPE_BEING_DEFINED (type) = 1;
6893
6894   /* We may be in the middle of deferred access check.  Disable
6895      it now.  */
6896   push_deferring_access_checks (dk_no_deferred);
6897
6898   push_to_top_level ();
6899
6900   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6901
6902   /* Set the input location to the template definition. This is needed
6903      if tsubsting causes an error.  */
6904   typedecl = TYPE_MAIN_DECL (type);
6905   input_location = DECL_SOURCE_LOCATION (typedecl);
6906
6907   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6908   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6909   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6910   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6911   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6912   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6913   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6914   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6915   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6916   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6917   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6918   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6919   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6920   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6921   if (ANON_AGGR_TYPE_P (pattern))
6922     SET_ANON_AGGR_TYPE_P (type);
6923   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6924     {
6925       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6926       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6927     }
6928
6929   pbinfo = TYPE_BINFO (pattern);
6930
6931   /* We should never instantiate a nested class before its enclosing
6932      class; we need to look up the nested class by name before we can
6933      instantiate it, and that lookup should instantiate the enclosing
6934      class.  */
6935   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6936               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6937               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6938
6939   base_list = NULL_TREE;
6940   if (BINFO_N_BASE_BINFOS (pbinfo))
6941     {
6942       tree pbase_binfo;
6943       tree context = TYPE_CONTEXT (type);
6944       tree pushed_scope;
6945       int i;
6946
6947       /* We must enter the scope containing the type, as that is where
6948          the accessibility of types named in dependent bases are
6949          looked up from.  */
6950       pushed_scope = push_scope (context ? context : global_namespace);
6951
6952       /* Substitute into each of the bases to determine the actual
6953          basetypes.  */
6954       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6955         {
6956           tree base;
6957           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6958           tree expanded_bases = NULL_TREE;
6959           int idx, len = 1;
6960
6961           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6962             {
6963               expanded_bases = 
6964                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6965                                        args, tf_error, NULL_TREE);
6966               if (expanded_bases == error_mark_node)
6967                 continue;
6968
6969               len = TREE_VEC_LENGTH (expanded_bases);
6970             }
6971
6972           for (idx = 0; idx < len; idx++)
6973             {
6974               if (expanded_bases)
6975                 /* Extract the already-expanded base class.  */
6976                 base = TREE_VEC_ELT (expanded_bases, idx);
6977               else
6978                 /* Substitute to figure out the base class.  */
6979                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6980                                NULL_TREE);
6981
6982               if (base == error_mark_node)
6983                 continue;
6984
6985               base_list = tree_cons (access, base, base_list);
6986               if (BINFO_VIRTUAL_P (pbase_binfo))
6987                 TREE_TYPE (base_list) = integer_type_node;
6988             }
6989         }
6990
6991       /* The list is now in reverse order; correct that.  */
6992       base_list = nreverse (base_list);
6993
6994       if (pushed_scope)
6995         pop_scope (pushed_scope);
6996     }
6997   /* Now call xref_basetypes to set up all the base-class
6998      information.  */
6999   xref_basetypes (type, base_list);
7000
7001   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7002                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7003                                   args, tf_error, NULL_TREE);
7004
7005   /* Now that our base classes are set up, enter the scope of the
7006      class, so that name lookups into base classes, etc. will work
7007      correctly.  This is precisely analogous to what we do in
7008      begin_class_definition when defining an ordinary non-template
7009      class, except we also need to push the enclosing classes.  */
7010   push_nested_class (type);
7011
7012   /* Now members are processed in the order of declaration.  */
7013   for (member = CLASSTYPE_DECL_LIST (pattern);
7014        member; member = TREE_CHAIN (member))
7015     {
7016       tree t = TREE_VALUE (member);
7017
7018       if (TREE_PURPOSE (member))
7019         {
7020           if (TYPE_P (t))
7021             {
7022               /* Build new CLASSTYPE_NESTED_UTDS.  */
7023
7024               tree newtag;
7025               bool class_template_p;
7026
7027               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7028                                   && TYPE_LANG_SPECIFIC (t)
7029                                   && CLASSTYPE_IS_TEMPLATE (t));
7030               /* If the member is a class template, then -- even after
7031                  substitution -- there may be dependent types in the
7032                  template argument list for the class.  We increment
7033                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7034                  that function will assume that no types are dependent
7035                  when outside of a template.  */
7036               if (class_template_p)
7037                 ++processing_template_decl;
7038               newtag = tsubst (t, args, tf_error, NULL_TREE);
7039               if (class_template_p)
7040                 --processing_template_decl;
7041               if (newtag == error_mark_node)
7042                 continue;
7043
7044               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7045                 {
7046                   tree name = TYPE_IDENTIFIER (t);
7047
7048                   if (class_template_p)
7049                     /* Unfortunately, lookup_template_class sets
7050                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7051                        instantiation (i.e., for the type of a member
7052                        template class nested within a template class.)
7053                        This behavior is required for
7054                        maybe_process_partial_specialization to work
7055                        correctly, but is not accurate in this case;
7056                        the TAG is not an instantiation of anything.
7057                        (The corresponding TEMPLATE_DECL is an
7058                        instantiation, but the TYPE is not.) */
7059                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7060
7061                   /* Now, we call pushtag to put this NEWTAG into the scope of
7062                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7063                      pushtag calling push_template_decl.  We don't have to do
7064                      this for enums because it will already have been done in
7065                      tsubst_enum.  */
7066                   if (name)
7067                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7068                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7069                 }
7070             }
7071           else if (TREE_CODE (t) == FUNCTION_DECL
7072                    || DECL_FUNCTION_TEMPLATE_P (t))
7073             {
7074               /* Build new TYPE_METHODS.  */
7075               tree r;
7076
7077               if (TREE_CODE (t) == TEMPLATE_DECL)
7078                 ++processing_template_decl;
7079               r = tsubst (t, args, tf_error, NULL_TREE);
7080               if (TREE_CODE (t) == TEMPLATE_DECL)
7081                 --processing_template_decl;
7082               set_current_access_from_decl (r);
7083               finish_member_declaration (r);
7084             }
7085           else
7086             {
7087               /* Build new TYPE_FIELDS.  */
7088               if (TREE_CODE (t) == STATIC_ASSERT)
7089                 {
7090                   tree condition = 
7091                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7092                                  tf_warning_or_error, NULL_TREE,
7093                                  /*integral_constant_expression_p=*/true);
7094                   finish_static_assert (condition,
7095                                         STATIC_ASSERT_MESSAGE (t), 
7096                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7097                                         /*member_p=*/true);
7098                 }
7099               else if (TREE_CODE (t) != CONST_DECL)
7100                 {
7101                   tree r;
7102
7103                   /* The file and line for this declaration, to
7104                      assist in error message reporting.  Since we
7105                      called push_tinst_level above, we don't need to
7106                      restore these.  */
7107                   input_location = DECL_SOURCE_LOCATION (t);
7108
7109                   if (TREE_CODE (t) == TEMPLATE_DECL)
7110                     ++processing_template_decl;
7111                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7112                   if (TREE_CODE (t) == TEMPLATE_DECL)
7113                     --processing_template_decl;
7114                   if (TREE_CODE (r) == VAR_DECL)
7115                     {
7116                       /* In [temp.inst]:
7117
7118                            [t]he initialization (and any associated
7119                            side-effects) of a static data member does
7120                            not occur unless the static data member is
7121                            itself used in a way that requires the
7122                            definition of the static data member to
7123                            exist.
7124
7125                          Therefore, we do not substitute into the
7126                          initialized for the static data member here.  */
7127                       finish_static_data_member_decl
7128                         (r,
7129                          /*init=*/NULL_TREE,
7130                          /*init_const_expr_p=*/false,
7131                          /*asmspec_tree=*/NULL_TREE,
7132                          /*flags=*/0);
7133                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7134                         check_static_variable_definition (r, TREE_TYPE (r));
7135                     }
7136                   else if (TREE_CODE (r) == FIELD_DECL)
7137                     {
7138                       /* Determine whether R has a valid type and can be
7139                          completed later.  If R is invalid, then it is
7140                          replaced by error_mark_node so that it will not be
7141                          added to TYPE_FIELDS.  */
7142                       tree rtype = TREE_TYPE (r);
7143                       if (can_complete_type_without_circularity (rtype))
7144                         complete_type (rtype);
7145
7146                       if (!COMPLETE_TYPE_P (rtype))
7147                         {
7148                           cxx_incomplete_type_error (r, rtype);
7149                           r = error_mark_node;
7150                         }
7151                     }
7152
7153                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7154                      such a thing will already have been added to the field
7155                      list by tsubst_enum in finish_member_declaration in the
7156                      CLASSTYPE_NESTED_UTDS case above.  */
7157                   if (!(TREE_CODE (r) == TYPE_DECL
7158                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7159                         && DECL_ARTIFICIAL (r)))
7160                     {
7161                       set_current_access_from_decl (r);
7162                       finish_member_declaration (r);
7163                     }
7164                 }
7165             }
7166         }
7167       else
7168         {
7169           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7170             {
7171               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7172
7173               tree friend_type = t;
7174               bool adjust_processing_template_decl = false;
7175
7176               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7177                 {
7178                   /* template <class T> friend class C;  */
7179                   friend_type = tsubst_friend_class (friend_type, args);
7180                   adjust_processing_template_decl = true;
7181                 }
7182               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7183                 {
7184                   /* template <class T> friend class C::D;  */
7185                   friend_type = tsubst (friend_type, args,
7186                                         tf_warning_or_error, NULL_TREE);
7187                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7188                     friend_type = TREE_TYPE (friend_type);
7189                   adjust_processing_template_decl = true;
7190                 }
7191               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7192                 {
7193                   /* This could be either
7194
7195                        friend class T::C;
7196
7197                      when dependent_type_p is false or
7198
7199                        template <class U> friend class T::C;
7200
7201                      otherwise.  */
7202                   friend_type = tsubst (friend_type, args,
7203                                         tf_warning_or_error, NULL_TREE);
7204                   /* Bump processing_template_decl for correct
7205                      dependent_type_p calculation.  */
7206                   ++processing_template_decl;
7207                   if (dependent_type_p (friend_type))
7208                     adjust_processing_template_decl = true;
7209                   --processing_template_decl;
7210                 }
7211               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7212                        && hidden_name_p (TYPE_NAME (friend_type)))
7213                 {
7214                   /* friend class C;
7215
7216                      where C hasn't been declared yet.  Let's lookup name
7217                      from namespace scope directly, bypassing any name that
7218                      come from dependent base class.  */
7219                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7220
7221                   /* The call to xref_tag_from_type does injection for friend
7222                      classes.  */
7223                   push_nested_namespace (ns);
7224                   friend_type =
7225                     xref_tag_from_type (friend_type, NULL_TREE,
7226                                         /*tag_scope=*/ts_current);
7227                   pop_nested_namespace (ns);
7228                 }
7229               else if (uses_template_parms (friend_type))
7230                 /* friend class C<T>;  */
7231                 friend_type = tsubst (friend_type, args,
7232                                       tf_warning_or_error, NULL_TREE);
7233               /* Otherwise it's
7234
7235                    friend class C;
7236
7237                  where C is already declared or
7238
7239                    friend class C<int>;
7240
7241                  We don't have to do anything in these cases.  */
7242
7243               if (adjust_processing_template_decl)
7244                 /* Trick make_friend_class into realizing that the friend
7245                    we're adding is a template, not an ordinary class.  It's
7246                    important that we use make_friend_class since it will
7247                    perform some error-checking and output cross-reference
7248                    information.  */
7249                 ++processing_template_decl;
7250
7251               if (friend_type != error_mark_node)
7252                 make_friend_class (type, friend_type, /*complain=*/false);
7253
7254               if (adjust_processing_template_decl)
7255                 --processing_template_decl;
7256             }
7257           else
7258             {
7259               /* Build new DECL_FRIENDLIST.  */
7260               tree r;
7261
7262               /* The file and line for this declaration, to
7263                  assist in error message reporting.  Since we
7264                  called push_tinst_level above, we don't need to
7265                  restore these.  */
7266               input_location = DECL_SOURCE_LOCATION (t);
7267
7268               if (TREE_CODE (t) == TEMPLATE_DECL)
7269                 {
7270                   ++processing_template_decl;
7271                   push_deferring_access_checks (dk_no_check);
7272                 }
7273
7274               r = tsubst_friend_function (t, args);
7275               add_friend (type, r, /*complain=*/false);
7276               if (TREE_CODE (t) == TEMPLATE_DECL)
7277                 {
7278                   pop_deferring_access_checks ();
7279                   --processing_template_decl;
7280                 }
7281             }
7282         }
7283     }
7284
7285   /* Set the file and line number information to whatever is given for
7286      the class itself.  This puts error messages involving generated
7287      implicit functions at a predictable point, and the same point
7288      that would be used for non-template classes.  */
7289   input_location = DECL_SOURCE_LOCATION (typedecl);
7290
7291   unreverse_member_declarations (type);
7292   finish_struct_1 (type);
7293   TYPE_BEING_DEFINED (type) = 0;
7294
7295   /* Now that the class is complete, instantiate default arguments for
7296      any member functions.  We don't do this earlier because the
7297      default arguments may reference members of the class.  */
7298   if (!PRIMARY_TEMPLATE_P (templ))
7299     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7300       if (TREE_CODE (t) == FUNCTION_DECL
7301           /* Implicitly generated member functions will not have template
7302              information; they are not instantiations, but instead are
7303              created "fresh" for each instantiation.  */
7304           && DECL_TEMPLATE_INFO (t))
7305         tsubst_default_arguments (t);
7306
7307   pop_nested_class ();
7308   pop_from_top_level ();
7309   pop_deferring_access_checks ();
7310   pop_tinst_level ();
7311
7312   /* The vtable for a template class can be emitted in any translation
7313      unit in which the class is instantiated.  When there is no key
7314      method, however, finish_struct_1 will already have added TYPE to
7315      the keyed_classes list.  */
7316   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7317     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7318
7319   return type;
7320 }
7321
7322 static tree
7323 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7324 {
7325   tree r;
7326
7327   if (!t)
7328     r = t;
7329   else if (TYPE_P (t))
7330     r = tsubst (t, args, complain, in_decl);
7331   else
7332     {
7333       r = tsubst_expr (t, args, complain, in_decl,
7334                        /*integral_constant_expression_p=*/true);
7335       r = fold_non_dependent_expr (r);
7336     }
7337   return r;
7338 }
7339
7340 /* Substitute ARGS into T, which is an pack expansion
7341    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7342    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7343    (if only a partial substitution could be performed) or
7344    ERROR_MARK_NODE if there was an error.  */
7345 tree
7346 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7347                        tree in_decl)
7348 {
7349   tree pattern;
7350   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7351   tree first_arg_pack; int i, len = -1;
7352   tree result;
7353   int incomplete = 0;
7354
7355   gcc_assert (PACK_EXPANSION_P (t));
7356   pattern = PACK_EXPANSION_PATTERN (t);
7357
7358   /* Determine the argument packs that will instantiate the parameter
7359      packs used in the expansion expression. While we're at it,
7360      compute the number of arguments to be expanded and make sure it
7361      is consistent.  */
7362   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7363        pack = TREE_CHAIN (pack))
7364     {
7365       tree parm_pack = TREE_VALUE (pack);
7366       tree arg_pack = NULL_TREE;
7367       tree orig_arg = NULL_TREE;
7368
7369       if (TREE_CODE (parm_pack) == PARM_DECL)
7370         arg_pack = retrieve_local_specialization (parm_pack);
7371       else
7372         {
7373           int level, idx, levels;
7374           template_parm_level_and_index (parm_pack, &level, &idx);
7375
7376           levels = TMPL_ARGS_DEPTH (args);
7377           if (level <= levels)
7378             arg_pack = TMPL_ARG (args, level, idx);
7379         }
7380
7381       orig_arg = arg_pack;
7382       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7383         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7384       
7385       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7386         /* This can only happen if we forget to expand an argument
7387            pack somewhere else. Just return an error, silently.  */
7388         {
7389           result = make_tree_vec (1);
7390           TREE_VEC_ELT (result, 0) = error_mark_node;
7391           return result;
7392         }
7393
7394       if (arg_pack
7395           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7396           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7397         {
7398           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7399           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7400           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7401               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7402             /* The argument pack that the parameter maps to is just an
7403                expansion of the parameter itself, such as one would
7404                find in the implicit typedef of a class inside the
7405                class itself.  Consider this parameter "unsubstituted",
7406                so that we will maintain the outer pack expansion.  */
7407             arg_pack = NULL_TREE;
7408         }
7409           
7410       if (arg_pack)
7411         {
7412           int my_len = 
7413             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7414
7415           /* It's all-or-nothing with incomplete argument packs.  */
7416           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7417             return error_mark_node;
7418           
7419           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7420             incomplete = 1;
7421
7422           if (len < 0)
7423             {
7424               len = my_len;
7425               first_arg_pack = arg_pack;
7426             }
7427           else if (len != my_len)
7428             {
7429               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7430                 error ("mismatched argument pack lengths while expanding "
7431                        "%<%T%>",
7432                        pattern);
7433               else
7434                 error ("mismatched argument pack lengths while expanding "
7435                        "%<%E%>",
7436                        pattern);
7437               return error_mark_node;
7438             }
7439
7440           /* Keep track of the parameter packs and their corresponding
7441              argument packs.  */
7442           packs = tree_cons (parm_pack, arg_pack, packs);
7443           TREE_TYPE (packs) = orig_arg;
7444         }
7445       else
7446         /* We can't substitute for this parameter pack.  */
7447         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7448                                          TREE_VALUE (pack),
7449                                          unsubstituted_packs);
7450     }
7451
7452   /* We cannot expand this expansion expression, because we don't have
7453      all of the argument packs we need. Substitute into the pattern
7454      and return a PACK_EXPANSION_*. The caller will need to deal with
7455      that.  */
7456   if (unsubstituted_packs)
7457     return make_pack_expansion (tsubst (pattern, args, complain, 
7458                                         in_decl));
7459
7460   /* We could not find any argument packs that work.  */
7461   if (len < 0)
7462     return error_mark_node;
7463
7464   /* For each argument in each argument pack, substitute into the
7465      pattern.  */
7466   result = make_tree_vec (len + incomplete);
7467   for (i = 0; i < len + incomplete; ++i)
7468     {
7469       /* For parameter pack, change the substitution of the parameter
7470          pack to the ith argument in its argument pack, then expand
7471          the pattern.  */
7472       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7473         {
7474           tree parm = TREE_PURPOSE (pack);
7475
7476           if (TREE_CODE (parm) == PARM_DECL)
7477             {
7478               /* Select the Ith argument from the pack.  */
7479               tree arg = make_node (ARGUMENT_PACK_SELECT);
7480               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7481               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7482               mark_used (parm);
7483               register_local_specialization (arg, parm);
7484             }
7485           else
7486             {
7487               tree value = parm;
7488               int idx, level;
7489               template_parm_level_and_index (parm, &level, &idx);
7490               
7491               if (i < len) 
7492                 {
7493                   /* Select the Ith argument from the pack. */
7494                   value = make_node (ARGUMENT_PACK_SELECT);
7495                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7496                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7497                 }
7498
7499               /* Update the corresponding argument.  */
7500               TMPL_ARG (args, level, idx) = value;
7501             }
7502         }
7503
7504       /* Substitute into the PATTERN with the altered arguments.  */
7505       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7506         TREE_VEC_ELT (result, i) = 
7507           tsubst_expr (pattern, args, complain, in_decl,
7508                        /*integral_constant_expression_p=*/false);
7509       else
7510         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7511
7512       if (i == len)
7513         /* When we have incomplete argument packs, the last "expanded"
7514            result is itself a pack expansion, which allows us
7515            to deduce more arguments.  */
7516         TREE_VEC_ELT (result, i) = 
7517           make_pack_expansion (TREE_VEC_ELT (result, i));
7518
7519       if (TREE_VEC_ELT (result, i) == error_mark_node)
7520         {
7521           result = error_mark_node;
7522           break;
7523         }
7524     }
7525   
7526   /* Update ARGS to restore the substitution from parameter packs to
7527      their argument packs.  */
7528   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7529     {
7530       tree parm = TREE_PURPOSE (pack);
7531
7532       if (TREE_CODE (parm) == PARM_DECL)
7533         register_local_specialization (TREE_TYPE (pack), parm);
7534       else
7535         {
7536           int idx, level;
7537           template_parm_level_and_index (parm, &level, &idx);
7538           
7539           /* Update the corresponding argument.  */
7540           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7541             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7542               TREE_TYPE (pack);
7543           else
7544             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7545         }
7546     }
7547
7548   return result;
7549 }
7550
7551 /* Substitute ARGS into the vector or list of template arguments T.  */
7552
7553 static tree
7554 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7555 {
7556   tree orig_t = t;
7557   int len = TREE_VEC_LENGTH (t);
7558   int need_new = 0, i, expanded_len_adjust = 0, out;
7559   tree *elts = (tree *) alloca (len * sizeof (tree));
7560
7561   for (i = 0; i < len; i++)
7562     {
7563       tree orig_arg = TREE_VEC_ELT (t, i);
7564       tree new_arg;
7565
7566       if (TREE_CODE (orig_arg) == TREE_VEC)
7567         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7568       else if (PACK_EXPANSION_P (orig_arg))
7569         {
7570           /* Substitute into an expansion expression.  */
7571           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7572
7573           if (TREE_CODE (new_arg) == TREE_VEC)
7574             /* Add to the expanded length adjustment the number of
7575                expanded arguments. We subtract one from this
7576                measurement, because the argument pack expression
7577                itself is already counted as 1 in
7578                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7579                the argument pack is empty.  */
7580             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7581         }
7582       else if (ARGUMENT_PACK_P (orig_arg))
7583         {
7584           /* Substitute into each of the arguments.  */
7585           new_arg = make_node (TREE_CODE (orig_arg));
7586           
7587           SET_ARGUMENT_PACK_ARGS (
7588             new_arg,
7589             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7590                                   args, complain, in_decl));
7591
7592           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7593             new_arg = error_mark_node;
7594
7595           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7596             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7597                                           complain, in_decl);
7598             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7599
7600             if (TREE_TYPE (new_arg) == error_mark_node)
7601               new_arg = error_mark_node;
7602           }
7603         }
7604       else
7605         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7606
7607       if (new_arg == error_mark_node)
7608         return error_mark_node;
7609
7610       elts[i] = new_arg;
7611       if (new_arg != orig_arg)
7612         need_new = 1;
7613     }
7614
7615   if (!need_new)
7616     return t;
7617
7618   /* Make space for the expanded arguments coming from template
7619      argument packs.  */
7620   t = make_tree_vec (len + expanded_len_adjust);
7621   for (i = 0, out = 0; i < len; i++)
7622     {
7623       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7624            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7625           && TREE_CODE (elts[i]) == TREE_VEC)
7626         {
7627           int idx;
7628
7629           /* Now expand the template argument pack "in place".  */
7630           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7631             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7632         }
7633       else
7634         {
7635           TREE_VEC_ELT (t, out) = elts[i];
7636           out++;
7637         }
7638     }
7639
7640   return t;
7641 }
7642
7643 /* Return the result of substituting ARGS into the template parameters
7644    given by PARMS.  If there are m levels of ARGS and m + n levels of
7645    PARMS, then the result will contain n levels of PARMS.  For
7646    example, if PARMS is `template <class T> template <class U>
7647    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7648    result will be `template <int*, double, class V>'.  */
7649
7650 static tree
7651 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7652 {
7653   tree r = NULL_TREE;
7654   tree* new_parms;
7655
7656   /* When substituting into a template, we must set
7657      PROCESSING_TEMPLATE_DECL as the template parameters may be
7658      dependent if they are based on one-another, and the dependency
7659      predicates are short-circuit outside of templates.  */
7660   ++processing_template_decl;
7661
7662   for (new_parms = &r;
7663        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7664        new_parms = &(TREE_CHAIN (*new_parms)),
7665          parms = TREE_CHAIN (parms))
7666     {
7667       tree new_vec =
7668         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7669       int i;
7670
7671       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7672         {
7673           tree tuple;
7674           tree default_value;
7675           tree parm_decl;
7676
7677           if (parms == error_mark_node)
7678             continue;
7679
7680           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7681
7682           if (tuple == error_mark_node)
7683             continue;
7684
7685           default_value = TREE_PURPOSE (tuple);
7686           parm_decl = TREE_VALUE (tuple);
7687
7688           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7689           if (TREE_CODE (parm_decl) == PARM_DECL
7690               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7691             parm_decl = error_mark_node;
7692           default_value = tsubst_template_arg (default_value, args,
7693                                                complain, NULL_TREE);
7694
7695           tuple = build_tree_list (default_value, parm_decl);
7696           TREE_VEC_ELT (new_vec, i) = tuple;
7697         }
7698
7699       *new_parms =
7700         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7701                              - TMPL_ARGS_DEPTH (args)),
7702                    new_vec, NULL_TREE);
7703     }
7704
7705   --processing_template_decl;
7706
7707   return r;
7708 }
7709
7710 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7711    type T.  If T is not an aggregate or enumeration type, it is
7712    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7713    ENTERING_SCOPE is nonzero, T is the context for a template which
7714    we are presently tsubst'ing.  Return the substituted value.  */
7715
7716 static tree
7717 tsubst_aggr_type (tree t,
7718                   tree args,
7719                   tsubst_flags_t complain,
7720                   tree in_decl,
7721                   int entering_scope)
7722 {
7723   if (t == NULL_TREE)
7724     return NULL_TREE;
7725
7726   switch (TREE_CODE (t))
7727     {
7728     case RECORD_TYPE:
7729       if (TYPE_PTRMEMFUNC_P (t))
7730         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7731
7732       /* Else fall through.  */
7733     case ENUMERAL_TYPE:
7734     case UNION_TYPE:
7735       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7736         {
7737           tree argvec;
7738           tree context;
7739           tree r;
7740           bool saved_skip_evaluation;
7741
7742           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7743           saved_skip_evaluation = skip_evaluation;
7744           skip_evaluation = false;
7745
7746           /* First, determine the context for the type we are looking
7747              up.  */
7748           context = TYPE_CONTEXT (t);
7749           if (context)
7750             {
7751               context = tsubst_aggr_type (context, args, complain,
7752                                           in_decl, /*entering_scope=*/1);
7753               /* If context is a nested class inside a class template,
7754                  it may still need to be instantiated (c++/33959).  */
7755               if (TYPE_P (context))
7756                 context = complete_type (context);
7757             }
7758
7759           /* Then, figure out what arguments are appropriate for the
7760              type we are trying to find.  For example, given:
7761
7762                template <class T> struct S;
7763                template <class T, class U> void f(T, U) { S<U> su; }
7764
7765              and supposing that we are instantiating f<int, double>,
7766              then our ARGS will be {int, double}, but, when looking up
7767              S we only want {double}.  */
7768           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7769                                          complain, in_decl);
7770           if (argvec == error_mark_node)
7771             r = error_mark_node;
7772           else
7773             {
7774               r = lookup_template_class (t, argvec, in_decl, context,
7775                                          entering_scope, complain);
7776               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7777             }
7778
7779           skip_evaluation = saved_skip_evaluation;
7780
7781           return r;
7782         }
7783       else
7784         /* This is not a template type, so there's nothing to do.  */
7785         return t;
7786
7787     default:
7788       return tsubst (t, args, complain, in_decl);
7789     }
7790 }
7791
7792 /* Substitute into the default argument ARG (a default argument for
7793    FN), which has the indicated TYPE.  */
7794
7795 tree
7796 tsubst_default_argument (tree fn, tree type, tree arg)
7797 {
7798   tree saved_class_ptr = NULL_TREE;
7799   tree saved_class_ref = NULL_TREE;
7800
7801   /* This default argument came from a template.  Instantiate the
7802      default argument here, not in tsubst.  In the case of
7803      something like:
7804
7805        template <class T>
7806        struct S {
7807          static T t();
7808          void f(T = t());
7809        };
7810
7811      we must be careful to do name lookup in the scope of S<T>,
7812      rather than in the current class.  */
7813   push_access_scope (fn);
7814   /* The "this" pointer is not valid in a default argument.  */
7815   if (cfun)
7816     {
7817       saved_class_ptr = current_class_ptr;
7818       cp_function_chain->x_current_class_ptr = NULL_TREE;
7819       saved_class_ref = current_class_ref;
7820       cp_function_chain->x_current_class_ref = NULL_TREE;
7821     }
7822
7823   push_deferring_access_checks(dk_no_deferred);
7824   /* The default argument expression may cause implicitly defined
7825      member functions to be synthesized, which will result in garbage
7826      collection.  We must treat this situation as if we were within
7827      the body of function so as to avoid collecting live data on the
7828      stack.  */
7829   ++function_depth;
7830   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7831                      tf_warning_or_error, NULL_TREE,
7832                      /*integral_constant_expression_p=*/false);
7833   --function_depth;
7834   pop_deferring_access_checks();
7835
7836   /* Restore the "this" pointer.  */
7837   if (cfun)
7838     {
7839       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7840       cp_function_chain->x_current_class_ref = saved_class_ref;
7841     }
7842
7843   pop_access_scope (fn);
7844
7845   /* Make sure the default argument is reasonable.  */
7846   arg = check_default_argument (type, arg);
7847
7848   return arg;
7849 }
7850
7851 /* Substitute into all the default arguments for FN.  */
7852
7853 static void
7854 tsubst_default_arguments (tree fn)
7855 {
7856   tree arg;
7857   tree tmpl_args;
7858
7859   tmpl_args = DECL_TI_ARGS (fn);
7860
7861   /* If this function is not yet instantiated, we certainly don't need
7862      its default arguments.  */
7863   if (uses_template_parms (tmpl_args))
7864     return;
7865
7866   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7867        arg;
7868        arg = TREE_CHAIN (arg))
7869     if (TREE_PURPOSE (arg))
7870       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7871                                                     TREE_VALUE (arg),
7872                                                     TREE_PURPOSE (arg));
7873 }
7874
7875 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7876    result of the substitution.  Issue error and warning messages under
7877    control of COMPLAIN.  */
7878
7879 static tree
7880 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7881 {
7882   location_t saved_loc;
7883   tree r = NULL_TREE;
7884   tree in_decl = t;
7885
7886   /* Set the filename and linenumber to improve error-reporting.  */
7887   saved_loc = input_location;
7888   input_location = DECL_SOURCE_LOCATION (t);
7889
7890   switch (TREE_CODE (t))
7891     {
7892     case TEMPLATE_DECL:
7893       {
7894         /* We can get here when processing a member function template,
7895            member class template, and template template parameter of
7896            a template class.  */
7897         tree decl = DECL_TEMPLATE_RESULT (t);
7898         tree spec;
7899         tree tmpl_args;
7900         tree full_args;
7901
7902         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7903           {
7904             /* Template template parameter is treated here.  */
7905             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7906             if (new_type == error_mark_node)
7907               return error_mark_node;
7908
7909             r = copy_decl (t);
7910             TREE_CHAIN (r) = NULL_TREE;
7911             TREE_TYPE (r) = new_type;
7912             DECL_TEMPLATE_RESULT (r)
7913               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7914             DECL_TEMPLATE_PARMS (r)
7915               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7916                                        complain);
7917             TYPE_NAME (new_type) = r;
7918             break;
7919           }
7920
7921         /* We might already have an instance of this template.
7922            The ARGS are for the surrounding class type, so the
7923            full args contain the tsubst'd args for the context,
7924            plus the innermost args from the template decl.  */
7925         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7926           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7927           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7928         /* Because this is a template, the arguments will still be
7929            dependent, even after substitution.  If
7930            PROCESSING_TEMPLATE_DECL is not set, the dependency
7931            predicates will short-circuit.  */
7932         ++processing_template_decl;
7933         full_args = tsubst_template_args (tmpl_args, args,
7934                                           complain, in_decl);
7935         --processing_template_decl;
7936         if (full_args == error_mark_node)
7937           return error_mark_node;
7938
7939         /* tsubst_template_args doesn't copy the vector if
7940            nothing changed.  But, *something* should have
7941            changed.  */
7942         gcc_assert (full_args != tmpl_args);
7943
7944         spec = retrieve_specialization (t, full_args,
7945                                         /*class_specializations_p=*/true);
7946         if (spec != NULL_TREE)
7947           {
7948             r = spec;
7949             break;
7950           }
7951
7952         /* Make a new template decl.  It will be similar to the
7953            original, but will record the current template arguments.
7954            We also create a new function declaration, which is just
7955            like the old one, but points to this new template, rather
7956            than the old one.  */
7957         r = copy_decl (t);
7958         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7959         TREE_CHAIN (r) = NULL_TREE;
7960
7961         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7962
7963         if (TREE_CODE (decl) == TYPE_DECL)
7964           {
7965             tree new_type;
7966             ++processing_template_decl;
7967             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7968             --processing_template_decl;
7969             if (new_type == error_mark_node)
7970               return error_mark_node;
7971
7972             TREE_TYPE (r) = new_type;
7973             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7974             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7975             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7976             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7977           }
7978         else
7979           {
7980             tree new_decl;
7981             ++processing_template_decl;
7982             new_decl = tsubst (decl, args, complain, in_decl);
7983             --processing_template_decl;
7984             if (new_decl == error_mark_node)
7985               return error_mark_node;
7986
7987             DECL_TEMPLATE_RESULT (r) = new_decl;
7988             DECL_TI_TEMPLATE (new_decl) = r;
7989             TREE_TYPE (r) = TREE_TYPE (new_decl);
7990             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7991             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7992           }
7993
7994         SET_DECL_IMPLICIT_INSTANTIATION (r);
7995         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7996         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7997
7998         /* The template parameters for this new template are all the
7999            template parameters for the old template, except the
8000            outermost level of parameters.  */
8001         DECL_TEMPLATE_PARMS (r)
8002           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8003                                    complain);
8004
8005         if (PRIMARY_TEMPLATE_P (t))
8006           DECL_PRIMARY_TEMPLATE (r) = r;
8007
8008         if (TREE_CODE (decl) != TYPE_DECL)
8009           /* Record this non-type partial instantiation.  */
8010           register_specialization (r, t,
8011                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8012                                    false);
8013       }
8014       break;
8015
8016     case FUNCTION_DECL:
8017       {
8018         tree ctx;
8019         tree argvec = NULL_TREE;
8020         tree *friends;
8021         tree gen_tmpl;
8022         tree type;
8023         int member;
8024         int args_depth;
8025         int parms_depth;
8026
8027         /* Nobody should be tsubst'ing into non-template functions.  */
8028         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8029
8030         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8031           {
8032             tree spec;
8033             bool dependent_p;
8034
8035             /* If T is not dependent, just return it.  We have to
8036                increment PROCESSING_TEMPLATE_DECL because
8037                value_dependent_expression_p assumes that nothing is
8038                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8039             ++processing_template_decl;
8040             dependent_p = value_dependent_expression_p (t);
8041             --processing_template_decl;
8042             if (!dependent_p)
8043               return t;
8044
8045             /* Calculate the most general template of which R is a
8046                specialization, and the complete set of arguments used to
8047                specialize R.  */
8048             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8049             argvec = tsubst_template_args (DECL_TI_ARGS
8050                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8051                                            args, complain, in_decl);
8052
8053             /* Check to see if we already have this specialization.  */
8054             spec = retrieve_specialization (gen_tmpl, argvec,
8055                                             /*class_specializations_p=*/false);
8056
8057             if (spec)
8058               {
8059                 r = spec;
8060                 break;
8061               }
8062
8063             /* We can see more levels of arguments than parameters if
8064                there was a specialization of a member template, like
8065                this:
8066
8067                  template <class T> struct S { template <class U> void f(); }
8068                  template <> template <class U> void S<int>::f(U);
8069
8070                Here, we'll be substituting into the specialization,
8071                because that's where we can find the code we actually
8072                want to generate, but we'll have enough arguments for
8073                the most general template.
8074
8075                We also deal with the peculiar case:
8076
8077                  template <class T> struct S {
8078                    template <class U> friend void f();
8079                  };
8080                  template <class U> void f() {}
8081                  template S<int>;
8082                  template void f<double>();
8083
8084                Here, the ARGS for the instantiation of will be {int,
8085                double}.  But, we only need as many ARGS as there are
8086                levels of template parameters in CODE_PATTERN.  We are
8087                careful not to get fooled into reducing the ARGS in
8088                situations like:
8089
8090                  template <class T> struct S { template <class U> void f(U); }
8091                  template <class T> template <> void S<T>::f(int) {}
8092
8093                which we can spot because the pattern will be a
8094                specialization in this case.  */
8095             args_depth = TMPL_ARGS_DEPTH (args);
8096             parms_depth =
8097               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8098             if (args_depth > parms_depth
8099                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8100               args = get_innermost_template_args (args, parms_depth);
8101           }
8102         else
8103           {
8104             /* This special case arises when we have something like this:
8105
8106                  template <class T> struct S {
8107                    friend void f<int>(int, double);
8108                  };
8109
8110                Here, the DECL_TI_TEMPLATE for the friend declaration
8111                will be an IDENTIFIER_NODE.  We are being called from
8112                tsubst_friend_function, and we want only to create a
8113                new decl (R) with appropriate types so that we can call
8114                determine_specialization.  */
8115             gen_tmpl = NULL_TREE;
8116           }
8117
8118         if (DECL_CLASS_SCOPE_P (t))
8119           {
8120             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8121               member = 2;
8122             else
8123               member = 1;
8124             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8125                                     complain, t, /*entering_scope=*/1);
8126           }
8127         else
8128           {
8129             member = 0;
8130             ctx = DECL_CONTEXT (t);
8131           }
8132         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8133         if (type == error_mark_node)
8134           return error_mark_node;
8135
8136         /* We do NOT check for matching decls pushed separately at this
8137            point, as they may not represent instantiations of this
8138            template, and in any case are considered separate under the
8139            discrete model.  */
8140         r = copy_decl (t);
8141         DECL_USE_TEMPLATE (r) = 0;
8142         TREE_TYPE (r) = type;
8143         /* Clear out the mangled name and RTL for the instantiation.  */
8144         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8145         SET_DECL_RTL (r, NULL_RTX);
8146         DECL_INITIAL (r) = NULL_TREE;
8147         DECL_CONTEXT (r) = ctx;
8148
8149         if (member && DECL_CONV_FN_P (r))
8150           /* Type-conversion operator.  Reconstruct the name, in
8151              case it's the name of one of the template's parameters.  */
8152           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8153
8154         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8155                                      complain, t);
8156         DECL_RESULT (r) = NULL_TREE;
8157
8158         TREE_STATIC (r) = 0;
8159         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8160         DECL_EXTERNAL (r) = 1;
8161         /* If this is an instantiation of a function with internal
8162            linkage, we already know what object file linkage will be
8163            assigned to the instantiation.  */
8164         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8165         DECL_DEFER_OUTPUT (r) = 0;
8166         TREE_CHAIN (r) = NULL_TREE;
8167         DECL_PENDING_INLINE_INFO (r) = 0;
8168         DECL_PENDING_INLINE_P (r) = 0;
8169         DECL_SAVED_TREE (r) = NULL_TREE;
8170         TREE_USED (r) = 0;
8171         if (DECL_CLONED_FUNCTION (r))
8172           {
8173             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8174                                                args, complain, t);
8175             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8176             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8177           }
8178
8179         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8180            this in the special friend case mentioned above where
8181            GEN_TMPL is NULL.  */
8182         if (gen_tmpl)
8183           {
8184             DECL_TEMPLATE_INFO (r)
8185               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8186             SET_DECL_IMPLICIT_INSTANTIATION (r);
8187             register_specialization (r, gen_tmpl, argvec, false);
8188
8189             /* We're not supposed to instantiate default arguments
8190                until they are called, for a template.  But, for a
8191                declaration like:
8192
8193                  template <class T> void f ()
8194                  { extern void g(int i = T()); }
8195
8196                we should do the substitution when the template is
8197                instantiated.  We handle the member function case in
8198                instantiate_class_template since the default arguments
8199                might refer to other members of the class.  */
8200             if (!member
8201                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8202                 && !uses_template_parms (argvec))
8203               tsubst_default_arguments (r);
8204           }
8205         else
8206           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8207
8208         /* Copy the list of befriending classes.  */
8209         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8210              *friends;
8211              friends = &TREE_CHAIN (*friends))
8212           {
8213             *friends = copy_node (*friends);
8214             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8215                                             args, complain,
8216                                             in_decl);
8217           }
8218
8219         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8220           {
8221             maybe_retrofit_in_chrg (r);
8222             if (DECL_CONSTRUCTOR_P (r))
8223               grok_ctor_properties (ctx, r);
8224             /* If this is an instantiation of a member template, clone it.
8225                If it isn't, that'll be handled by
8226                clone_constructors_and_destructors.  */
8227             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8228               clone_function_decl (r, /*update_method_vec_p=*/0);
8229           }
8230         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8231                  && !grok_op_properties (r, (complain & tf_error) != 0))
8232           return error_mark_node;
8233
8234         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8235           SET_DECL_FRIEND_CONTEXT (r,
8236                                    tsubst (DECL_FRIEND_CONTEXT (t),
8237                                             args, complain, in_decl));
8238
8239         /* Possibly limit visibility based on template args.  */
8240         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8241         if (DECL_VISIBILITY_SPECIFIED (t))
8242           {
8243             DECL_VISIBILITY_SPECIFIED (r) = 0;
8244             DECL_ATTRIBUTES (r)
8245               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8246           }
8247         determine_visibility (r);
8248
8249         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8250                                         args, complain, in_decl);
8251       }
8252       break;
8253
8254     case PARM_DECL:
8255       {
8256         tree type = NULL_TREE;
8257         int i, len = 1;
8258         tree expanded_types = NULL_TREE;
8259         tree prev_r = NULL_TREE;
8260         tree first_r = NULL_TREE;
8261
8262         if (FUNCTION_PARAMETER_PACK_P (t))
8263           {
8264             /* If there is a local specialization that isn't a
8265                parameter pack, it means that we're doing a "simple"
8266                substitution from inside tsubst_pack_expansion. Just
8267                return the local specialization (which will be a single
8268                parm).  */
8269             tree spec = retrieve_local_specialization (t);
8270             if (spec 
8271                 && TREE_CODE (spec) == PARM_DECL
8272                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8273               return spec;
8274
8275             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8276                the parameters in this function parameter pack.  */
8277             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8278                                                     complain, in_decl);
8279             if (TREE_CODE (expanded_types) == TREE_VEC)
8280               {
8281                 len = TREE_VEC_LENGTH (expanded_types);
8282
8283                 /* Zero-length parameter packs are boring. Just substitute
8284                    into the chain.  */
8285                 if (len == 0)
8286                   return tsubst (TREE_CHAIN (t), args, complain, 
8287                                  TREE_CHAIN (t));
8288               }
8289             else
8290               {
8291                 /* All we did was update the type. Make a note of that.  */
8292                 type = expanded_types;
8293                 expanded_types = NULL_TREE;
8294               }
8295           }
8296
8297         /* Loop through all of the parameter's we'll build. When T is
8298            a function parameter pack, LEN is the number of expanded
8299            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8300         r = NULL_TREE;
8301         for (i = 0; i < len; ++i)
8302           {
8303             prev_r = r;
8304             r = copy_node (t);
8305             if (DECL_TEMPLATE_PARM_P (t))
8306               SET_DECL_TEMPLATE_PARM_P (r);
8307
8308             if (expanded_types)
8309               /* We're on the Ith parameter of the function parameter
8310                  pack.  */
8311               {
8312                 /* Get the Ith type.  */
8313                 type = TREE_VEC_ELT (expanded_types, i);
8314
8315                 if (DECL_NAME (r))
8316                   /* Rename the parameter to include the index.  */
8317                   DECL_NAME (r) =
8318                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8319               }
8320             else if (!type)
8321               /* We're dealing with a normal parameter.  */
8322               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8323
8324             type = type_decays_to (type);
8325             TREE_TYPE (r) = type;
8326             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8327
8328             if (DECL_INITIAL (r))
8329               {
8330                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8331                   DECL_INITIAL (r) = TREE_TYPE (r);
8332                 else
8333                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8334                                              complain, in_decl);
8335               }
8336
8337             DECL_CONTEXT (r) = NULL_TREE;
8338
8339             if (!DECL_TEMPLATE_PARM_P (r))
8340               DECL_ARG_TYPE (r) = type_passed_as (type);
8341
8342             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8343                                             args, complain, in_decl);
8344
8345             /* Keep track of the first new parameter we
8346                generate. That's what will be returned to the
8347                caller.  */
8348             if (!first_r)
8349               first_r = r;
8350
8351             /* Build a proper chain of parameters when substituting
8352                into a function parameter pack.  */
8353             if (prev_r)
8354               TREE_CHAIN (prev_r) = r;
8355           }
8356
8357         if (TREE_CHAIN (t))
8358           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8359                                    complain, TREE_CHAIN (t));
8360
8361         /* FIRST_R contains the start of the chain we've built.  */
8362         r = first_r;
8363       }
8364       break;
8365
8366     case FIELD_DECL:
8367       {
8368         tree type;
8369
8370         r = copy_decl (t);
8371         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8372         if (type == error_mark_node)
8373           return error_mark_node;
8374         TREE_TYPE (r) = type;
8375         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8376
8377         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8378         DECL_INITIAL (r)
8379           = tsubst_expr (DECL_INITIAL (t), args,
8380                          complain, in_decl,
8381                          /*integral_constant_expression_p=*/true);
8382         /* We don't have to set DECL_CONTEXT here; it is set by
8383            finish_member_declaration.  */
8384         TREE_CHAIN (r) = NULL_TREE;
8385         if (VOID_TYPE_P (type))
8386           error ("instantiation of %q+D as type %qT", r, type);
8387
8388         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8389                                         args, complain, in_decl);
8390       }
8391       break;
8392
8393     case USING_DECL:
8394       /* We reach here only for member using decls.  */
8395       if (DECL_DEPENDENT_P (t))
8396         {
8397           r = do_class_using_decl
8398             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8399              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8400           if (!r)
8401             r = error_mark_node;
8402         }
8403       else
8404         {
8405           r = copy_node (t);
8406           TREE_CHAIN (r) = NULL_TREE;
8407         }
8408       break;
8409
8410     case TYPE_DECL:
8411     case VAR_DECL:
8412       {
8413         tree argvec = NULL_TREE;
8414         tree gen_tmpl = NULL_TREE;
8415         tree spec;
8416         tree tmpl = NULL_TREE;
8417         tree ctx;
8418         tree type = NULL_TREE;
8419         bool local_p;
8420
8421         if (TREE_CODE (t) == TYPE_DECL
8422             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8423           {
8424             /* If this is the canonical decl, we don't have to
8425                mess with instantiations, and often we can't (for
8426                typename, template type parms and such).  Note that
8427                TYPE_NAME is not correct for the above test if
8428                we've copied the type for a typedef.  */
8429             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8430             if (type == error_mark_node)
8431               return error_mark_node;
8432             r = TYPE_NAME (type);
8433             break;
8434           }
8435
8436         /* Check to see if we already have the specialization we
8437            need.  */
8438         spec = NULL_TREE;
8439         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8440           {
8441             /* T is a static data member or namespace-scope entity.
8442                We have to substitute into namespace-scope variables
8443                (even though such entities are never templates) because
8444                of cases like:
8445                
8446                  template <class T> void f() { extern T t; }
8447
8448                where the entity referenced is not known until
8449                instantiation time.  */
8450             local_p = false;
8451             ctx = DECL_CONTEXT (t);
8452             if (DECL_CLASS_SCOPE_P (t))
8453               {
8454                 ctx = tsubst_aggr_type (ctx, args,
8455                                         complain,
8456                                         in_decl, /*entering_scope=*/1);
8457                 /* If CTX is unchanged, then T is in fact the
8458                    specialization we want.  That situation occurs when
8459                    referencing a static data member within in its own
8460                    class.  We can use pointer equality, rather than
8461                    same_type_p, because DECL_CONTEXT is always
8462                    canonical.  */
8463                 if (ctx == DECL_CONTEXT (t))
8464                   spec = t;
8465               }
8466
8467             if (!spec)
8468               {
8469                 tmpl = DECL_TI_TEMPLATE (t);
8470                 gen_tmpl = most_general_template (tmpl);
8471                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8472                 spec = (retrieve_specialization 
8473                         (gen_tmpl, argvec,
8474                          /*class_specializations_p=*/false));
8475               }
8476           }
8477         else
8478           {
8479             /* A local variable.  */
8480             local_p = true;
8481             /* Subsequent calls to pushdecl will fill this in.  */
8482             ctx = NULL_TREE;
8483             spec = retrieve_local_specialization (t);
8484           }
8485         /* If we already have the specialization we need, there is
8486            nothing more to do.  */ 
8487         if (spec)
8488           {
8489             r = spec;
8490             break;
8491           }
8492
8493         /* Create a new node for the specialization we need.  */
8494         r = copy_decl (t);
8495         if (type == NULL_TREE)
8496           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8497         if (TREE_CODE (r) == VAR_DECL)
8498           {
8499             /* Even if the original location is out of scope, the
8500                newly substituted one is not.  */
8501             DECL_DEAD_FOR_LOCAL (r) = 0;
8502             DECL_INITIALIZED_P (r) = 0;
8503             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8504             if (type == error_mark_node)
8505               return error_mark_node;
8506             if (TREE_CODE (type) == FUNCTION_TYPE)
8507               {
8508                 /* It may seem that this case cannot occur, since:
8509
8510                      typedef void f();
8511                      void g() { f x; }
8512
8513                    declares a function, not a variable.  However:
8514       
8515                      typedef void f();
8516                      template <typename T> void g() { T t; }
8517                      template void g<f>();
8518
8519                    is an attempt to declare a variable with function
8520                    type.  */
8521                 error ("variable %qD has function type",
8522                        /* R is not yet sufficiently initialized, so we
8523                           just use its name.  */
8524                        DECL_NAME (r));
8525                 return error_mark_node;
8526               }
8527             type = complete_type (type);
8528             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8529               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8530             type = check_var_type (DECL_NAME (r), type);
8531
8532             if (DECL_HAS_VALUE_EXPR_P (t))
8533               {
8534                 tree ve = DECL_VALUE_EXPR (t);
8535                 ve = tsubst_expr (ve, args, complain, in_decl,
8536                                   /*constant_expression_p=*/false);
8537                 SET_DECL_VALUE_EXPR (r, ve);
8538               }
8539           }
8540         else if (DECL_SELF_REFERENCE_P (t))
8541           SET_DECL_SELF_REFERENCE_P (r);
8542         TREE_TYPE (r) = type;
8543         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8544         DECL_CONTEXT (r) = ctx;
8545         /* Clear out the mangled name and RTL for the instantiation.  */
8546         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8547         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8548           SET_DECL_RTL (r, NULL_RTX);
8549         /* The initializer must not be expanded until it is required;
8550            see [temp.inst].  */
8551         DECL_INITIAL (r) = NULL_TREE;
8552         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8553           SET_DECL_RTL (r, NULL_RTX);
8554         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8555         if (TREE_CODE (r) == VAR_DECL)
8556           {
8557             /* Possibly limit visibility based on template args.  */
8558             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8559             if (DECL_VISIBILITY_SPECIFIED (t))
8560               {
8561                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8562                 DECL_ATTRIBUTES (r)
8563                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8564               }
8565             determine_visibility (r);
8566           }
8567         /* Preserve a typedef that names a type.  */
8568         else if (TREE_CODE (r) == TYPE_DECL
8569                  && DECL_ORIGINAL_TYPE (t)
8570                  && type != error_mark_node)
8571           {
8572             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8573                                              args, complain, in_decl);
8574             TREE_TYPE (r) = type = build_variant_type_copy (type);
8575             TYPE_NAME (type) = r;
8576           }
8577
8578         if (!local_p)
8579           {
8580             /* A static data member declaration is always marked
8581                external when it is declared in-class, even if an
8582                initializer is present.  We mimic the non-template
8583                processing here.  */
8584             DECL_EXTERNAL (r) = 1;
8585
8586             register_specialization (r, gen_tmpl, argvec, false);
8587             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8588             SET_DECL_IMPLICIT_INSTANTIATION (r);
8589           }
8590         else
8591           register_local_specialization (r, t);
8592
8593         TREE_CHAIN (r) = NULL_TREE;
8594
8595         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8596                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8597                                         args, complain, in_decl);
8598         layout_decl (r, 0);
8599       }
8600       break;
8601
8602     default:
8603       gcc_unreachable ();
8604     }
8605
8606   /* Restore the file and line information.  */
8607   input_location = saved_loc;
8608
8609   return r;
8610 }
8611
8612 /* Substitute into the ARG_TYPES of a function type.  */
8613
8614 static tree
8615 tsubst_arg_types (tree arg_types,
8616                   tree args,
8617                   tsubst_flags_t complain,
8618                   tree in_decl)
8619 {
8620   tree remaining_arg_types;
8621   tree type = NULL_TREE;
8622   int i = 1;
8623   tree expanded_args = NULL_TREE;
8624   tree default_arg;
8625
8626   if (!arg_types || arg_types == void_list_node)
8627     return arg_types;
8628
8629   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8630                                           args, complain, in_decl);
8631   if (remaining_arg_types == error_mark_node)
8632     return error_mark_node;
8633
8634   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8635     {
8636       /* For a pack expansion, perform substitution on the
8637          entire expression. Later on, we'll handle the arguments
8638          one-by-one.  */
8639       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8640                                             args, complain, in_decl);
8641
8642       if (TREE_CODE (expanded_args) == TREE_VEC)
8643         /* So that we'll spin through the parameters, one by one.  */
8644         i = TREE_VEC_LENGTH (expanded_args);
8645       else
8646         {
8647           /* We only partially substituted into the parameter
8648              pack. Our type is TYPE_PACK_EXPANSION.  */
8649           type = expanded_args;
8650           expanded_args = NULL_TREE;
8651         }
8652     }
8653
8654   while (i > 0) {
8655     --i;
8656     
8657     if (expanded_args)
8658       type = TREE_VEC_ELT (expanded_args, i);
8659     else if (!type)
8660       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8661
8662     if (type == error_mark_node)
8663       return error_mark_node;
8664     if (VOID_TYPE_P (type))
8665       {
8666         if (complain & tf_error)
8667           {
8668             error ("invalid parameter type %qT", type);
8669             if (in_decl)
8670               error ("in declaration %q+D", in_decl);
8671           }
8672         return error_mark_node;
8673     }
8674     
8675     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8676        top-level qualifiers as required.  */
8677     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8678
8679     /* We do not substitute into default arguments here.  The standard
8680        mandates that they be instantiated only when needed, which is
8681        done in build_over_call.  */
8682     default_arg = TREE_PURPOSE (arg_types);
8683
8684     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8685       {
8686         /* We've instantiated a template before its default arguments
8687            have been parsed.  This can happen for a nested template
8688            class, and is not an error unless we require the default
8689            argument in a call of this function.  */
8690         remaining_arg_types = 
8691           tree_cons (default_arg, type, remaining_arg_types);
8692         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8693                        remaining_arg_types);
8694       }
8695     else
8696       remaining_arg_types = 
8697         hash_tree_cons (default_arg, type, remaining_arg_types);
8698   }
8699         
8700   return remaining_arg_types;
8701 }
8702
8703 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8704    *not* handle the exception-specification for FNTYPE, because the
8705    initial substitution of explicitly provided template parameters
8706    during argument deduction forbids substitution into the
8707    exception-specification:
8708
8709      [temp.deduct]
8710
8711      All references in the function type of the function template to  the
8712      corresponding template parameters are replaced by the specified tem-
8713      plate argument values.  If a substitution in a template parameter or
8714      in  the function type of the function template results in an invalid
8715      type, type deduction fails.  [Note: The equivalent  substitution  in
8716      exception specifications is done only when the function is instanti-
8717      ated, at which point a program is  ill-formed  if  the  substitution
8718      results in an invalid type.]  */
8719
8720 static tree
8721 tsubst_function_type (tree t,
8722                       tree args,
8723                       tsubst_flags_t complain,
8724                       tree in_decl)
8725 {
8726   tree return_type;
8727   tree arg_types;
8728   tree fntype;
8729
8730   /* The TYPE_CONTEXT is not used for function/method types.  */
8731   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8732
8733   /* Substitute the return type.  */
8734   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8735   if (return_type == error_mark_node)
8736     return error_mark_node;
8737   /* The standard does not presently indicate that creation of a
8738      function type with an invalid return type is a deduction failure.
8739      However, that is clearly analogous to creating an array of "void"
8740      or a reference to a reference.  This is core issue #486.  */
8741   if (TREE_CODE (return_type) == ARRAY_TYPE
8742       || TREE_CODE (return_type) == FUNCTION_TYPE)
8743     {
8744       if (complain & tf_error)
8745         {
8746           if (TREE_CODE (return_type) == ARRAY_TYPE)
8747             error ("function returning an array");
8748           else
8749             error ("function returning a function");
8750         }
8751       return error_mark_node;
8752     }
8753
8754   /* Substitute the argument types.  */
8755   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8756                                 complain, in_decl);
8757   if (arg_types == error_mark_node)
8758     return error_mark_node;
8759
8760   /* Construct a new type node and return it.  */
8761   if (TREE_CODE (t) == FUNCTION_TYPE)
8762     fntype = build_function_type (return_type, arg_types);
8763   else
8764     {
8765       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8766       if (! MAYBE_CLASS_TYPE_P (r))
8767         {
8768           /* [temp.deduct]
8769
8770              Type deduction may fail for any of the following
8771              reasons:
8772
8773              -- Attempting to create "pointer to member of T" when T
8774              is not a class type.  */
8775           if (complain & tf_error)
8776             error ("creating pointer to member function of non-class type %qT",
8777                       r);
8778           return error_mark_node;
8779         }
8780
8781       fntype = build_method_type_directly (r, return_type,
8782                                            TREE_CHAIN (arg_types));
8783     }
8784   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8785   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8786
8787   return fntype;
8788 }
8789
8790 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8791    ARGS into that specification, and return the substituted
8792    specification.  If there is no specification, return NULL_TREE.  */
8793
8794 static tree
8795 tsubst_exception_specification (tree fntype,
8796                                 tree args,
8797                                 tsubst_flags_t complain,
8798                                 tree in_decl)
8799 {
8800   tree specs;
8801   tree new_specs;
8802
8803   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8804   new_specs = NULL_TREE;
8805   if (specs)
8806     {
8807       if (! TREE_VALUE (specs))
8808         new_specs = specs;
8809       else
8810         while (specs)
8811           {
8812             tree spec;
8813             int i, len = 1;
8814             tree expanded_specs = NULL_TREE;
8815
8816             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8817               {
8818                 /* Expand the pack expansion type.  */
8819                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8820                                                        args, complain,
8821                                                        in_decl);
8822
8823                 if (expanded_specs == error_mark_node)
8824                   return error_mark_node;
8825                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8826                   len = TREE_VEC_LENGTH (expanded_specs);
8827                 else
8828                   {
8829                     /* We're substituting into a member template, so
8830                        we got a TYPE_PACK_EXPANSION back.  Add that
8831                        expansion and move on.  */
8832                     gcc_assert (TREE_CODE (expanded_specs) 
8833                                 == TYPE_PACK_EXPANSION);
8834                     new_specs = add_exception_specifier (new_specs,
8835                                                          expanded_specs,
8836                                                          complain);
8837                     specs = TREE_CHAIN (specs);
8838                     continue;
8839                   }
8840               }
8841
8842             for (i = 0; i < len; ++i)
8843               {
8844                 if (expanded_specs)
8845                   spec = TREE_VEC_ELT (expanded_specs, i);
8846                 else
8847                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8848                 if (spec == error_mark_node)
8849                   return spec;
8850                 new_specs = add_exception_specifier (new_specs, spec, 
8851                                                      complain);
8852               }
8853
8854             specs = TREE_CHAIN (specs);
8855           }
8856     }
8857   return new_specs;
8858 }
8859
8860 /* Take the tree structure T and replace template parameters used
8861    therein with the argument vector ARGS.  IN_DECL is an associated
8862    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8863    Issue error and warning messages under control of COMPLAIN.  Note
8864    that we must be relatively non-tolerant of extensions here, in
8865    order to preserve conformance; if we allow substitutions that
8866    should not be allowed, we may allow argument deductions that should
8867    not succeed, and therefore report ambiguous overload situations
8868    where there are none.  In theory, we could allow the substitution,
8869    but indicate that it should have failed, and allow our caller to
8870    make sure that the right thing happens, but we don't try to do this
8871    yet.
8872
8873    This function is used for dealing with types, decls and the like;
8874    for expressions, use tsubst_expr or tsubst_copy.  */
8875
8876 static tree
8877 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8878 {
8879   tree type, r;
8880
8881   if (t == NULL_TREE || t == error_mark_node
8882       || t == integer_type_node
8883       || t == void_type_node
8884       || t == char_type_node
8885       || t == unknown_type_node
8886       || TREE_CODE (t) == NAMESPACE_DECL)
8887     return t;
8888
8889   if (DECL_P (t))
8890     return tsubst_decl (t, args, complain);
8891
8892   if (TREE_CODE (t) == IDENTIFIER_NODE)
8893     type = IDENTIFIER_TYPE_VALUE (t);
8894   else
8895     type = TREE_TYPE (t);
8896
8897   gcc_assert (type != unknown_type_node);
8898
8899   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8900      such as attribute aligned.  */
8901   if (TYPE_P (t)
8902       && TYPE_NAME (t)
8903       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8904     {
8905       tree decl = TYPE_NAME (t);
8906       
8907       if (DECL_CLASS_SCOPE_P (decl)
8908           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8909           && uses_template_parms (DECL_CONTEXT (decl)))
8910         {
8911           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8912           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8913           r = retrieve_specialization (tmpl, gen_args, false);
8914         }
8915       else if (DECL_FUNCTION_SCOPE_P (decl)
8916                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8917                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8918         r = retrieve_local_specialization (decl);
8919       else
8920         /* The typedef is from a non-template context.  */
8921         return t;
8922
8923       if (r)
8924         {
8925           r = TREE_TYPE (r);
8926           r = cp_build_qualified_type_real
8927             (r, cp_type_quals (t) | cp_type_quals (r),
8928              complain | tf_ignore_bad_quals);
8929           return r;
8930         }
8931       /* Else we must be instantiating the typedef, so fall through.  */
8932     }
8933
8934   if (type
8935       && TREE_CODE (t) != TYPENAME_TYPE
8936       && TREE_CODE (t) != IDENTIFIER_NODE
8937       && TREE_CODE (t) != FUNCTION_TYPE
8938       && TREE_CODE (t) != METHOD_TYPE)
8939     type = tsubst (type, args, complain, in_decl);
8940   if (type == error_mark_node)
8941     return error_mark_node;
8942
8943   switch (TREE_CODE (t))
8944     {
8945     case RECORD_TYPE:
8946     case UNION_TYPE:
8947     case ENUMERAL_TYPE:
8948       return tsubst_aggr_type (t, args, complain, in_decl,
8949                                /*entering_scope=*/0);
8950
8951     case ERROR_MARK:
8952     case IDENTIFIER_NODE:
8953     case VOID_TYPE:
8954     case REAL_TYPE:
8955     case COMPLEX_TYPE:
8956     case VECTOR_TYPE:
8957     case BOOLEAN_TYPE:
8958     case INTEGER_CST:
8959     case REAL_CST:
8960     case STRING_CST:
8961       return t;
8962
8963     case INTEGER_TYPE:
8964       if (t == integer_type_node)
8965         return t;
8966
8967       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8968           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8969         return t;
8970
8971       {
8972         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8973
8974         max = tsubst_expr (omax, args, complain, in_decl,
8975                            /*integral_constant_expression_p=*/false);
8976         max = fold_decl_constant_value (max);
8977
8978         if (TREE_CODE (max) != INTEGER_CST
8979             && !at_function_scope_p ()
8980             && !value_dependent_expression_p (max))
8981           {
8982             if (complain & tf_error)
8983               error ("array bound is not an integer constant");
8984             return error_mark_node;
8985           }
8986
8987         /* [temp.deduct]
8988
8989            Type deduction may fail for any of the following
8990            reasons:
8991
8992              Attempting to create an array with a size that is
8993              zero or negative.  */
8994         if (integer_zerop (max) && !(complain & tf_error))
8995           /* We must fail if performing argument deduction (as
8996              indicated by the state of complain), so that
8997              another substitution can be found.  */
8998           return error_mark_node;
8999         else if (TREE_CODE (max) == INTEGER_CST
9000                  && INT_CST_LT (max, integer_zero_node))
9001           {
9002             if (complain & tf_error)
9003               error ("creating array with negative size (%qE)", max);
9004
9005             return error_mark_node;
9006           }
9007
9008         return compute_array_index_type (NULL_TREE, max);
9009       }
9010
9011     case TEMPLATE_TYPE_PARM:
9012     case TEMPLATE_TEMPLATE_PARM:
9013     case BOUND_TEMPLATE_TEMPLATE_PARM:
9014     case TEMPLATE_PARM_INDEX:
9015       {
9016         int idx;
9017         int level;
9018         int levels;
9019         tree arg = NULL_TREE;
9020
9021         r = NULL_TREE;
9022
9023         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9024         template_parm_level_and_index (t, &level, &idx); 
9025
9026         levels = TMPL_ARGS_DEPTH (args);
9027         if (level <= levels)
9028           {
9029             arg = TMPL_ARG (args, level, idx);
9030
9031             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9032               /* See through ARGUMENT_PACK_SELECT arguments. */
9033               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9034           }
9035
9036         if (arg == error_mark_node)
9037           return error_mark_node;
9038         else if (arg != NULL_TREE)
9039           {
9040             if (ARGUMENT_PACK_P (arg))
9041               /* If ARG is an argument pack, we don't actually want to
9042                  perform a substitution here, because substitutions
9043                  for argument packs are only done
9044                  element-by-element. We can get to this point when
9045                  substituting the type of a non-type template
9046                  parameter pack, when that type actually contains
9047                  template parameter packs from an outer template, e.g.,
9048
9049                  template<typename... Types> struct A {
9050                    template<Types... Values> struct B { };
9051                  };  */
9052               return t;
9053
9054             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9055               {
9056                 int quals;
9057                 gcc_assert (TYPE_P (arg));
9058
9059                 /* cv-quals from the template are discarded when
9060                    substituting in a function or reference type.  */
9061                 if (TREE_CODE (arg) == FUNCTION_TYPE
9062                     || TREE_CODE (arg) == METHOD_TYPE
9063                     || TREE_CODE (arg) == REFERENCE_TYPE)
9064                   quals = cp_type_quals (arg);
9065                 else
9066                   quals = cp_type_quals (arg) | cp_type_quals (t);
9067                   
9068                 return cp_build_qualified_type_real
9069                   (arg, quals, complain | tf_ignore_bad_quals);
9070               }
9071             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9072               {
9073                 /* We are processing a type constructed from a
9074                    template template parameter.  */
9075                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9076                                       args, complain, in_decl);
9077                 if (argvec == error_mark_node)
9078                   return error_mark_node;
9079
9080                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9081                    are resolving nested-types in the signature of a
9082                    member function templates.  Otherwise ARG is a
9083                    TEMPLATE_DECL and is the real template to be
9084                    instantiated.  */
9085                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9086                   arg = TYPE_NAME (arg);
9087
9088                 r = lookup_template_class (arg,
9089                                            argvec, in_decl,
9090                                            DECL_CONTEXT (arg),
9091                                             /*entering_scope=*/0,
9092                                            complain);
9093                 return cp_build_qualified_type_real
9094                   (r, TYPE_QUALS (t), complain);
9095               }
9096             else
9097               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9098               return arg;
9099           }
9100
9101         if (level == 1)
9102           /* This can happen during the attempted tsubst'ing in
9103              unify.  This means that we don't yet have any information
9104              about the template parameter in question.  */
9105           return t;
9106
9107         /* If we get here, we must have been looking at a parm for a
9108            more deeply nested template.  Make a new version of this
9109            template parameter, but with a lower level.  */
9110         switch (TREE_CODE (t))
9111           {
9112           case TEMPLATE_TYPE_PARM:
9113           case TEMPLATE_TEMPLATE_PARM:
9114           case BOUND_TEMPLATE_TEMPLATE_PARM:
9115             if (cp_type_quals (t))
9116               {
9117                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9118                 r = cp_build_qualified_type_real
9119                   (r, cp_type_quals (t),
9120                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9121                                ? tf_ignore_bad_quals : 0));
9122               }
9123             else
9124               {
9125                 r = copy_type (t);
9126                 TEMPLATE_TYPE_PARM_INDEX (r)
9127                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9128                                                 r, levels, args, complain);
9129                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9130                 TYPE_MAIN_VARIANT (r) = r;
9131                 TYPE_POINTER_TO (r) = NULL_TREE;
9132                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9133
9134                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9135                   /* We have reduced the level of the template
9136                      template parameter, but not the levels of its
9137                      template parameters, so canonical_type_parameter
9138                      will not be able to find the canonical template
9139                      template parameter for this level. Thus, we
9140                      require structural equality checking to compare
9141                      TEMPLATE_TEMPLATE_PARMs. */
9142                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9143                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9144                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9145                 else
9146                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9147
9148                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9149                   {
9150                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9151                                           complain, in_decl);
9152                     if (argvec == error_mark_node)
9153                       return error_mark_node;
9154
9155                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9156                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9157                   }
9158               }
9159             break;
9160
9161           case TEMPLATE_PARM_INDEX:
9162             r = reduce_template_parm_level (t, type, levels, args, complain);
9163             break;
9164
9165           default:
9166             gcc_unreachable ();
9167           }
9168
9169         return r;
9170       }
9171
9172     case TREE_LIST:
9173       {
9174         tree purpose, value, chain;
9175
9176         if (t == void_list_node)
9177           return t;
9178
9179         purpose = TREE_PURPOSE (t);
9180         if (purpose)
9181           {
9182             purpose = tsubst (purpose, args, complain, in_decl);
9183             if (purpose == error_mark_node)
9184               return error_mark_node;
9185           }
9186         value = TREE_VALUE (t);
9187         if (value)
9188           {
9189             value = tsubst (value, args, complain, in_decl);
9190             if (value == error_mark_node)
9191               return error_mark_node;
9192           }
9193         chain = TREE_CHAIN (t);
9194         if (chain && chain != void_type_node)
9195           {
9196             chain = tsubst (chain, args, complain, in_decl);
9197             if (chain == error_mark_node)
9198               return error_mark_node;
9199           }
9200         if (purpose == TREE_PURPOSE (t)
9201             && value == TREE_VALUE (t)
9202             && chain == TREE_CHAIN (t))
9203           return t;
9204         return hash_tree_cons (purpose, value, chain);
9205       }
9206
9207     case TREE_BINFO:
9208       /* We should never be tsubsting a binfo.  */
9209       gcc_unreachable ();
9210
9211     case TREE_VEC:
9212       /* A vector of template arguments.  */
9213       gcc_assert (!type);
9214       return tsubst_template_args (t, args, complain, in_decl);
9215
9216     case POINTER_TYPE:
9217     case REFERENCE_TYPE:
9218       {
9219         enum tree_code code;
9220
9221         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9222           return t;
9223
9224         code = TREE_CODE (t);
9225
9226
9227         /* [temp.deduct]
9228
9229            Type deduction may fail for any of the following
9230            reasons:
9231
9232            -- Attempting to create a pointer to reference type.
9233            -- Attempting to create a reference to a reference type or
9234               a reference to void.
9235
9236           Core issue 106 says that creating a reference to a reference
9237           during instantiation is no longer a cause for failure. We
9238           only enforce this check in strict C++98 mode.  */
9239         if ((TREE_CODE (type) == REFERENCE_TYPE
9240              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9241             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9242           {
9243             static location_t last_loc;
9244
9245             /* We keep track of the last time we issued this error
9246                message to avoid spewing a ton of messages during a
9247                single bad template instantiation.  */
9248             if (complain & tf_error
9249                 && last_loc != input_location)
9250               {
9251                 if (TREE_CODE (type) == VOID_TYPE)
9252                   error ("forming reference to void");
9253                 else
9254                   error ("forming %s to reference type %qT",
9255                          (code == POINTER_TYPE) ? "pointer" : "reference",
9256                          type);
9257                 last_loc = input_location;
9258               }
9259
9260             return error_mark_node;
9261           }
9262         else if (code == POINTER_TYPE)
9263           {
9264             r = build_pointer_type (type);
9265             if (TREE_CODE (type) == METHOD_TYPE)
9266               r = build_ptrmemfunc_type (r);
9267           }
9268         else if (TREE_CODE (type) == REFERENCE_TYPE)
9269           /* In C++0x, during template argument substitution, when there is an
9270              attempt to create a reference to a reference type, reference
9271              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9272
9273              "If a template-argument for a template-parameter T names a type
9274              that is a reference to a type A, an attempt to create the type
9275              'lvalue reference to cv T' creates the type 'lvalue reference to
9276              A,' while an attempt to create the type type rvalue reference to
9277              cv T' creates the type T"
9278           */
9279           r = cp_build_reference_type
9280               (TREE_TYPE (type),
9281                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9282         else
9283           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9284         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9285
9286         if (r != error_mark_node)
9287           /* Will this ever be needed for TYPE_..._TO values?  */
9288           layout_type (r);
9289
9290         return r;
9291       }
9292     case OFFSET_TYPE:
9293       {
9294         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9295         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9296           {
9297             /* [temp.deduct]
9298
9299                Type deduction may fail for any of the following
9300                reasons:
9301
9302                -- Attempting to create "pointer to member of T" when T
9303                   is not a class type.  */
9304             if (complain & tf_error)
9305               error ("creating pointer to member of non-class type %qT", r);
9306             return error_mark_node;
9307           }
9308         if (TREE_CODE (type) == REFERENCE_TYPE)
9309           {
9310             if (complain & tf_error)
9311               error ("creating pointer to member reference type %qT", type);
9312             return error_mark_node;
9313           }
9314         if (TREE_CODE (type) == VOID_TYPE)
9315           {
9316             if (complain & tf_error)
9317               error ("creating pointer to member of type void");
9318             return error_mark_node;
9319           }
9320         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9321         if (TREE_CODE (type) == FUNCTION_TYPE)
9322           {
9323             /* The type of the implicit object parameter gets its
9324                cv-qualifiers from the FUNCTION_TYPE. */
9325             tree method_type;
9326             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9327                                                       cp_type_quals (type));
9328             tree memptr;
9329             method_type = build_method_type_directly (this_type,
9330                                                       TREE_TYPE (type),
9331                                                       TYPE_ARG_TYPES (type));
9332             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9333             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9334                                                  complain);
9335           }
9336         else
9337           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9338                                                TYPE_QUALS (t),
9339                                                complain);
9340       }
9341     case FUNCTION_TYPE:
9342     case METHOD_TYPE:
9343       {
9344         tree fntype;
9345         tree specs;
9346         fntype = tsubst_function_type (t, args, complain, in_decl);
9347         if (fntype == error_mark_node)
9348           return error_mark_node;
9349
9350         /* Substitute the exception specification.  */
9351         specs = tsubst_exception_specification (t, args, complain,
9352                                                 in_decl);
9353         if (specs == error_mark_node)
9354           return error_mark_node;
9355         if (specs)
9356           fntype = build_exception_variant (fntype, specs);
9357         return fntype;
9358       }
9359     case ARRAY_TYPE:
9360       {
9361         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9362         if (domain == error_mark_node)
9363           return error_mark_node;
9364
9365         /* As an optimization, we avoid regenerating the array type if
9366            it will obviously be the same as T.  */
9367         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9368           return t;
9369
9370         /* These checks should match the ones in grokdeclarator.
9371
9372            [temp.deduct]
9373
9374            The deduction may fail for any of the following reasons:
9375
9376            -- Attempting to create an array with an element type that
9377               is void, a function type, or a reference type, or [DR337]
9378               an abstract class type.  */
9379         if (TREE_CODE (type) == VOID_TYPE
9380             || TREE_CODE (type) == FUNCTION_TYPE
9381             || TREE_CODE (type) == REFERENCE_TYPE)
9382           {
9383             if (complain & tf_error)
9384               error ("creating array of %qT", type);
9385             return error_mark_node;
9386           }
9387         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9388           {
9389             if (complain & tf_error)
9390               error ("creating array of %qT, which is an abstract class type",
9391                      type);
9392             return error_mark_node;
9393           }
9394
9395         r = build_cplus_array_type (type, domain);
9396
9397         if (TYPE_USER_ALIGN (t))
9398           {
9399             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9400             TYPE_USER_ALIGN (r) = 1;
9401           }
9402
9403         return r;
9404       }
9405
9406     case PLUS_EXPR:
9407     case MINUS_EXPR:
9408       {
9409         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9410         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9411
9412         if (e1 == error_mark_node || e2 == error_mark_node)
9413           return error_mark_node;
9414
9415         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9416       }
9417
9418     case NEGATE_EXPR:
9419     case NOP_EXPR:
9420       {
9421         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9422         if (e == error_mark_node)
9423           return error_mark_node;
9424
9425         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9426       }
9427
9428     case TYPENAME_TYPE:
9429       {
9430         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9431                                      in_decl, /*entering_scope=*/1);
9432         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9433                               complain, in_decl);
9434
9435         if (ctx == error_mark_node || f == error_mark_node)
9436           return error_mark_node;
9437
9438         if (!MAYBE_CLASS_TYPE_P (ctx))
9439           {
9440             if (complain & tf_error)
9441               error ("%qT is not a class, struct, or union type", ctx);
9442             return error_mark_node;
9443           }
9444         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9445           {
9446             /* Normally, make_typename_type does not require that the CTX
9447                have complete type in order to allow things like:
9448
9449                  template <class T> struct S { typename S<T>::X Y; };
9450
9451                But, such constructs have already been resolved by this
9452                point, so here CTX really should have complete type, unless
9453                it's a partial instantiation.  */
9454             ctx = complete_type (ctx);
9455             if (!COMPLETE_TYPE_P (ctx))
9456               {
9457                 if (complain & tf_error)
9458                   cxx_incomplete_type_error (NULL_TREE, ctx);
9459                 return error_mark_node;
9460               }
9461           }
9462
9463         f = make_typename_type (ctx, f, typename_type,
9464                                 (complain & tf_error) | tf_keep_type_decl);
9465         if (f == error_mark_node)
9466           return f;
9467         if (TREE_CODE (f) == TYPE_DECL)
9468           {
9469             complain |= tf_ignore_bad_quals;
9470             f = TREE_TYPE (f);
9471           }
9472
9473         if (TREE_CODE (f) != TYPENAME_TYPE)
9474           {
9475             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9476               error ("%qT resolves to %qT, which is not an enumeration type",
9477                      t, f);
9478             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9479               error ("%qT resolves to %qT, which is is not a class type",
9480                      t, f);
9481           }
9482
9483         return cp_build_qualified_type_real
9484           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9485       }
9486
9487     case UNBOUND_CLASS_TEMPLATE:
9488       {
9489         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9490                                      in_decl, /*entering_scope=*/1);
9491         tree name = TYPE_IDENTIFIER (t);
9492         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9493
9494         if (ctx == error_mark_node || name == error_mark_node)
9495           return error_mark_node;
9496
9497         if (parm_list)
9498           parm_list = tsubst_template_parms (parm_list, args, complain);
9499         return make_unbound_class_template (ctx, name, parm_list, complain);
9500       }
9501
9502     case INDIRECT_REF:
9503     case ADDR_EXPR:
9504     case CALL_EXPR:
9505       gcc_unreachable ();
9506
9507     case ARRAY_REF:
9508       {
9509         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9510         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9511                                /*integral_constant_expression_p=*/false);
9512         if (e1 == error_mark_node || e2 == error_mark_node)
9513           return error_mark_node;
9514
9515         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9516       }
9517
9518     case SCOPE_REF:
9519       {
9520         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9521         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9522         if (e1 == error_mark_node || e2 == error_mark_node)
9523           return error_mark_node;
9524
9525         return build_qualified_name (/*type=*/NULL_TREE,
9526                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9527       }
9528
9529     case TYPEOF_TYPE:
9530       {
9531         tree type;
9532
9533         type = finish_typeof (tsubst_expr 
9534                               (TYPEOF_TYPE_EXPR (t), args,
9535                                complain, in_decl,
9536                                /*integral_constant_expression_p=*/false));
9537         return cp_build_qualified_type_real (type,
9538                                              cp_type_quals (t)
9539                                              | cp_type_quals (type),
9540                                              complain);
9541       }
9542
9543     case DECLTYPE_TYPE:
9544       {
9545         tree type;
9546
9547         type = 
9548           finish_decltype_type (tsubst_expr 
9549                                 (DECLTYPE_TYPE_EXPR (t), args,
9550                                  complain, in_decl,
9551                                  /*integral_constant_expression_p=*/false),
9552                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9553         return cp_build_qualified_type_real (type,
9554                                              cp_type_quals (t)
9555                                              | cp_type_quals (type),
9556                                              complain);
9557       }
9558
9559     case TYPE_ARGUMENT_PACK:
9560     case NONTYPE_ARGUMENT_PACK:
9561       {
9562         tree r = make_node (TREE_CODE (t));
9563         tree packed_out = 
9564           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9565                                 args,
9566                                 complain,
9567                                 in_decl);
9568         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9569
9570         /* For template nontype argument packs, also substitute into
9571            the type.  */
9572         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9573           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9574
9575         return r;
9576       }
9577       break;
9578
9579     default:
9580       sorry ("use of %qs in template",
9581              tree_code_name [(int) TREE_CODE (t)]);
9582       return error_mark_node;
9583     }
9584 }
9585
9586 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9587    type of the expression on the left-hand side of the "." or "->"
9588    operator.  */
9589
9590 static tree
9591 tsubst_baselink (tree baselink, tree object_type,
9592                  tree args, tsubst_flags_t complain, tree in_decl)
9593 {
9594     tree name;
9595     tree qualifying_scope;
9596     tree fns;
9597     tree optype;
9598     tree template_args = 0;
9599     bool template_id_p = false;
9600
9601     /* A baselink indicates a function from a base class.  Both the
9602        BASELINK_ACCESS_BINFO and the base class referenced may
9603        indicate bases of the template class, rather than the
9604        instantiated class.  In addition, lookups that were not
9605        ambiguous before may be ambiguous now.  Therefore, we perform
9606        the lookup again.  */
9607     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9608     qualifying_scope = tsubst (qualifying_scope, args,
9609                                complain, in_decl);
9610     fns = BASELINK_FUNCTIONS (baselink);
9611     optype = BASELINK_OPTYPE (baselink);
9612     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9613       {
9614         template_id_p = true;
9615         template_args = TREE_OPERAND (fns, 1);
9616         fns = TREE_OPERAND (fns, 0);
9617         if (template_args)
9618           template_args = tsubst_template_args (template_args, args,
9619                                                 complain, in_decl);
9620       }
9621     name = DECL_NAME (get_first_fn (fns));
9622     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9623
9624     /* If lookup found a single function, mark it as used at this
9625        point.  (If it lookup found multiple functions the one selected
9626        later by overload resolution will be marked as used at that
9627        point.)  */
9628     if (BASELINK_P (baselink))
9629       fns = BASELINK_FUNCTIONS (baselink);
9630     if (!template_id_p && !really_overloaded_fn (fns))
9631       mark_used (OVL_CURRENT (fns));
9632
9633     /* Add back the template arguments, if present.  */
9634     if (BASELINK_P (baselink) && template_id_p)
9635       BASELINK_FUNCTIONS (baselink)
9636         = build_nt (TEMPLATE_ID_EXPR,
9637                     BASELINK_FUNCTIONS (baselink),
9638                     template_args);
9639     /* Update the conversion operator type.  */
9640     BASELINK_OPTYPE (baselink) 
9641       = tsubst (optype, args, complain, in_decl);
9642
9643     if (!object_type)
9644       object_type = current_class_type;
9645     return adjust_result_of_qualified_name_lookup (baselink,
9646                                                    qualifying_scope,
9647                                                    object_type);
9648 }
9649
9650 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9651    true if the qualified-id will be a postfix-expression in-and-of
9652    itself; false if more of the postfix-expression follows the
9653    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9654    of "&".  */
9655
9656 static tree
9657 tsubst_qualified_id (tree qualified_id, tree args,
9658                      tsubst_flags_t complain, tree in_decl,
9659                      bool done, bool address_p)
9660 {
9661   tree expr;
9662   tree scope;
9663   tree name;
9664   bool is_template;
9665   tree template_args;
9666
9667   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9668
9669   /* Figure out what name to look up.  */
9670   name = TREE_OPERAND (qualified_id, 1);
9671   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9672     {
9673       is_template = true;
9674       template_args = TREE_OPERAND (name, 1);
9675       if (template_args)
9676         template_args = tsubst_template_args (template_args, args,
9677                                               complain, in_decl);
9678       name = TREE_OPERAND (name, 0);
9679     }
9680   else
9681     {
9682       is_template = false;
9683       template_args = NULL_TREE;
9684     }
9685
9686   /* Substitute into the qualifying scope.  When there are no ARGS, we
9687      are just trying to simplify a non-dependent expression.  In that
9688      case the qualifying scope may be dependent, and, in any case,
9689      substituting will not help.  */
9690   scope = TREE_OPERAND (qualified_id, 0);
9691   if (args)
9692     {
9693       scope = tsubst (scope, args, complain, in_decl);
9694       expr = tsubst_copy (name, args, complain, in_decl);
9695     }
9696   else
9697     expr = name;
9698
9699   if (dependent_type_p (scope))
9700     return build_qualified_name (/*type=*/NULL_TREE,
9701                                  scope, expr,
9702                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9703
9704   if (!BASELINK_P (name) && !DECL_P (expr))
9705     {
9706       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9707         /* If this were actually a destructor call, it would have been
9708            parsed as such by the parser.  */
9709         expr = error_mark_node;
9710       else
9711         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9712       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9713                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9714         {
9715           if (complain & tf_error)
9716             {
9717               error ("dependent-name %qE is parsed as a non-type, but "
9718                      "instantiation yields a type", qualified_id);
9719               inform ("say %<typename %E%> if a type is meant", qualified_id);
9720             }
9721           return error_mark_node;
9722         }
9723     }
9724
9725   if (DECL_P (expr))
9726     {
9727       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9728                                            scope);
9729       /* Remember that there was a reference to this entity.  */
9730       mark_used (expr);
9731     }
9732
9733   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9734     {
9735       if (complain & tf_error)
9736         qualified_name_lookup_error (scope,
9737                                      TREE_OPERAND (qualified_id, 1),
9738                                      expr, input_location);
9739       return error_mark_node;
9740     }
9741
9742   if (is_template)
9743     expr = lookup_template_function (expr, template_args);
9744
9745   if (expr == error_mark_node && complain & tf_error)
9746     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9747                                  expr, input_location);
9748   else if (TYPE_P (scope))
9749     {
9750       expr = (adjust_result_of_qualified_name_lookup
9751               (expr, scope, current_class_type));
9752       expr = (finish_qualified_id_expr
9753               (scope, expr, done, address_p,
9754                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9755                /*template_arg_p=*/false));
9756     }
9757
9758   /* Expressions do not generally have reference type.  */
9759   if (TREE_CODE (expr) != SCOPE_REF
9760       /* However, if we're about to form a pointer-to-member, we just
9761          want the referenced member referenced.  */
9762       && TREE_CODE (expr) != OFFSET_REF)
9763     expr = convert_from_reference (expr);
9764
9765   return expr;
9766 }
9767
9768 /* Like tsubst, but deals with expressions.  This function just replaces
9769    template parms; to finish processing the resultant expression, use
9770    tsubst_expr.  */
9771
9772 static tree
9773 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9774 {
9775   enum tree_code code;
9776   tree r;
9777
9778   if (t == NULL_TREE || t == error_mark_node)
9779     return t;
9780
9781   code = TREE_CODE (t);
9782
9783   switch (code)
9784     {
9785     case PARM_DECL:
9786       r = retrieve_local_specialization (t);
9787       gcc_assert (r != NULL);
9788       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9789         r = ARGUMENT_PACK_SELECT_ARG (r);
9790       mark_used (r);
9791       return r;
9792
9793     case CONST_DECL:
9794       {
9795         tree enum_type;
9796         tree v;
9797
9798         if (DECL_TEMPLATE_PARM_P (t))
9799           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9800         /* There is no need to substitute into namespace-scope
9801            enumerators.  */
9802         if (DECL_NAMESPACE_SCOPE_P (t))
9803           return t;
9804         /* If ARGS is NULL, then T is known to be non-dependent.  */
9805         if (args == NULL_TREE)
9806           return integral_constant_value (t);
9807
9808         /* Unfortunately, we cannot just call lookup_name here.
9809            Consider:
9810
9811              template <int I> int f() {
9812              enum E { a = I };
9813              struct S { void g() { E e = a; } };
9814              };
9815
9816            When we instantiate f<7>::S::g(), say, lookup_name is not
9817            clever enough to find f<7>::a.  */
9818         enum_type
9819           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9820                               /*entering_scope=*/0);
9821
9822         for (v = TYPE_VALUES (enum_type);
9823              v != NULL_TREE;
9824              v = TREE_CHAIN (v))
9825           if (TREE_PURPOSE (v) == DECL_NAME (t))
9826             return TREE_VALUE (v);
9827
9828           /* We didn't find the name.  That should never happen; if
9829              name-lookup found it during preliminary parsing, we
9830              should find it again here during instantiation.  */
9831         gcc_unreachable ();
9832       }
9833       return t;
9834
9835     case FIELD_DECL:
9836       if (DECL_CONTEXT (t))
9837         {
9838           tree ctx;
9839
9840           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9841                                   /*entering_scope=*/1);
9842           if (ctx != DECL_CONTEXT (t))
9843             {
9844               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9845               if (!r)
9846                 {
9847                   if (complain & tf_error)
9848                     error ("using invalid field %qD", t);
9849                   return error_mark_node;
9850                 }
9851               return r;
9852             }
9853         }
9854
9855       return t;
9856
9857     case VAR_DECL:
9858     case FUNCTION_DECL:
9859       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9860           || local_variable_p (t))
9861         t = tsubst (t, args, complain, in_decl);
9862       mark_used (t);
9863       return t;
9864
9865     case BASELINK:
9866       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9867
9868     case TEMPLATE_DECL:
9869       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9870         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9871                        args, complain, in_decl);
9872       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9873         return tsubst (t, args, complain, in_decl);
9874       else if (DECL_CLASS_SCOPE_P (t)
9875                && uses_template_parms (DECL_CONTEXT (t)))
9876         {
9877           /* Template template argument like the following example need
9878              special treatment:
9879
9880                template <template <class> class TT> struct C {};
9881                template <class T> struct D {
9882                  template <class U> struct E {};
9883                  C<E> c;                                // #1
9884                };
9885                D<int> d;                                // #2
9886
9887              We are processing the template argument `E' in #1 for
9888              the template instantiation #2.  Originally, `E' is a
9889              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9890              have to substitute this with one having context `D<int>'.  */
9891
9892           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9893           return lookup_field (context, DECL_NAME(t), 0, false);
9894         }
9895       else
9896         /* Ordinary template template argument.  */
9897         return t;
9898
9899     case CAST_EXPR:
9900     case REINTERPRET_CAST_EXPR:
9901     case CONST_CAST_EXPR:
9902     case STATIC_CAST_EXPR:
9903     case DYNAMIC_CAST_EXPR:
9904     case NOP_EXPR:
9905       return build1
9906         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9907          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9908
9909     case SIZEOF_EXPR:
9910       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9911         {
9912           /* We only want to compute the number of arguments.  */
9913           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9914                                                 complain, in_decl);
9915           int len = 0;
9916
9917           if (TREE_CODE (expanded) == TREE_VEC)
9918             len = TREE_VEC_LENGTH (expanded);
9919
9920           if (expanded == error_mark_node)
9921             return error_mark_node;
9922           else if (PACK_EXPANSION_P (expanded)
9923                    || (TREE_CODE (expanded) == TREE_VEC
9924                        && len > 0
9925                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9926             {
9927               if (TREE_CODE (expanded) == TREE_VEC)
9928                 expanded = TREE_VEC_ELT (expanded, len - 1);
9929
9930               if (TYPE_P (expanded))
9931                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9932                                                    complain & tf_error);
9933               else
9934                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9935                                                    complain & tf_error);
9936             }
9937           else
9938             return build_int_cst (size_type_node, len);
9939         }
9940       /* Fall through */
9941
9942     case INDIRECT_REF:
9943     case NEGATE_EXPR:
9944     case TRUTH_NOT_EXPR:
9945     case BIT_NOT_EXPR:
9946     case ADDR_EXPR:
9947     case UNARY_PLUS_EXPR:      /* Unary + */
9948     case ALIGNOF_EXPR:
9949     case ARROW_EXPR:
9950     case THROW_EXPR:
9951     case TYPEID_EXPR:
9952     case REALPART_EXPR:
9953     case IMAGPART_EXPR:
9954       return build1
9955         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9956          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9957
9958     case COMPONENT_REF:
9959       {
9960         tree object;
9961         tree name;
9962
9963         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9964         name = TREE_OPERAND (t, 1);
9965         if (TREE_CODE (name) == BIT_NOT_EXPR)
9966           {
9967             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9968                                 complain, in_decl);
9969             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9970           }
9971         else if (TREE_CODE (name) == SCOPE_REF
9972                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9973           {
9974             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9975                                      complain, in_decl);
9976             name = TREE_OPERAND (name, 1);
9977             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9978                                 complain, in_decl);
9979             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9980             name = build_qualified_name (/*type=*/NULL_TREE,
9981                                          base, name,
9982                                          /*template_p=*/false);
9983           }
9984         else if (TREE_CODE (name) == BASELINK)
9985           name = tsubst_baselink (name,
9986                                   non_reference (TREE_TYPE (object)),
9987                                   args, complain,
9988                                   in_decl);
9989         else
9990           name = tsubst_copy (name, args, complain, in_decl);
9991         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9992       }
9993
9994     case PLUS_EXPR:
9995     case MINUS_EXPR:
9996     case MULT_EXPR:
9997     case TRUNC_DIV_EXPR:
9998     case CEIL_DIV_EXPR:
9999     case FLOOR_DIV_EXPR:
10000     case ROUND_DIV_EXPR:
10001     case EXACT_DIV_EXPR:
10002     case BIT_AND_EXPR:
10003     case BIT_IOR_EXPR:
10004     case BIT_XOR_EXPR:
10005     case TRUNC_MOD_EXPR:
10006     case FLOOR_MOD_EXPR:
10007     case TRUTH_ANDIF_EXPR:
10008     case TRUTH_ORIF_EXPR:
10009     case TRUTH_AND_EXPR:
10010     case TRUTH_OR_EXPR:
10011     case RSHIFT_EXPR:
10012     case LSHIFT_EXPR:
10013     case RROTATE_EXPR:
10014     case LROTATE_EXPR:
10015     case EQ_EXPR:
10016     case NE_EXPR:
10017     case MAX_EXPR:
10018     case MIN_EXPR:
10019     case LE_EXPR:
10020     case GE_EXPR:
10021     case LT_EXPR:
10022     case GT_EXPR:
10023     case COMPOUND_EXPR:
10024     case DOTSTAR_EXPR:
10025     case MEMBER_REF:
10026     case PREDECREMENT_EXPR:
10027     case PREINCREMENT_EXPR:
10028     case POSTDECREMENT_EXPR:
10029     case POSTINCREMENT_EXPR:
10030       return build_nt
10031         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10032          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10033
10034     case SCOPE_REF:
10035       return build_qualified_name (/*type=*/NULL_TREE,
10036                                    tsubst_copy (TREE_OPERAND (t, 0),
10037                                                 args, complain, in_decl),
10038                                    tsubst_copy (TREE_OPERAND (t, 1),
10039                                                 args, complain, in_decl),
10040                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10041
10042     case ARRAY_REF:
10043       return build_nt
10044         (ARRAY_REF,
10045          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10046          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10047          NULL_TREE, NULL_TREE);
10048
10049     case CALL_EXPR:
10050       {
10051         int n = VL_EXP_OPERAND_LENGTH (t);
10052         tree result = build_vl_exp (CALL_EXPR, n);
10053         int i;
10054         for (i = 0; i < n; i++)
10055           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10056                                              complain, in_decl);
10057         return result;
10058       }
10059
10060     case COND_EXPR:
10061     case MODOP_EXPR:
10062     case PSEUDO_DTOR_EXPR:
10063       {
10064         r = build_nt
10065           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10066            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10067            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10068         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10069         return r;
10070       }
10071
10072     case NEW_EXPR:
10073       {
10074         r = build_nt
10075         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10076          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10077          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10078         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10079         return r;
10080       }
10081
10082     case DELETE_EXPR:
10083       {
10084         r = build_nt
10085         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10086          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10087         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10088         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10089         return r;
10090       }
10091
10092     case TEMPLATE_ID_EXPR:
10093       {
10094         /* Substituted template arguments */
10095         tree fn = TREE_OPERAND (t, 0);
10096         tree targs = TREE_OPERAND (t, 1);
10097
10098         fn = tsubst_copy (fn, args, complain, in_decl);
10099         if (targs)
10100           targs = tsubst_template_args (targs, args, complain, in_decl);
10101
10102         return lookup_template_function (fn, targs);
10103       }
10104
10105     case TREE_LIST:
10106       {
10107         tree purpose, value, chain;
10108
10109         if (t == void_list_node)
10110           return t;
10111
10112         purpose = TREE_PURPOSE (t);
10113         if (purpose)
10114           purpose = tsubst_copy (purpose, args, complain, in_decl);
10115         value = TREE_VALUE (t);
10116         if (value)
10117           value = tsubst_copy (value, args, complain, in_decl);
10118         chain = TREE_CHAIN (t);
10119         if (chain && chain != void_type_node)
10120           chain = tsubst_copy (chain, args, complain, in_decl);
10121         if (purpose == TREE_PURPOSE (t)
10122             && value == TREE_VALUE (t)
10123             && chain == TREE_CHAIN (t))
10124           return t;
10125         return tree_cons (purpose, value, chain);
10126       }
10127
10128     case RECORD_TYPE:
10129     case UNION_TYPE:
10130     case ENUMERAL_TYPE:
10131     case INTEGER_TYPE:
10132     case TEMPLATE_TYPE_PARM:
10133     case TEMPLATE_TEMPLATE_PARM:
10134     case BOUND_TEMPLATE_TEMPLATE_PARM:
10135     case TEMPLATE_PARM_INDEX:
10136     case POINTER_TYPE:
10137     case REFERENCE_TYPE:
10138     case OFFSET_TYPE:
10139     case FUNCTION_TYPE:
10140     case METHOD_TYPE:
10141     case ARRAY_TYPE:
10142     case TYPENAME_TYPE:
10143     case UNBOUND_CLASS_TEMPLATE:
10144     case TYPEOF_TYPE:
10145     case DECLTYPE_TYPE:
10146     case TYPE_DECL:
10147       return tsubst (t, args, complain, in_decl);
10148
10149     case IDENTIFIER_NODE:
10150       if (IDENTIFIER_TYPENAME_P (t))
10151         {
10152           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10153           return mangle_conv_op_name_for_type (new_type);
10154         }
10155       else
10156         return t;
10157
10158     case CONSTRUCTOR:
10159       /* This is handled by tsubst_copy_and_build.  */
10160       gcc_unreachable ();
10161
10162     case VA_ARG_EXPR:
10163       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10164                                           in_decl),
10165                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10166
10167     case CLEANUP_POINT_EXPR:
10168       /* We shouldn't have built any of these during initial template
10169          generation.  Instead, they should be built during instantiation
10170          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10171       gcc_unreachable ();
10172
10173     case OFFSET_REF:
10174       mark_used (TREE_OPERAND (t, 1));
10175       return t;
10176
10177     case EXPR_PACK_EXPANSION:
10178       error ("invalid use of pack expansion expression");
10179       return error_mark_node;
10180
10181     case NONTYPE_ARGUMENT_PACK:
10182       error ("use %<...%> to expand argument pack");
10183       return error_mark_node;
10184
10185     default:
10186       return t;
10187     }
10188 }
10189
10190 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10191
10192 static tree
10193 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10194                     tree in_decl)
10195 {
10196   tree new_clauses = NULL, nc, oc;
10197
10198   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10199     {
10200       nc = copy_node (oc);
10201       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10202       new_clauses = nc;
10203
10204       switch (OMP_CLAUSE_CODE (nc))
10205         {
10206         case OMP_CLAUSE_LASTPRIVATE:
10207           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10208             {
10209               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10210               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10211                            in_decl, /*integral_constant_expression_p=*/false);
10212               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10213                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10214             }
10215           /* FALLTHRU */
10216         case OMP_CLAUSE_PRIVATE:
10217         case OMP_CLAUSE_SHARED:
10218         case OMP_CLAUSE_FIRSTPRIVATE:
10219         case OMP_CLAUSE_REDUCTION:
10220         case OMP_CLAUSE_COPYIN:
10221         case OMP_CLAUSE_COPYPRIVATE:
10222         case OMP_CLAUSE_IF:
10223         case OMP_CLAUSE_NUM_THREADS:
10224         case OMP_CLAUSE_SCHEDULE:
10225         case OMP_CLAUSE_COLLAPSE:
10226           OMP_CLAUSE_OPERAND (nc, 0)
10227             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10228                            in_decl, /*integral_constant_expression_p=*/false);
10229           break;
10230         case OMP_CLAUSE_NOWAIT:
10231         case OMP_CLAUSE_ORDERED:
10232         case OMP_CLAUSE_DEFAULT:
10233         case OMP_CLAUSE_UNTIED:
10234           break;
10235         default:
10236           gcc_unreachable ();
10237         }
10238     }
10239
10240   return finish_omp_clauses (nreverse (new_clauses));
10241 }
10242
10243 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10244
10245 static tree
10246 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10247                           tree in_decl)
10248 {
10249 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10250
10251   tree purpose, value, chain;
10252
10253   if (t == NULL)
10254     return t;
10255
10256   if (TREE_CODE (t) != TREE_LIST)
10257     return tsubst_copy_and_build (t, args, complain, in_decl,
10258                                   /*function_p=*/false,
10259                                   /*integral_constant_expression_p=*/false);
10260
10261   if (t == void_list_node)
10262     return t;
10263
10264   purpose = TREE_PURPOSE (t);
10265   if (purpose)
10266     purpose = RECUR (purpose);
10267   value = TREE_VALUE (t);
10268   if (value)
10269     value = RECUR (value);
10270   chain = TREE_CHAIN (t);
10271   if (chain && chain != void_type_node)
10272     chain = RECUR (chain);
10273   return tree_cons (purpose, value, chain);
10274 #undef RECUR
10275 }
10276
10277 /* Substitute one OMP_FOR iterator.  */
10278
10279 static void
10280 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10281                          tree condv, tree incrv, tree *clauses,
10282                          tree args, tsubst_flags_t complain, tree in_decl,
10283                          bool integral_constant_expression_p)
10284 {
10285 #define RECUR(NODE)                             \
10286   tsubst_expr ((NODE), args, complain, in_decl, \
10287                integral_constant_expression_p)
10288   tree decl, init, cond, incr;
10289
10290   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10291   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10292   decl = RECUR (TREE_OPERAND (init, 0));
10293   init = TREE_OPERAND (init, 1);
10294   gcc_assert (!type_dependent_expression_p (decl));
10295
10296   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10297     {
10298       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10299       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10300       if (TREE_CODE (incr) == MODIFY_EXPR)
10301         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10302                                     RECUR (TREE_OPERAND (incr, 1)),
10303                                     complain);
10304       else
10305         incr = RECUR (incr);
10306       TREE_VEC_ELT (declv, i) = decl;
10307       TREE_VEC_ELT (initv, i) = init;
10308       TREE_VEC_ELT (condv, i) = cond;
10309       TREE_VEC_ELT (incrv, i) = incr;
10310       return;
10311     }
10312
10313   if (init && TREE_CODE (init) != DECL_EXPR)
10314     {
10315       tree c;
10316       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10317         {
10318           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10319                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10320               && OMP_CLAUSE_DECL (c) == decl)
10321             break;
10322           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10323                    && OMP_CLAUSE_DECL (c) == decl)
10324             error ("iteration variable %qD should not be firstprivate", decl);
10325           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10326                    && OMP_CLAUSE_DECL (c) == decl)
10327             error ("iteration variable %qD should not be reduction", decl);
10328         }
10329       if (c == NULL)
10330         {
10331           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10332           OMP_CLAUSE_DECL (c) = decl;
10333           c = finish_omp_clauses (c);
10334           if (c)
10335             {
10336               OMP_CLAUSE_CHAIN (c) = *clauses;
10337               *clauses = c;
10338             }
10339         }
10340     }
10341   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10342   if (COMPARISON_CLASS_P (cond))
10343     cond = build2 (TREE_CODE (cond), boolean_type_node,
10344                    RECUR (TREE_OPERAND (cond, 0)),
10345                    RECUR (TREE_OPERAND (cond, 1)));
10346   else
10347     cond = RECUR (cond);
10348   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10349   switch (TREE_CODE (incr))
10350     {
10351     case PREINCREMENT_EXPR:
10352     case PREDECREMENT_EXPR:
10353     case POSTINCREMENT_EXPR:
10354     case POSTDECREMENT_EXPR:
10355       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10356                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10357       break;
10358     case MODIFY_EXPR:
10359       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10360           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10361         {
10362           tree rhs = TREE_OPERAND (incr, 1);
10363           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10364                          RECUR (TREE_OPERAND (incr, 0)),
10365                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10366                                  RECUR (TREE_OPERAND (rhs, 0)),
10367                                  RECUR (TREE_OPERAND (rhs, 1))));
10368         }
10369       else
10370         incr = RECUR (incr);
10371       break;
10372     case MODOP_EXPR:
10373       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10374           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10375         {
10376           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10377           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10378                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10379                                  TREE_TYPE (decl), lhs,
10380                                  RECUR (TREE_OPERAND (incr, 2))));
10381         }
10382       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10383                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10384                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10385         {
10386           tree rhs = TREE_OPERAND (incr, 2);
10387           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10388                          RECUR (TREE_OPERAND (incr, 0)),
10389                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10390                                  RECUR (TREE_OPERAND (rhs, 0)),
10391                                  RECUR (TREE_OPERAND (rhs, 1))));
10392         }
10393       else
10394         incr = RECUR (incr);
10395       break;
10396     default:
10397       incr = RECUR (incr);
10398       break;
10399     }
10400
10401   TREE_VEC_ELT (declv, i) = decl;
10402   TREE_VEC_ELT (initv, i) = init;
10403   TREE_VEC_ELT (condv, i) = cond;
10404   TREE_VEC_ELT (incrv, i) = incr;
10405 #undef RECUR
10406 }
10407
10408 /* Like tsubst_copy for expressions, etc. but also does semantic
10409    processing.  */
10410
10411 static tree
10412 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10413              bool integral_constant_expression_p)
10414 {
10415 #define RECUR(NODE)                             \
10416   tsubst_expr ((NODE), args, complain, in_decl, \
10417                integral_constant_expression_p)
10418
10419   tree stmt, tmp;
10420
10421   if (t == NULL_TREE || t == error_mark_node)
10422     return t;
10423
10424   if (EXPR_HAS_LOCATION (t))
10425     input_location = EXPR_LOCATION (t);
10426   if (STATEMENT_CODE_P (TREE_CODE (t)))
10427     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10428
10429   switch (TREE_CODE (t))
10430     {
10431     case STATEMENT_LIST:
10432       {
10433         tree_stmt_iterator i;
10434         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10435           RECUR (tsi_stmt (i));
10436         break;
10437       }
10438
10439     case CTOR_INITIALIZER:
10440       finish_mem_initializers (tsubst_initializer_list
10441                                (TREE_OPERAND (t, 0), args));
10442       break;
10443
10444     case RETURN_EXPR:
10445       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10446       break;
10447
10448     case EXPR_STMT:
10449       tmp = RECUR (EXPR_STMT_EXPR (t));
10450       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10451         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10452       else
10453         finish_expr_stmt (tmp);
10454       break;
10455
10456     case USING_STMT:
10457       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10458       break;
10459
10460     case DECL_EXPR:
10461       {
10462         tree decl;
10463         tree init;
10464
10465         decl = DECL_EXPR_DECL (t);
10466         if (TREE_CODE (decl) == LABEL_DECL)
10467           finish_label_decl (DECL_NAME (decl));
10468         else if (TREE_CODE (decl) == USING_DECL)
10469           {
10470             tree scope = USING_DECL_SCOPE (decl);
10471             tree name = DECL_NAME (decl);
10472             tree decl;
10473
10474             scope = RECUR (scope);
10475             decl = lookup_qualified_name (scope, name,
10476                                           /*is_type_p=*/false,
10477                                           /*complain=*/false);
10478             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10479               qualified_name_lookup_error (scope, name, decl, input_location);
10480             else
10481               do_local_using_decl (decl, scope, name);
10482           }
10483         else
10484           {
10485             init = DECL_INITIAL (decl);
10486             decl = tsubst (decl, args, complain, in_decl);
10487             if (decl != error_mark_node)
10488               {
10489                 /* By marking the declaration as instantiated, we avoid
10490                    trying to instantiate it.  Since instantiate_decl can't
10491                    handle local variables, and since we've already done
10492                    all that needs to be done, that's the right thing to
10493                    do.  */
10494                 if (TREE_CODE (decl) == VAR_DECL)
10495                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10496                 if (TREE_CODE (decl) == VAR_DECL
10497                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10498                   /* Anonymous aggregates are a special case.  */
10499                   finish_anon_union (decl);
10500                 else
10501                   {
10502                     maybe_push_decl (decl);
10503                     if (TREE_CODE (decl) == VAR_DECL
10504                         && DECL_PRETTY_FUNCTION_P (decl))
10505                       {
10506                         /* For __PRETTY_FUNCTION__ we have to adjust the
10507                            initializer.  */
10508                         const char *const name
10509                           = cxx_printable_name (current_function_decl, 2);
10510                         init = cp_fname_init (name, &TREE_TYPE (decl));
10511                       }
10512                     else
10513                       {
10514                         tree t = RECUR (init);
10515
10516                         if (init && !t)
10517                           /* If we had an initializer but it
10518                              instantiated to nothing,
10519                              value-initialize the object.  This will
10520                              only occur when the initializer was a
10521                              pack expansion where the parameter packs
10522                              used in that expansion were of length
10523                              zero.  */
10524                           init = build_default_init (TREE_TYPE (decl),
10525                                                      NULL_TREE);
10526                         else
10527                           init = t;
10528                       }
10529
10530                     finish_decl (decl, init, NULL_TREE);
10531                   }
10532               }
10533           }
10534
10535         /* A DECL_EXPR can also be used as an expression, in the condition
10536            clause of an if/for/while construct.  */
10537         return decl;
10538       }
10539
10540     case FOR_STMT:
10541       stmt = begin_for_stmt ();
10542                           RECUR (FOR_INIT_STMT (t));
10543       finish_for_init_stmt (stmt);
10544       tmp = RECUR (FOR_COND (t));
10545       finish_for_cond (tmp, stmt);
10546       tmp = RECUR (FOR_EXPR (t));
10547       finish_for_expr (tmp, stmt);
10548       RECUR (FOR_BODY (t));
10549       finish_for_stmt (stmt);
10550       break;
10551
10552     case WHILE_STMT:
10553       stmt = begin_while_stmt ();
10554       tmp = RECUR (WHILE_COND (t));
10555       finish_while_stmt_cond (tmp, stmt);
10556       RECUR (WHILE_BODY (t));
10557       finish_while_stmt (stmt);
10558       break;
10559
10560     case DO_STMT:
10561       stmt = begin_do_stmt ();
10562       RECUR (DO_BODY (t));
10563       finish_do_body (stmt);
10564       tmp = RECUR (DO_COND (t));
10565       finish_do_stmt (tmp, stmt);
10566       break;
10567
10568     case IF_STMT:
10569       stmt = begin_if_stmt ();
10570       tmp = RECUR (IF_COND (t));
10571       finish_if_stmt_cond (tmp, stmt);
10572       RECUR (THEN_CLAUSE (t));
10573       finish_then_clause (stmt);
10574
10575       if (ELSE_CLAUSE (t))
10576         {
10577           begin_else_clause (stmt);
10578           RECUR (ELSE_CLAUSE (t));
10579           finish_else_clause (stmt);
10580         }
10581
10582       finish_if_stmt (stmt);
10583       break;
10584
10585     case BIND_EXPR:
10586       if (BIND_EXPR_BODY_BLOCK (t))
10587         stmt = begin_function_body ();
10588       else
10589         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10590                                     ? BCS_TRY_BLOCK : 0);
10591
10592       RECUR (BIND_EXPR_BODY (t));
10593
10594       if (BIND_EXPR_BODY_BLOCK (t))
10595         finish_function_body (stmt);
10596       else
10597         finish_compound_stmt (stmt);
10598       break;
10599
10600     case BREAK_STMT:
10601       finish_break_stmt ();
10602       break;
10603
10604     case CONTINUE_STMT:
10605       finish_continue_stmt ();
10606       break;
10607
10608     case SWITCH_STMT:
10609       stmt = begin_switch_stmt ();
10610       tmp = RECUR (SWITCH_STMT_COND (t));
10611       finish_switch_cond (tmp, stmt);
10612       RECUR (SWITCH_STMT_BODY (t));
10613       finish_switch_stmt (stmt);
10614       break;
10615
10616     case CASE_LABEL_EXPR:
10617       finish_case_label (RECUR (CASE_LOW (t)),
10618                          RECUR (CASE_HIGH (t)));
10619       break;
10620
10621     case LABEL_EXPR:
10622       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10623       break;
10624
10625     case GOTO_EXPR:
10626       tmp = GOTO_DESTINATION (t);
10627       if (TREE_CODE (tmp) != LABEL_DECL)
10628         /* Computed goto's must be tsubst'd into.  On the other hand,
10629            non-computed gotos must not be; the identifier in question
10630            will have no binding.  */
10631         tmp = RECUR (tmp);
10632       else
10633         tmp = DECL_NAME (tmp);
10634       finish_goto_stmt (tmp);
10635       break;
10636
10637     case ASM_EXPR:
10638       tmp = finish_asm_stmt
10639         (ASM_VOLATILE_P (t),
10640          RECUR (ASM_STRING (t)),
10641          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10642          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10643          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10644       {
10645         tree asm_expr = tmp;
10646         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10647           asm_expr = TREE_OPERAND (asm_expr, 0);
10648         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10649       }
10650       break;
10651
10652     case TRY_BLOCK:
10653       if (CLEANUP_P (t))
10654         {
10655           stmt = begin_try_block ();
10656           RECUR (TRY_STMTS (t));
10657           finish_cleanup_try_block (stmt);
10658           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10659         }
10660       else
10661         {
10662           tree compound_stmt = NULL_TREE;
10663
10664           if (FN_TRY_BLOCK_P (t))
10665             stmt = begin_function_try_block (&compound_stmt);
10666           else
10667             stmt = begin_try_block ();
10668
10669           RECUR (TRY_STMTS (t));
10670
10671           if (FN_TRY_BLOCK_P (t))
10672             finish_function_try_block (stmt);
10673           else
10674             finish_try_block (stmt);
10675
10676           RECUR (TRY_HANDLERS (t));
10677           if (FN_TRY_BLOCK_P (t))
10678             finish_function_handler_sequence (stmt, compound_stmt);
10679           else
10680             finish_handler_sequence (stmt);
10681         }
10682       break;
10683
10684     case HANDLER:
10685       {
10686         tree decl = HANDLER_PARMS (t);
10687
10688         if (decl)
10689           {
10690             decl = tsubst (decl, args, complain, in_decl);
10691             /* Prevent instantiate_decl from trying to instantiate
10692                this variable.  We've already done all that needs to be
10693                done.  */
10694             if (decl != error_mark_node)
10695               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10696           }
10697         stmt = begin_handler ();
10698         finish_handler_parms (decl, stmt);
10699         RECUR (HANDLER_BODY (t));
10700         finish_handler (stmt);
10701       }
10702       break;
10703
10704     case TAG_DEFN:
10705       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10706       break;
10707
10708     case STATIC_ASSERT:
10709       {
10710         tree condition = 
10711           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10712                        args,
10713                        complain, in_decl,
10714                        /*integral_constant_expression_p=*/true);
10715         finish_static_assert (condition,
10716                               STATIC_ASSERT_MESSAGE (t),
10717                               STATIC_ASSERT_SOURCE_LOCATION (t),
10718                               /*member_p=*/false);
10719       }
10720       break;
10721
10722     case OMP_PARALLEL:
10723       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10724                                 args, complain, in_decl);
10725       stmt = begin_omp_parallel ();
10726       RECUR (OMP_PARALLEL_BODY (t));
10727       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10728         = OMP_PARALLEL_COMBINED (t);
10729       break;
10730
10731     case OMP_TASK:
10732       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10733                                 args, complain, in_decl);
10734       stmt = begin_omp_task ();
10735       RECUR (OMP_TASK_BODY (t));
10736       finish_omp_task (tmp, stmt);
10737       break;
10738
10739     case OMP_FOR:
10740       {
10741         tree clauses, body, pre_body;
10742         tree declv, initv, condv, incrv;
10743         int i;
10744
10745         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10746                                       args, complain, in_decl);
10747         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10748         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10749         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10750         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10751
10752         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10753           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10754                                    &clauses, args, complain, in_decl,
10755                                    integral_constant_expression_p);
10756
10757         stmt = begin_omp_structured_block ();
10758
10759         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10760           if (TREE_VEC_ELT (initv, i) == NULL
10761               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10762             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10763           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10764             {
10765               tree init = RECUR (TREE_VEC_ELT (initv, i));
10766               gcc_assert (init == TREE_VEC_ELT (declv, i));
10767               TREE_VEC_ELT (initv, i) = NULL_TREE;
10768             }
10769           else
10770             {
10771               tree decl_expr = TREE_VEC_ELT (initv, i);
10772               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10773               gcc_assert (init != NULL);
10774               TREE_VEC_ELT (initv, i) = RECUR (init);
10775               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10776               RECUR (decl_expr);
10777               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10778             }
10779
10780         pre_body = push_stmt_list ();
10781         RECUR (OMP_FOR_PRE_BODY (t));
10782         pre_body = pop_stmt_list (pre_body);
10783
10784         body = push_stmt_list ();
10785         RECUR (OMP_FOR_BODY (t));
10786         body = pop_stmt_list (body);
10787
10788         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10789                             body, pre_body, clauses);
10790
10791         add_stmt (finish_omp_structured_block (stmt));
10792       }
10793       break;
10794
10795     case OMP_SECTIONS:
10796     case OMP_SINGLE:
10797       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10798       stmt = push_stmt_list ();
10799       RECUR (OMP_BODY (t));
10800       stmt = pop_stmt_list (stmt);
10801
10802       t = copy_node (t);
10803       OMP_BODY (t) = stmt;
10804       OMP_CLAUSES (t) = tmp;
10805       add_stmt (t);
10806       break;
10807
10808     case OMP_SECTION:
10809     case OMP_CRITICAL:
10810     case OMP_MASTER:
10811     case OMP_ORDERED:
10812       stmt = push_stmt_list ();
10813       RECUR (OMP_BODY (t));
10814       stmt = pop_stmt_list (stmt);
10815
10816       t = copy_node (t);
10817       OMP_BODY (t) = stmt;
10818       add_stmt (t);
10819       break;
10820
10821     case OMP_ATOMIC:
10822       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10823       {
10824         tree op1 = TREE_OPERAND (t, 1);
10825         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10826         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10827         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10828       }
10829       break;
10830
10831     case EXPR_PACK_EXPANSION:
10832       error ("invalid use of pack expansion expression");
10833       return error_mark_node;
10834
10835     case NONTYPE_ARGUMENT_PACK:
10836       error ("use %<...%> to expand argument pack");
10837       return error_mark_node;
10838
10839     default:
10840       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10841
10842       return tsubst_copy_and_build (t, args, complain, in_decl,
10843                                     /*function_p=*/false,
10844                                     integral_constant_expression_p);
10845     }
10846
10847   return NULL_TREE;
10848 #undef RECUR
10849 }
10850
10851 /* T is a postfix-expression that is not being used in a function
10852    call.  Return the substituted version of T.  */
10853
10854 static tree
10855 tsubst_non_call_postfix_expression (tree t, tree args,
10856                                     tsubst_flags_t complain,
10857                                     tree in_decl)
10858 {
10859   if (TREE_CODE (t) == SCOPE_REF)
10860     t = tsubst_qualified_id (t, args, complain, in_decl,
10861                              /*done=*/false, /*address_p=*/false);
10862   else
10863     t = tsubst_copy_and_build (t, args, complain, in_decl,
10864                                /*function_p=*/false,
10865                                /*integral_constant_expression_p=*/false);
10866
10867   return t;
10868 }
10869
10870 /* Like tsubst but deals with expressions and performs semantic
10871    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10872
10873 tree
10874 tsubst_copy_and_build (tree t,
10875                        tree args,
10876                        tsubst_flags_t complain,
10877                        tree in_decl,
10878                        bool function_p,
10879                        bool integral_constant_expression_p)
10880 {
10881 #define RECUR(NODE)                                             \
10882   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10883                          /*function_p=*/false,                  \
10884                          integral_constant_expression_p)
10885
10886   tree op1;
10887
10888   if (t == NULL_TREE || t == error_mark_node)
10889     return t;
10890
10891   switch (TREE_CODE (t))
10892     {
10893     case USING_DECL:
10894       t = DECL_NAME (t);
10895       /* Fall through.  */
10896     case IDENTIFIER_NODE:
10897       {
10898         tree decl;
10899         cp_id_kind idk;
10900         bool non_integral_constant_expression_p;
10901         const char *error_msg;
10902
10903         if (IDENTIFIER_TYPENAME_P (t))
10904           {
10905             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10906             t = mangle_conv_op_name_for_type (new_type);
10907           }
10908
10909         /* Look up the name.  */
10910         decl = lookup_name (t);
10911
10912         /* By convention, expressions use ERROR_MARK_NODE to indicate
10913            failure, not NULL_TREE.  */
10914         if (decl == NULL_TREE)
10915           decl = error_mark_node;
10916
10917         decl = finish_id_expression (t, decl, NULL_TREE,
10918                                      &idk,
10919                                      integral_constant_expression_p,
10920                                      /*allow_non_integral_constant_expression_p=*/false,
10921                                      &non_integral_constant_expression_p,
10922                                      /*template_p=*/false,
10923                                      /*done=*/true,
10924                                      /*address_p=*/false,
10925                                      /*template_arg_p=*/false,
10926                                      &error_msg,
10927                                      input_location);
10928         if (error_msg)
10929           error (error_msg);
10930         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10931           decl = unqualified_name_lookup_error (decl);
10932         return decl;
10933       }
10934
10935     case TEMPLATE_ID_EXPR:
10936       {
10937         tree object;
10938         tree templ = RECUR (TREE_OPERAND (t, 0));
10939         tree targs = TREE_OPERAND (t, 1);
10940
10941         if (targs)
10942           targs = tsubst_template_args (targs, args, complain, in_decl);
10943
10944         if (TREE_CODE (templ) == COMPONENT_REF)
10945           {
10946             object = TREE_OPERAND (templ, 0);
10947             templ = TREE_OPERAND (templ, 1);
10948           }
10949         else
10950           object = NULL_TREE;
10951         templ = lookup_template_function (templ, targs);
10952
10953         if (object)
10954           return build3 (COMPONENT_REF, TREE_TYPE (templ),
10955                          object, templ, NULL_TREE);
10956         else
10957           return baselink_for_fns (templ);
10958       }
10959
10960     case INDIRECT_REF:
10961       {
10962         tree r = RECUR (TREE_OPERAND (t, 0));
10963
10964         if (REFERENCE_REF_P (t))
10965           {
10966             /* A type conversion to reference type will be enclosed in
10967                such an indirect ref, but the substitution of the cast
10968                will have also added such an indirect ref.  */
10969             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10970               r = convert_from_reference (r);
10971           }
10972         else
10973           r = build_x_indirect_ref (r, "unary *", complain);
10974         return r;
10975       }
10976
10977     case NOP_EXPR:
10978       return build_nop
10979         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10980          RECUR (TREE_OPERAND (t, 0)));
10981
10982     case CAST_EXPR:
10983     case REINTERPRET_CAST_EXPR:
10984     case CONST_CAST_EXPR:
10985     case DYNAMIC_CAST_EXPR:
10986     case STATIC_CAST_EXPR:
10987       {
10988         tree type;
10989         tree op;
10990
10991         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10992         if (integral_constant_expression_p
10993             && !cast_valid_in_integral_constant_expression_p (type))
10994           {
10995             if (complain & tf_error)
10996               error ("a cast to a type other than an integral or "
10997                      "enumeration type cannot appear in a constant-expression");
10998             return error_mark_node; 
10999           }
11000
11001         op = RECUR (TREE_OPERAND (t, 0));
11002
11003         switch (TREE_CODE (t))
11004           {
11005           case CAST_EXPR:
11006             return build_functional_cast (type, op, complain);
11007           case REINTERPRET_CAST_EXPR:
11008             return build_reinterpret_cast (type, op, complain);
11009           case CONST_CAST_EXPR:
11010             return build_const_cast (type, op, complain);
11011           case DYNAMIC_CAST_EXPR:
11012             return build_dynamic_cast (type, op, complain);
11013           case STATIC_CAST_EXPR:
11014             return build_static_cast (type, op, complain);
11015           default:
11016             gcc_unreachable ();
11017           }
11018       }
11019
11020     case POSTDECREMENT_EXPR:
11021     case POSTINCREMENT_EXPR:
11022       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11023                                                 args, complain, in_decl);
11024       return build_x_unary_op (TREE_CODE (t), op1, complain);
11025
11026     case PREDECREMENT_EXPR:
11027     case PREINCREMENT_EXPR:
11028     case NEGATE_EXPR:
11029     case BIT_NOT_EXPR:
11030     case ABS_EXPR:
11031     case TRUTH_NOT_EXPR:
11032     case UNARY_PLUS_EXPR:  /* Unary + */
11033     case REALPART_EXPR:
11034     case IMAGPART_EXPR:
11035       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11036                                complain);
11037
11038     case ADDR_EXPR:
11039       op1 = TREE_OPERAND (t, 0);
11040       if (TREE_CODE (op1) == SCOPE_REF)
11041         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11042                                    /*done=*/true, /*address_p=*/true);
11043       else
11044         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11045                                                   in_decl);
11046       if (TREE_CODE (op1) == LABEL_DECL)
11047         return finish_label_address_expr (DECL_NAME (op1));
11048       return build_x_unary_op (ADDR_EXPR, op1, complain);
11049
11050     case PLUS_EXPR:
11051     case MINUS_EXPR:
11052     case MULT_EXPR:
11053     case TRUNC_DIV_EXPR:
11054     case CEIL_DIV_EXPR:
11055     case FLOOR_DIV_EXPR:
11056     case ROUND_DIV_EXPR:
11057     case EXACT_DIV_EXPR:
11058     case BIT_AND_EXPR:
11059     case BIT_IOR_EXPR:
11060     case BIT_XOR_EXPR:
11061     case TRUNC_MOD_EXPR:
11062     case FLOOR_MOD_EXPR:
11063     case TRUTH_ANDIF_EXPR:
11064     case TRUTH_ORIF_EXPR:
11065     case TRUTH_AND_EXPR:
11066     case TRUTH_OR_EXPR:
11067     case RSHIFT_EXPR:
11068     case LSHIFT_EXPR:
11069     case RROTATE_EXPR:
11070     case LROTATE_EXPR:
11071     case EQ_EXPR:
11072     case NE_EXPR:
11073     case MAX_EXPR:
11074     case MIN_EXPR:
11075     case LE_EXPR:
11076     case GE_EXPR:
11077     case LT_EXPR:
11078     case GT_EXPR:
11079     case MEMBER_REF:
11080     case DOTSTAR_EXPR:
11081       return build_x_binary_op
11082         (TREE_CODE (t),
11083          RECUR (TREE_OPERAND (t, 0)),
11084          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11085           ? ERROR_MARK
11086           : TREE_CODE (TREE_OPERAND (t, 0))),
11087          RECUR (TREE_OPERAND (t, 1)),
11088          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11089           ? ERROR_MARK
11090           : TREE_CODE (TREE_OPERAND (t, 1))),
11091          /*overloaded_p=*/NULL,
11092          complain);
11093
11094     case SCOPE_REF:
11095       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11096                                   /*address_p=*/false);
11097     case ARRAY_REF:
11098       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11099                                                 args, complain, in_decl);
11100       return build_x_binary_op (ARRAY_REF, op1,
11101                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11102                                  ? ERROR_MARK
11103                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11104                                 RECUR (TREE_OPERAND (t, 1)),
11105                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11106                                  ? ERROR_MARK
11107                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11108                                 /*overloaded_p=*/NULL,
11109                                 complain);
11110
11111     case SIZEOF_EXPR:
11112       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11113         return tsubst_copy (t, args, complain, in_decl);
11114       /* Fall through */
11115       
11116     case ALIGNOF_EXPR:
11117       op1 = TREE_OPERAND (t, 0);
11118       if (!args)
11119         {
11120           /* When there are no ARGS, we are trying to evaluate a
11121              non-dependent expression from the parser.  Trying to do
11122              the substitutions may not work.  */
11123           if (!TYPE_P (op1))
11124             op1 = TREE_TYPE (op1);
11125         }
11126       else
11127         {
11128           ++skip_evaluation;
11129           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11130                                        /*function_p=*/false,
11131                                        /*integral_constant_expression_p=*/false);
11132           --skip_evaluation;
11133         }
11134       if (TYPE_P (op1))
11135         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11136                                            complain & tf_error);
11137       else
11138         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11139                                            complain & tf_error);
11140
11141     case MODOP_EXPR:
11142       {
11143         tree r = build_x_modify_expr
11144           (RECUR (TREE_OPERAND (t, 0)),
11145            TREE_CODE (TREE_OPERAND (t, 1)),
11146            RECUR (TREE_OPERAND (t, 2)),
11147            complain);
11148         /* TREE_NO_WARNING must be set if either the expression was
11149            parenthesized or it uses an operator such as >>= rather
11150            than plain assignment.  In the former case, it was already
11151            set and must be copied.  In the latter case,
11152            build_x_modify_expr sets it and it must not be reset
11153            here.  */
11154         if (TREE_NO_WARNING (t))
11155           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11156         return r;
11157       }
11158
11159     case ARROW_EXPR:
11160       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11161                                                 args, complain, in_decl);
11162       /* Remember that there was a reference to this entity.  */
11163       if (DECL_P (op1))
11164         mark_used (op1);
11165       return build_x_arrow (op1);
11166
11167     case NEW_EXPR:
11168       {
11169         tree init = RECUR (TREE_OPERAND (t, 3));
11170
11171         if (TREE_OPERAND (t, 3) && !init)
11172           /* If there was an initializer in the original tree, but
11173              it instantiated to an empty list, then we should pass on
11174              VOID_ZERO_NODE to tell build_new that it was an empty
11175              initializer () rather than no initializer.  This can only
11176              happen when the initializer is a pack expansion whose
11177              parameter packs are of length zero.  */
11178           init = void_zero_node;
11179
11180         return build_new
11181           (RECUR (TREE_OPERAND (t, 0)),
11182            RECUR (TREE_OPERAND (t, 1)),
11183            RECUR (TREE_OPERAND (t, 2)),
11184            init,
11185            NEW_EXPR_USE_GLOBAL (t),
11186            complain);
11187       }
11188
11189     case DELETE_EXPR:
11190      return delete_sanity
11191        (RECUR (TREE_OPERAND (t, 0)),
11192         RECUR (TREE_OPERAND (t, 1)),
11193         DELETE_EXPR_USE_VEC (t),
11194         DELETE_EXPR_USE_GLOBAL (t));
11195
11196     case COMPOUND_EXPR:
11197       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11198                                     RECUR (TREE_OPERAND (t, 1)),
11199                                     complain);
11200
11201     case CALL_EXPR:
11202       {
11203         tree function;
11204         tree call_args;
11205         bool qualified_p;
11206         bool koenig_p;
11207
11208         function = CALL_EXPR_FN (t);
11209         /* When we parsed the expression,  we determined whether or
11210            not Koenig lookup should be performed.  */
11211         koenig_p = KOENIG_LOOKUP_P (t);
11212         if (TREE_CODE (function) == SCOPE_REF)
11213           {
11214             qualified_p = true;
11215             function = tsubst_qualified_id (function, args, complain, in_decl,
11216                                             /*done=*/false,
11217                                             /*address_p=*/false);
11218           }
11219         else
11220           {
11221             if (TREE_CODE (function) == COMPONENT_REF)
11222               {
11223                 tree op = TREE_OPERAND (function, 1);
11224
11225                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11226                                || (BASELINK_P (op)
11227                                    && BASELINK_QUALIFIED_P (op)));
11228               }
11229             else
11230               qualified_p = false;
11231
11232             function = tsubst_copy_and_build (function, args, complain,
11233                                               in_decl,
11234                                               !qualified_p,
11235                                               integral_constant_expression_p);
11236
11237             if (BASELINK_P (function))
11238               qualified_p = true;
11239           }
11240
11241         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11242         call_args = RECUR (CALL_EXPR_ARGS (t));
11243
11244         /* We do not perform argument-dependent lookup if normal
11245            lookup finds a non-function, in accordance with the
11246            expected resolution of DR 218.  */
11247         if (koenig_p
11248             && ((is_overloaded_fn (function)
11249                  /* If lookup found a member function, the Koenig lookup is
11250                     not appropriate, even if an unqualified-name was used
11251                     to denote the function.  */
11252                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11253                 || TREE_CODE (function) == IDENTIFIER_NODE))
11254           function = perform_koenig_lookup (function, call_args);
11255
11256         if (TREE_CODE (function) == IDENTIFIER_NODE)
11257           {
11258             unqualified_name_lookup_error (function);
11259             return error_mark_node;
11260           }
11261
11262         /* Remember that there was a reference to this entity.  */
11263         if (DECL_P (function))
11264           mark_used (function);
11265
11266         if (TREE_CODE (function) == OFFSET_REF)
11267           return build_offset_ref_call_from_tree (function, call_args);
11268         if (TREE_CODE (function) == COMPONENT_REF)
11269           {
11270             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11271               return finish_call_expr (function, call_args,
11272                                        /*disallow_virtual=*/false,
11273                                        /*koenig_p=*/false,
11274                                        complain);
11275             else
11276               return (build_new_method_call
11277                       (TREE_OPERAND (function, 0),
11278                        TREE_OPERAND (function, 1),
11279                        call_args, NULL_TREE,
11280                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11281                        /*fn_p=*/NULL,
11282                        complain));
11283           }
11284         return finish_call_expr (function, call_args,
11285                                  /*disallow_virtual=*/qualified_p,
11286                                  koenig_p,
11287                                  complain);
11288       }
11289
11290     case COND_EXPR:
11291       return build_x_conditional_expr
11292         (RECUR (TREE_OPERAND (t, 0)),
11293          RECUR (TREE_OPERAND (t, 1)),
11294          RECUR (TREE_OPERAND (t, 2)),
11295          complain);
11296
11297     case PSEUDO_DTOR_EXPR:
11298       return finish_pseudo_destructor_expr
11299         (RECUR (TREE_OPERAND (t, 0)),
11300          RECUR (TREE_OPERAND (t, 1)),
11301          RECUR (TREE_OPERAND (t, 2)));
11302
11303     case TREE_LIST:
11304       {
11305         tree purpose, value, chain;
11306
11307         if (t == void_list_node)
11308           return t;
11309
11310         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11311             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11312           {
11313             /* We have pack expansions, so expand those and
11314                create a new list out of it.  */
11315             tree purposevec = NULL_TREE;
11316             tree valuevec = NULL_TREE;
11317             tree chain;
11318             int i, len = -1;
11319
11320             /* Expand the argument expressions.  */
11321             if (TREE_PURPOSE (t))
11322               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11323                                                  complain, in_decl);
11324             if (TREE_VALUE (t))
11325               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11326                                                complain, in_decl);
11327
11328             /* Build the rest of the list.  */
11329             chain = TREE_CHAIN (t);
11330             if (chain && chain != void_type_node)
11331               chain = RECUR (chain);
11332
11333             /* Determine the number of arguments.  */
11334             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11335               {
11336                 len = TREE_VEC_LENGTH (purposevec);
11337                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11338               }
11339             else if (TREE_CODE (valuevec) == TREE_VEC)
11340               len = TREE_VEC_LENGTH (valuevec);
11341             else
11342               {
11343                 /* Since we only performed a partial substitution into
11344                    the argument pack, we only return a single list
11345                    node.  */
11346                 if (purposevec == TREE_PURPOSE (t)
11347                     && valuevec == TREE_VALUE (t)
11348                     && chain == TREE_CHAIN (t))
11349                   return t;
11350
11351                 return tree_cons (purposevec, valuevec, chain);
11352               }
11353             
11354             /* Convert the argument vectors into a TREE_LIST */
11355             i = len;
11356             while (i > 0)
11357               {
11358                 /* Grab the Ith values.  */
11359                 i--;
11360                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11361                                      : NULL_TREE;
11362                 value 
11363                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11364                              : NULL_TREE;
11365
11366                 /* Build the list (backwards).  */
11367                 chain = tree_cons (purpose, value, chain);
11368               }
11369
11370             return chain;
11371           }
11372
11373         purpose = TREE_PURPOSE (t);
11374         if (purpose)
11375           purpose = RECUR (purpose);
11376         value = TREE_VALUE (t);
11377         if (value)
11378           value = RECUR (value);
11379         chain = TREE_CHAIN (t);
11380         if (chain && chain != void_type_node)
11381           chain = RECUR (chain);
11382         if (purpose == TREE_PURPOSE (t)
11383             && value == TREE_VALUE (t)
11384             && chain == TREE_CHAIN (t))
11385           return t;
11386         return tree_cons (purpose, value, chain);
11387       }
11388
11389     case COMPONENT_REF:
11390       {
11391         tree object;
11392         tree object_type;
11393         tree member;
11394
11395         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11396                                                      args, complain, in_decl);
11397         /* Remember that there was a reference to this entity.  */
11398         if (DECL_P (object))
11399           mark_used (object);
11400         object_type = TREE_TYPE (object);
11401
11402         member = TREE_OPERAND (t, 1);
11403         if (BASELINK_P (member))
11404           member = tsubst_baselink (member,
11405                                     non_reference (TREE_TYPE (object)),
11406                                     args, complain, in_decl);
11407         else
11408           member = tsubst_copy (member, args, complain, in_decl);
11409         if (member == error_mark_node)
11410           return error_mark_node;
11411
11412         if (object_type && !CLASS_TYPE_P (object_type))
11413           {
11414             if (SCALAR_TYPE_P (object_type))
11415               {
11416                 tree s = NULL_TREE;
11417                 tree dtor = member;
11418
11419                 if (TREE_CODE (dtor) == SCOPE_REF)
11420                   {
11421                     s = TREE_OPERAND (dtor, 0);
11422                     dtor = TREE_OPERAND (dtor, 1);
11423                   }
11424                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11425                   {
11426                     dtor = TREE_OPERAND (dtor, 0);
11427                     if (TYPE_P (dtor))
11428                       return finish_pseudo_destructor_expr (object, s, dtor);
11429                   }
11430               }
11431           }
11432         else if (TREE_CODE (member) == SCOPE_REF
11433                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11434           {
11435             tree tmpl;
11436             tree args;
11437
11438             /* Lookup the template functions now that we know what the
11439                scope is.  */
11440             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11441             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11442             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11443                                             /*is_type_p=*/false,
11444                                             /*complain=*/false);
11445             if (BASELINK_P (member))
11446               {
11447                 BASELINK_FUNCTIONS (member)
11448                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11449                               args);
11450                 member = (adjust_result_of_qualified_name_lookup
11451                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11452                            object_type));
11453               }
11454             else
11455               {
11456                 qualified_name_lookup_error (object_type, tmpl, member,
11457                                              input_location);
11458                 return error_mark_node;
11459               }
11460           }
11461         else if (TREE_CODE (member) == SCOPE_REF
11462                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11463                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11464           {
11465             if (complain & tf_error)
11466               {
11467                 if (TYPE_P (TREE_OPERAND (member, 0)))
11468                   error ("%qT is not a class or namespace",
11469                          TREE_OPERAND (member, 0));
11470                 else
11471                   error ("%qD is not a class or namespace",
11472                          TREE_OPERAND (member, 0));
11473               }
11474             return error_mark_node;
11475           }
11476         else if (TREE_CODE (member) == FIELD_DECL)
11477           return finish_non_static_data_member (member, object, NULL_TREE);
11478
11479         return finish_class_member_access_expr (object, member,
11480                                                 /*template_p=*/false,
11481                                                 complain);
11482       }
11483
11484     case THROW_EXPR:
11485       return build_throw
11486         (RECUR (TREE_OPERAND (t, 0)));
11487
11488     case CONSTRUCTOR:
11489       {
11490         VEC(constructor_elt,gc) *n;
11491         constructor_elt *ce;
11492         unsigned HOST_WIDE_INT idx;
11493         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11494         bool process_index_p;
11495         int newlen;
11496         bool need_copy_p = false;
11497         tree r;
11498
11499         if (type == error_mark_node)
11500           return error_mark_node;
11501
11502         /* digest_init will do the wrong thing if we let it.  */
11503         if (type && TYPE_PTRMEMFUNC_P (type))
11504           return t;
11505
11506         /* We do not want to process the index of aggregate
11507            initializers as they are identifier nodes which will be
11508            looked up by digest_init.  */
11509         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11510
11511         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11512         newlen = VEC_length (constructor_elt, n);
11513         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11514           {
11515             if (ce->index && process_index_p)
11516               ce->index = RECUR (ce->index);
11517
11518             if (PACK_EXPANSION_P (ce->value))
11519               {
11520                 /* Substitute into the pack expansion.  */
11521                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11522                                                   in_decl);
11523
11524                 if (ce->value == error_mark_node)
11525                   ;
11526                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11527                   /* Just move the argument into place.  */
11528                   ce->value = TREE_VEC_ELT (ce->value, 0);
11529                 else
11530                   {
11531                     /* Update the length of the final CONSTRUCTOR
11532                        arguments vector, and note that we will need to
11533                        copy.*/
11534                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11535                     need_copy_p = true;
11536                   }
11537               }
11538             else
11539               ce->value = RECUR (ce->value);
11540           }
11541
11542         if (need_copy_p)
11543           {
11544             VEC(constructor_elt,gc) *old_n = n;
11545
11546             n = VEC_alloc (constructor_elt, gc, newlen);
11547             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11548                  idx++)
11549               {
11550                 if (TREE_CODE (ce->value) == TREE_VEC)
11551                   {
11552                     int i, len = TREE_VEC_LENGTH (ce->value);
11553                     for (i = 0; i < len; ++i)
11554                       CONSTRUCTOR_APPEND_ELT (n, 0,
11555                                               TREE_VEC_ELT (ce->value, i));
11556                   }
11557                 else
11558                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11559               }
11560           }
11561
11562         r = build_constructor (init_list_type_node, n);
11563
11564         if (TREE_HAS_CONSTRUCTOR (t))
11565           return finish_compound_literal (type, r);
11566
11567         return r;
11568       }
11569
11570     case TYPEID_EXPR:
11571       {
11572         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11573         if (TYPE_P (operand_0))
11574           return get_typeid (operand_0);
11575         return build_typeid (operand_0);
11576       }
11577
11578     case VAR_DECL:
11579       if (!args)
11580         return t;
11581       /* Fall through */
11582
11583     case PARM_DECL:
11584       {
11585         tree r = tsubst_copy (t, args, complain, in_decl);
11586
11587         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11588           /* If the original type was a reference, we'll be wrapped in
11589              the appropriate INDIRECT_REF.  */
11590           r = convert_from_reference (r);
11591         return r;
11592       }
11593
11594     case VA_ARG_EXPR:
11595       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11596                              tsubst_copy (TREE_TYPE (t), args, complain,
11597                                           in_decl));
11598
11599     case OFFSETOF_EXPR:
11600       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11601
11602     case TRAIT_EXPR:
11603       {
11604         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11605                                   complain, in_decl);
11606
11607         tree type2 = TRAIT_EXPR_TYPE2 (t);
11608         if (type2)
11609           type2 = tsubst_copy (type2, args, complain, in_decl);
11610         
11611         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11612       }
11613
11614     case STMT_EXPR:
11615       {
11616         tree old_stmt_expr = cur_stmt_expr;
11617         tree stmt_expr = begin_stmt_expr ();
11618
11619         cur_stmt_expr = stmt_expr;
11620         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11621                      integral_constant_expression_p);
11622         stmt_expr = finish_stmt_expr (stmt_expr, false);
11623         cur_stmt_expr = old_stmt_expr;
11624
11625         return stmt_expr;
11626       }
11627
11628     case CONST_DECL:
11629       t = tsubst_copy (t, args, complain, in_decl);
11630       /* As in finish_id_expression, we resolve enumeration constants
11631          to their underlying values.  */
11632       if (TREE_CODE (t) == CONST_DECL)
11633         {
11634           used_types_insert (TREE_TYPE (t));
11635           return DECL_INITIAL (t);
11636         }
11637       return t;
11638
11639     default:
11640       /* Handle Objective-C++ constructs, if appropriate.  */
11641       {
11642         tree subst
11643           = objcp_tsubst_copy_and_build (t, args, complain,
11644                                          in_decl, /*function_p=*/false);
11645         if (subst)
11646           return subst;
11647       }
11648       return tsubst_copy (t, args, complain, in_decl);
11649     }
11650
11651 #undef RECUR
11652 }
11653
11654 /* Verify that the instantiated ARGS are valid. For type arguments,
11655    make sure that the type's linkage is ok. For non-type arguments,
11656    make sure they are constants if they are integral or enumerations.
11657    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11658
11659 static bool
11660 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11661 {
11662   int ix, len = DECL_NTPARMS (tmpl);
11663   bool result = false;
11664
11665   for (ix = 0; ix != len; ix++)
11666     {
11667       tree t = TREE_VEC_ELT (args, ix);
11668
11669       if (TYPE_P (t))
11670         {
11671           /* [basic.link]: A name with no linkage (notably, the name
11672              of a class or enumeration declared in a local scope)
11673              shall not be used to declare an entity with linkage.
11674              This implies that names with no linkage cannot be used as
11675              template arguments.  */
11676           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11677
11678           if (nt)
11679             {
11680               /* DR 488 makes use of a type with no linkage cause
11681                  type deduction to fail.  */
11682               if (complain & tf_error)
11683                 {
11684                   if (TYPE_ANONYMOUS_P (nt))
11685                     error ("%qT is/uses anonymous type", t);
11686                   else
11687                     error ("template argument for %qD uses local type %qT",
11688                            tmpl, t);
11689                 }
11690               result = true;
11691             }
11692           /* In order to avoid all sorts of complications, we do not
11693              allow variably-modified types as template arguments.  */
11694           else if (variably_modified_type_p (t, NULL_TREE))
11695             {
11696               if (complain & tf_error)
11697                 error ("%qT is a variably modified type", t);
11698               result = true;
11699             }
11700         }
11701       /* A non-type argument of integral or enumerated type must be a
11702          constant.  */
11703       else if (TREE_TYPE (t)
11704                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11705                && !TREE_CONSTANT (t))
11706         {
11707           if (complain & tf_error)
11708             error ("integral expression %qE is not constant", t);
11709           result = true;
11710         }
11711     }
11712   if (result && (complain & tf_error))
11713     error ("  trying to instantiate %qD", tmpl);
11714   return result;
11715 }
11716
11717 /* Instantiate the indicated variable or function template TMPL with
11718    the template arguments in TARG_PTR.  */
11719
11720 tree
11721 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11722 {
11723   tree fndecl;
11724   tree gen_tmpl;
11725   tree spec;
11726   HOST_WIDE_INT saved_processing_template_decl;
11727
11728   if (tmpl == error_mark_node)
11729     return error_mark_node;
11730
11731   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11732
11733   /* If this function is a clone, handle it specially.  */
11734   if (DECL_CLONED_FUNCTION_P (tmpl))
11735     {
11736       tree spec;
11737       tree clone;
11738
11739       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11740                                    complain);
11741       if (spec == error_mark_node)
11742         return error_mark_node;
11743
11744       /* Look for the clone.  */
11745       FOR_EACH_CLONE (clone, spec)
11746         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11747           return clone;
11748       /* We should always have found the clone by now.  */
11749       gcc_unreachable ();
11750       return NULL_TREE;
11751     }
11752
11753   /* Check to see if we already have this specialization.  */
11754   spec = retrieve_specialization (tmpl, targ_ptr,
11755                                   /*class_specializations_p=*/false);
11756   if (spec != NULL_TREE)
11757     return spec;
11758
11759   gen_tmpl = most_general_template (tmpl);
11760   if (tmpl != gen_tmpl)
11761     {
11762       /* The TMPL is a partial instantiation.  To get a full set of
11763          arguments we must add the arguments used to perform the
11764          partial instantiation.  */
11765       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11766                                               targ_ptr);
11767
11768       /* Check to see if we already have this specialization.  */
11769       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11770                                       /*class_specializations_p=*/false);
11771       if (spec != NULL_TREE)
11772         return spec;
11773     }
11774
11775   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11776                                complain))
11777     return error_mark_node;
11778
11779   /* We are building a FUNCTION_DECL, during which the access of its
11780      parameters and return types have to be checked.  However this
11781      FUNCTION_DECL which is the desired context for access checking
11782      is not built yet.  We solve this chicken-and-egg problem by
11783      deferring all checks until we have the FUNCTION_DECL.  */
11784   push_deferring_access_checks (dk_deferred);
11785
11786   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11787      (because, for example, we have encountered a non-dependent
11788      function call in the body of a template function and must now
11789      determine which of several overloaded functions will be called),
11790      within the instantiation itself we are not processing a
11791      template.  */  
11792   saved_processing_template_decl = processing_template_decl;
11793   processing_template_decl = 0;
11794   /* Substitute template parameters to obtain the specialization.  */
11795   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11796                    targ_ptr, complain, gen_tmpl);
11797   processing_template_decl = saved_processing_template_decl;
11798   if (fndecl == error_mark_node)
11799     return error_mark_node;
11800
11801   /* Now we know the specialization, compute access previously
11802      deferred.  */
11803   push_access_scope (fndecl);
11804   perform_deferred_access_checks ();
11805   pop_access_scope (fndecl);
11806   pop_deferring_access_checks ();
11807
11808   /* The DECL_TI_TEMPLATE should always be the immediate parent
11809      template, not the most general template.  */
11810   DECL_TI_TEMPLATE (fndecl) = tmpl;
11811
11812   /* If we've just instantiated the main entry point for a function,
11813      instantiate all the alternate entry points as well.  We do this
11814      by cloning the instantiation of the main entry point, not by
11815      instantiating the template clones.  */
11816   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11817     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11818
11819   return fndecl;
11820 }
11821
11822 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11823    arguments that are being used when calling it.  TARGS is a vector
11824    into which the deduced template arguments are placed.
11825
11826    Return zero for success, 2 for an incomplete match that doesn't resolve
11827    all the types, and 1 for complete failure.  An error message will be
11828    printed only for an incomplete match.
11829
11830    If FN is a conversion operator, or we are trying to produce a specific
11831    specialization, RETURN_TYPE is the return type desired.
11832
11833    The EXPLICIT_TARGS are explicit template arguments provided via a
11834    template-id.
11835
11836    The parameter STRICT is one of:
11837
11838    DEDUCE_CALL:
11839      We are deducing arguments for a function call, as in
11840      [temp.deduct.call].
11841
11842    DEDUCE_CONV:
11843      We are deducing arguments for a conversion function, as in
11844      [temp.deduct.conv].
11845
11846    DEDUCE_EXACT:
11847      We are deducing arguments when doing an explicit instantiation
11848      as in [temp.explicit], when determining an explicit specialization
11849      as in [temp.expl.spec], or when taking the address of a function
11850      template, as in [temp.deduct.funcaddr].  */
11851
11852 int
11853 fn_type_unification (tree fn,
11854                      tree explicit_targs,
11855                      tree targs,
11856                      tree args,
11857                      tree return_type,
11858                      unification_kind_t strict,
11859                      int flags)
11860 {
11861   tree parms;
11862   tree fntype;
11863   int result;
11864   bool incomplete_argument_packs_p = false;
11865
11866   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11867
11868   fntype = TREE_TYPE (fn);
11869   if (explicit_targs)
11870     {
11871       /* [temp.deduct]
11872
11873          The specified template arguments must match the template
11874          parameters in kind (i.e., type, nontype, template), and there
11875          must not be more arguments than there are parameters;
11876          otherwise type deduction fails.
11877
11878          Nontype arguments must match the types of the corresponding
11879          nontype template parameters, or must be convertible to the
11880          types of the corresponding nontype parameters as specified in
11881          _temp.arg.nontype_, otherwise type deduction fails.
11882
11883          All references in the function type of the function template
11884          to the corresponding template parameters are replaced by the
11885          specified template argument values.  If a substitution in a
11886          template parameter or in the function type of the function
11887          template results in an invalid type, type deduction fails.  */
11888       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11889       int i, len = TREE_VEC_LENGTH (tparms);
11890       tree converted_args;
11891       bool incomplete = false;
11892
11893       if (explicit_targs == error_mark_node)
11894         return 1;
11895
11896       converted_args
11897         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11898                                   /*require_all_args=*/false,
11899                                   /*use_default_args=*/false));
11900       if (converted_args == error_mark_node)
11901         return 1;
11902
11903       /* Substitute the explicit args into the function type.  This is
11904          necessary so that, for instance, explicitly declared function
11905          arguments can match null pointed constants.  If we were given
11906          an incomplete set of explicit args, we must not do semantic
11907          processing during substitution as we could create partial
11908          instantiations.  */
11909       for (i = 0; i < len; i++)
11910         {
11911           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11912           bool parameter_pack = false;
11913
11914           /* Dig out the actual parm.  */
11915           if (TREE_CODE (parm) == TYPE_DECL
11916               || TREE_CODE (parm) == TEMPLATE_DECL)
11917             {
11918               parm = TREE_TYPE (parm);
11919               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11920             }
11921           else if (TREE_CODE (parm) == PARM_DECL)
11922             {
11923               parm = DECL_INITIAL (parm);
11924               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11925             }
11926
11927           if (parameter_pack)
11928             {
11929               int level, idx;
11930               tree targ;
11931               template_parm_level_and_index (parm, &level, &idx);
11932
11933               /* Mark the argument pack as "incomplete". We could
11934                  still deduce more arguments during unification.  */
11935               targ = TMPL_ARG (converted_args, level, idx);
11936               if (targ)
11937                 {
11938                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11939                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11940                     = ARGUMENT_PACK_ARGS (targ);
11941                 }
11942
11943               /* We have some incomplete argument packs.  */
11944               incomplete_argument_packs_p = true;
11945             }
11946         }
11947
11948       if (incomplete_argument_packs_p)
11949         /* Any substitution is guaranteed to be incomplete if there
11950            are incomplete argument packs, because we can still deduce
11951            more arguments.  */
11952         incomplete = 1;
11953       else
11954         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11955
11956       processing_template_decl += incomplete;
11957       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11958       processing_template_decl -= incomplete;
11959
11960       if (fntype == error_mark_node)
11961         return 1;
11962
11963       /* Place the explicitly specified arguments in TARGS.  */
11964       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11965         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11966     }
11967
11968   /* Never do unification on the 'this' parameter.  */
11969   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11970
11971   if (return_type)
11972     {
11973       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11974       args = tree_cons (NULL_TREE, return_type, args);
11975     }
11976
11977   /* We allow incomplete unification without an error message here
11978      because the standard doesn't seem to explicitly prohibit it.  Our
11979      callers must be ready to deal with unification failures in any
11980      event.  */
11981   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11982                                   targs, parms, args, /*subr=*/0,
11983                                   strict, flags);
11984
11985   if (result == 0 && incomplete_argument_packs_p)
11986     {
11987       int i, len = NUM_TMPL_ARGS (targs);
11988
11989       /* Clear the "incomplete" flags on all argument packs.  */
11990       for (i = 0; i < len; i++)
11991         {
11992           tree arg = TREE_VEC_ELT (targs, i);
11993           if (ARGUMENT_PACK_P (arg))
11994             {
11995               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11996               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11997             }
11998         }
11999     }
12000
12001   /* Now that we have bindings for all of the template arguments,
12002      ensure that the arguments deduced for the template template
12003      parameters have compatible template parameter lists.  We cannot
12004      check this property before we have deduced all template
12005      arguments, because the template parameter types of a template
12006      template parameter might depend on prior template parameters
12007      deduced after the template template parameter.  The following
12008      ill-formed example illustrates this issue:
12009
12010        template<typename T, template<T> class C> void f(C<5>, T);
12011
12012        template<int N> struct X {};
12013
12014        void g() {
12015          f(X<5>(), 5l); // error: template argument deduction fails
12016        }
12017
12018      The template parameter list of 'C' depends on the template type
12019      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12020      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12021      time that we deduce 'C'.  */
12022   if (result == 0
12023       && !template_template_parm_bindings_ok_p 
12024            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12025     return 1;
12026
12027   if (result == 0)
12028     /* All is well so far.  Now, check:
12029
12030        [temp.deduct]
12031
12032        When all template arguments have been deduced, all uses of
12033        template parameters in nondeduced contexts are replaced with
12034        the corresponding deduced argument values.  If the
12035        substitution results in an invalid type, as described above,
12036        type deduction fails.  */
12037     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12038         == error_mark_node)
12039       return 1;
12040
12041   return result;
12042 }
12043
12044 /* Adjust types before performing type deduction, as described in
12045    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12046    sections are symmetric.  PARM is the type of a function parameter
12047    or the return type of the conversion function.  ARG is the type of
12048    the argument passed to the call, or the type of the value
12049    initialized with the result of the conversion function.
12050    ARG_EXPR is the original argument expression, which may be null.  */
12051
12052 static int
12053 maybe_adjust_types_for_deduction (unification_kind_t strict,
12054                                   tree* parm,
12055                                   tree* arg,
12056                                   tree arg_expr)
12057 {
12058   int result = 0;
12059
12060   switch (strict)
12061     {
12062     case DEDUCE_CALL:
12063       break;
12064
12065     case DEDUCE_CONV:
12066       {
12067         /* Swap PARM and ARG throughout the remainder of this
12068            function; the handling is precisely symmetric since PARM
12069            will initialize ARG rather than vice versa.  */
12070         tree* temp = parm;
12071         parm = arg;
12072         arg = temp;
12073         break;
12074       }
12075
12076     case DEDUCE_EXACT:
12077       /* There is nothing to do in this case.  */
12078       return 0;
12079
12080     default:
12081       gcc_unreachable ();
12082     }
12083
12084   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12085     {
12086       /* [temp.deduct.call]
12087
12088          If P is not a reference type:
12089
12090          --If A is an array type, the pointer type produced by the
12091          array-to-pointer standard conversion (_conv.array_) is
12092          used in place of A for type deduction; otherwise,
12093
12094          --If A is a function type, the pointer type produced by
12095          the function-to-pointer standard conversion
12096          (_conv.func_) is used in place of A for type deduction;
12097          otherwise,
12098
12099          --If A is a cv-qualified type, the top level
12100          cv-qualifiers of A's type are ignored for type
12101          deduction.  */
12102       if (TREE_CODE (*arg) == ARRAY_TYPE)
12103         *arg = build_pointer_type (TREE_TYPE (*arg));
12104       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12105         *arg = build_pointer_type (*arg);
12106       else
12107         *arg = TYPE_MAIN_VARIANT (*arg);
12108     }
12109
12110   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12111      of the form T&&, where T is a template parameter, and the argument
12112      is an lvalue, T is deduced as A& */
12113   if (TREE_CODE (*parm) == REFERENCE_TYPE
12114       && TYPE_REF_IS_RVALUE (*parm)
12115       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12116       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12117       && arg_expr && real_lvalue_p (arg_expr))
12118     *arg = build_reference_type (*arg);
12119
12120   /* [temp.deduct.call]
12121
12122      If P is a cv-qualified type, the top level cv-qualifiers
12123      of P's type are ignored for type deduction.  If P is a
12124      reference type, the type referred to by P is used for
12125      type deduction.  */
12126   *parm = TYPE_MAIN_VARIANT (*parm);
12127   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12128     {
12129       *parm = TREE_TYPE (*parm);
12130       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12131     }
12132
12133   /* DR 322. For conversion deduction, remove a reference type on parm
12134      too (which has been swapped into ARG).  */
12135   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12136     *arg = TREE_TYPE (*arg);
12137
12138   return result;
12139 }
12140
12141 /* Most parms like fn_type_unification.
12142
12143    If SUBR is 1, we're being called recursively (to unify the
12144    arguments of a function or method parameter of a function
12145    template). */
12146
12147 static int
12148 type_unification_real (tree tparms,
12149                        tree targs,
12150                        tree xparms,
12151                        tree xargs,
12152                        int subr,
12153                        unification_kind_t strict,
12154                        int flags)
12155 {
12156   tree parm, arg, arg_expr;
12157   int i;
12158   int ntparms = TREE_VEC_LENGTH (tparms);
12159   int sub_strict;
12160   int saw_undeduced = 0;
12161   tree parms, args;
12162
12163   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12164   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12165   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12166   gcc_assert (ntparms > 0);
12167
12168   switch (strict)
12169     {
12170     case DEDUCE_CALL:
12171       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12172                     | UNIFY_ALLOW_DERIVED);
12173       break;
12174
12175     case DEDUCE_CONV:
12176       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12177       break;
12178
12179     case DEDUCE_EXACT:
12180       sub_strict = UNIFY_ALLOW_NONE;
12181       break;
12182
12183     default:
12184       gcc_unreachable ();
12185     }
12186
12187  again:
12188   parms = xparms;
12189   args = xargs;
12190
12191   while (parms && parms != void_list_node
12192          && args && args != void_list_node)
12193     {
12194       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12195         break;
12196
12197       parm = TREE_VALUE (parms);
12198       parms = TREE_CHAIN (parms);
12199       arg = TREE_VALUE (args);
12200       args = TREE_CHAIN (args);
12201       arg_expr = NULL;
12202
12203       if (arg == error_mark_node)
12204         return 1;
12205       if (arg == unknown_type_node)
12206         /* We can't deduce anything from this, but we might get all the
12207            template args from other function args.  */
12208         continue;
12209
12210       /* Conversions will be performed on a function argument that
12211          corresponds with a function parameter that contains only
12212          non-deducible template parameters and explicitly specified
12213          template parameters.  */
12214       if (!uses_template_parms (parm))
12215         {
12216           tree type;
12217
12218           if (!TYPE_P (arg))
12219             type = TREE_TYPE (arg);
12220           else
12221             type = arg;
12222
12223           if (same_type_p (parm, type))
12224             continue;
12225           if (strict != DEDUCE_EXACT
12226               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12227                                   flags))
12228             continue;
12229
12230           return 1;
12231         }
12232
12233       if (!TYPE_P (arg))
12234         {
12235           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12236           if (type_unknown_p (arg))
12237             {
12238               /* [temp.deduct.type] 
12239
12240                  A template-argument can be deduced from a pointer to
12241                  function or pointer to member function argument if
12242                  the set of overloaded functions does not contain
12243                  function templates and at most one of a set of
12244                  overloaded functions provides a unique match.  */
12245               if (resolve_overloaded_unification
12246                   (tparms, targs, parm, arg, strict, sub_strict))
12247                 continue;
12248
12249               return 1;
12250             }
12251           arg_expr = arg;
12252           arg = unlowered_expr_type (arg);
12253           if (arg == error_mark_node)
12254             return 1;
12255         }
12256
12257       {
12258         int arg_strict = sub_strict;
12259
12260         if (!subr)
12261           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12262                                                           arg_expr);
12263
12264         if (arg == init_list_type_node && arg_expr)
12265           arg = arg_expr;
12266         if (unify (tparms, targs, parm, arg, arg_strict))
12267           return 1;
12268       }
12269     }
12270
12271
12272   if (parms 
12273       && parms != void_list_node
12274       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12275     {
12276       /* Unify the remaining arguments with the pack expansion type.  */
12277       tree argvec;
12278       tree parmvec = make_tree_vec (1);
12279       int len = 0;
12280       tree t;
12281
12282       /* Count the number of arguments that remain.  */
12283       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12284         len++;
12285         
12286       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12287       argvec = make_tree_vec (len);
12288       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12289         {
12290           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12291           ++i;
12292         }
12293
12294       /* Copy the parameter into parmvec.  */
12295       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12296       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12297                                 /*call_args_p=*/true, /*subr=*/subr))
12298         return 1;
12299
12300       /* Advance to the end of the list of parameters.  */
12301       parms = TREE_CHAIN (parms);
12302     }
12303
12304   /* Fail if we've reached the end of the parm list, and more args
12305      are present, and the parm list isn't variadic.  */
12306   if (args && args != void_list_node && parms == void_list_node)
12307     return 1;
12308   /* Fail if parms are left and they don't have default values.  */
12309   if (parms && parms != void_list_node
12310       && TREE_PURPOSE (parms) == NULL_TREE)
12311     return 1;
12312
12313   if (!subr)
12314     for (i = 0; i < ntparms; i++)
12315       if (!TREE_VEC_ELT (targs, i))
12316         {
12317           tree tparm;
12318
12319           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12320             continue;
12321
12322           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12323
12324           /* If this is an undeduced nontype parameter that depends on
12325              a type parameter, try another pass; its type may have been
12326              deduced from a later argument than the one from which
12327              this parameter can be deduced.  */
12328           if (TREE_CODE (tparm) == PARM_DECL
12329               && uses_template_parms (TREE_TYPE (tparm))
12330               && !saw_undeduced++)
12331             goto again;
12332
12333           /* Core issue #226 (C++0x) [temp.deduct]:
12334
12335                If a template argument has not been deduced, its
12336                default template argument, if any, is used. 
12337
12338              When we are in C++98 mode, TREE_PURPOSE will either
12339              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12340              to explicitly check cxx_dialect here.  */
12341           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12342             {
12343               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12344                                  targs, tf_none, NULL_TREE);
12345               if (arg == error_mark_node)
12346                 return 1;
12347               else
12348                 {
12349                   TREE_VEC_ELT (targs, i) = arg;
12350                   continue;
12351                 }
12352             }
12353
12354           /* If the type parameter is a parameter pack, then it will
12355              be deduced to an empty parameter pack.  */
12356           if (template_parameter_pack_p (tparm))
12357             {
12358               tree arg;
12359
12360               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12361                 {
12362                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12363                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12364                   TREE_CONSTANT (arg) = 1;
12365                 }
12366               else
12367                 arg = make_node (TYPE_ARGUMENT_PACK);
12368
12369               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12370
12371               TREE_VEC_ELT (targs, i) = arg;
12372               continue;
12373             }
12374
12375           return 2;
12376         }
12377
12378   return 0;
12379 }
12380
12381 /* Subroutine of type_unification_real.  Args are like the variables
12382    at the call site.  ARG is an overloaded function (or template-id);
12383    we try deducing template args from each of the overloads, and if
12384    only one succeeds, we go with that.  Modifies TARGS and returns
12385    true on success.  */
12386
12387 static bool
12388 resolve_overloaded_unification (tree tparms,
12389                                 tree targs,
12390                                 tree parm,
12391                                 tree arg,
12392                                 unification_kind_t strict,
12393                                 int sub_strict)
12394 {
12395   tree tempargs = copy_node (targs);
12396   int good = 0;
12397   bool addr_p;
12398
12399   if (TREE_CODE (arg) == ADDR_EXPR)
12400     {
12401       arg = TREE_OPERAND (arg, 0);
12402       addr_p = true;
12403     }
12404   else
12405     addr_p = false;
12406
12407   if (TREE_CODE (arg) == COMPONENT_REF)
12408     /* Handle `&x' where `x' is some static or non-static member
12409        function name.  */
12410     arg = TREE_OPERAND (arg, 1);
12411
12412   if (TREE_CODE (arg) == OFFSET_REF)
12413     arg = TREE_OPERAND (arg, 1);
12414
12415   /* Strip baselink information.  */
12416   if (BASELINK_P (arg))
12417     arg = BASELINK_FUNCTIONS (arg);
12418
12419   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12420     {
12421       /* If we got some explicit template args, we need to plug them into
12422          the affected templates before we try to unify, in case the
12423          explicit args will completely resolve the templates in question.  */
12424
12425       tree expl_subargs = TREE_OPERAND (arg, 1);
12426       arg = TREE_OPERAND (arg, 0);
12427
12428       for (; arg; arg = OVL_NEXT (arg))
12429         {
12430           tree fn = OVL_CURRENT (arg);
12431           tree subargs, elem;
12432
12433           if (TREE_CODE (fn) != TEMPLATE_DECL)
12434             continue;
12435
12436           ++processing_template_decl;
12437           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12438                                   expl_subargs, /*check_ret=*/false);
12439           if (subargs)
12440             {
12441               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12442               good += try_one_overload (tparms, targs, tempargs, parm,
12443                                         elem, strict, sub_strict, addr_p);
12444             }
12445           --processing_template_decl;
12446         }
12447     }
12448   else if (TREE_CODE (arg) != OVERLOAD
12449            && TREE_CODE (arg) != FUNCTION_DECL)
12450     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12451        -- but the deduction does not succeed because the expression is
12452        not just the function on its own.  */
12453     return false;
12454   else
12455     for (; arg; arg = OVL_NEXT (arg))
12456       good += try_one_overload (tparms, targs, tempargs, parm,
12457                                 TREE_TYPE (OVL_CURRENT (arg)),
12458                                 strict, sub_strict, addr_p);
12459
12460   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12461      to function or pointer to member function argument if the set of
12462      overloaded functions does not contain function templates and at most
12463      one of a set of overloaded functions provides a unique match.
12464
12465      So if we found multiple possibilities, we return success but don't
12466      deduce anything.  */
12467
12468   if (good == 1)
12469     {
12470       int i = TREE_VEC_LENGTH (targs);
12471       for (; i--; )
12472         if (TREE_VEC_ELT (tempargs, i))
12473           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12474     }
12475   if (good)
12476     return true;
12477
12478   return false;
12479 }
12480
12481 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12482    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12483    different overloads deduce different arguments for a given parm.
12484    ADDR_P is true if the expression for which deduction is being
12485    performed was of the form "& fn" rather than simply "fn".
12486
12487    Returns 1 on success.  */
12488
12489 static int
12490 try_one_overload (tree tparms,
12491                   tree orig_targs,
12492                   tree targs,
12493                   tree parm,
12494                   tree arg,
12495                   unification_kind_t strict,
12496                   int sub_strict,
12497                   bool addr_p)
12498 {
12499   int nargs;
12500   tree tempargs;
12501   int i;
12502
12503   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12504      to function or pointer to member function argument if the set of
12505      overloaded functions does not contain function templates and at most
12506      one of a set of overloaded functions provides a unique match.
12507
12508      So if this is a template, just return success.  */
12509
12510   if (uses_template_parms (arg))
12511     return 1;
12512
12513   if (TREE_CODE (arg) == METHOD_TYPE)
12514     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12515   else if (addr_p)
12516     arg = build_pointer_type (arg);
12517
12518   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12519
12520   /* We don't copy orig_targs for this because if we have already deduced
12521      some template args from previous args, unify would complain when we
12522      try to deduce a template parameter for the same argument, even though
12523      there isn't really a conflict.  */
12524   nargs = TREE_VEC_LENGTH (targs);
12525   tempargs = make_tree_vec (nargs);
12526
12527   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12528     return 0;
12529
12530   /* First make sure we didn't deduce anything that conflicts with
12531      explicitly specified args.  */
12532   for (i = nargs; i--; )
12533     {
12534       tree elt = TREE_VEC_ELT (tempargs, i);
12535       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12536
12537       if (!elt)
12538         /*NOP*/;
12539       else if (uses_template_parms (elt))
12540         /* Since we're unifying against ourselves, we will fill in
12541            template args used in the function parm list with our own
12542            template parms.  Discard them.  */
12543         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12544       else if (oldelt && !template_args_equal (oldelt, elt))
12545         return 0;
12546     }
12547
12548   for (i = nargs; i--; )
12549     {
12550       tree elt = TREE_VEC_ELT (tempargs, i);
12551
12552       if (elt)
12553         TREE_VEC_ELT (targs, i) = elt;
12554     }
12555
12556   return 1;
12557 }
12558
12559 /* PARM is a template class (perhaps with unbound template
12560    parameters).  ARG is a fully instantiated type.  If ARG can be
12561    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12562    TARGS are as for unify.  */
12563
12564 static tree
12565 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12566 {
12567   tree copy_of_targs;
12568
12569   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12570       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12571           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12572     return NULL_TREE;
12573
12574   /* We need to make a new template argument vector for the call to
12575      unify.  If we used TARGS, we'd clutter it up with the result of
12576      the attempted unification, even if this class didn't work out.
12577      We also don't want to commit ourselves to all the unifications
12578      we've already done, since unification is supposed to be done on
12579      an argument-by-argument basis.  In other words, consider the
12580      following pathological case:
12581
12582        template <int I, int J, int K>
12583        struct S {};
12584
12585        template <int I, int J>
12586        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12587
12588        template <int I, int J, int K>
12589        void f(S<I, J, K>, S<I, I, I>);
12590
12591        void g() {
12592          S<0, 0, 0> s0;
12593          S<0, 1, 2> s2;
12594
12595          f(s0, s2);
12596        }
12597
12598      Now, by the time we consider the unification involving `s2', we
12599      already know that we must have `f<0, 0, 0>'.  But, even though
12600      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12601      because there are two ways to unify base classes of S<0, 1, 2>
12602      with S<I, I, I>.  If we kept the already deduced knowledge, we
12603      would reject the possibility I=1.  */
12604   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12605
12606   /* If unification failed, we're done.  */
12607   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12608              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12609     return NULL_TREE;
12610
12611   return arg;
12612 }
12613
12614 /* Given a template type PARM and a class type ARG, find the unique
12615    base type in ARG that is an instance of PARM.  We do not examine
12616    ARG itself; only its base-classes.  If there is not exactly one
12617    appropriate base class, return NULL_TREE.  PARM may be the type of
12618    a partial specialization, as well as a plain template type.  Used
12619    by unify.  */
12620
12621 static tree
12622 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12623 {
12624   tree rval = NULL_TREE;
12625   tree binfo;
12626
12627   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12628
12629   binfo = TYPE_BINFO (complete_type (arg));
12630   if (!binfo)
12631     /* The type could not be completed.  */
12632     return NULL_TREE;
12633
12634   /* Walk in inheritance graph order.  The search order is not
12635      important, and this avoids multiple walks of virtual bases.  */
12636   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12637     {
12638       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12639
12640       if (r)
12641         {
12642           /* If there is more than one satisfactory baseclass, then:
12643
12644                [temp.deduct.call]
12645
12646               If they yield more than one possible deduced A, the type
12647               deduction fails.
12648
12649              applies.  */
12650           if (rval && !same_type_p (r, rval))
12651             return NULL_TREE;
12652
12653           rval = r;
12654         }
12655     }
12656
12657   return rval;
12658 }
12659
12660 /* Returns the level of DECL, which declares a template parameter.  */
12661
12662 static int
12663 template_decl_level (tree decl)
12664 {
12665   switch (TREE_CODE (decl))
12666     {
12667     case TYPE_DECL:
12668     case TEMPLATE_DECL:
12669       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12670
12671     case PARM_DECL:
12672       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12673
12674     default:
12675       gcc_unreachable ();
12676     }
12677   return 0;
12678 }
12679
12680 /* Decide whether ARG can be unified with PARM, considering only the
12681    cv-qualifiers of each type, given STRICT as documented for unify.
12682    Returns nonzero iff the unification is OK on that basis.  */
12683
12684 static int
12685 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12686 {
12687   int arg_quals = cp_type_quals (arg);
12688   int parm_quals = cp_type_quals (parm);
12689
12690   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12691       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12692     {
12693       /*  Although a CVR qualifier is ignored when being applied to a
12694           substituted template parameter ([8.3.2]/1 for example), that
12695           does not apply during deduction [14.8.2.4]/1, (even though
12696           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12697           this).  Except when we're allowing additional CV qualifiers
12698           at the outer level [14.8.2.1]/3,1st bullet.  */
12699       if ((TREE_CODE (arg) == REFERENCE_TYPE
12700            || TREE_CODE (arg) == FUNCTION_TYPE
12701            || TREE_CODE (arg) == METHOD_TYPE)
12702           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12703         return 0;
12704
12705       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12706           && (parm_quals & TYPE_QUAL_RESTRICT))
12707         return 0;
12708     }
12709
12710   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12711       && (arg_quals & parm_quals) != parm_quals)
12712     return 0;
12713
12714   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12715       && (parm_quals & arg_quals) != arg_quals)
12716     return 0;
12717
12718   return 1;
12719 }
12720
12721 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12722 void 
12723 template_parm_level_and_index (tree parm, int* level, int* index)
12724 {
12725   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12726       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12727       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12728     {
12729       *index = TEMPLATE_TYPE_IDX (parm);
12730       *level = TEMPLATE_TYPE_LEVEL (parm);
12731     }
12732   else
12733     {
12734       *index = TEMPLATE_PARM_IDX (parm);
12735       *level = TEMPLATE_PARM_LEVEL (parm);
12736     }
12737 }
12738
12739 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12740    expansion at the end of PACKED_PARMS. Returns 0 if the type
12741    deduction succeeds, 1 otherwise. STRICT is the same as in
12742    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12743    call argument list. We'll need to adjust the arguments to make them
12744    types. SUBR tells us if this is from a recursive call to
12745    type_unification_real.  */
12746 int
12747 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12748                       tree packed_args, int strict, bool call_args_p,
12749                       bool subr)
12750 {
12751   tree parm 
12752     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12753   tree pattern = PACK_EXPANSION_PATTERN (parm);
12754   tree pack, packs = NULL_TREE;
12755   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12756   int len = TREE_VEC_LENGTH (packed_args);
12757
12758   /* Determine the parameter packs we will be deducing from the
12759      pattern, and record their current deductions.  */
12760   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12761        pack; pack = TREE_CHAIN (pack))
12762     {
12763       tree parm_pack = TREE_VALUE (pack);
12764       int idx, level;
12765
12766       /* Determine the index and level of this parameter pack.  */
12767       template_parm_level_and_index (parm_pack, &level, &idx);
12768
12769       /* Keep track of the parameter packs and their corresponding
12770          argument packs.  */
12771       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12772       TREE_TYPE (packs) = make_tree_vec (len - start);
12773     }
12774   
12775   /* Loop through all of the arguments that have not yet been
12776      unified and unify each with the pattern.  */
12777   for (i = start; i < len; i++)
12778     {
12779       tree parm = pattern;
12780
12781       /* For each parameter pack, clear out the deduced value so that
12782          we can deduce it again.  */
12783       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12784         {
12785           int idx, level;
12786           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12787
12788           TMPL_ARG (targs, level, idx) = NULL_TREE;
12789         }
12790
12791       /* Unify the pattern with the current argument.  */
12792       {
12793         tree arg = TREE_VEC_ELT (packed_args, i);
12794         tree arg_expr = NULL_TREE;
12795         int arg_strict = strict;
12796         bool skip_arg_p = false;
12797
12798         if (call_args_p)
12799           {
12800             int sub_strict;
12801
12802             /* This mirrors what we do in type_unification_real.  */
12803             switch (strict)
12804               {
12805               case DEDUCE_CALL:
12806                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12807                               | UNIFY_ALLOW_MORE_CV_QUAL
12808                               | UNIFY_ALLOW_DERIVED);
12809                 break;
12810                 
12811               case DEDUCE_CONV:
12812                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12813                 break;
12814                 
12815               case DEDUCE_EXACT:
12816                 sub_strict = UNIFY_ALLOW_NONE;
12817                 break;
12818                 
12819               default:
12820                 gcc_unreachable ();
12821               }
12822
12823             if (!TYPE_P (arg))
12824               {
12825                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12826                 if (type_unknown_p (arg))
12827                   {
12828                     /* [temp.deduct.type] A template-argument can be
12829                        deduced from a pointer to function or pointer
12830                        to member function argument if the set of
12831                        overloaded functions does not contain function
12832                        templates and at most one of a set of
12833                        overloaded functions provides a unique
12834                        match.  */
12835
12836                     if (resolve_overloaded_unification
12837                         (tparms, targs, parm, arg, strict, sub_strict)
12838                         != 0)
12839                       return 1;
12840                     skip_arg_p = true;
12841                   }
12842
12843                 if (!skip_arg_p)
12844                   {
12845                     arg_expr = arg;
12846                     arg = unlowered_expr_type (arg);
12847                     if (arg == error_mark_node)
12848                       return 1;
12849                   }
12850               }
12851       
12852             arg_strict = sub_strict;
12853
12854             if (!subr)
12855               arg_strict |= 
12856                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12857                                                   arg_expr);
12858           }
12859
12860         if (!skip_arg_p)
12861           {
12862             if (unify (tparms, targs, parm, arg, arg_strict))
12863               return 1;
12864           }
12865       }
12866
12867       /* For each parameter pack, collect the deduced value.  */
12868       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12869         {
12870           int idx, level;
12871           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12872
12873           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12874             TMPL_ARG (targs, level, idx);
12875         }
12876     }
12877
12878   /* Verify that the results of unification with the parameter packs
12879      produce results consistent with what we've seen before, and make
12880      the deduced argument packs available.  */
12881   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12882     {
12883       tree old_pack = TREE_VALUE (pack);
12884       tree new_args = TREE_TYPE (pack);
12885       int i, len = TREE_VEC_LENGTH (new_args);
12886       bool nondeduced_p = false;
12887
12888       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12889          actually deduce anything.  */
12890       for (i = 0; i < len && !nondeduced_p; ++i)
12891         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12892           nondeduced_p = true;
12893       if (nondeduced_p)
12894         continue;
12895
12896       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12897         {
12898           /* Prepend the explicit arguments onto NEW_ARGS.  */
12899           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12900           tree old_args = new_args;
12901           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12902           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12903
12904           /* Copy the explicit arguments.  */
12905           new_args = make_tree_vec (len);
12906           for (i = 0; i < explicit_len; i++)
12907             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12908
12909           /* Copy the deduced arguments.  */
12910           for (; i < len; i++)
12911             TREE_VEC_ELT (new_args, i) =
12912               TREE_VEC_ELT (old_args, i - explicit_len);
12913         }
12914
12915       if (!old_pack)
12916         {
12917           tree result;
12918           int idx, level;
12919           
12920           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12921
12922           /* Build the deduced *_ARGUMENT_PACK.  */
12923           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12924             {
12925               result = make_node (NONTYPE_ARGUMENT_PACK);
12926               TREE_TYPE (result) = 
12927                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12928               TREE_CONSTANT (result) = 1;
12929             }
12930           else
12931             result = make_node (TYPE_ARGUMENT_PACK);
12932
12933           SET_ARGUMENT_PACK_ARGS (result, new_args);
12934
12935           /* Note the deduced argument packs for this parameter
12936              pack.  */
12937           TMPL_ARG (targs, level, idx) = result;
12938         }
12939       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12940                && (ARGUMENT_PACK_ARGS (old_pack) 
12941                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12942         {
12943           /* We only had the explicitly-provided arguments before, but
12944              now we have a complete set of arguments.  */
12945           int idx, level;
12946           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12947           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12948
12949           /* Keep the original deduced argument pack.  */
12950           TMPL_ARG (targs, level, idx) = old_pack;
12951
12952           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12953           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12954           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12955         }
12956       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12957                                     new_args))
12958         /* Inconsistent unification of this parameter pack.  */
12959         return 1;
12960       else
12961         {
12962           int idx, level;
12963           
12964           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12965
12966           /* Keep the original deduced argument pack.  */
12967           TMPL_ARG (targs, level, idx) = old_pack;
12968         }
12969     }
12970
12971   return 0;
12972 }
12973
12974 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12975    set of template parameters to a template.  TARGS is the bindings
12976    for those template parameters, as determined thus far; TARGS may
12977    include template arguments for outer levels of template parameters
12978    as well.  PARM is a parameter to a template function, or a
12979    subcomponent of that parameter; ARG is the corresponding argument.
12980    This function attempts to match PARM with ARG in a manner
12981    consistent with the existing assignments in TARGS.  If more values
12982    are deduced, then TARGS is updated.
12983
12984    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12985    parameter STRICT is a bitwise or of the following flags:
12986
12987      UNIFY_ALLOW_NONE:
12988        Require an exact match between PARM and ARG.
12989      UNIFY_ALLOW_MORE_CV_QUAL:
12990        Allow the deduced ARG to be more cv-qualified (by qualification
12991        conversion) than ARG.
12992      UNIFY_ALLOW_LESS_CV_QUAL:
12993        Allow the deduced ARG to be less cv-qualified than ARG.
12994      UNIFY_ALLOW_DERIVED:
12995        Allow the deduced ARG to be a template base class of ARG,
12996        or a pointer to a template base class of the type pointed to by
12997        ARG.
12998      UNIFY_ALLOW_INTEGER:
12999        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13000        case for more information.
13001      UNIFY_ALLOW_OUTER_LEVEL:
13002        This is the outermost level of a deduction. Used to determine validity
13003        of qualification conversions. A valid qualification conversion must
13004        have const qualified pointers leading up to the inner type which
13005        requires additional CV quals, except at the outer level, where const
13006        is not required [conv.qual]. It would be normal to set this flag in
13007        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13008      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13009        This is the outermost level of a deduction, and PARM can be more CV
13010        qualified at this point.
13011      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13012        This is the outermost level of a deduction, and PARM can be less CV
13013        qualified at this point.  */
13014
13015 static int
13016 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13017 {
13018   int idx;
13019   tree targ;
13020   tree tparm;
13021   int strict_in = strict;
13022
13023   /* I don't think this will do the right thing with respect to types.
13024      But the only case I've seen it in so far has been array bounds, where
13025      signedness is the only information lost, and I think that will be
13026      okay.  */
13027   while (TREE_CODE (parm) == NOP_EXPR)
13028     parm = TREE_OPERAND (parm, 0);
13029
13030   if (arg == error_mark_node)
13031     return 1;
13032   if (arg == unknown_type_node
13033       || arg == init_list_type_node)
13034     /* We can't deduce anything from this, but we might get all the
13035        template args from other function args.  */
13036     return 0;
13037
13038   /* If PARM uses template parameters, then we can't bail out here,
13039      even if ARG == PARM, since we won't record unifications for the
13040      template parameters.  We might need them if we're trying to
13041      figure out which of two things is more specialized.  */
13042   if (arg == parm && !uses_template_parms (parm))
13043     return 0;
13044
13045   /* Handle init lists early, so the rest of the function can assume
13046      we're dealing with a type. */
13047   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13048     {
13049       tree elt, elttype;
13050       unsigned i;
13051
13052       if (!is_std_init_list (parm))
13053         /* We can only deduce from an initializer list argument if the
13054            parameter is std::initializer_list; otherwise this is a
13055            non-deduced context. */
13056         return 0;
13057
13058       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13059
13060       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13061         {
13062           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13063             elt = TREE_TYPE (elt);
13064           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13065             return 1;
13066         }
13067       return 0;
13068     }
13069
13070   /* Immediately reject some pairs that won't unify because of
13071      cv-qualification mismatches.  */
13072   if (TREE_CODE (arg) == TREE_CODE (parm)
13073       && TYPE_P (arg)
13074       /* It is the elements of the array which hold the cv quals of an array
13075          type, and the elements might be template type parms. We'll check
13076          when we recurse.  */
13077       && TREE_CODE (arg) != ARRAY_TYPE
13078       /* We check the cv-qualifiers when unifying with template type
13079          parameters below.  We want to allow ARG `const T' to unify with
13080          PARM `T' for example, when computing which of two templates
13081          is more specialized, for example.  */
13082       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13083       && !check_cv_quals_for_unify (strict_in, arg, parm))
13084     return 1;
13085
13086   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13087       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13088     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13089   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13090   strict &= ~UNIFY_ALLOW_DERIVED;
13091   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13092   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13093
13094   switch (TREE_CODE (parm))
13095     {
13096     case TYPENAME_TYPE:
13097     case SCOPE_REF:
13098     case UNBOUND_CLASS_TEMPLATE:
13099       /* In a type which contains a nested-name-specifier, template
13100          argument values cannot be deduced for template parameters used
13101          within the nested-name-specifier.  */
13102       return 0;
13103
13104     case TEMPLATE_TYPE_PARM:
13105     case TEMPLATE_TEMPLATE_PARM:
13106     case BOUND_TEMPLATE_TEMPLATE_PARM:
13107       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13108       if (tparm == error_mark_node)
13109         return 1;
13110
13111       if (TEMPLATE_TYPE_LEVEL (parm)
13112           != template_decl_level (tparm))
13113         /* The PARM is not one we're trying to unify.  Just check
13114            to see if it matches ARG.  */
13115         return (TREE_CODE (arg) == TREE_CODE (parm)
13116                 && same_type_p (parm, arg)) ? 0 : 1;
13117       idx = TEMPLATE_TYPE_IDX (parm);
13118       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13119       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13120
13121       /* Check for mixed types and values.  */
13122       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13123            && TREE_CODE (tparm) != TYPE_DECL)
13124           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13125               && TREE_CODE (tparm) != TEMPLATE_DECL))
13126         return 1;
13127
13128       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13129         {
13130           /* ARG must be constructed from a template class or a template
13131              template parameter.  */
13132           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13133               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13134             return 1;
13135
13136           {
13137             tree parmvec = TYPE_TI_ARGS (parm);
13138             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13139             tree parm_parms 
13140               = DECL_INNERMOST_TEMPLATE_PARMS
13141                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13142             int i, len;
13143             int parm_variadic_p = 0;
13144
13145             /* The resolution to DR150 makes clear that default
13146                arguments for an N-argument may not be used to bind T
13147                to a template template parameter with fewer than N
13148                parameters.  It is not safe to permit the binding of
13149                default arguments as an extension, as that may change
13150                the meaning of a conforming program.  Consider:
13151
13152                   struct Dense { static const unsigned int dim = 1; };
13153
13154                   template <template <typename> class View,
13155                             typename Block>
13156                   void operator+(float, View<Block> const&);
13157
13158                   template <typename Block,
13159                             unsigned int Dim = Block::dim>
13160                   struct Lvalue_proxy { operator float() const; };
13161
13162                   void
13163                   test_1d (void) {
13164                     Lvalue_proxy<Dense> p;
13165                     float b;
13166                     b + p;
13167                   }
13168
13169               Here, if Lvalue_proxy is permitted to bind to View, then
13170               the global operator+ will be used; if they are not, the
13171               Lvalue_proxy will be converted to float.  */
13172             if (coerce_template_parms (parm_parms,
13173                                        argvec,
13174                                        TYPE_TI_TEMPLATE (parm),
13175                                        tf_none,
13176                                        /*require_all_args=*/true,
13177                                        /*use_default_args=*/false)
13178                 == error_mark_node)
13179               return 1;
13180
13181             /* Deduce arguments T, i from TT<T> or TT<i>.
13182                We check each element of PARMVEC and ARGVEC individually
13183                rather than the whole TREE_VEC since they can have
13184                different number of elements.  */
13185
13186             parmvec = expand_template_argument_pack (parmvec);
13187             argvec = expand_template_argument_pack (argvec);
13188
13189             len = TREE_VEC_LENGTH (parmvec);
13190
13191             /* Check if the parameters end in a pack, making them
13192                variadic.  */
13193             if (len > 0
13194                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13195               parm_variadic_p = 1;
13196             
13197             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13198               return 1;
13199
13200              for (i = 0; i < len - parm_variadic_p; ++i)
13201               {
13202                 if (unify (tparms, targs,
13203                            TREE_VEC_ELT (parmvec, i),
13204                            TREE_VEC_ELT (argvec, i),
13205                            UNIFY_ALLOW_NONE))
13206                   return 1;
13207               }
13208
13209             if (parm_variadic_p
13210                 && unify_pack_expansion (tparms, targs,
13211                                          parmvec, argvec,
13212                                          UNIFY_ALLOW_NONE,
13213                                          /*call_args_p=*/false,
13214                                          /*subr=*/false))
13215               return 1;
13216           }
13217           arg = TYPE_TI_TEMPLATE (arg);
13218
13219           /* Fall through to deduce template name.  */
13220         }
13221
13222       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13223           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13224         {
13225           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13226
13227           /* Simple cases: Value already set, does match or doesn't.  */
13228           if (targ != NULL_TREE && template_args_equal (targ, arg))
13229             return 0;
13230           else if (targ)
13231             return 1;
13232         }
13233       else
13234         {
13235           /* If PARM is `const T' and ARG is only `int', we don't have
13236              a match unless we are allowing additional qualification.
13237              If ARG is `const int' and PARM is just `T' that's OK;
13238              that binds `const int' to `T'.  */
13239           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13240                                          arg, parm))
13241             return 1;
13242
13243           /* Consider the case where ARG is `const volatile int' and
13244              PARM is `const T'.  Then, T should be `volatile int'.  */
13245           arg = cp_build_qualified_type_real
13246             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13247           if (arg == error_mark_node)
13248             return 1;
13249
13250           /* Simple cases: Value already set, does match or doesn't.  */
13251           if (targ != NULL_TREE && same_type_p (targ, arg))
13252             return 0;
13253           else if (targ)
13254             return 1;
13255
13256           /* Make sure that ARG is not a variable-sized array.  (Note
13257              that were talking about variable-sized arrays (like
13258              `int[n]'), rather than arrays of unknown size (like
13259              `int[]').)  We'll get very confused by such a type since
13260              the bound of the array will not be computable in an
13261              instantiation.  Besides, such types are not allowed in
13262              ISO C++, so we can do as we please here.  */
13263           if (variably_modified_type_p (arg, NULL_TREE))
13264             return 1;
13265         }
13266
13267       /* If ARG is a parameter pack or an expansion, we cannot unify
13268          against it unless PARM is also a parameter pack.  */
13269       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13270           && !template_parameter_pack_p (parm))
13271         return 1;
13272
13273       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13274       return 0;
13275
13276     case TEMPLATE_PARM_INDEX:
13277       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13278       if (tparm == error_mark_node)
13279         return 1;
13280
13281       if (TEMPLATE_PARM_LEVEL (parm)
13282           != template_decl_level (tparm))
13283         /* The PARM is not one we're trying to unify.  Just check
13284            to see if it matches ARG.  */
13285         return !(TREE_CODE (arg) == TREE_CODE (parm)
13286                  && cp_tree_equal (parm, arg));
13287
13288       idx = TEMPLATE_PARM_IDX (parm);
13289       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13290
13291       if (targ)
13292         return !cp_tree_equal (targ, arg);
13293
13294       /* [temp.deduct.type] If, in the declaration of a function template
13295          with a non-type template-parameter, the non-type
13296          template-parameter is used in an expression in the function
13297          parameter-list and, if the corresponding template-argument is
13298          deduced, the template-argument type shall match the type of the
13299          template-parameter exactly, except that a template-argument
13300          deduced from an array bound may be of any integral type.
13301          The non-type parameter might use already deduced type parameters.  */
13302       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13303       if (!TREE_TYPE (arg))
13304         /* Template-parameter dependent expression.  Just accept it for now.
13305            It will later be processed in convert_template_argument.  */
13306         ;
13307       else if (same_type_p (TREE_TYPE (arg), tparm))
13308         /* OK */;
13309       else if ((strict & UNIFY_ALLOW_INTEGER)
13310                && (TREE_CODE (tparm) == INTEGER_TYPE
13311                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13312         /* Convert the ARG to the type of PARM; the deduced non-type
13313            template argument must exactly match the types of the
13314            corresponding parameter.  */
13315         arg = fold (build_nop (TREE_TYPE (parm), arg));
13316       else if (uses_template_parms (tparm))
13317         /* We haven't deduced the type of this parameter yet.  Try again
13318            later.  */
13319         return 0;
13320       else
13321         return 1;
13322
13323       /* If ARG is a parameter pack or an expansion, we cannot unify
13324          against it unless PARM is also a parameter pack.  */
13325       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13326           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13327         return 1;
13328
13329       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13330       return 0;
13331
13332     case PTRMEM_CST:
13333      {
13334         /* A pointer-to-member constant can be unified only with
13335          another constant.  */
13336       if (TREE_CODE (arg) != PTRMEM_CST)
13337         return 1;
13338
13339       /* Just unify the class member. It would be useless (and possibly
13340          wrong, depending on the strict flags) to unify also
13341          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13342          arg refer to the same variable, even if through different
13343          classes. For instance:
13344
13345          struct A { int x; };
13346          struct B : A { };
13347
13348          Unification of &A::x and &B::x must succeed.  */
13349       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13350                     PTRMEM_CST_MEMBER (arg), strict);
13351      }
13352
13353     case POINTER_TYPE:
13354       {
13355         if (TREE_CODE (arg) != POINTER_TYPE)
13356           return 1;
13357
13358         /* [temp.deduct.call]
13359
13360            A can be another pointer or pointer to member type that can
13361            be converted to the deduced A via a qualification
13362            conversion (_conv.qual_).
13363
13364            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13365            This will allow for additional cv-qualification of the
13366            pointed-to types if appropriate.  */
13367
13368         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13369           /* The derived-to-base conversion only persists through one
13370              level of pointers.  */
13371           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13372
13373         return unify (tparms, targs, TREE_TYPE (parm),
13374                       TREE_TYPE (arg), strict);
13375       }
13376
13377     case REFERENCE_TYPE:
13378       if (TREE_CODE (arg) != REFERENCE_TYPE)
13379         return 1;
13380       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13381                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13382
13383     case ARRAY_TYPE:
13384       if (TREE_CODE (arg) != ARRAY_TYPE)
13385         return 1;
13386       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13387           != (TYPE_DOMAIN (arg) == NULL_TREE))
13388         return 1;
13389       if (TYPE_DOMAIN (parm) != NULL_TREE)
13390         {
13391           tree parm_max;
13392           tree arg_max;
13393           bool parm_cst;
13394           bool arg_cst;
13395
13396           /* Our representation of array types uses "N - 1" as the
13397              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13398              not an integer constant.  We cannot unify arbitrarily
13399              complex expressions, so we eliminate the MINUS_EXPRs
13400              here.  */
13401           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13402           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13403           if (!parm_cst)
13404             {
13405               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13406               parm_max = TREE_OPERAND (parm_max, 0);
13407             }
13408           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13409           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13410           if (!arg_cst)
13411             {
13412               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13413                  trying to unify the type of a variable with the type
13414                  of a template parameter.  For example:
13415
13416                    template <unsigned int N>
13417                    void f (char (&) [N]);
13418                    int g(); 
13419                    void h(int i) {
13420                      char a[g(i)];
13421                      f(a); 
13422                    }
13423
13424                 Here, the type of the ARG will be "int [g(i)]", and
13425                 may be a SAVE_EXPR, etc.  */
13426               if (TREE_CODE (arg_max) != MINUS_EXPR)
13427                 return 1;
13428               arg_max = TREE_OPERAND (arg_max, 0);
13429             }
13430
13431           /* If only one of the bounds used a MINUS_EXPR, compensate
13432              by adding one to the other bound.  */
13433           if (parm_cst && !arg_cst)
13434             parm_max = fold_build2 (PLUS_EXPR,
13435                                     integer_type_node,
13436                                     parm_max,
13437                                     integer_one_node);
13438           else if (arg_cst && !parm_cst)
13439             arg_max = fold_build2 (PLUS_EXPR,
13440                                    integer_type_node,
13441                                    arg_max,
13442                                    integer_one_node);
13443
13444           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13445             return 1;
13446         }
13447       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13448                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13449
13450     case REAL_TYPE:
13451     case COMPLEX_TYPE:
13452     case VECTOR_TYPE:
13453     case INTEGER_TYPE:
13454     case BOOLEAN_TYPE:
13455     case ENUMERAL_TYPE:
13456     case VOID_TYPE:
13457       if (TREE_CODE (arg) != TREE_CODE (parm))
13458         return 1;
13459
13460       /* We have already checked cv-qualification at the top of the
13461          function.  */
13462       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13463         return 1;
13464
13465       /* As far as unification is concerned, this wins.  Later checks
13466          will invalidate it if necessary.  */
13467       return 0;
13468
13469       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13470       /* Type INTEGER_CST can come from ordinary constant template args.  */
13471     case INTEGER_CST:
13472       while (TREE_CODE (arg) == NOP_EXPR)
13473         arg = TREE_OPERAND (arg, 0);
13474
13475       if (TREE_CODE (arg) != INTEGER_CST)
13476         return 1;
13477       return !tree_int_cst_equal (parm, arg);
13478
13479     case TREE_VEC:
13480       {
13481         int i;
13482         if (TREE_CODE (arg) != TREE_VEC)
13483           return 1;
13484         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13485           return 1;
13486         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13487           if (unify (tparms, targs,
13488                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13489                      UNIFY_ALLOW_NONE))
13490             return 1;
13491         return 0;
13492       }
13493
13494     case RECORD_TYPE:
13495     case UNION_TYPE:
13496       if (TREE_CODE (arg) != TREE_CODE (parm))
13497         return 1;
13498
13499       if (TYPE_PTRMEMFUNC_P (parm))
13500         {
13501           if (!TYPE_PTRMEMFUNC_P (arg))
13502             return 1;
13503
13504           return unify (tparms, targs,
13505                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13506                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13507                         strict);
13508         }
13509
13510       if (CLASSTYPE_TEMPLATE_INFO (parm))
13511         {
13512           tree t = NULL_TREE;
13513
13514           if (strict_in & UNIFY_ALLOW_DERIVED)
13515             {
13516               /* First, we try to unify the PARM and ARG directly.  */
13517               t = try_class_unification (tparms, targs,
13518                                          parm, arg);
13519
13520               if (!t)
13521                 {
13522                   /* Fallback to the special case allowed in
13523                      [temp.deduct.call]:
13524
13525                        If P is a class, and P has the form
13526                        template-id, then A can be a derived class of
13527                        the deduced A.  Likewise, if P is a pointer to
13528                        a class of the form template-id, A can be a
13529                        pointer to a derived class pointed to by the
13530                        deduced A.  */
13531                   t = get_template_base (tparms, targs, parm, arg);
13532
13533                   if (!t)
13534                     return 1;
13535                 }
13536             }
13537           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13538                    && (CLASSTYPE_TI_TEMPLATE (parm)
13539                        == CLASSTYPE_TI_TEMPLATE (arg)))
13540             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13541                Then, we should unify `int' and `U'.  */
13542             t = arg;
13543           else
13544             /* There's no chance of unification succeeding.  */
13545             return 1;
13546
13547           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13548                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13549         }
13550       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13551         return 1;
13552       return 0;
13553
13554     case METHOD_TYPE:
13555     case FUNCTION_TYPE:
13556       if (TREE_CODE (arg) != TREE_CODE (parm))
13557         return 1;
13558
13559       /* CV qualifications for methods can never be deduced, they must
13560          match exactly.  We need to check them explicitly here,
13561          because type_unification_real treats them as any other
13562          cv-qualified parameter.  */
13563       if (TREE_CODE (parm) == METHOD_TYPE
13564           && (!check_cv_quals_for_unify
13565               (UNIFY_ALLOW_NONE,
13566                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13567                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13568         return 1;
13569
13570       if (unify (tparms, targs, TREE_TYPE (parm),
13571                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13572         return 1;
13573       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13574                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13575                                     LOOKUP_NORMAL);
13576
13577     case OFFSET_TYPE:
13578       /* Unify a pointer to member with a pointer to member function, which
13579          deduces the type of the member as a function type. */
13580       if (TYPE_PTRMEMFUNC_P (arg))
13581         {
13582           tree method_type;
13583           tree fntype;
13584           cp_cv_quals cv_quals;
13585
13586           /* Check top-level cv qualifiers */
13587           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13588             return 1;
13589
13590           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13591                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13592             return 1;
13593
13594           /* Determine the type of the function we are unifying against. */
13595           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13596           fntype =
13597             build_function_type (TREE_TYPE (method_type),
13598                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13599
13600           /* Extract the cv-qualifiers of the member function from the
13601              implicit object parameter and place them on the function
13602              type to be restored later. */
13603           cv_quals =
13604             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13605           fntype = build_qualified_type (fntype, cv_quals);
13606           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13607         }
13608
13609       if (TREE_CODE (arg) != OFFSET_TYPE)
13610         return 1;
13611       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13612                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13613         return 1;
13614       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13615                     strict);
13616
13617     case CONST_DECL:
13618       if (DECL_TEMPLATE_PARM_P (parm))
13619         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13620       if (arg != integral_constant_value (parm))
13621         return 1;
13622       return 0;
13623
13624     case FIELD_DECL:
13625     case TEMPLATE_DECL:
13626       /* Matched cases are handled by the ARG == PARM test above.  */
13627       return 1;
13628
13629     case TYPE_ARGUMENT_PACK:
13630     case NONTYPE_ARGUMENT_PACK:
13631       {
13632         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13633         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13634         int i, len = TREE_VEC_LENGTH (packed_parms);
13635         int argslen = TREE_VEC_LENGTH (packed_args);
13636         int parm_variadic_p = 0;
13637
13638         for (i = 0; i < len; ++i)
13639           {
13640             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13641               {
13642                 if (i == len - 1)
13643                   /* We can unify against something with a trailing
13644                      parameter pack.  */
13645                   parm_variadic_p = 1;
13646                 else
13647                   /* Since there is something following the pack
13648                      expansion, we cannot unify this template argument
13649                      list.  */
13650                   return 0;
13651               }
13652           }
13653           
13654
13655         /* If we don't have enough arguments to satisfy the parameters
13656            (not counting the pack expression at the end), or we have
13657            too many arguments for a parameter list that doesn't end in
13658            a pack expression, we can't unify.  */
13659         if (argslen < (len - parm_variadic_p)
13660             || (argslen > len && !parm_variadic_p))
13661           return 1;
13662
13663         /* Unify all of the parameters that precede the (optional)
13664            pack expression.  */
13665         for (i = 0; i < len - parm_variadic_p; ++i)
13666           {
13667             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13668                        TREE_VEC_ELT (packed_args, i), strict))
13669               return 1;
13670           }
13671
13672         if (parm_variadic_p)
13673           return unify_pack_expansion (tparms, targs, 
13674                                        packed_parms, packed_args,
13675                                        strict, /*call_args_p=*/false,
13676                                        /*subr=*/false);
13677         return 0;
13678       }
13679
13680       break;
13681
13682     case TYPEOF_TYPE:
13683     case DECLTYPE_TYPE:
13684       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13685          nodes.  */
13686       return 0;
13687
13688     case ERROR_MARK:
13689       /* Unification fails if we hit an error node.  */
13690       return 1;
13691
13692     default:
13693       gcc_assert (EXPR_P (parm));
13694
13695       /* We must be looking at an expression.  This can happen with
13696          something like:
13697
13698            template <int I>
13699            void foo(S<I>, S<I + 2>);
13700
13701          This is a "nondeduced context":
13702
13703            [deduct.type]
13704
13705            The nondeduced contexts are:
13706
13707            --A type that is a template-id in which one or more of
13708              the template-arguments is an expression that references
13709              a template-parameter.
13710
13711          In these cases, we assume deduction succeeded, but don't
13712          actually infer any unifications.  */
13713
13714       if (!uses_template_parms (parm)
13715           && !template_args_equal (parm, arg))
13716         return 1;
13717       else
13718         return 0;
13719     }
13720 }
13721 \f
13722 /* Note that DECL can be defined in this translation unit, if
13723    required.  */
13724
13725 static void
13726 mark_definable (tree decl)
13727 {
13728   tree clone;
13729   DECL_NOT_REALLY_EXTERN (decl) = 1;
13730   FOR_EACH_CLONE (clone, decl)
13731     DECL_NOT_REALLY_EXTERN (clone) = 1;
13732 }
13733
13734 /* Called if RESULT is explicitly instantiated, or is a member of an
13735    explicitly instantiated class.  */
13736
13737 void
13738 mark_decl_instantiated (tree result, int extern_p)
13739 {
13740   SET_DECL_EXPLICIT_INSTANTIATION (result);
13741
13742   /* If this entity has already been written out, it's too late to
13743      make any modifications.  */
13744   if (TREE_ASM_WRITTEN (result))
13745     return;
13746
13747   if (TREE_CODE (result) != FUNCTION_DECL)
13748     /* The TREE_PUBLIC flag for function declarations will have been
13749        set correctly by tsubst.  */
13750     TREE_PUBLIC (result) = 1;
13751
13752   /* This might have been set by an earlier implicit instantiation.  */
13753   DECL_COMDAT (result) = 0;
13754
13755   if (extern_p)
13756     DECL_NOT_REALLY_EXTERN (result) = 0;
13757   else
13758     {
13759       mark_definable (result);
13760       /* Always make artificials weak.  */
13761       if (DECL_ARTIFICIAL (result) && flag_weak)
13762         comdat_linkage (result);
13763       /* For WIN32 we also want to put explicit instantiations in
13764          linkonce sections.  */
13765       else if (TREE_PUBLIC (result))
13766         maybe_make_one_only (result);
13767     }
13768
13769   /* If EXTERN_P, then this function will not be emitted -- unless
13770      followed by an explicit instantiation, at which point its linkage
13771      will be adjusted.  If !EXTERN_P, then this function will be
13772      emitted here.  In neither circumstance do we want
13773      import_export_decl to adjust the linkage.  */
13774   DECL_INTERFACE_KNOWN (result) = 1;
13775 }
13776
13777 /* Given two function templates PAT1 and PAT2, return:
13778
13779    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13780    -1 if PAT2 is more specialized than PAT1.
13781    0 if neither is more specialized.
13782
13783    LEN indicates the number of parameters we should consider
13784    (defaulted parameters should not be considered).
13785
13786    The 1998 std underspecified function template partial ordering, and
13787    DR214 addresses the issue.  We take pairs of arguments, one from
13788    each of the templates, and deduce them against each other.  One of
13789    the templates will be more specialized if all the *other*
13790    template's arguments deduce against its arguments and at least one
13791    of its arguments *does* *not* deduce against the other template's
13792    corresponding argument.  Deduction is done as for class templates.
13793    The arguments used in deduction have reference and top level cv
13794    qualifiers removed.  Iff both arguments were originally reference
13795    types *and* deduction succeeds in both directions, the template
13796    with the more cv-qualified argument wins for that pairing (if
13797    neither is more cv-qualified, they both are equal).  Unlike regular
13798    deduction, after all the arguments have been deduced in this way,
13799    we do *not* verify the deduced template argument values can be
13800    substituted into non-deduced contexts, nor do we have to verify
13801    that all template arguments have been deduced.  */
13802
13803 int
13804 more_specialized_fn (tree pat1, tree pat2, int len)
13805 {
13806   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13807   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13808   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13809   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13810   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13811   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13812   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13813   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13814   int better1 = 0;
13815   int better2 = 0;
13816
13817   /* Remove the this parameter from non-static member functions.  If
13818      one is a non-static member function and the other is not a static
13819      member function, remove the first parameter from that function
13820      also.  This situation occurs for operator functions where we
13821      locate both a member function (with this pointer) and non-member
13822      operator (with explicit first operand).  */
13823   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13824     {
13825       len--; /* LEN is the number of significant arguments for DECL1 */
13826       args1 = TREE_CHAIN (args1);
13827       if (!DECL_STATIC_FUNCTION_P (decl2))
13828         args2 = TREE_CHAIN (args2);
13829     }
13830   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13831     {
13832       args2 = TREE_CHAIN (args2);
13833       if (!DECL_STATIC_FUNCTION_P (decl1))
13834         {
13835           len--;
13836           args1 = TREE_CHAIN (args1);
13837         }
13838     }
13839
13840   /* If only one is a conversion operator, they are unordered.  */
13841   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13842     return 0;
13843
13844   /* Consider the return type for a conversion function */
13845   if (DECL_CONV_FN_P (decl1))
13846     {
13847       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13848       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13849       len++;
13850     }
13851
13852   processing_template_decl++;
13853
13854   while (len--
13855          /* Stop when an ellipsis is seen.  */
13856          && args1 != NULL_TREE && args2 != NULL_TREE)
13857     {
13858       tree arg1 = TREE_VALUE (args1);
13859       tree arg2 = TREE_VALUE (args2);
13860       int deduce1, deduce2;
13861       int quals1 = -1;
13862       int quals2 = -1;
13863
13864       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13865           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13866         {
13867           /* When both arguments are pack expansions, we need only
13868              unify the patterns themselves.  */
13869           arg1 = PACK_EXPANSION_PATTERN (arg1);
13870           arg2 = PACK_EXPANSION_PATTERN (arg2);
13871
13872           /* This is the last comparison we need to do.  */
13873           len = 0;
13874         }
13875
13876       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13877         {
13878           arg1 = TREE_TYPE (arg1);
13879           quals1 = cp_type_quals (arg1);
13880         }
13881
13882       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13883         {
13884           arg2 = TREE_TYPE (arg2);
13885           quals2 = cp_type_quals (arg2);
13886         }
13887
13888       if ((quals1 < 0) != (quals2 < 0))
13889         {
13890           /* Only of the args is a reference, see if we should apply
13891              array/function pointer decay to it.  This is not part of
13892              DR214, but is, IMHO, consistent with the deduction rules
13893              for the function call itself, and with our earlier
13894              implementation of the underspecified partial ordering
13895              rules.  (nathan).  */
13896           if (quals1 >= 0)
13897             {
13898               switch (TREE_CODE (arg1))
13899                 {
13900                 case ARRAY_TYPE:
13901                   arg1 = TREE_TYPE (arg1);
13902                   /* FALLTHROUGH. */
13903                 case FUNCTION_TYPE:
13904                   arg1 = build_pointer_type (arg1);
13905                   break;
13906
13907                 default:
13908                   break;
13909                 }
13910             }
13911           else
13912             {
13913               switch (TREE_CODE (arg2))
13914                 {
13915                 case ARRAY_TYPE:
13916                   arg2 = TREE_TYPE (arg2);
13917                   /* FALLTHROUGH. */
13918                 case FUNCTION_TYPE:
13919                   arg2 = build_pointer_type (arg2);
13920                   break;
13921
13922                 default:
13923                   break;
13924                 }
13925             }
13926         }
13927
13928       arg1 = TYPE_MAIN_VARIANT (arg1);
13929       arg2 = TYPE_MAIN_VARIANT (arg2);
13930
13931       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13932         {
13933           int i, len2 = list_length (args2);
13934           tree parmvec = make_tree_vec (1);
13935           tree argvec = make_tree_vec (len2);
13936           tree ta = args2;
13937
13938           /* Setup the parameter vector, which contains only ARG1.  */
13939           TREE_VEC_ELT (parmvec, 0) = arg1;
13940
13941           /* Setup the argument vector, which contains the remaining
13942              arguments.  */
13943           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13944             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13945
13946           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13947                                            argvec, UNIFY_ALLOW_NONE, 
13948                                            /*call_args_p=*/false, 
13949                                            /*subr=*/0);
13950
13951           /* We cannot deduce in the other direction, because ARG1 is
13952              a pack expansion but ARG2 is not.  */
13953           deduce2 = 0;
13954         }
13955       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13956         {
13957           int i, len1 = list_length (args1);
13958           tree parmvec = make_tree_vec (1);
13959           tree argvec = make_tree_vec (len1);
13960           tree ta = args1;
13961
13962           /* Setup the parameter vector, which contains only ARG1.  */
13963           TREE_VEC_ELT (parmvec, 0) = arg2;
13964
13965           /* Setup the argument vector, which contains the remaining
13966              arguments.  */
13967           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13968             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13969
13970           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13971                                            argvec, UNIFY_ALLOW_NONE, 
13972                                            /*call_args_p=*/false, 
13973                                            /*subr=*/0);
13974
13975           /* We cannot deduce in the other direction, because ARG2 is
13976              a pack expansion but ARG1 is not.*/
13977           deduce1 = 0;
13978         }
13979
13980       else
13981         {
13982           /* The normal case, where neither argument is a pack
13983              expansion.  */
13984           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13985           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13986         }
13987
13988       if (!deduce1)
13989         better2 = -1;
13990       if (!deduce2)
13991         better1 = -1;
13992       if (better1 < 0 && better2 < 0)
13993         /* We've failed to deduce something in either direction.
13994            These must be unordered.  */
13995         break;
13996
13997       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13998         {
13999           /* Deduces in both directions, see if quals can
14000              disambiguate.  Pretend the worse one failed to deduce. */
14001           if ((quals1 & quals2) == quals2)
14002             deduce1 = 0;
14003           if ((quals1 & quals2) == quals1)
14004             deduce2 = 0;
14005         }
14006       if (deduce1 && !deduce2 && !better2)
14007         better2 = 1;
14008       if (deduce2 && !deduce1 && !better1)
14009         better1 = 1;
14010
14011       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14012           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14013         /* We have already processed all of the arguments in our
14014            handing of the pack expansion type.  */
14015         len = 0;
14016
14017       args1 = TREE_CHAIN (args1);
14018       args2 = TREE_CHAIN (args2);
14019     }
14020
14021   processing_template_decl--;
14022
14023   /* All things being equal, if the next argument is a pack expansion
14024      for one function but not for the other, prefer the
14025      non-variadic function.  */
14026   if ((better1 > 0) - (better2 > 0) == 0
14027       && args1 && TREE_VALUE (args1)
14028       && args2 && TREE_VALUE (args2))
14029     {
14030       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14031         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14032       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14033         return 1;
14034     }
14035
14036   return (better1 > 0) - (better2 > 0);
14037 }
14038
14039 /* Determine which of two partial specializations is more specialized.
14040
14041    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14042    to the first partial specialization.  The TREE_VALUE is the
14043    innermost set of template parameters for the partial
14044    specialization.  PAT2 is similar, but for the second template.
14045
14046    Return 1 if the first partial specialization is more specialized;
14047    -1 if the second is more specialized; 0 if neither is more
14048    specialized.
14049
14050    See [temp.class.order] for information about determining which of
14051    two templates is more specialized.  */
14052
14053 static int
14054 more_specialized_class (tree pat1, tree pat2)
14055 {
14056   tree targs;
14057   tree tmpl1, tmpl2;
14058   int winner = 0;
14059   bool any_deductions = false;
14060
14061   tmpl1 = TREE_TYPE (pat1);
14062   tmpl2 = TREE_TYPE (pat2);
14063
14064   /* Just like what happens for functions, if we are ordering between
14065      different class template specializations, we may encounter dependent
14066      types in the arguments, and we need our dependency check functions
14067      to behave correctly.  */
14068   ++processing_template_decl;
14069   targs = get_class_bindings (TREE_VALUE (pat1),
14070                               CLASSTYPE_TI_ARGS (tmpl1),
14071                               CLASSTYPE_TI_ARGS (tmpl2));
14072   if (targs)
14073     {
14074       --winner;
14075       any_deductions = true;
14076     }
14077
14078   targs = get_class_bindings (TREE_VALUE (pat2),
14079                               CLASSTYPE_TI_ARGS (tmpl2),
14080                               CLASSTYPE_TI_ARGS (tmpl1));
14081   if (targs)
14082     {
14083       ++winner;
14084       any_deductions = true;
14085     }
14086   --processing_template_decl;
14087
14088   /* In the case of a tie where at least one of the class templates
14089      has a parameter pack at the end, the template with the most
14090      non-packed parameters wins.  */
14091   if (winner == 0
14092       && any_deductions
14093       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14094           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14095     {
14096       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14097       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14098       int len1 = TREE_VEC_LENGTH (args1);
14099       int len2 = TREE_VEC_LENGTH (args2);
14100
14101       /* We don't count the pack expansion at the end.  */
14102       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14103         --len1;
14104       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14105         --len2;
14106
14107       if (len1 > len2)
14108         return 1;
14109       else if (len1 < len2)
14110         return -1;
14111     }
14112
14113   return winner;
14114 }
14115
14116 /* Return the template arguments that will produce the function signature
14117    DECL from the function template FN, with the explicit template
14118    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14119    also match.  Return NULL_TREE if no satisfactory arguments could be
14120    found.  */
14121
14122 static tree
14123 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14124 {
14125   int ntparms = DECL_NTPARMS (fn);
14126   tree targs = make_tree_vec (ntparms);
14127   tree decl_type;
14128   tree decl_arg_types;
14129
14130   /* Substitute the explicit template arguments into the type of DECL.
14131      The call to fn_type_unification will handle substitution into the
14132      FN.  */
14133   decl_type = TREE_TYPE (decl);
14134   if (explicit_args && uses_template_parms (decl_type))
14135     {
14136       tree tmpl;
14137       tree converted_args;
14138
14139       if (DECL_TEMPLATE_INFO (decl))
14140         tmpl = DECL_TI_TEMPLATE (decl);
14141       else
14142         /* We can get here for some invalid specializations.  */
14143         return NULL_TREE;
14144
14145       converted_args
14146         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14147                                  explicit_args, NULL_TREE,
14148                                  tf_none,
14149                                  /*require_all_args=*/false,
14150                                  /*use_default_args=*/false);
14151       if (converted_args == error_mark_node)
14152         return NULL_TREE;
14153
14154       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14155       if (decl_type == error_mark_node)
14156         return NULL_TREE;
14157     }
14158
14159   /* Never do unification on the 'this' parameter.  */
14160   decl_arg_types = skip_artificial_parms_for (decl, 
14161                                               TYPE_ARG_TYPES (decl_type));
14162
14163   if (fn_type_unification (fn, explicit_args, targs,
14164                            decl_arg_types,
14165                            (check_rettype || DECL_CONV_FN_P (fn)
14166                             ? TREE_TYPE (decl_type) : NULL_TREE),
14167                            DEDUCE_EXACT, LOOKUP_NORMAL))
14168     return NULL_TREE;
14169
14170   return targs;
14171 }
14172
14173 /* Return the innermost template arguments that, when applied to a
14174    template specialization whose innermost template parameters are
14175    TPARMS, and whose specialization arguments are PARMS, yield the
14176    ARGS.
14177
14178    For example, suppose we have:
14179
14180      template <class T, class U> struct S {};
14181      template <class T> struct S<T*, int> {};
14182
14183    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14184    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14185    int}.  The resulting vector will be {double}, indicating that `T'
14186    is bound to `double'.  */
14187
14188 static tree
14189 get_class_bindings (tree tparms, tree spec_args, tree args)
14190 {
14191   int i, ntparms = TREE_VEC_LENGTH (tparms);
14192   tree deduced_args;
14193   tree innermost_deduced_args;
14194
14195   innermost_deduced_args = make_tree_vec (ntparms);
14196   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14197     {
14198       deduced_args = copy_node (args);
14199       SET_TMPL_ARGS_LEVEL (deduced_args,
14200                            TMPL_ARGS_DEPTH (deduced_args),
14201                            innermost_deduced_args);
14202     }
14203   else
14204     deduced_args = innermost_deduced_args;
14205
14206   if (unify (tparms, deduced_args,
14207              INNERMOST_TEMPLATE_ARGS (spec_args),
14208              INNERMOST_TEMPLATE_ARGS (args),
14209              UNIFY_ALLOW_NONE))
14210     return NULL_TREE;
14211
14212   for (i =  0; i < ntparms; ++i)
14213     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14214       return NULL_TREE;
14215
14216   /* Verify that nondeduced template arguments agree with the type
14217      obtained from argument deduction.
14218
14219      For example:
14220
14221        struct A { typedef int X; };
14222        template <class T, class U> struct C {};
14223        template <class T> struct C<T, typename T::X> {};
14224
14225      Then with the instantiation `C<A, int>', we can deduce that
14226      `T' is `A' but unify () does not check whether `typename T::X'
14227      is `int'.  */
14228   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14229   if (spec_args == error_mark_node
14230       /* We only need to check the innermost arguments; the other
14231          arguments will always agree.  */
14232       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14233                               INNERMOST_TEMPLATE_ARGS (args)))
14234     return NULL_TREE;
14235
14236   /* Now that we have bindings for all of the template arguments,
14237      ensure that the arguments deduced for the template template
14238      parameters have compatible template parameter lists.  See the use
14239      of template_template_parm_bindings_ok_p in fn_type_unification
14240      for more information.  */
14241   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14242     return NULL_TREE;
14243
14244   return deduced_args;
14245 }
14246
14247 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14248    Return the TREE_LIST node with the most specialized template, if
14249    any.  If there is no most specialized template, the error_mark_node
14250    is returned.
14251
14252    Note that this function does not look at, or modify, the
14253    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14254    returned is one of the elements of INSTANTIATIONS, callers may
14255    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14256    and retrieve it from the value returned.  */
14257
14258 tree
14259 most_specialized_instantiation (tree templates)
14260 {
14261   tree fn, champ;
14262
14263   ++processing_template_decl;
14264
14265   champ = templates;
14266   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14267     {
14268       int fate = 0;
14269
14270       if (get_bindings (TREE_VALUE (champ),
14271                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14272                         NULL_TREE, /*check_ret=*/false))
14273         fate--;
14274
14275       if (get_bindings (TREE_VALUE (fn),
14276                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14277                         NULL_TREE, /*check_ret=*/false))
14278         fate++;
14279
14280       if (fate == -1)
14281         champ = fn;
14282       else if (!fate)
14283         {
14284           /* Equally specialized, move to next function.  If there
14285              is no next function, nothing's most specialized.  */
14286           fn = TREE_CHAIN (fn);
14287           champ = fn;
14288           if (!fn)
14289             break;
14290         }
14291     }
14292
14293   if (champ)
14294     /* Now verify that champ is better than everything earlier in the
14295        instantiation list.  */
14296     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14297       if (get_bindings (TREE_VALUE (champ),
14298                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14299                         NULL_TREE, /*check_ret=*/false)
14300           || !get_bindings (TREE_VALUE (fn),
14301                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14302                             NULL_TREE, /*check_ret=*/false))
14303         {
14304           champ = NULL_TREE;
14305           break;
14306         }
14307
14308   processing_template_decl--;
14309
14310   if (!champ)
14311     return error_mark_node;
14312
14313   return champ;
14314 }
14315
14316 /* If DECL is a specialization of some template, return the most
14317    general such template.  Otherwise, returns NULL_TREE.
14318
14319    For example, given:
14320
14321      template <class T> struct S { template <class U> void f(U); };
14322
14323    if TMPL is `template <class U> void S<int>::f(U)' this will return
14324    the full template.  This function will not trace past partial
14325    specializations, however.  For example, given in addition:
14326
14327      template <class T> struct S<T*> { template <class U> void f(U); };
14328
14329    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14330    `template <class T> template <class U> S<T*>::f(U)'.  */
14331
14332 tree
14333 most_general_template (tree decl)
14334 {
14335   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14336      an immediate specialization.  */
14337   if (TREE_CODE (decl) == FUNCTION_DECL)
14338     {
14339       if (DECL_TEMPLATE_INFO (decl)) {
14340         decl = DECL_TI_TEMPLATE (decl);
14341
14342         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14343            template friend.  */
14344         if (TREE_CODE (decl) != TEMPLATE_DECL)
14345           return NULL_TREE;
14346       } else
14347         return NULL_TREE;
14348     }
14349
14350   /* Look for more and more general templates.  */
14351   while (DECL_TEMPLATE_INFO (decl))
14352     {
14353       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14354          (See cp-tree.h for details.)  */
14355       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14356         break;
14357
14358       if (CLASS_TYPE_P (TREE_TYPE (decl))
14359           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14360         break;
14361
14362       /* Stop if we run into an explicitly specialized class template.  */
14363       if (!DECL_NAMESPACE_SCOPE_P (decl)
14364           && DECL_CONTEXT (decl)
14365           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14366         break;
14367
14368       decl = DECL_TI_TEMPLATE (decl);
14369     }
14370
14371   return decl;
14372 }
14373
14374 /* Return the most specialized of the class template partial
14375    specializations of TMPL which can produce TYPE, a specialization of
14376    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14377    a _TYPE node corresponding to the partial specialization, while the
14378    TREE_PURPOSE is the set of template arguments that must be
14379    substituted into the TREE_TYPE in order to generate TYPE.
14380
14381    If the choice of partial specialization is ambiguous, a diagnostic
14382    is issued, and the error_mark_node is returned.  If there are no
14383    partial specializations of TMPL matching TYPE, then NULL_TREE is
14384    returned.  */
14385
14386 static tree
14387 most_specialized_class (tree type, tree tmpl)
14388 {
14389   tree list = NULL_TREE;
14390   tree t;
14391   tree champ;
14392   int fate;
14393   bool ambiguous_p;
14394   tree args;
14395   tree outer_args = NULL_TREE;
14396
14397   tmpl = most_general_template (tmpl);
14398   args = CLASSTYPE_TI_ARGS (type);
14399
14400   /* For determining which partial specialization to use, only the
14401      innermost args are interesting.  */
14402   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14403     {
14404       outer_args = strip_innermost_template_args (args, 1);
14405       args = INNERMOST_TEMPLATE_ARGS (args);
14406     }
14407
14408   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14409     {
14410       tree partial_spec_args;
14411       tree spec_args;
14412       tree parms = TREE_VALUE (t);
14413
14414       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14415       if (outer_args)
14416         {
14417           int i;
14418
14419           ++processing_template_decl;
14420
14421           /* Discard the outer levels of args, and then substitute in the
14422              template args from the enclosing class.  */
14423           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14424           partial_spec_args = tsubst_template_args
14425             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14426
14427           /* PARMS already refers to just the innermost parms, but the
14428              template parms in partial_spec_args had their levels lowered
14429              by tsubst, so we need to do the same for the parm list.  We
14430              can't just tsubst the TREE_VEC itself, as tsubst wants to
14431              treat a TREE_VEC as an argument vector.  */
14432           parms = copy_node (parms);
14433           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14434             TREE_VEC_ELT (parms, i) =
14435               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14436
14437           --processing_template_decl;
14438         }
14439       spec_args = get_class_bindings (parms,
14440                                       partial_spec_args,
14441                                       args);
14442       if (spec_args)
14443         {
14444           if (outer_args)
14445             spec_args = add_to_template_args (outer_args, spec_args);
14446           list = tree_cons (spec_args, TREE_VALUE (t), list);
14447           TREE_TYPE (list) = TREE_TYPE (t);
14448         }
14449     }
14450
14451   if (! list)
14452     return NULL_TREE;
14453
14454   ambiguous_p = false;
14455   t = list;
14456   champ = t;
14457   t = TREE_CHAIN (t);
14458   for (; t; t = TREE_CHAIN (t))
14459     {
14460       fate = more_specialized_class (champ, t);
14461       if (fate == 1)
14462         ;
14463       else
14464         {
14465           if (fate == 0)
14466             {
14467               t = TREE_CHAIN (t);
14468               if (! t)
14469                 {
14470                   ambiguous_p = true;
14471                   break;
14472                 }
14473             }
14474           champ = t;
14475         }
14476     }
14477
14478   if (!ambiguous_p)
14479     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14480       {
14481         fate = more_specialized_class (champ, t);
14482         if (fate != 1)
14483           {
14484             ambiguous_p = true;
14485             break;
14486           }
14487       }
14488
14489   if (ambiguous_p)
14490     {
14491       const char *str = "candidates are:";
14492       error ("ambiguous class template instantiation for %q#T", type);
14493       for (t = list; t; t = TREE_CHAIN (t))
14494         {
14495           error ("%s %+#T", str, TREE_TYPE (t));
14496           str = "               ";
14497         }
14498       return error_mark_node;
14499     }
14500
14501   return champ;
14502 }
14503
14504 /* Explicitly instantiate DECL.  */
14505
14506 void
14507 do_decl_instantiation (tree decl, tree storage)
14508 {
14509   tree result = NULL_TREE;
14510   int extern_p = 0;
14511
14512   if (!decl || decl == error_mark_node)
14513     /* An error occurred, for which grokdeclarator has already issued
14514        an appropriate message.  */
14515     return;
14516   else if (! DECL_LANG_SPECIFIC (decl))
14517     {
14518       error ("explicit instantiation of non-template %q#D", decl);
14519       return;
14520     }
14521   else if (TREE_CODE (decl) == VAR_DECL)
14522     {
14523       /* There is an asymmetry here in the way VAR_DECLs and
14524          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14525          the latter, the DECL we get back will be marked as a
14526          template instantiation, and the appropriate
14527          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14528          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14529          should handle VAR_DECLs as it currently handles
14530          FUNCTION_DECLs.  */
14531       if (!DECL_CLASS_SCOPE_P (decl))
14532         {
14533           error ("%qD is not a static data member of a class template", decl);
14534           return;
14535         }
14536       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14537       if (!result || TREE_CODE (result) != VAR_DECL)
14538         {
14539           error ("no matching template for %qD found", decl);
14540           return;
14541         }
14542       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14543         {
14544           error ("type %qT for explicit instantiation %qD does not match "
14545                  "declared type %qT", TREE_TYPE (result), decl,
14546                  TREE_TYPE (decl));
14547           return;
14548         }
14549     }
14550   else if (TREE_CODE (decl) != FUNCTION_DECL)
14551     {
14552       error ("explicit instantiation of %q#D", decl);
14553       return;
14554     }
14555   else
14556     result = decl;
14557
14558   /* Check for various error cases.  Note that if the explicit
14559      instantiation is valid the RESULT will currently be marked as an
14560      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14561      until we get here.  */
14562
14563   if (DECL_TEMPLATE_SPECIALIZATION (result))
14564     {
14565       /* DR 259 [temp.spec].
14566
14567          Both an explicit instantiation and a declaration of an explicit
14568          specialization shall not appear in a program unless the explicit
14569          instantiation follows a declaration of the explicit specialization.
14570
14571          For a given set of template parameters, if an explicit
14572          instantiation of a template appears after a declaration of an
14573          explicit specialization for that template, the explicit
14574          instantiation has no effect.  */
14575       return;
14576     }
14577   else if (DECL_EXPLICIT_INSTANTIATION (result))
14578     {
14579       /* [temp.spec]
14580
14581          No program shall explicitly instantiate any template more
14582          than once.
14583
14584          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14585          the first instantiation was `extern' and the second is not,
14586          and EXTERN_P for the opposite case.  */
14587       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14588         permerror ("duplicate explicit instantiation of %q#D", result);
14589       /* If an "extern" explicit instantiation follows an ordinary
14590          explicit instantiation, the template is instantiated.  */
14591       if (extern_p)
14592         return;
14593     }
14594   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14595     {
14596       error ("no matching template for %qD found", result);
14597       return;
14598     }
14599   else if (!DECL_TEMPLATE_INFO (result))
14600     {
14601       permerror ("explicit instantiation of non-template %q#D", result);
14602       return;
14603     }
14604
14605   if (storage == NULL_TREE)
14606     ;
14607   else if (storage == ridpointers[(int) RID_EXTERN])
14608     {
14609       if (!in_system_header && (cxx_dialect == cxx98))
14610         pedwarn (OPT_pedantic, 
14611                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
14612                  "instantiations");
14613       extern_p = 1;
14614     }
14615   else
14616     error ("storage class %qD applied to template instantiation", storage);
14617
14618   check_explicit_instantiation_namespace (result);
14619   mark_decl_instantiated (result, extern_p);
14620   if (! extern_p)
14621     instantiate_decl (result, /*defer_ok=*/1,
14622                       /*expl_inst_class_mem_p=*/false);
14623 }
14624
14625 static void
14626 mark_class_instantiated (tree t, int extern_p)
14627 {
14628   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14629   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14630   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14631   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14632   if (! extern_p)
14633     {
14634       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14635       rest_of_type_compilation (t, 1);
14636     }
14637 }
14638
14639 /* Called from do_type_instantiation through binding_table_foreach to
14640    do recursive instantiation for the type bound in ENTRY.  */
14641 static void
14642 bt_instantiate_type_proc (binding_entry entry, void *data)
14643 {
14644   tree storage = *(tree *) data;
14645
14646   if (MAYBE_CLASS_TYPE_P (entry->type)
14647       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14648     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14649 }
14650
14651 /* Called from do_type_instantiation to instantiate a member
14652    (a member function or a static member variable) of an
14653    explicitly instantiated class template.  */
14654 static void
14655 instantiate_class_member (tree decl, int extern_p)
14656 {
14657   mark_decl_instantiated (decl, extern_p);
14658   if (! extern_p)
14659     instantiate_decl (decl, /*defer_ok=*/1,
14660                       /*expl_inst_class_mem_p=*/true);
14661 }
14662
14663 /* Perform an explicit instantiation of template class T.  STORAGE, if
14664    non-null, is the RID for extern, inline or static.  COMPLAIN is
14665    nonzero if this is called from the parser, zero if called recursively,
14666    since the standard is unclear (as detailed below).  */
14667
14668 void
14669 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14670 {
14671   int extern_p = 0;
14672   int nomem_p = 0;
14673   int static_p = 0;
14674   int previous_instantiation_extern_p = 0;
14675
14676   if (TREE_CODE (t) == TYPE_DECL)
14677     t = TREE_TYPE (t);
14678
14679   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14680     {
14681       error ("explicit instantiation of non-template type %qT", t);
14682       return;
14683     }
14684
14685   complete_type (t);
14686
14687   if (!COMPLETE_TYPE_P (t))
14688     {
14689       if (complain & tf_error)
14690         error ("explicit instantiation of %q#T before definition of template",
14691                t);
14692       return;
14693     }
14694
14695   if (storage != NULL_TREE)
14696     {
14697       if (!in_system_header)
14698         {
14699           if (storage == ridpointers[(int) RID_EXTERN])
14700             {
14701               if (cxx_dialect == cxx98)
14702                 pedwarn(OPT_pedantic, 
14703                         "ISO C++ 1998 forbids the use of %<extern%> on "
14704                         "explicit instantiations");
14705             }
14706           else
14707             pedwarn(OPT_pedantic, "ISO C++ forbids the use of %qE on explicit "
14708                     "instantiations", storage);
14709         }
14710
14711       if (storage == ridpointers[(int) RID_INLINE])
14712         nomem_p = 1;
14713       else if (storage == ridpointers[(int) RID_EXTERN])
14714         extern_p = 1;
14715       else if (storage == ridpointers[(int) RID_STATIC])
14716         static_p = 1;
14717       else
14718         {
14719           error ("storage class %qD applied to template instantiation",
14720                  storage);
14721           extern_p = 0;
14722         }
14723     }
14724
14725   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14726     {
14727       /* DR 259 [temp.spec].
14728
14729          Both an explicit instantiation and a declaration of an explicit
14730          specialization shall not appear in a program unless the explicit
14731          instantiation follows a declaration of the explicit specialization.
14732
14733          For a given set of template parameters, if an explicit
14734          instantiation of a template appears after a declaration of an
14735          explicit specialization for that template, the explicit
14736          instantiation has no effect.  */
14737       return;
14738     }
14739   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14740     {
14741       /* [temp.spec]
14742
14743          No program shall explicitly instantiate any template more
14744          than once.
14745
14746          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14747          instantiation was `extern'.  If EXTERN_P then the second is.
14748          These cases are OK.  */
14749       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14750
14751       if (!previous_instantiation_extern_p && !extern_p
14752           && (complain & tf_error))
14753         permerror ("duplicate explicit instantiation of %q#T", t);
14754
14755       /* If we've already instantiated the template, just return now.  */
14756       if (!CLASSTYPE_INTERFACE_ONLY (t))
14757         return;
14758     }
14759
14760   check_explicit_instantiation_namespace (TYPE_NAME (t));
14761   mark_class_instantiated (t, extern_p);
14762
14763   if (nomem_p)
14764     return;
14765
14766   {
14767     tree tmp;
14768
14769     /* In contrast to implicit instantiation, where only the
14770        declarations, and not the definitions, of members are
14771        instantiated, we have here:
14772
14773          [temp.explicit]
14774
14775          The explicit instantiation of a class template specialization
14776          implies the instantiation of all of its members not
14777          previously explicitly specialized in the translation unit
14778          containing the explicit instantiation.
14779
14780        Of course, we can't instantiate member template classes, since
14781        we don't have any arguments for them.  Note that the standard
14782        is unclear on whether the instantiation of the members are
14783        *explicit* instantiations or not.  However, the most natural
14784        interpretation is that it should be an explicit instantiation.  */
14785
14786     if (! static_p)
14787       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14788         if (TREE_CODE (tmp) == FUNCTION_DECL
14789             && DECL_TEMPLATE_INSTANTIATION (tmp))
14790           instantiate_class_member (tmp, extern_p);
14791
14792     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14793       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14794         instantiate_class_member (tmp, extern_p);
14795
14796     if (CLASSTYPE_NESTED_UTDS (t))
14797       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14798                              bt_instantiate_type_proc, &storage);
14799   }
14800 }
14801
14802 /* Given a function DECL, which is a specialization of TMPL, modify
14803    DECL to be a re-instantiation of TMPL with the same template
14804    arguments.  TMPL should be the template into which tsubst'ing
14805    should occur for DECL, not the most general template.
14806
14807    One reason for doing this is a scenario like this:
14808
14809      template <class T>
14810      void f(const T&, int i);
14811
14812      void g() { f(3, 7); }
14813
14814      template <class T>
14815      void f(const T& t, const int i) { }
14816
14817    Note that when the template is first instantiated, with
14818    instantiate_template, the resulting DECL will have no name for the
14819    first parameter, and the wrong type for the second.  So, when we go
14820    to instantiate the DECL, we regenerate it.  */
14821
14822 static void
14823 regenerate_decl_from_template (tree decl, tree tmpl)
14824 {
14825   /* The arguments used to instantiate DECL, from the most general
14826      template.  */
14827   tree args;
14828   tree code_pattern;
14829
14830   args = DECL_TI_ARGS (decl);
14831   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14832
14833   /* Make sure that we can see identifiers, and compute access
14834      correctly.  */
14835   push_access_scope (decl);
14836
14837   if (TREE_CODE (decl) == FUNCTION_DECL)
14838     {
14839       tree decl_parm;
14840       tree pattern_parm;
14841       tree specs;
14842       int args_depth;
14843       int parms_depth;
14844
14845       args_depth = TMPL_ARGS_DEPTH (args);
14846       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14847       if (args_depth > parms_depth)
14848         args = get_innermost_template_args (args, parms_depth);
14849
14850       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14851                                               args, tf_error, NULL_TREE);
14852       if (specs)
14853         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14854                                                     specs);
14855
14856       /* Merge parameter declarations.  */
14857       decl_parm = skip_artificial_parms_for (decl,
14858                                              DECL_ARGUMENTS (decl));
14859       pattern_parm
14860         = skip_artificial_parms_for (code_pattern,
14861                                      DECL_ARGUMENTS (code_pattern));
14862       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14863         {
14864           tree parm_type;
14865           tree attributes;
14866           
14867           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14868             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14869           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14870                               NULL_TREE);
14871           parm_type = type_decays_to (parm_type);
14872           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14873             TREE_TYPE (decl_parm) = parm_type;
14874           attributes = DECL_ATTRIBUTES (pattern_parm);
14875           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14876             {
14877               DECL_ATTRIBUTES (decl_parm) = attributes;
14878               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14879             }
14880           decl_parm = TREE_CHAIN (decl_parm);
14881           pattern_parm = TREE_CHAIN (pattern_parm);
14882         }
14883       /* Merge any parameters that match with the function parameter
14884          pack.  */
14885       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14886         {
14887           int i, len;
14888           tree expanded_types;
14889           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14890              the parameters in this function parameter pack.  */
14891           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14892                                                  args, tf_error, NULL_TREE);
14893           len = TREE_VEC_LENGTH (expanded_types);
14894           for (i = 0; i < len; i++)
14895             {
14896               tree parm_type;
14897               tree attributes;
14898           
14899               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14900                 /* Rename the parameter to include the index.  */
14901                 DECL_NAME (decl_parm) = 
14902                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14903               parm_type = TREE_VEC_ELT (expanded_types, i);
14904               parm_type = type_decays_to (parm_type);
14905               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14906                 TREE_TYPE (decl_parm) = parm_type;
14907               attributes = DECL_ATTRIBUTES (pattern_parm);
14908               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14909                 {
14910                   DECL_ATTRIBUTES (decl_parm) = attributes;
14911                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14912                 }
14913               decl_parm = TREE_CHAIN (decl_parm);
14914             }
14915         }
14916       /* Merge additional specifiers from the CODE_PATTERN.  */
14917       if (DECL_DECLARED_INLINE_P (code_pattern)
14918           && !DECL_DECLARED_INLINE_P (decl))
14919         DECL_DECLARED_INLINE_P (decl) = 1;
14920     }
14921   else if (TREE_CODE (decl) == VAR_DECL)
14922     DECL_INITIAL (decl) =
14923       tsubst_expr (DECL_INITIAL (code_pattern), args,
14924                    tf_error, DECL_TI_TEMPLATE (decl),
14925                    /*integral_constant_expression_p=*/false);
14926   else
14927     gcc_unreachable ();
14928
14929   pop_access_scope (decl);
14930 }
14931
14932 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14933    substituted to get DECL.  */
14934
14935 tree
14936 template_for_substitution (tree decl)
14937 {
14938   tree tmpl = DECL_TI_TEMPLATE (decl);
14939
14940   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14941      for the instantiation.  This is not always the most general
14942      template.  Consider, for example:
14943
14944         template <class T>
14945         struct S { template <class U> void f();
14946                    template <> void f<int>(); };
14947
14948      and an instantiation of S<double>::f<int>.  We want TD to be the
14949      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14950   while (/* An instantiation cannot have a definition, so we need a
14951             more general template.  */
14952          DECL_TEMPLATE_INSTANTIATION (tmpl)
14953            /* We must also deal with friend templates.  Given:
14954
14955                 template <class T> struct S {
14956                   template <class U> friend void f() {};
14957                 };
14958
14959               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14960               so far as the language is concerned, but that's still
14961               where we get the pattern for the instantiation from.  On
14962               other hand, if the definition comes outside the class, say:
14963
14964                 template <class T> struct S {
14965                   template <class U> friend void f();
14966                 };
14967                 template <class U> friend void f() {}
14968
14969               we don't need to look any further.  That's what the check for
14970               DECL_INITIAL is for.  */
14971           || (TREE_CODE (decl) == FUNCTION_DECL
14972               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14973               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14974     {
14975       /* The present template, TD, should not be a definition.  If it
14976          were a definition, we should be using it!  Note that we
14977          cannot restructure the loop to just keep going until we find
14978          a template with a definition, since that might go too far if
14979          a specialization was declared, but not defined.  */
14980       gcc_assert (TREE_CODE (decl) != VAR_DECL
14981                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14982
14983       /* Fetch the more general template.  */
14984       tmpl = DECL_TI_TEMPLATE (tmpl);
14985     }
14986
14987   return tmpl;
14988 }
14989
14990 /* Produce the definition of D, a _DECL generated from a template.  If
14991    DEFER_OK is nonzero, then we don't have to actually do the
14992    instantiation now; we just have to do it sometime.  Normally it is
14993    an error if this is an explicit instantiation but D is undefined.
14994    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14995    explicitly instantiated class template.  */
14996
14997 tree
14998 instantiate_decl (tree d, int defer_ok,
14999                   bool expl_inst_class_mem_p)
15000 {
15001   tree tmpl = DECL_TI_TEMPLATE (d);
15002   tree gen_args;
15003   tree args;
15004   tree td;
15005   tree code_pattern;
15006   tree spec;
15007   tree gen_tmpl;
15008   bool pattern_defined;
15009   int need_push;
15010   location_t saved_loc = input_location;
15011   bool external_p;
15012
15013   /* This function should only be used to instantiate templates for
15014      functions and static member variables.  */
15015   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15016               || TREE_CODE (d) == VAR_DECL);
15017
15018   /* Variables are never deferred; if instantiation is required, they
15019      are instantiated right away.  That allows for better code in the
15020      case that an expression refers to the value of the variable --
15021      if the variable has a constant value the referring expression can
15022      take advantage of that fact.  */
15023   if (TREE_CODE (d) == VAR_DECL)
15024     defer_ok = 0;
15025
15026   /* Don't instantiate cloned functions.  Instead, instantiate the
15027      functions they cloned.  */
15028   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15029     d = DECL_CLONED_FUNCTION (d);
15030
15031   if (DECL_TEMPLATE_INSTANTIATED (d))
15032     /* D has already been instantiated.  It might seem reasonable to
15033        check whether or not D is an explicit instantiation, and, if so,
15034        stop here.  But when an explicit instantiation is deferred
15035        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15036        is set, even though we still need to do the instantiation.  */
15037     return d;
15038
15039   /* If we already have a specialization of this declaration, then
15040      there's no reason to instantiate it.  Note that
15041      retrieve_specialization gives us both instantiations and
15042      specializations, so we must explicitly check
15043      DECL_TEMPLATE_SPECIALIZATION.  */
15044   gen_tmpl = most_general_template (tmpl);
15045   gen_args = DECL_TI_ARGS (d);
15046   spec = retrieve_specialization (gen_tmpl, gen_args,
15047                                   /*class_specializations_p=*/false);
15048   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15049     return spec;
15050
15051   /* This needs to happen before any tsubsting.  */
15052   if (! push_tinst_level (d))
15053     return d;
15054
15055   timevar_push (TV_PARSE);
15056
15057   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15058      for the instantiation.  */
15059   td = template_for_substitution (d);
15060   code_pattern = DECL_TEMPLATE_RESULT (td);
15061
15062   /* We should never be trying to instantiate a member of a class
15063      template or partial specialization.  */
15064   gcc_assert (d != code_pattern);
15065
15066   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15067       || DECL_TEMPLATE_SPECIALIZATION (td))
15068     /* In the case of a friend template whose definition is provided
15069        outside the class, we may have too many arguments.  Drop the
15070        ones we don't need.  The same is true for specializations.  */
15071     args = get_innermost_template_args
15072       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15073   else
15074     args = gen_args;
15075
15076   if (TREE_CODE (d) == FUNCTION_DECL)
15077     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15078   else
15079     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15080
15081   /* We may be in the middle of deferred access check.  Disable it now.  */
15082   push_deferring_access_checks (dk_no_deferred);
15083
15084   /* Unless an explicit instantiation directive has already determined
15085      the linkage of D, remember that a definition is available for
15086      this entity.  */
15087   if (pattern_defined
15088       && !DECL_INTERFACE_KNOWN (d)
15089       && !DECL_NOT_REALLY_EXTERN (d))
15090     mark_definable (d);
15091
15092   input_location = DECL_SOURCE_LOCATION (d);
15093
15094   /* If D is a member of an explicitly instantiated class template,
15095      and no definition is available, treat it like an implicit
15096      instantiation.  */
15097   if (!pattern_defined && expl_inst_class_mem_p
15098       && DECL_EXPLICIT_INSTANTIATION (d))
15099     {
15100       DECL_NOT_REALLY_EXTERN (d) = 0;
15101       DECL_INTERFACE_KNOWN (d) = 0;
15102       SET_DECL_IMPLICIT_INSTANTIATION (d);
15103     }
15104
15105   if (!defer_ok)
15106     {
15107       /* Recheck the substitutions to obtain any warning messages
15108          about ignoring cv qualifiers.  */
15109       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15110       tree type = TREE_TYPE (gen);
15111
15112       /* Make sure that we can see identifiers, and compute access
15113          correctly.  D is already the target FUNCTION_DECL with the
15114          right context.  */
15115       push_access_scope (d);
15116
15117       if (TREE_CODE (gen) == FUNCTION_DECL)
15118         {
15119           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15120           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15121                                           d);
15122           /* Don't simply tsubst the function type, as that will give
15123              duplicate warnings about poor parameter qualifications.
15124              The function arguments are the same as the decl_arguments
15125              without the top level cv qualifiers.  */
15126           type = TREE_TYPE (type);
15127         }
15128       tsubst (type, gen_args, tf_warning_or_error, d);
15129
15130       pop_access_scope (d);
15131     }
15132
15133   /* Check to see whether we know that this template will be
15134      instantiated in some other file, as with "extern template"
15135      extension.  */
15136   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15137   /* In general, we do not instantiate such templates...  */
15138   if (external_p
15139       /* ... but we instantiate inline functions so that we can inline
15140          them and ... */
15141       && ! (TREE_CODE (d) == FUNCTION_DECL
15142             && possibly_inlined_p (d))
15143       /* ... we instantiate static data members whose values are
15144          needed in integral constant expressions.  */
15145       && ! (TREE_CODE (d) == VAR_DECL
15146             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15147     goto out;
15148   /* Defer all other templates, unless we have been explicitly
15149      forbidden from doing so.  */
15150   if (/* If there is no definition, we cannot instantiate the
15151          template.  */
15152       ! pattern_defined
15153       /* If it's OK to postpone instantiation, do so.  */
15154       || defer_ok
15155       /* If this is a static data member that will be defined
15156          elsewhere, we don't want to instantiate the entire data
15157          member, but we do want to instantiate the initializer so that
15158          we can substitute that elsewhere.  */
15159       || (external_p && TREE_CODE (d) == VAR_DECL))
15160     {
15161       /* The definition of the static data member is now required so
15162          we must substitute the initializer.  */
15163       if (TREE_CODE (d) == VAR_DECL
15164           && !DECL_INITIAL (d)
15165           && DECL_INITIAL (code_pattern))
15166         {
15167           tree ns;
15168           tree init;
15169
15170           ns = decl_namespace_context (d);
15171           push_nested_namespace (ns);
15172           push_nested_class (DECL_CONTEXT (d));
15173           init = tsubst_expr (DECL_INITIAL (code_pattern),
15174                               args,
15175                               tf_warning_or_error, NULL_TREE,
15176                               /*integral_constant_expression_p=*/false);
15177           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15178                           /*asmspec_tree=*/NULL_TREE,
15179                           LOOKUP_ONLYCONVERTING);
15180           pop_nested_class ();
15181           pop_nested_namespace (ns);
15182         }
15183
15184       /* We restore the source position here because it's used by
15185          add_pending_template.  */
15186       input_location = saved_loc;
15187
15188       if (at_eof && !pattern_defined
15189           && DECL_EXPLICIT_INSTANTIATION (d))
15190         /* [temp.explicit]
15191
15192            The definition of a non-exported function template, a
15193            non-exported member function template, or a non-exported
15194            member function or static data member of a class template
15195            shall be present in every translation unit in which it is
15196            explicitly instantiated.  */
15197         permerror
15198           ("explicit instantiation of %qD but no definition available", d);
15199
15200       /* ??? Historically, we have instantiated inline functions, even
15201          when marked as "extern template".  */
15202       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15203         add_pending_template (d);
15204       goto out;
15205     }
15206   /* Tell the repository that D is available in this translation unit
15207      -- and see if it is supposed to be instantiated here.  */
15208   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15209     {
15210       /* In a PCH file, despite the fact that the repository hasn't
15211          requested instantiation in the PCH it is still possible that
15212          an instantiation will be required in a file that includes the
15213          PCH.  */
15214       if (pch_file)
15215         add_pending_template (d);
15216       /* Instantiate inline functions so that the inliner can do its
15217          job, even though we'll not be emitting a copy of this
15218          function.  */
15219       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
15220         goto out;
15221     }
15222
15223   need_push = !cfun || !global_bindings_p ();
15224   if (need_push)
15225     push_to_top_level ();
15226
15227   /* Mark D as instantiated so that recursive calls to
15228      instantiate_decl do not try to instantiate it again.  */
15229   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15230
15231   /* Regenerate the declaration in case the template has been modified
15232      by a subsequent redeclaration.  */
15233   regenerate_decl_from_template (d, td);
15234
15235   /* We already set the file and line above.  Reset them now in case
15236      they changed as a result of calling regenerate_decl_from_template.  */
15237   input_location = DECL_SOURCE_LOCATION (d);
15238
15239   if (TREE_CODE (d) == VAR_DECL)
15240     {
15241       tree init;
15242
15243       /* Clear out DECL_RTL; whatever was there before may not be right
15244          since we've reset the type of the declaration.  */
15245       SET_DECL_RTL (d, NULL_RTX);
15246       DECL_IN_AGGR_P (d) = 0;
15247
15248       /* The initializer is placed in DECL_INITIAL by
15249          regenerate_decl_from_template.  Pull it out so that
15250          finish_decl can process it.  */
15251       init = DECL_INITIAL (d);
15252       DECL_INITIAL (d) = NULL_TREE;
15253       DECL_INITIALIZED_P (d) = 0;
15254
15255       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15256          initializer.  That function will defer actual emission until
15257          we have a chance to determine linkage.  */
15258       DECL_EXTERNAL (d) = 0;
15259
15260       /* Enter the scope of D so that access-checking works correctly.  */
15261       push_nested_class (DECL_CONTEXT (d));
15262       finish_decl (d, init, NULL_TREE);
15263       pop_nested_class ();
15264     }
15265   else if (TREE_CODE (d) == FUNCTION_DECL)
15266     {
15267       htab_t saved_local_specializations;
15268       tree subst_decl;
15269       tree tmpl_parm;
15270       tree spec_parm;
15271
15272       /* Save away the current list, in case we are instantiating one
15273          template from within the body of another.  */
15274       saved_local_specializations = local_specializations;
15275
15276       /* Set up the list of local specializations.  */
15277       local_specializations = htab_create (37,
15278                                            hash_local_specialization,
15279                                            eq_local_specializations,
15280                                            NULL);
15281
15282       /* Set up context.  */
15283       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15284
15285       /* Create substitution entries for the parameters.  */
15286       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15287       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15288       spec_parm = DECL_ARGUMENTS (d);
15289       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15290         {
15291           register_local_specialization (spec_parm, tmpl_parm);
15292           spec_parm = skip_artificial_parms_for (d, spec_parm);
15293           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15294         }
15295       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15296         {
15297           register_local_specialization (spec_parm, tmpl_parm);
15298           tmpl_parm = TREE_CHAIN (tmpl_parm);
15299           spec_parm = TREE_CHAIN (spec_parm);
15300         }
15301       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15302         {
15303           /* Collect all of the extra "packed" parameters into an
15304              argument pack.  */
15305           tree parmvec;
15306           tree parmtypevec;
15307           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15308           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15309           int i, len = 0;
15310           tree t;
15311           
15312           /* Count how many parameters remain.  */
15313           for (t = spec_parm; t; t = TREE_CHAIN (t))
15314             len++;
15315
15316           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15317           parmvec = make_tree_vec (len);
15318           parmtypevec = make_tree_vec (len);
15319           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15320             {
15321               TREE_VEC_ELT (parmvec, i) = spec_parm;
15322               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15323             }
15324
15325           /* Build the argument packs.  */
15326           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15327           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15328           TREE_TYPE (argpack) = argtypepack;
15329           
15330           /* Register the (value) argument pack as a specialization of
15331              TMPL_PARM, then move on.  */
15332           register_local_specialization (argpack, tmpl_parm);
15333           tmpl_parm = TREE_CHAIN (tmpl_parm);
15334         }
15335       gcc_assert (!spec_parm);
15336
15337       /* Substitute into the body of the function.  */
15338       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15339                    tf_warning_or_error, tmpl,
15340                    /*integral_constant_expression_p=*/false);
15341
15342       /* Set the current input_location to the end of the function
15343          so that finish_function knows where we are.  */
15344       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15345
15346       /* We don't need the local specializations any more.  */
15347       htab_delete (local_specializations);
15348       local_specializations = saved_local_specializations;
15349
15350       /* Finish the function.  */
15351       d = finish_function (0);
15352       expand_or_defer_fn (d);
15353     }
15354
15355   /* We're not deferring instantiation any more.  */
15356   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15357
15358   if (need_push)
15359     pop_from_top_level ();
15360
15361 out:
15362   input_location = saved_loc;
15363   pop_deferring_access_checks ();
15364   pop_tinst_level ();
15365
15366   timevar_pop (TV_PARSE);
15367
15368   return d;
15369 }
15370
15371 /* Run through the list of templates that we wish we could
15372    instantiate, and instantiate any we can.  RETRIES is the
15373    number of times we retry pending template instantiation.  */
15374
15375 void
15376 instantiate_pending_templates (int retries)
15377 {
15378   int reconsider;
15379   location_t saved_loc = input_location;
15380
15381   /* Instantiating templates may trigger vtable generation.  This in turn
15382      may require further template instantiations.  We place a limit here
15383      to avoid infinite loop.  */
15384   if (pending_templates && retries >= max_tinst_depth)
15385     {
15386       tree decl = pending_templates->tinst->decl;
15387
15388       error ("template instantiation depth exceeds maximum of %d"
15389              " instantiating %q+D, possibly from virtual table generation"
15390              " (use -ftemplate-depth-NN to increase the maximum)",
15391              max_tinst_depth, decl);
15392       if (TREE_CODE (decl) == FUNCTION_DECL)
15393         /* Pretend that we defined it.  */
15394         DECL_INITIAL (decl) = error_mark_node;
15395       return;
15396     }
15397
15398   do
15399     {
15400       struct pending_template **t = &pending_templates;
15401       struct pending_template *last = NULL;
15402       reconsider = 0;
15403       while (*t)
15404         {
15405           tree instantiation = reopen_tinst_level ((*t)->tinst);
15406           bool complete = false;
15407
15408           if (TYPE_P (instantiation))
15409             {
15410               tree fn;
15411
15412               if (!COMPLETE_TYPE_P (instantiation))
15413                 {
15414                   instantiate_class_template (instantiation);
15415                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15416                     for (fn = TYPE_METHODS (instantiation);
15417                          fn;
15418                          fn = TREE_CHAIN (fn))
15419                       if (! DECL_ARTIFICIAL (fn))
15420                         instantiate_decl (fn,
15421                                           /*defer_ok=*/0,
15422                                           /*expl_inst_class_mem_p=*/false);
15423                   if (COMPLETE_TYPE_P (instantiation))
15424                     reconsider = 1;
15425                 }
15426
15427               complete = COMPLETE_TYPE_P (instantiation);
15428             }
15429           else
15430             {
15431               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15432                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15433                 {
15434                   instantiation
15435                     = instantiate_decl (instantiation,
15436                                         /*defer_ok=*/0,
15437                                         /*expl_inst_class_mem_p=*/false);
15438                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15439                     reconsider = 1;
15440                 }
15441
15442               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15443                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15444             }
15445
15446           if (complete)
15447             /* If INSTANTIATION has been instantiated, then we don't
15448                need to consider it again in the future.  */
15449             *t = (*t)->next;
15450           else
15451             {
15452               last = *t;
15453               t = &(*t)->next;
15454             }
15455           tinst_depth = 0;
15456           current_tinst_level = NULL;
15457         }
15458       last_pending_template = last;
15459     }
15460   while (reconsider);
15461
15462   input_location = saved_loc;
15463 }
15464
15465 /* Substitute ARGVEC into T, which is a list of initializers for
15466    either base class or a non-static data member.  The TREE_PURPOSEs
15467    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15468    instantiate_decl.  */
15469
15470 static tree
15471 tsubst_initializer_list (tree t, tree argvec)
15472 {
15473   tree inits = NULL_TREE;
15474
15475   for (; t; t = TREE_CHAIN (t))
15476     {
15477       tree decl;
15478       tree init;
15479       tree expanded_bases = NULL_TREE;
15480       tree expanded_arguments = NULL_TREE;
15481       int i, len = 1;
15482
15483       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15484         {
15485           tree expr;
15486           tree arg;
15487
15488           /* Expand the base class expansion type into separate base
15489              classes.  */
15490           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15491                                                  tf_warning_or_error,
15492                                                  NULL_TREE);
15493           if (expanded_bases == error_mark_node)
15494             continue;
15495           
15496           /* We'll be building separate TREE_LISTs of arguments for
15497              each base.  */
15498           len = TREE_VEC_LENGTH (expanded_bases);
15499           expanded_arguments = make_tree_vec (len);
15500           for (i = 0; i < len; i++)
15501             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15502
15503           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15504              expand each argument in the TREE_VALUE of t.  */
15505           expr = make_node (EXPR_PACK_EXPANSION);
15506           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15507             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15508
15509           if (TREE_VALUE (t) == void_type_node)
15510             /* VOID_TYPE_NODE is used to indicate
15511                value-initialization.  */
15512             {
15513               for (i = 0; i < len; i++)
15514                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15515             }
15516           else
15517             {
15518               /* Substitute parameter packs into each argument in the
15519                  TREE_LIST.  */
15520               in_base_initializer = 1;
15521               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15522                 {
15523                   tree expanded_exprs;
15524
15525                   /* Expand the argument.  */
15526                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15527                   expanded_exprs 
15528                     = tsubst_pack_expansion (expr, argvec,
15529                                              tf_warning_or_error,
15530                                              NULL_TREE);
15531                   if (expanded_exprs == error_mark_node)
15532                     continue;
15533
15534                   /* Prepend each of the expanded expressions to the
15535                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15536                   for (i = 0; i < len; i++)
15537                     {
15538                       TREE_VEC_ELT (expanded_arguments, i) = 
15539                         tree_cons (NULL_TREE, 
15540                                    TREE_VEC_ELT (expanded_exprs, i),
15541                                    TREE_VEC_ELT (expanded_arguments, i));
15542                     }
15543                 }
15544               in_base_initializer = 0;
15545
15546               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15547                  since we built them backwards.  */
15548               for (i = 0; i < len; i++)
15549                 {
15550                   TREE_VEC_ELT (expanded_arguments, i) = 
15551                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15552                 }
15553             }
15554         }
15555
15556       for (i = 0; i < len; ++i)
15557         {
15558           if (expanded_bases)
15559             {
15560               decl = TREE_VEC_ELT (expanded_bases, i);
15561               decl = expand_member_init (decl);
15562               init = TREE_VEC_ELT (expanded_arguments, i);
15563             }
15564           else
15565             {
15566               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15567                                   tf_warning_or_error, NULL_TREE);
15568
15569               decl = expand_member_init (decl);
15570               if (decl && !DECL_P (decl))
15571                 in_base_initializer = 1;
15572
15573               init = tsubst_expr (TREE_VALUE (t), argvec, 
15574                                   tf_warning_or_error, NULL_TREE,
15575                                   /*integral_constant_expression_p=*/false);
15576               in_base_initializer = 0;
15577             }
15578
15579           if (decl)
15580             {
15581               init = build_tree_list (decl, init);
15582               TREE_CHAIN (init) = inits;
15583               inits = init;
15584             }
15585         }
15586     }
15587   return inits;
15588 }
15589
15590 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15591
15592 static void
15593 set_current_access_from_decl (tree decl)
15594 {
15595   if (TREE_PRIVATE (decl))
15596     current_access_specifier = access_private_node;
15597   else if (TREE_PROTECTED (decl))
15598     current_access_specifier = access_protected_node;
15599   else
15600     current_access_specifier = access_public_node;
15601 }
15602
15603 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15604    is the instantiation (which should have been created with
15605    start_enum) and ARGS are the template arguments to use.  */
15606
15607 static void
15608 tsubst_enum (tree tag, tree newtag, tree args)
15609 {
15610   tree e;
15611
15612   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15613     {
15614       tree value;
15615       tree decl;
15616
15617       decl = TREE_VALUE (e);
15618       /* Note that in a template enum, the TREE_VALUE is the
15619          CONST_DECL, not the corresponding INTEGER_CST.  */
15620       value = tsubst_expr (DECL_INITIAL (decl),
15621                            args, tf_warning_or_error, NULL_TREE,
15622                            /*integral_constant_expression_p=*/true);
15623
15624       /* Give this enumeration constant the correct access.  */
15625       set_current_access_from_decl (decl);
15626
15627       /* Actually build the enumerator itself.  */
15628       build_enumerator (DECL_NAME (decl), value, newtag);
15629     }
15630
15631   finish_enum (newtag);
15632   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15633     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15634 }
15635
15636 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15637    its type -- but without substituting the innermost set of template
15638    arguments.  So, innermost set of template parameters will appear in
15639    the type.  */
15640
15641 tree
15642 get_mostly_instantiated_function_type (tree decl)
15643 {
15644   tree fn_type;
15645   tree tmpl;
15646   tree targs;
15647   tree tparms;
15648   int parm_depth;
15649
15650   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15651   targs = DECL_TI_ARGS (decl);
15652   tparms = DECL_TEMPLATE_PARMS (tmpl);
15653   parm_depth = TMPL_PARMS_DEPTH (tparms);
15654
15655   /* There should be as many levels of arguments as there are levels
15656      of parameters.  */
15657   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15658
15659   fn_type = TREE_TYPE (tmpl);
15660
15661   if (parm_depth == 1)
15662     /* No substitution is necessary.  */
15663     ;
15664   else
15665     {
15666       int i, save_access_control;
15667       tree partial_args;
15668
15669       /* Replace the innermost level of the TARGS with NULL_TREEs to
15670          let tsubst know not to substitute for those parameters.  */
15671       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15672       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15673         SET_TMPL_ARGS_LEVEL (partial_args, i,
15674                              TMPL_ARGS_LEVEL (targs, i));
15675       SET_TMPL_ARGS_LEVEL (partial_args,
15676                            TMPL_ARGS_DEPTH (targs),
15677                            make_tree_vec (DECL_NTPARMS (tmpl)));
15678
15679       /* Disable access control as this function is used only during
15680          name-mangling.  */
15681       save_access_control = flag_access_control;
15682       flag_access_control = 0;
15683
15684       ++processing_template_decl;
15685       /* Now, do the (partial) substitution to figure out the
15686          appropriate function type.  */
15687       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15688       --processing_template_decl;
15689
15690       /* Substitute into the template parameters to obtain the real
15691          innermost set of parameters.  This step is important if the
15692          innermost set of template parameters contains value
15693          parameters whose types depend on outer template parameters.  */
15694       TREE_VEC_LENGTH (partial_args)--;
15695       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15696
15697       flag_access_control = save_access_control;
15698     }
15699
15700   return fn_type;
15701 }
15702
15703 /* Return truthvalue if we're processing a template different from
15704    the last one involved in diagnostics.  */
15705 int
15706 problematic_instantiation_changed (void)
15707 {
15708   return last_template_error_tick != tinst_level_tick;
15709 }
15710
15711 /* Remember current template involved in diagnostics.  */
15712 void
15713 record_last_problematic_instantiation (void)
15714 {
15715   last_template_error_tick = tinst_level_tick;
15716 }
15717
15718 struct tinst_level *
15719 current_instantiation (void)
15720 {
15721   return current_tinst_level;
15722 }
15723
15724 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15725    type. Return zero for ok, nonzero for disallowed. Issue error and
15726    warning messages under control of COMPLAIN.  */
15727
15728 static int
15729 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15730 {
15731   if (INTEGRAL_TYPE_P (type))
15732     return 0;
15733   else if (POINTER_TYPE_P (type))
15734     return 0;
15735   else if (TYPE_PTR_TO_MEMBER_P (type))
15736     return 0;
15737   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15738     return 0;
15739   else if (TREE_CODE (type) == TYPENAME_TYPE)
15740     return 0;
15741
15742   if (complain & tf_error)
15743     error ("%q#T is not a valid type for a template constant parameter", type);
15744   return 1;
15745 }
15746
15747 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15748    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15749
15750 static bool
15751 dependent_type_p_r (tree type)
15752 {
15753   tree scope;
15754
15755   /* [temp.dep.type]
15756
15757      A type is dependent if it is:
15758
15759      -- a template parameter. Template template parameters are types
15760         for us (since TYPE_P holds true for them) so we handle
15761         them here.  */
15762   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15763       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15764     return true;
15765   /* -- a qualified-id with a nested-name-specifier which contains a
15766         class-name that names a dependent type or whose unqualified-id
15767         names a dependent type.  */
15768   if (TREE_CODE (type) == TYPENAME_TYPE)
15769     return true;
15770   /* -- a cv-qualified type where the cv-unqualified type is
15771         dependent.  */
15772   type = TYPE_MAIN_VARIANT (type);
15773   /* -- a compound type constructed from any dependent type.  */
15774   if (TYPE_PTR_TO_MEMBER_P (type))
15775     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15776             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15777                                            (type)));
15778   else if (TREE_CODE (type) == POINTER_TYPE
15779            || TREE_CODE (type) == REFERENCE_TYPE)
15780     return dependent_type_p (TREE_TYPE (type));
15781   else if (TREE_CODE (type) == FUNCTION_TYPE
15782            || TREE_CODE (type) == METHOD_TYPE)
15783     {
15784       tree arg_type;
15785
15786       if (dependent_type_p (TREE_TYPE (type)))
15787         return true;
15788       for (arg_type = TYPE_ARG_TYPES (type);
15789            arg_type;
15790            arg_type = TREE_CHAIN (arg_type))
15791         if (dependent_type_p (TREE_VALUE (arg_type)))
15792           return true;
15793       return false;
15794     }
15795   /* -- an array type constructed from any dependent type or whose
15796         size is specified by a constant expression that is
15797         value-dependent.  */
15798   if (TREE_CODE (type) == ARRAY_TYPE)
15799     {
15800       if (TYPE_DOMAIN (type)
15801           && dependent_type_p (TYPE_DOMAIN (type)))
15802         return true;
15803       return dependent_type_p (TREE_TYPE (type));
15804     }
15805   else if (TREE_CODE (type) == INTEGER_TYPE
15806            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15807     {
15808       /* If this is the TYPE_DOMAIN of an array type, consider it
15809          dependent.  */
15810       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15811               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15812     }
15813
15814   /* -- a template-id in which either the template name is a template
15815      parameter ...  */
15816   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15817     return true;
15818   /* ... or any of the template arguments is a dependent type or
15819         an expression that is type-dependent or value-dependent.  */
15820   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15821            && (any_dependent_template_arguments_p
15822                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15823     return true;
15824
15825   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15826      argument of the `typeof' expression is not type-dependent, then
15827      it should already been have resolved.  */
15828   if (TREE_CODE (type) == TYPEOF_TYPE
15829       || TREE_CODE (type) == DECLTYPE_TYPE)
15830     return true;
15831
15832   /* A template argument pack is dependent if any of its packed
15833      arguments are.  */
15834   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15835     {
15836       tree args = ARGUMENT_PACK_ARGS (type);
15837       int i, len = TREE_VEC_LENGTH (args);
15838       for (i = 0; i < len; ++i)
15839         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15840           return true;
15841     }
15842
15843   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15844      be template parameters.  */
15845   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15846     return true;
15847
15848   /* The standard does not specifically mention types that are local
15849      to template functions or local classes, but they should be
15850      considered dependent too.  For example:
15851
15852        template <int I> void f() {
15853          enum E { a = I };
15854          S<sizeof (E)> s;
15855        }
15856
15857      The size of `E' cannot be known until the value of `I' has been
15858      determined.  Therefore, `E' must be considered dependent.  */
15859   scope = TYPE_CONTEXT (type);
15860   if (scope && TYPE_P (scope))
15861     return dependent_type_p (scope);
15862   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15863     return type_dependent_expression_p (scope);
15864
15865   /* Other types are non-dependent.  */
15866   return false;
15867 }
15868
15869 /* Returns TRUE if TYPE is dependent, in the sense of
15870    [temp.dep.type].  */
15871
15872 bool
15873 dependent_type_p (tree type)
15874 {
15875   /* If there are no template parameters in scope, then there can't be
15876      any dependent types.  */
15877   if (!processing_template_decl)
15878     {
15879       /* If we are not processing a template, then nobody should be
15880          providing us with a dependent type.  */
15881       gcc_assert (type);
15882       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15883       return false;
15884     }
15885
15886   /* If the type is NULL, we have not computed a type for the entity
15887      in question; in that case, the type is dependent.  */
15888   if (!type)
15889     return true;
15890
15891   /* Erroneous types can be considered non-dependent.  */
15892   if (type == error_mark_node)
15893     return false;
15894
15895   /* If we have not already computed the appropriate value for TYPE,
15896      do so now.  */
15897   if (!TYPE_DEPENDENT_P_VALID (type))
15898     {
15899       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15900       TYPE_DEPENDENT_P_VALID (type) = 1;
15901     }
15902
15903   return TYPE_DEPENDENT_P (type);
15904 }
15905
15906 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15907
15908 static bool
15909 dependent_scope_ref_p (tree expression, bool criterion (tree))
15910 {
15911   tree scope;
15912   tree name;
15913
15914   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15915
15916   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15917     return true;
15918
15919   scope = TREE_OPERAND (expression, 0);
15920   name = TREE_OPERAND (expression, 1);
15921
15922   /* [temp.dep.expr]
15923
15924      An id-expression is type-dependent if it contains a
15925      nested-name-specifier that contains a class-name that names a
15926      dependent type.  */
15927   /* The suggested resolution to Core Issue 2 implies that if the
15928      qualifying type is the current class, then we must peek
15929      inside it.  */
15930   if (DECL_P (name)
15931       && currently_open_class (scope)
15932       && !criterion (name))
15933     return false;
15934   if (dependent_type_p (scope))
15935     return true;
15936
15937   return false;
15938 }
15939
15940 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15941    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15942    expression.  */
15943
15944 bool
15945 value_dependent_expression_p (tree expression)
15946 {
15947   if (!processing_template_decl)
15948     return false;
15949
15950   /* A name declared with a dependent type.  */
15951   if (DECL_P (expression) && type_dependent_expression_p (expression))
15952     return true;
15953
15954   switch (TREE_CODE (expression))
15955     {
15956     case IDENTIFIER_NODE:
15957       /* A name that has not been looked up -- must be dependent.  */
15958       return true;
15959
15960     case TEMPLATE_PARM_INDEX:
15961       /* A non-type template parm.  */
15962       return true;
15963
15964     case CONST_DECL:
15965       /* A non-type template parm.  */
15966       if (DECL_TEMPLATE_PARM_P (expression))
15967         return true;
15968       return value_dependent_expression_p (DECL_INITIAL (expression));
15969
15970     case VAR_DECL:
15971        /* A constant with integral or enumeration type and is initialized
15972           with an expression that is value-dependent.  */
15973       if (DECL_INITIAL (expression)
15974           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15975           && value_dependent_expression_p (DECL_INITIAL (expression)))
15976         return true;
15977       return false;
15978
15979     case DYNAMIC_CAST_EXPR:
15980     case STATIC_CAST_EXPR:
15981     case CONST_CAST_EXPR:
15982     case REINTERPRET_CAST_EXPR:
15983     case CAST_EXPR:
15984       /* These expressions are value-dependent if the type to which
15985          the cast occurs is dependent or the expression being casted
15986          is value-dependent.  */
15987       {
15988         tree type = TREE_TYPE (expression);
15989
15990         if (dependent_type_p (type))
15991           return true;
15992
15993         /* A functional cast has a list of operands.  */
15994         expression = TREE_OPERAND (expression, 0);
15995         if (!expression)
15996           {
15997             /* If there are no operands, it must be an expression such
15998                as "int()". This should not happen for aggregate types
15999                because it would form non-constant expressions.  */
16000             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16001
16002             return false;
16003           }
16004
16005         if (TREE_CODE (expression) == TREE_LIST)
16006           return any_value_dependent_elements_p (expression);
16007
16008         return value_dependent_expression_p (expression);
16009       }
16010
16011     case SIZEOF_EXPR:
16012     case ALIGNOF_EXPR:
16013       /* A `sizeof' expression is value-dependent if the operand is
16014          type-dependent or is a pack expansion.  */
16015       expression = TREE_OPERAND (expression, 0);
16016       if (PACK_EXPANSION_P (expression))
16017         return true;
16018       else if (TYPE_P (expression))
16019         return dependent_type_p (expression);
16020       return type_dependent_expression_p (expression);
16021
16022     case SCOPE_REF:
16023       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16024
16025     case COMPONENT_REF:
16026       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16027               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16028
16029     case CALL_EXPR:
16030       /* A CALL_EXPR may appear in a constant expression if it is a
16031          call to a builtin function, e.g., __builtin_constant_p.  All
16032          such calls are value-dependent.  */
16033       return true;
16034
16035     case NONTYPE_ARGUMENT_PACK:
16036       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16037          is value-dependent.  */
16038       {
16039         tree values = ARGUMENT_PACK_ARGS (expression);
16040         int i, len = TREE_VEC_LENGTH (values);
16041         
16042         for (i = 0; i < len; ++i)
16043           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16044             return true;
16045         
16046         return false;
16047       }
16048
16049     case TRAIT_EXPR:
16050       {
16051         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16052         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16053                 || (type2 ? dependent_type_p (type2) : false));
16054       }
16055
16056     case MODOP_EXPR:
16057       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16058               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16059
16060     default:
16061       /* A constant expression is value-dependent if any subexpression is
16062          value-dependent.  */
16063       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16064         {
16065         case tcc_reference:
16066         case tcc_unary:
16067           return (value_dependent_expression_p
16068                   (TREE_OPERAND (expression, 0)));
16069
16070         case tcc_comparison:
16071         case tcc_binary:
16072           return ((value_dependent_expression_p
16073                    (TREE_OPERAND (expression, 0)))
16074                   || (value_dependent_expression_p
16075                       (TREE_OPERAND (expression, 1))));
16076
16077         case tcc_expression:
16078         case tcc_vl_exp:
16079           {
16080             int i;
16081             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16082               /* In some cases, some of the operands may be missing.
16083                  (For example, in the case of PREDECREMENT_EXPR, the
16084                  amount to increment by may be missing.)  That doesn't
16085                  make the expression dependent.  */
16086               if (TREE_OPERAND (expression, i)
16087                   && (value_dependent_expression_p
16088                       (TREE_OPERAND (expression, i))))
16089                 return true;
16090             return false;
16091           }
16092
16093         default:
16094           break;
16095         }
16096     }
16097
16098   /* The expression is not value-dependent.  */
16099   return false;
16100 }
16101
16102 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16103    [temp.dep.expr].  */
16104
16105 bool
16106 type_dependent_expression_p (tree expression)
16107 {
16108   if (!processing_template_decl)
16109     return false;
16110
16111   if (expression == error_mark_node)
16112     return false;
16113
16114   /* An unresolved name is always dependent.  */
16115   if (TREE_CODE (expression) == IDENTIFIER_NODE
16116       || TREE_CODE (expression) == USING_DECL)
16117     return true;
16118
16119   /* Some expression forms are never type-dependent.  */
16120   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16121       || TREE_CODE (expression) == SIZEOF_EXPR
16122       || TREE_CODE (expression) == ALIGNOF_EXPR
16123       || TREE_CODE (expression) == TRAIT_EXPR
16124       || TREE_CODE (expression) == TYPEID_EXPR
16125       || TREE_CODE (expression) == DELETE_EXPR
16126       || TREE_CODE (expression) == VEC_DELETE_EXPR
16127       || TREE_CODE (expression) == THROW_EXPR)
16128     return false;
16129
16130   /* The types of these expressions depends only on the type to which
16131      the cast occurs.  */
16132   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16133       || TREE_CODE (expression) == STATIC_CAST_EXPR
16134       || TREE_CODE (expression) == CONST_CAST_EXPR
16135       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16136       || TREE_CODE (expression) == CAST_EXPR)
16137     return dependent_type_p (TREE_TYPE (expression));
16138
16139   /* The types of these expressions depends only on the type created
16140      by the expression.  */
16141   if (TREE_CODE (expression) == NEW_EXPR
16142       || TREE_CODE (expression) == VEC_NEW_EXPR)
16143     {
16144       /* For NEW_EXPR tree nodes created inside a template, either
16145          the object type itself or a TREE_LIST may appear as the
16146          operand 1.  */
16147       tree type = TREE_OPERAND (expression, 1);
16148       if (TREE_CODE (type) == TREE_LIST)
16149         /* This is an array type.  We need to check array dimensions
16150            as well.  */
16151         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16152                || value_dependent_expression_p
16153                     (TREE_OPERAND (TREE_VALUE (type), 1));
16154       else
16155         return dependent_type_p (type);
16156     }
16157
16158   if (TREE_CODE (expression) == SCOPE_REF
16159       && dependent_scope_ref_p (expression,
16160                                 type_dependent_expression_p))
16161     return true;
16162
16163   if (TREE_CODE (expression) == FUNCTION_DECL
16164       && DECL_LANG_SPECIFIC (expression)
16165       && DECL_TEMPLATE_INFO (expression)
16166       && (any_dependent_template_arguments_p
16167           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16168     return true;
16169
16170   if (TREE_CODE (expression) == TEMPLATE_DECL
16171       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16172     return false;
16173
16174   if (TREE_CODE (expression) == STMT_EXPR)
16175     expression = stmt_expr_value_expr (expression);
16176
16177   if (TREE_TYPE (expression) == unknown_type_node)
16178     {
16179       if (TREE_CODE (expression) == ADDR_EXPR)
16180         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16181       if (TREE_CODE (expression) == COMPONENT_REF
16182           || TREE_CODE (expression) == OFFSET_REF)
16183         {
16184           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16185             return true;
16186           expression = TREE_OPERAND (expression, 1);
16187           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16188             return false;
16189         }
16190       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16191       if (TREE_CODE (expression) == SCOPE_REF)
16192         return false;
16193
16194       if (TREE_CODE (expression) == BASELINK)
16195         expression = BASELINK_FUNCTIONS (expression);
16196
16197       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16198         {
16199           if (any_dependent_template_arguments_p
16200               (TREE_OPERAND (expression, 1)))
16201             return true;
16202           expression = TREE_OPERAND (expression, 0);
16203         }
16204       gcc_assert (TREE_CODE (expression) == OVERLOAD
16205                   || TREE_CODE (expression) == FUNCTION_DECL);
16206
16207       while (expression)
16208         {
16209           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16210             return true;
16211           expression = OVL_NEXT (expression);
16212         }
16213       return false;
16214     }
16215
16216   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16217
16218   return (dependent_type_p (TREE_TYPE (expression)));
16219 }
16220
16221 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16222    contains a type-dependent expression.  */
16223
16224 bool
16225 any_type_dependent_arguments_p (const_tree args)
16226 {
16227   while (args)
16228     {
16229       tree arg = TREE_VALUE (args);
16230
16231       if (type_dependent_expression_p (arg))
16232         return true;
16233       args = TREE_CHAIN (args);
16234     }
16235   return false;
16236 }
16237
16238 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16239    expressions) contains any value-dependent expressions.  */
16240
16241 bool
16242 any_value_dependent_elements_p (const_tree list)
16243 {
16244   for (; list; list = TREE_CHAIN (list))
16245     if (value_dependent_expression_p (TREE_VALUE (list)))
16246       return true;
16247
16248   return false;
16249 }
16250
16251 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16252
16253 bool
16254 dependent_template_arg_p (tree arg)
16255 {
16256   if (!processing_template_decl)
16257     return false;
16258
16259   if (TREE_CODE (arg) == TEMPLATE_DECL
16260       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16261     return dependent_template_p (arg);
16262   else if (ARGUMENT_PACK_P (arg))
16263     {
16264       tree args = ARGUMENT_PACK_ARGS (arg);
16265       int i, len = TREE_VEC_LENGTH (args);
16266       for (i = 0; i < len; ++i)
16267         {
16268           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16269             return true;
16270         }
16271
16272       return false;
16273     }
16274   else if (TYPE_P (arg))
16275     return dependent_type_p (arg);
16276   else
16277     return (type_dependent_expression_p (arg)
16278             || value_dependent_expression_p (arg));
16279 }
16280
16281 /* Returns true if ARGS (a collection of template arguments) contains
16282    any types that require structural equality testing.  */
16283
16284 bool
16285 any_template_arguments_need_structural_equality_p (tree args)
16286 {
16287   int i;
16288   int j;
16289
16290   if (!args)
16291     return false;
16292   if (args == error_mark_node)
16293     return true;
16294
16295   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16296     {
16297       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16298       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16299         {
16300           tree arg = TREE_VEC_ELT (level, j);
16301           tree packed_args = NULL_TREE;
16302           int k, len = 1;
16303
16304           if (ARGUMENT_PACK_P (arg))
16305             {
16306               /* Look inside the argument pack.  */
16307               packed_args = ARGUMENT_PACK_ARGS (arg);
16308               len = TREE_VEC_LENGTH (packed_args);
16309             }
16310
16311           for (k = 0; k < len; ++k)
16312             {
16313               if (packed_args)
16314                 arg = TREE_VEC_ELT (packed_args, k);
16315
16316               if (error_operand_p (arg))
16317                 return true;
16318               else if (TREE_CODE (arg) == TEMPLATE_DECL
16319                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16320                 continue;
16321               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16322                 return true;
16323               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16324                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16325                 return true;
16326             }
16327         }
16328     }
16329
16330   return false;
16331 }
16332
16333 /* Returns true if ARGS (a collection of template arguments) contains
16334    any dependent arguments.  */
16335
16336 bool
16337 any_dependent_template_arguments_p (const_tree args)
16338 {
16339   int i;
16340   int j;
16341
16342   if (!args)
16343     return false;
16344   if (args == error_mark_node)
16345     return true;
16346
16347   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16348     {
16349       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16350       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16351         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16352           return true;
16353     }
16354
16355   return false;
16356 }
16357
16358 /* Returns TRUE if the template TMPL is dependent.  */
16359
16360 bool
16361 dependent_template_p (tree tmpl)
16362 {
16363   if (TREE_CODE (tmpl) == OVERLOAD)
16364     {
16365       while (tmpl)
16366         {
16367           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16368             return true;
16369           tmpl = OVL_CHAIN (tmpl);
16370         }
16371       return false;
16372     }
16373
16374   /* Template template parameters are dependent.  */
16375   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16376       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16377     return true;
16378   /* So are names that have not been looked up.  */
16379   if (TREE_CODE (tmpl) == SCOPE_REF
16380       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16381     return true;
16382   /* So are member templates of dependent classes.  */
16383   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16384     return dependent_type_p (DECL_CONTEXT (tmpl));
16385   return false;
16386 }
16387
16388 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16389
16390 bool
16391 dependent_template_id_p (tree tmpl, tree args)
16392 {
16393   return (dependent_template_p (tmpl)
16394           || any_dependent_template_arguments_p (args));
16395 }
16396
16397 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16398    is dependent.  */
16399
16400 bool
16401 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16402 {
16403   int i;
16404
16405   if (!processing_template_decl)
16406     return false;
16407
16408   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16409     {
16410       tree decl = TREE_VEC_ELT (declv, i);
16411       tree init = TREE_VEC_ELT (initv, i);
16412       tree cond = TREE_VEC_ELT (condv, i);
16413       tree incr = TREE_VEC_ELT (incrv, i);
16414
16415       if (type_dependent_expression_p (decl))
16416         return true;
16417
16418       if (init && type_dependent_expression_p (init))
16419         return true;
16420
16421       if (type_dependent_expression_p (cond))
16422         return true;
16423
16424       if (COMPARISON_CLASS_P (cond)
16425           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16426               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16427         return true;
16428
16429       if (TREE_CODE (incr) == MODOP_EXPR)
16430         {
16431           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16432               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16433             return true;
16434         }
16435       else if (type_dependent_expression_p (incr))
16436         return true;
16437       else if (TREE_CODE (incr) == MODIFY_EXPR)
16438         {
16439           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16440             return true;
16441           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16442             {
16443               tree t = TREE_OPERAND (incr, 1);
16444               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16445                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16446                 return true;
16447             }
16448         }
16449     }
16450
16451   return false;
16452 }
16453
16454 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16455    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16456    no such TYPE can be found.  Note that this function peers inside
16457    uninstantiated templates and therefore should be used only in
16458    extremely limited situations.  ONLY_CURRENT_P restricts this
16459    peering to the currently open classes hierarchy (which is required
16460    when comparing types).  */
16461
16462 tree
16463 resolve_typename_type (tree type, bool only_current_p)
16464 {
16465   tree scope;
16466   tree name;
16467   tree decl;
16468   int quals;
16469   tree pushed_scope;
16470   tree result;
16471
16472   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16473
16474   scope = TYPE_CONTEXT (type);
16475   name = TYPE_IDENTIFIER (type);
16476
16477   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16478      it first before we can figure out what NAME refers to.  */
16479   if (TREE_CODE (scope) == TYPENAME_TYPE)
16480     scope = resolve_typename_type (scope, only_current_p);
16481   /* If we don't know what SCOPE refers to, then we cannot resolve the
16482      TYPENAME_TYPE.  */
16483   if (TREE_CODE (scope) == TYPENAME_TYPE)
16484     return type;
16485   /* If the SCOPE is a template type parameter, we have no way of
16486      resolving the name.  */
16487   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16488     return type;
16489   /* If the SCOPE is not the current instantiation, there's no reason
16490      to look inside it.  */
16491   if (only_current_p && !currently_open_class (scope))
16492     return type;
16493   /* If SCOPE isn't the template itself, it will not have a valid
16494      TYPE_FIELDS list.  */
16495   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16496     /* scope is either the template itself or a compatible instantiation
16497        like X<T>, so look up the name in the original template.  */
16498     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16499   else
16500     /* scope is a partial instantiation, so we can't do the lookup or we
16501        will lose the template arguments.  */
16502     return type;
16503   /* Enter the SCOPE so that name lookup will be resolved as if we
16504      were in the class definition.  In particular, SCOPE will no
16505      longer be considered a dependent type.  */
16506   pushed_scope = push_scope (scope);
16507   /* Look up the declaration.  */
16508   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16509
16510   result = NULL_TREE;
16511   
16512   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16513      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16514   if (!decl)
16515     /*nop*/;
16516   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16517            && TREE_CODE (decl) == TYPE_DECL)
16518     {
16519       result = TREE_TYPE (decl);
16520       if (result == error_mark_node)
16521         result = NULL_TREE;
16522     }
16523   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16524            && DECL_CLASS_TEMPLATE_P (decl))
16525     {
16526       tree tmpl;
16527       tree args;
16528       /* Obtain the template and the arguments.  */
16529       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16530       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16531       /* Instantiate the template.  */
16532       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16533                                       /*entering_scope=*/0,
16534                                       tf_error | tf_user);
16535       if (result == error_mark_node)
16536         result = NULL_TREE;
16537     }
16538   
16539   /* Leave the SCOPE.  */
16540   if (pushed_scope)
16541     pop_scope (pushed_scope);
16542
16543   /* If we failed to resolve it, return the original typename.  */
16544   if (!result)
16545     return type;
16546   
16547   /* If lookup found a typename type, resolve that too.  */
16548   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16549     {
16550       /* Ill-formed programs can cause infinite recursion here, so we
16551          must catch that.  */
16552       TYPENAME_IS_RESOLVING_P (type) = 1;
16553       result = resolve_typename_type (result, only_current_p);
16554       TYPENAME_IS_RESOLVING_P (type) = 0;
16555     }
16556   
16557   /* Qualify the resulting type.  */
16558   quals = cp_type_quals (type);
16559   if (quals)
16560     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16561
16562   return result;
16563 }
16564
16565 /* EXPR is an expression which is not type-dependent.  Return a proxy
16566    for EXPR that can be used to compute the types of larger
16567    expressions containing EXPR.  */
16568
16569 tree
16570 build_non_dependent_expr (tree expr)
16571 {
16572   tree inner_expr;
16573
16574   /* Preserve null pointer constants so that the type of things like
16575      "p == 0" where "p" is a pointer can be determined.  */
16576   if (null_ptr_cst_p (expr))
16577     return expr;
16578   /* Preserve OVERLOADs; the functions must be available to resolve
16579      types.  */
16580   inner_expr = expr;
16581   if (TREE_CODE (inner_expr) == STMT_EXPR)
16582     inner_expr = stmt_expr_value_expr (inner_expr);
16583   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16584     inner_expr = TREE_OPERAND (inner_expr, 0);
16585   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16586     inner_expr = TREE_OPERAND (inner_expr, 1);
16587   if (is_overloaded_fn (inner_expr)
16588       || TREE_CODE (inner_expr) == OFFSET_REF)
16589     return expr;
16590   /* There is no need to return a proxy for a variable.  */
16591   if (TREE_CODE (expr) == VAR_DECL)
16592     return expr;
16593   /* Preserve string constants; conversions from string constants to
16594      "char *" are allowed, even though normally a "const char *"
16595      cannot be used to initialize a "char *".  */
16596   if (TREE_CODE (expr) == STRING_CST)
16597     return expr;
16598   /* Preserve arithmetic constants, as an optimization -- there is no
16599      reason to create a new node.  */
16600   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16601     return expr;
16602   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16603      There is at least one place where we want to know that a
16604      particular expression is a throw-expression: when checking a ?:
16605      expression, there are special rules if the second or third
16606      argument is a throw-expression.  */
16607   if (TREE_CODE (expr) == THROW_EXPR)
16608     return expr;
16609
16610   if (TREE_CODE (expr) == COND_EXPR)
16611     return build3 (COND_EXPR,
16612                    TREE_TYPE (expr),
16613                    TREE_OPERAND (expr, 0),
16614                    (TREE_OPERAND (expr, 1)
16615                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16616                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16617                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16618   if (TREE_CODE (expr) == COMPOUND_EXPR
16619       && !COMPOUND_EXPR_OVERLOADED (expr))
16620     return build2 (COMPOUND_EXPR,
16621                    TREE_TYPE (expr),
16622                    TREE_OPERAND (expr, 0),
16623                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16624
16625   /* If the type is unknown, it can't really be non-dependent */
16626   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16627
16628   /* Otherwise, build a NON_DEPENDENT_EXPR.
16629
16630      REFERENCE_TYPEs are not stripped for expressions in templates
16631      because doing so would play havoc with mangling.  Consider, for
16632      example:
16633
16634        template <typename T> void f<T& g>() { g(); }
16635
16636      In the body of "f", the expression for "g" will have
16637      REFERENCE_TYPE, even though the standard says that it should
16638      not.  The reason is that we must preserve the syntactic form of
16639      the expression so that mangling (say) "f<g>" inside the body of
16640      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16641      stripped here.  */
16642   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16643 }
16644
16645 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16646    Return a new TREE_LIST with the various arguments replaced with
16647    equivalent non-dependent expressions.  */
16648
16649 tree
16650 build_non_dependent_args (tree args)
16651 {
16652   tree a;
16653   tree new_args;
16654
16655   new_args = NULL_TREE;
16656   for (a = args; a; a = TREE_CHAIN (a))
16657     new_args = tree_cons (NULL_TREE,
16658                           build_non_dependent_expr (TREE_VALUE (a)),
16659                           new_args);
16660   return nreverse (new_args);
16661 }
16662
16663 #include "gt-cp-pt.h"