OSDN Git Service

* typeck.c (composite_pointer_type_r, cxx_sizeof_expr,
[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 according to [temp.friend].  */
1026
1027 bool
1028 is_specialization_of_friend (tree decl, tree friend)
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 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) == FUNCTION_DECL
1040       && DECL_TEMPLATE_INFO (friend)
1041       && !DECL_USE_TEMPLATE (friend))
1042     {
1043       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1044       friend = DECL_TI_TEMPLATE (friend);
1045       need_template = false;
1046     }
1047   else if (TREE_CODE (friend) == TEMPLATE_DECL
1048            && !PRIMARY_TEMPLATE_P (friend))
1049     need_template = false;
1050
1051   /* There is nothing to do if this is not a template friend.  */
1052   if (TREE_CODE (friend) != TEMPLATE_DECL)
1053     return false;
1054
1055   if (is_specialization_of (decl, friend))
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));
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))))
1083     {
1084       /* Next, we check the members themselves.  In order to handle
1085          a few tricky cases, such as when FRIEND'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 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),
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), 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))
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 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))
1188                 return false;
1189
1190               /* Now check template parameter list.  */
1191               friend_parms
1192                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
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));
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                 {
1293                   DECL_DECLARED_INLINE_P (clone)
1294                     = DECL_DECLARED_INLINE_P (fn);
1295                   DECL_INLINE (clone)
1296                     = DECL_INLINE (fn);
1297                 }
1298               check_specialization_namespace (fn);
1299
1300               return fn;
1301             }
1302         }
1303       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1304         {
1305           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1306             /* Dup decl failed, but this is a new definition. Set the
1307                line number so any errors match this new
1308                definition.  */
1309             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1310
1311           return fn;
1312         }
1313     }
1314
1315   /* A specialization must be declared in the same namespace as the
1316      template it is specializing.  */
1317   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1318       && !check_specialization_namespace (tmpl))
1319     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1320
1321   if (!optimize_specialization_lookup_p (tmpl))
1322     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1323       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1324
1325   return spec;
1326 }
1327
1328 /* Unregister the specialization SPEC as a specialization of TMPL.
1329    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1330    if the SPEC was listed as a specialization of TMPL.  */
1331
1332 bool
1333 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1334 {
1335   tree* s;
1336
1337   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1338        *s != NULL_TREE;
1339        s = &TREE_CHAIN (*s))
1340     if (TREE_VALUE (*s) == spec)
1341       {
1342         if (!new_spec)
1343           *s = TREE_CHAIN (*s);
1344         else
1345           TREE_VALUE (*s) = new_spec;
1346         return 1;
1347       }
1348
1349   return 0;
1350 }
1351
1352 /* Compare an entry in the local specializations hash table P1 (which
1353    is really a pointer to a TREE_LIST) with P2 (which is really a
1354    DECL).  */
1355
1356 static int
1357 eq_local_specializations (const void *p1, const void *p2)
1358 {
1359   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1360 }
1361
1362 /* Hash P1, an entry in the local specializations table.  */
1363
1364 static hashval_t
1365 hash_local_specialization (const void* p1)
1366 {
1367   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1368 }
1369
1370 /* Like register_specialization, but for local declarations.  We are
1371    registering SPEC, an instantiation of TMPL.  */
1372
1373 static void
1374 register_local_specialization (tree spec, tree tmpl)
1375 {
1376   void **slot;
1377
1378   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1379                                    htab_hash_pointer (tmpl), INSERT);
1380   *slot = build_tree_list (spec, tmpl);
1381 }
1382
1383 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1384    specialized class.  */
1385
1386 bool
1387 explicit_class_specialization_p (tree type)
1388 {
1389   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1390     return false;
1391   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1392 }
1393
1394 /* Print the list of candidate FNS in an error message.  */
1395
1396 void
1397 print_candidates (tree fns)
1398 {
1399   tree fn;
1400
1401   const char *str = "candidates are:";
1402
1403   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1404     {
1405       tree f;
1406
1407       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1408         error ("%s %+#D", str, OVL_CURRENT (f));
1409       str = "               ";
1410     }
1411 }
1412
1413 /* Returns the template (one of the functions given by TEMPLATE_ID)
1414    which can be specialized to match the indicated DECL with the
1415    explicit template args given in TEMPLATE_ID.  The DECL may be
1416    NULL_TREE if none is available.  In that case, the functions in
1417    TEMPLATE_ID are non-members.
1418
1419    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1420    specialization of a member template.
1421
1422    The TEMPLATE_COUNT is the number of references to qualifying
1423    template classes that appeared in the name of the function. See
1424    check_explicit_specialization for a more accurate description.
1425
1426    TSK indicates what kind of template declaration (if any) is being
1427    declared.  TSK_TEMPLATE indicates that the declaration given by
1428    DECL, though a FUNCTION_DECL, has template parameters, and is
1429    therefore a template function.
1430
1431    The template args (those explicitly specified and those deduced)
1432    are output in a newly created vector *TARGS_OUT.
1433
1434    If it is impossible to determine the result, an error message is
1435    issued.  The error_mark_node is returned to indicate failure.  */
1436
1437 static tree
1438 determine_specialization (tree template_id,
1439                           tree decl,
1440                           tree* targs_out,
1441                           int need_member_template,
1442                           int template_count,
1443                           tmpl_spec_kind tsk)
1444 {
1445   tree fns;
1446   tree targs;
1447   tree explicit_targs;
1448   tree candidates = NULL_TREE;
1449   /* A TREE_LIST of templates of which DECL may be a specialization.
1450      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1451      corresponding TREE_PURPOSE is the set of template arguments that,
1452      when used to instantiate the template, would produce a function
1453      with the signature of DECL.  */
1454   tree templates = NULL_TREE;
1455   int header_count;
1456   struct cp_binding_level *b;
1457
1458   *targs_out = NULL_TREE;
1459
1460   if (template_id == error_mark_node || decl == error_mark_node)
1461     return error_mark_node;
1462
1463   fns = TREE_OPERAND (template_id, 0);
1464   explicit_targs = TREE_OPERAND (template_id, 1);
1465
1466   if (fns == error_mark_node)
1467     return error_mark_node;
1468
1469   /* Check for baselinks.  */
1470   if (BASELINK_P (fns))
1471     fns = BASELINK_FUNCTIONS (fns);
1472
1473   if (!is_overloaded_fn (fns))
1474     {
1475       error ("%qD is not a function template", fns);
1476       return error_mark_node;
1477     }
1478
1479   /* Count the number of template headers specified for this
1480      specialization.  */
1481   header_count = 0;
1482   for (b = current_binding_level;
1483        b->kind == sk_template_parms;
1484        b = b->level_chain)
1485     ++header_count;
1486
1487   for (; fns; fns = OVL_NEXT (fns))
1488     {
1489       tree fn = OVL_CURRENT (fns);
1490
1491       if (TREE_CODE (fn) == TEMPLATE_DECL)
1492         {
1493           tree decl_arg_types;
1494           tree fn_arg_types;
1495
1496           /* In case of explicit specialization, we need to check if
1497              the number of template headers appearing in the specialization
1498              is correct. This is usually done in check_explicit_specialization,
1499              but the check done there cannot be exhaustive when specializing
1500              member functions. Consider the following code:
1501
1502              template <> void A<int>::f(int);
1503              template <> template <> void A<int>::f(int);
1504
1505              Assuming that A<int> is not itself an explicit specialization
1506              already, the first line specializes "f" which is a non-template
1507              member function, whilst the second line specializes "f" which
1508              is a template member function. So both lines are syntactically
1509              correct, and check_explicit_specialization does not reject
1510              them.
1511
1512              Here, we can do better, as we are matching the specialization
1513              against the declarations. We count the number of template
1514              headers, and we check if they match TEMPLATE_COUNT + 1
1515              (TEMPLATE_COUNT is the number of qualifying template classes,
1516              plus there must be another header for the member template
1517              itself).
1518
1519              Notice that if header_count is zero, this is not a
1520              specialization but rather a template instantiation, so there
1521              is no check we can perform here.  */
1522           if (header_count && header_count != template_count + 1)
1523             continue;
1524
1525           /* Check that the number of template arguments at the
1526              innermost level for DECL is the same as for FN.  */
1527           if (current_binding_level->kind == sk_template_parms
1528               && !current_binding_level->explicit_spec_p
1529               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1530                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1531                                       (current_template_parms))))
1532             continue;
1533
1534           /* DECL might be a specialization of FN.  */
1535           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1536           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1537
1538           /* For a non-static member function, we need to make sure
1539              that the const qualification is the same.  Since
1540              get_bindings does not try to merge the "this" parameter,
1541              we must do the comparison explicitly.  */
1542           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1543               && !same_type_p (TREE_VALUE (fn_arg_types),
1544                                TREE_VALUE (decl_arg_types)))
1545             continue;
1546
1547           /* Skip the "this" parameter and, for constructors of
1548              classes with virtual bases, the VTT parameter.  A
1549              full specialization of a constructor will have a VTT
1550              parameter, but a template never will.  */ 
1551           decl_arg_types 
1552             = skip_artificial_parms_for (decl, decl_arg_types);
1553           fn_arg_types 
1554             = skip_artificial_parms_for (fn, fn_arg_types);
1555
1556           /* Check that the number of function parameters matches.
1557              For example,
1558                template <class T> void f(int i = 0);
1559                template <> void f<int>();
1560              The specialization f<int> is invalid but is not caught
1561              by get_bindings below.  */
1562           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1563             continue;
1564
1565           /* Function templates cannot be specializations; there are
1566              no partial specializations of functions.  Therefore, if
1567              the type of DECL does not match FN, there is no
1568              match.  */
1569           if (tsk == tsk_template)
1570             {
1571               if (compparms (fn_arg_types, decl_arg_types))
1572                 candidates = tree_cons (NULL_TREE, fn, candidates);
1573               continue;
1574             }
1575
1576           /* See whether this function might be a specialization of this
1577              template.  */
1578           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1579
1580           if (!targs)
1581             /* We cannot deduce template arguments that when used to
1582                specialize TMPL will produce DECL.  */
1583             continue;
1584
1585           /* Save this template, and the arguments deduced.  */
1586           templates = tree_cons (targs, fn, templates);
1587         }
1588       else if (need_member_template)
1589         /* FN is an ordinary member function, and we need a
1590            specialization of a member template.  */
1591         ;
1592       else if (TREE_CODE (fn) != FUNCTION_DECL)
1593         /* We can get IDENTIFIER_NODEs here in certain erroneous
1594            cases.  */
1595         ;
1596       else if (!DECL_FUNCTION_MEMBER_P (fn))
1597         /* This is just an ordinary non-member function.  Nothing can
1598            be a specialization of that.  */
1599         ;
1600       else if (DECL_ARTIFICIAL (fn))
1601         /* Cannot specialize functions that are created implicitly.  */
1602         ;
1603       else
1604         {
1605           tree decl_arg_types;
1606
1607           /* This is an ordinary member function.  However, since
1608              we're here, we can assume it's enclosing class is a
1609              template class.  For example,
1610
1611                template <typename T> struct S { void f(); };
1612                template <> void S<int>::f() {}
1613
1614              Here, S<int>::f is a non-template, but S<int> is a
1615              template class.  If FN has the same type as DECL, we
1616              might be in business.  */
1617
1618           if (!DECL_TEMPLATE_INFO (fn))
1619             /* Its enclosing class is an explicit specialization
1620                of a template class.  This is not a candidate.  */
1621             continue;
1622
1623           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1624                             TREE_TYPE (TREE_TYPE (fn))))
1625             /* The return types differ.  */
1626             continue;
1627
1628           /* Adjust the type of DECL in case FN is a static member.  */
1629           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1630           if (DECL_STATIC_FUNCTION_P (fn)
1631               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1632             decl_arg_types = TREE_CHAIN (decl_arg_types);
1633
1634           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1635                          decl_arg_types))
1636             /* They match!  */
1637             candidates = tree_cons (NULL_TREE, fn, candidates);
1638         }
1639     }
1640
1641   if (templates && TREE_CHAIN (templates))
1642     {
1643       /* We have:
1644
1645            [temp.expl.spec]
1646
1647            It is possible for a specialization with a given function
1648            signature to be instantiated from more than one function
1649            template.  In such cases, explicit specification of the
1650            template arguments must be used to uniquely identify the
1651            function template specialization being specialized.
1652
1653          Note that here, there's no suggestion that we're supposed to
1654          determine which of the candidate templates is most
1655          specialized.  However, we, also have:
1656
1657            [temp.func.order]
1658
1659            Partial ordering of overloaded function template
1660            declarations is used in the following contexts to select
1661            the function template to which a function template
1662            specialization refers:
1663
1664            -- when an explicit specialization refers to a function
1665               template.
1666
1667          So, we do use the partial ordering rules, at least for now.
1668          This extension can only serve to make invalid programs valid,
1669          so it's safe.  And, there is strong anecdotal evidence that
1670          the committee intended the partial ordering rules to apply;
1671          the EDG front end has that behavior, and John Spicer claims
1672          that the committee simply forgot to delete the wording in
1673          [temp.expl.spec].  */
1674       tree tmpl = most_specialized_instantiation (templates);
1675       if (tmpl != error_mark_node)
1676         {
1677           templates = tmpl;
1678           TREE_CHAIN (templates) = NULL_TREE;
1679         }
1680     }
1681
1682   if (templates == NULL_TREE && candidates == NULL_TREE)
1683     {
1684       error ("template-id %qD for %q+D does not match any template "
1685              "declaration", template_id, decl);
1686       return error_mark_node;
1687     }
1688   else if ((templates && TREE_CHAIN (templates))
1689            || (candidates && TREE_CHAIN (candidates))
1690            || (templates && candidates))
1691     {
1692       error ("ambiguous template specialization %qD for %q+D",
1693              template_id, decl);
1694       chainon (candidates, templates);
1695       print_candidates (candidates);
1696       return error_mark_node;
1697     }
1698
1699   /* We have one, and exactly one, match.  */
1700   if (candidates)
1701     {
1702       tree fn = TREE_VALUE (candidates);
1703       /* DECL is a re-declaration of a template function.  */
1704       if (TREE_CODE (fn) == TEMPLATE_DECL)
1705         return fn;
1706       /* It was a specialization of an ordinary member function in a
1707          template class.  */
1708       *targs_out = copy_node (DECL_TI_ARGS (fn));
1709       return DECL_TI_TEMPLATE (fn);
1710     }
1711
1712   /* It was a specialization of a template.  */
1713   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1714   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1715     {
1716       *targs_out = copy_node (targs);
1717       SET_TMPL_ARGS_LEVEL (*targs_out,
1718                            TMPL_ARGS_DEPTH (*targs_out),
1719                            TREE_PURPOSE (templates));
1720     }
1721   else
1722     *targs_out = TREE_PURPOSE (templates);
1723   return TREE_VALUE (templates);
1724 }
1725
1726 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1727    but with the default argument values filled in from those in the
1728    TMPL_TYPES.  */
1729
1730 static tree
1731 copy_default_args_to_explicit_spec_1 (tree spec_types,
1732                                       tree tmpl_types)
1733 {
1734   tree new_spec_types;
1735
1736   if (!spec_types)
1737     return NULL_TREE;
1738
1739   if (spec_types == void_list_node)
1740     return void_list_node;
1741
1742   /* Substitute into the rest of the list.  */
1743   new_spec_types =
1744     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1745                                           TREE_CHAIN (tmpl_types));
1746
1747   /* Add the default argument for this parameter.  */
1748   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1749                          TREE_VALUE (spec_types),
1750                          new_spec_types);
1751 }
1752
1753 /* DECL is an explicit specialization.  Replicate default arguments
1754    from the template it specializes.  (That way, code like:
1755
1756      template <class T> void f(T = 3);
1757      template <> void f(double);
1758      void g () { f (); }
1759
1760    works, as required.)  An alternative approach would be to look up
1761    the correct default arguments at the call-site, but this approach
1762    is consistent with how implicit instantiations are handled.  */
1763
1764 static void
1765 copy_default_args_to_explicit_spec (tree decl)
1766 {
1767   tree tmpl;
1768   tree spec_types;
1769   tree tmpl_types;
1770   tree new_spec_types;
1771   tree old_type;
1772   tree new_type;
1773   tree t;
1774   tree object_type = NULL_TREE;
1775   tree in_charge = NULL_TREE;
1776   tree vtt = NULL_TREE;
1777
1778   /* See if there's anything we need to do.  */
1779   tmpl = DECL_TI_TEMPLATE (decl);
1780   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1781   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1782     if (TREE_PURPOSE (t))
1783       break;
1784   if (!t)
1785     return;
1786
1787   old_type = TREE_TYPE (decl);
1788   spec_types = TYPE_ARG_TYPES (old_type);
1789
1790   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1791     {
1792       /* Remove the this pointer, but remember the object's type for
1793          CV quals.  */
1794       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1795       spec_types = TREE_CHAIN (spec_types);
1796       tmpl_types = TREE_CHAIN (tmpl_types);
1797
1798       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1799         {
1800           /* DECL may contain more parameters than TMPL due to the extra
1801              in-charge parameter in constructors and destructors.  */
1802           in_charge = spec_types;
1803           spec_types = TREE_CHAIN (spec_types);
1804         }
1805       if (DECL_HAS_VTT_PARM_P (decl))
1806         {
1807           vtt = spec_types;
1808           spec_types = TREE_CHAIN (spec_types);
1809         }
1810     }
1811
1812   /* Compute the merged default arguments.  */
1813   new_spec_types =
1814     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1815
1816   /* Compute the new FUNCTION_TYPE.  */
1817   if (object_type)
1818     {
1819       if (vtt)
1820         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1821                                          TREE_VALUE (vtt),
1822                                          new_spec_types);
1823
1824       if (in_charge)
1825         /* Put the in-charge parameter back.  */
1826         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1827                                          TREE_VALUE (in_charge),
1828                                          new_spec_types);
1829
1830       new_type = build_method_type_directly (object_type,
1831                                              TREE_TYPE (old_type),
1832                                              new_spec_types);
1833     }
1834   else
1835     new_type = build_function_type (TREE_TYPE (old_type),
1836                                     new_spec_types);
1837   new_type = cp_build_type_attribute_variant (new_type,
1838                                               TYPE_ATTRIBUTES (old_type));
1839   new_type = build_exception_variant (new_type,
1840                                       TYPE_RAISES_EXCEPTIONS (old_type));
1841   TREE_TYPE (decl) = new_type;
1842 }
1843
1844 /* Check to see if the function just declared, as indicated in
1845    DECLARATOR, and in DECL, is a specialization of a function
1846    template.  We may also discover that the declaration is an explicit
1847    instantiation at this point.
1848
1849    Returns DECL, or an equivalent declaration that should be used
1850    instead if all goes well.  Issues an error message if something is
1851    amiss.  Returns error_mark_node if the error is not easily
1852    recoverable.
1853
1854    FLAGS is a bitmask consisting of the following flags:
1855
1856    2: The function has a definition.
1857    4: The function is a friend.
1858
1859    The TEMPLATE_COUNT is the number of references to qualifying
1860    template classes that appeared in the name of the function.  For
1861    example, in
1862
1863      template <class T> struct S { void f(); };
1864      void S<int>::f();
1865
1866    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1867    classes are not counted in the TEMPLATE_COUNT, so that in
1868
1869      template <class T> struct S {};
1870      template <> struct S<int> { void f(); }
1871      template <> void S<int>::f();
1872
1873    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1874    invalid; there should be no template <>.)
1875
1876    If the function is a specialization, it is marked as such via
1877    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1878    is set up correctly, and it is added to the list of specializations
1879    for that template.  */
1880
1881 tree
1882 check_explicit_specialization (tree declarator,
1883                                tree decl,
1884                                int template_count,
1885                                int flags)
1886 {
1887   int have_def = flags & 2;
1888   int is_friend = flags & 4;
1889   int specialization = 0;
1890   int explicit_instantiation = 0;
1891   int member_specialization = 0;
1892   tree ctype = DECL_CLASS_CONTEXT (decl);
1893   tree dname = DECL_NAME (decl);
1894   tmpl_spec_kind tsk;
1895
1896   if (is_friend)
1897     {
1898       if (!processing_specialization)
1899         tsk = tsk_none;
1900       else
1901         tsk = tsk_excessive_parms;
1902     }
1903   else
1904     tsk = current_tmpl_spec_kind (template_count);
1905
1906   switch (tsk)
1907     {
1908     case tsk_none:
1909       if (processing_specialization)
1910         {
1911           specialization = 1;
1912           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1913         }
1914       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1915         {
1916           if (is_friend)
1917             /* This could be something like:
1918
1919                template <class T> void f(T);
1920                class S { friend void f<>(int); }  */
1921             specialization = 1;
1922           else
1923             {
1924               /* This case handles bogus declarations like template <>
1925                  template <class T> void f<int>(); */
1926
1927               error ("template-id %qD in declaration of primary template",
1928                      declarator);
1929               return decl;
1930             }
1931         }
1932       break;
1933
1934     case tsk_invalid_member_spec:
1935       /* The error has already been reported in
1936          check_specialization_scope.  */
1937       return error_mark_node;
1938
1939     case tsk_invalid_expl_inst:
1940       error ("template parameter list used in explicit instantiation");
1941
1942       /* Fall through.  */
1943
1944     case tsk_expl_inst:
1945       if (have_def)
1946         error ("definition provided for explicit instantiation");
1947
1948       explicit_instantiation = 1;
1949       break;
1950
1951     case tsk_excessive_parms:
1952     case tsk_insufficient_parms:
1953       if (tsk == tsk_excessive_parms)
1954         error ("too many template parameter lists in declaration of %qD",
1955                decl);
1956       else if (template_header_count)
1957         error("too few template parameter lists in declaration of %qD", decl);
1958       else
1959         error("explicit specialization of %qD must be introduced by "
1960               "%<template <>%>", decl);
1961
1962       /* Fall through.  */
1963     case tsk_expl_spec:
1964       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1965       if (ctype)
1966         member_specialization = 1;
1967       else
1968         specialization = 1;
1969       break;
1970
1971     case tsk_template:
1972       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1973         {
1974           /* This case handles bogus declarations like template <>
1975              template <class T> void f<int>(); */
1976
1977           if (uses_template_parms (declarator))
1978             error ("function template partial specialization %qD "
1979                    "is not allowed", declarator);
1980           else
1981             error ("template-id %qD in declaration of primary template",
1982                    declarator);
1983           return decl;
1984         }
1985
1986       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1987         /* This is a specialization of a member template, without
1988            specialization the containing class.  Something like:
1989
1990              template <class T> struct S {
1991                template <class U> void f (U);
1992              };
1993              template <> template <class U> void S<int>::f(U) {}
1994
1995            That's a specialization -- but of the entire template.  */
1996         specialization = 1;
1997       break;
1998
1999     default:
2000       gcc_unreachable ();
2001     }
2002
2003   if (specialization || member_specialization)
2004     {
2005       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2006       for (; t; t = TREE_CHAIN (t))
2007         if (TREE_PURPOSE (t))
2008           {
2009             permerror
2010               ("default argument specified in explicit specialization");
2011             break;
2012           }
2013     }
2014
2015   if (specialization || member_specialization || explicit_instantiation)
2016     {
2017       tree tmpl = NULL_TREE;
2018       tree targs = NULL_TREE;
2019
2020       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2021       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2022         {
2023           tree fns;
2024
2025           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2026           if (ctype)
2027             fns = dname;
2028           else
2029             {
2030               /* If there is no class context, the explicit instantiation
2031                  must be at namespace scope.  */
2032               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2033
2034               /* Find the namespace binding, using the declaration
2035                  context.  */
2036               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2037                                            false, true);
2038               if (fns == error_mark_node || !is_overloaded_fn (fns))
2039                 {
2040                   error ("%qD is not a template function", dname);
2041                   fns = error_mark_node;
2042                 }
2043               else
2044                 {
2045                   tree fn = OVL_CURRENT (fns);
2046                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2047                                                 CP_DECL_CONTEXT (fn)))
2048                     error ("%qD is not declared in %qD",
2049                            decl, current_namespace);
2050                 }
2051             }
2052
2053           declarator = lookup_template_function (fns, NULL_TREE);
2054         }
2055
2056       if (declarator == error_mark_node)
2057         return error_mark_node;
2058
2059       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2060         {
2061           if (!explicit_instantiation)
2062             /* A specialization in class scope.  This is invalid,
2063                but the error will already have been flagged by
2064                check_specialization_scope.  */
2065             return error_mark_node;
2066           else
2067             {
2068               /* It's not valid to write an explicit instantiation in
2069                  class scope, e.g.:
2070
2071                    class C { template void f(); }
2072
2073                    This case is caught by the parser.  However, on
2074                    something like:
2075
2076                    template class C { void f(); };
2077
2078                    (which is invalid) we can get here.  The error will be
2079                    issued later.  */
2080               ;
2081             }
2082
2083           return decl;
2084         }
2085       else if (ctype != NULL_TREE
2086                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2087                    IDENTIFIER_NODE))
2088         {
2089           /* Find the list of functions in ctype that have the same
2090              name as the declared function.  */
2091           tree name = TREE_OPERAND (declarator, 0);
2092           tree fns = NULL_TREE;
2093           int idx;
2094
2095           if (constructor_name_p (name, ctype))
2096             {
2097               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2098
2099               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2100                   : !CLASSTYPE_DESTRUCTORS (ctype))
2101                 {
2102                   /* From [temp.expl.spec]:
2103
2104                      If such an explicit specialization for the member
2105                      of a class template names an implicitly-declared
2106                      special member function (clause _special_), the
2107                      program is ill-formed.
2108
2109                      Similar language is found in [temp.explicit].  */
2110                   error ("specialization of implicitly-declared special member function");
2111                   return error_mark_node;
2112                 }
2113
2114               name = is_constructor ? ctor_identifier : dtor_identifier;
2115             }
2116
2117           if (!DECL_CONV_FN_P (decl))
2118             {
2119               idx = lookup_fnfields_1 (ctype, name);
2120               if (idx >= 0)
2121                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2122             }
2123           else
2124             {
2125               VEC(tree,gc) *methods;
2126               tree ovl;
2127
2128               /* For a type-conversion operator, we cannot do a
2129                  name-based lookup.  We might be looking for `operator
2130                  int' which will be a specialization of `operator T'.
2131                  So, we find *all* the conversion operators, and then
2132                  select from them.  */
2133               fns = NULL_TREE;
2134
2135               methods = CLASSTYPE_METHOD_VEC (ctype);
2136               if (methods)
2137                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2138                      VEC_iterate (tree, methods, idx, ovl);
2139                      ++idx)
2140                   {
2141                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2142                       /* There are no more conversion functions.  */
2143                       break;
2144
2145                     /* Glue all these conversion functions together
2146                        with those we already have.  */
2147                     for (; ovl; ovl = OVL_NEXT (ovl))
2148                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2149                   }
2150             }
2151
2152           if (fns == NULL_TREE)
2153             {
2154               error ("no member function %qD declared in %qT", name, ctype);
2155               return error_mark_node;
2156             }
2157           else
2158             TREE_OPERAND (declarator, 0) = fns;
2159         }
2160
2161       /* Figure out what exactly is being specialized at this point.
2162          Note that for an explicit instantiation, even one for a
2163          member function, we cannot tell apriori whether the
2164          instantiation is for a member template, or just a member
2165          function of a template class.  Even if a member template is
2166          being instantiated, the member template arguments may be
2167          elided if they can be deduced from the rest of the
2168          declaration.  */
2169       tmpl = determine_specialization (declarator, decl,
2170                                        &targs,
2171                                        member_specialization,
2172                                        template_count,
2173                                        tsk);
2174
2175       if (!tmpl || tmpl == error_mark_node)
2176         /* We couldn't figure out what this declaration was
2177            specializing.  */
2178         return error_mark_node;
2179       else
2180         {
2181           tree gen_tmpl = most_general_template (tmpl);
2182
2183           if (explicit_instantiation)
2184             {
2185               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2186                  is done by do_decl_instantiation later.  */
2187
2188               int arg_depth = TMPL_ARGS_DEPTH (targs);
2189               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2190
2191               if (arg_depth > parm_depth)
2192                 {
2193                   /* If TMPL is not the most general template (for
2194                      example, if TMPL is a friend template that is
2195                      injected into namespace scope), then there will
2196                      be too many levels of TARGS.  Remove some of them
2197                      here.  */
2198                   int i;
2199                   tree new_targs;
2200
2201                   new_targs = make_tree_vec (parm_depth);
2202                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2203                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2204                       = TREE_VEC_ELT (targs, i);
2205                   targs = new_targs;
2206                 }
2207
2208               return instantiate_template (tmpl, targs, tf_error);
2209             }
2210
2211           /* If we thought that the DECL was a member function, but it
2212              turns out to be specializing a static member function,
2213              make DECL a static member function as well.  */
2214           if (DECL_STATIC_FUNCTION_P (tmpl)
2215               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2216             revert_static_member_fn (decl);
2217
2218           /* If this is a specialization of a member template of a
2219              template class, we want to return the TEMPLATE_DECL, not
2220              the specialization of it.  */
2221           if (tsk == tsk_template)
2222             {
2223               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2224               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2225               if (have_def)
2226                 {
2227                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2228                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2229                     = DECL_SOURCE_LOCATION (decl);
2230                   /* We want to use the argument list specified in the
2231                      definition, not in the original declaration.  */
2232                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2233                     = DECL_ARGUMENTS (decl);
2234                 }
2235               return tmpl;
2236             }
2237
2238           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2239           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2240
2241           /* Inherit default function arguments from the template
2242              DECL is specializing.  */
2243           copy_default_args_to_explicit_spec (decl);
2244
2245           /* This specialization has the same protection as the
2246              template it specializes.  */
2247           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2248           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2249
2250           /* 7.1.1-1 [dcl.stc]
2251
2252              A storage-class-specifier shall not be specified in an
2253              explicit specialization...
2254
2255              The parser rejects these, so unless action is taken here,
2256              explicit function specializations will always appear with
2257              global linkage.
2258
2259              The action recommended by the C++ CWG in response to C++
2260              defect report 605 is to make the storage class and linkage
2261              of the explicit specialization match the templated function:
2262
2263              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2264            */
2265           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2266             {
2267               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2268               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2269
2270               /* This specialization has the same linkage and visibility as
2271                  the function template it specializes.  */
2272               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2273               if (! TREE_PUBLIC (decl))
2274                 {
2275                   DECL_INTERFACE_KNOWN (decl) = 1;
2276                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2277                 }
2278               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2279               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2280                 {
2281                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2282                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2283                 }
2284             }
2285
2286           /* If DECL is a friend declaration, declared using an
2287              unqualified name, the namespace associated with DECL may
2288              have been set incorrectly.  For example, in:
2289
2290                template <typename T> void f(T);
2291                namespace N {
2292                  struct S { friend void f<int>(int); }
2293                }
2294
2295              we will have set the DECL_CONTEXT for the friend
2296              declaration to N, rather than to the global namespace.  */
2297           if (DECL_NAMESPACE_SCOPE_P (decl))
2298             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2299
2300           if (is_friend && !have_def)
2301             /* This is not really a declaration of a specialization.
2302                It's just the name of an instantiation.  But, it's not
2303                a request for an instantiation, either.  */
2304             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2305           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2306             /* This is indeed a specialization.  In case of constructors
2307                and destructors, we need in-charge and not-in-charge
2308                versions in V3 ABI.  */
2309             clone_function_decl (decl, /*update_method_vec_p=*/0);
2310
2311           /* Register this specialization so that we can find it
2312              again.  */
2313           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2314         }
2315     }
2316
2317   return decl;
2318 }
2319
2320 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2321    parameters.  These are represented in the same format used for
2322    DECL_TEMPLATE_PARMS.  */
2323
2324 int
2325 comp_template_parms (const_tree parms1, const_tree parms2)
2326 {
2327   const_tree p1;
2328   const_tree p2;
2329
2330   if (parms1 == parms2)
2331     return 1;
2332
2333   for (p1 = parms1, p2 = parms2;
2334        p1 != NULL_TREE && p2 != NULL_TREE;
2335        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2336     {
2337       tree t1 = TREE_VALUE (p1);
2338       tree t2 = TREE_VALUE (p2);
2339       int i;
2340
2341       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2342       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2343
2344       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2345         return 0;
2346
2347       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2348         {
2349           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2350           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2351
2352           /* If either of the template parameters are invalid, assume
2353              they match for the sake of error recovery. */
2354           if (parm1 == error_mark_node || parm2 == error_mark_node)
2355             return 1;
2356
2357           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2358             return 0;
2359
2360           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2361               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2362                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2363             continue;
2364           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2365             return 0;
2366         }
2367     }
2368
2369   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2370     /* One set of parameters has more parameters lists than the
2371        other.  */
2372     return 0;
2373
2374   return 1;
2375 }
2376
2377 /* Determine whether PARM is a parameter pack.  */
2378 bool 
2379 template_parameter_pack_p (const_tree parm)
2380 {
2381   /* Determine if we have a non-type template parameter pack.  */
2382   if (TREE_CODE (parm) == PARM_DECL)
2383     return (DECL_TEMPLATE_PARM_P (parm) 
2384             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2385
2386   /* If this is a list of template parameters, we could get a
2387      TYPE_DECL or a TEMPLATE_DECL.  */ 
2388   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2389     parm = TREE_TYPE (parm);
2390
2391   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2392            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2393           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2394 }
2395
2396 /* Determine whether ARGS describes a variadic template args list,
2397    i.e., one that is terminated by a template argument pack.  */
2398 static bool 
2399 template_args_variadic_p (tree args)
2400 {
2401   int nargs;
2402   tree last_parm;
2403
2404   if (args == NULL_TREE)
2405     return false;
2406
2407   args = INNERMOST_TEMPLATE_ARGS (args);
2408   nargs = TREE_VEC_LENGTH (args);
2409
2410   if (nargs == 0)
2411     return false;
2412
2413   last_parm = TREE_VEC_ELT (args, nargs - 1);
2414
2415   return ARGUMENT_PACK_P (last_parm);
2416 }
2417
2418 /* Generate a new name for the parameter pack name NAME (an
2419    IDENTIFIER_NODE) that incorporates its */
2420 static tree
2421 make_ith_pack_parameter_name (tree name, int i)
2422 {
2423   /* Munge the name to include the parameter index.  */
2424   char numbuf[128];
2425   char* newname;
2426   
2427   sprintf(numbuf, "%i", i);
2428   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2429   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2430   return get_identifier (newname);
2431 }
2432
2433 /* Structure used to track the progress of find_parameter_packs_r.  */
2434 struct find_parameter_pack_data 
2435 {
2436   /* TREE_LIST that will contain all of the parameter packs found by
2437      the traversal.  */
2438   tree* parameter_packs;
2439
2440   /* Set of AST nodes that have been visited by the traversal.  */
2441   struct pointer_set_t *visited;
2442 };
2443
2444 /* Identifies all of the argument packs that occur in a template
2445    argument and appends them to the TREE_LIST inside DATA, which is a
2446    find_parameter_pack_data structure. This is a subroutine of
2447    make_pack_expansion and uses_parameter_packs.  */
2448 static tree
2449 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2450 {
2451   tree t = *tp;
2452   struct find_parameter_pack_data* ppd = 
2453     (struct find_parameter_pack_data*)data;
2454   bool parameter_pack_p = false;
2455
2456   /* Identify whether this is a parameter pack or not.  */
2457   switch (TREE_CODE (t))
2458     {
2459     case TEMPLATE_PARM_INDEX:
2460       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2461         parameter_pack_p = true;
2462       break;
2463
2464     case TEMPLATE_TYPE_PARM:
2465     case TEMPLATE_TEMPLATE_PARM:
2466       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2467         parameter_pack_p = true;
2468       break;
2469
2470     case PARM_DECL:
2471       if (FUNCTION_PARAMETER_PACK_P (t))
2472         {
2473           /* We don't want to walk into the type of a PARM_DECL,
2474              because we don't want to see the type parameter pack.  */
2475           *walk_subtrees = 0;
2476           parameter_pack_p = true;
2477         }
2478       break;
2479
2480     default:
2481       /* Not a parameter pack.  */
2482       break;
2483     }
2484
2485   if (parameter_pack_p)
2486     {
2487       /* Add this parameter pack to the list.  */
2488       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2489     }
2490
2491   if (TYPE_P (t))
2492     cp_walk_tree (&TYPE_CONTEXT (t), 
2493                   &find_parameter_packs_r, ppd, ppd->visited);
2494
2495   /* This switch statement will return immediately if we don't find a
2496      parameter pack.  */
2497   switch (TREE_CODE (t)) 
2498     {
2499     case TEMPLATE_PARM_INDEX:
2500       return NULL_TREE;
2501
2502     case BOUND_TEMPLATE_TEMPLATE_PARM:
2503       /* Check the template itself.  */
2504       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2505                     &find_parameter_packs_r, ppd, ppd->visited);
2506       /* Check the template arguments.  */
2507       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2508                     ppd->visited);
2509       *walk_subtrees = 0;
2510       return NULL_TREE;
2511
2512     case TEMPLATE_TYPE_PARM:
2513     case TEMPLATE_TEMPLATE_PARM:
2514       return NULL_TREE;
2515
2516     case PARM_DECL:
2517       return NULL_TREE;
2518
2519     case RECORD_TYPE:
2520       if (TYPE_PTRMEMFUNC_P (t))
2521         return NULL_TREE;
2522       /* Fall through.  */
2523
2524     case UNION_TYPE:
2525     case ENUMERAL_TYPE:
2526       if (TYPE_TEMPLATE_INFO (t))
2527         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2528                       &find_parameter_packs_r, ppd, ppd->visited);
2529
2530       *walk_subtrees = 0;
2531       return NULL_TREE;
2532
2533     case TEMPLATE_DECL:
2534       cp_walk_tree (&TREE_TYPE (t),
2535                     &find_parameter_packs_r, ppd, ppd->visited);
2536       return NULL_TREE;
2537  
2538     case TYPENAME_TYPE:
2539       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2540                    ppd, ppd->visited);
2541       *walk_subtrees = 0;
2542       return NULL_TREE;
2543       
2544     case TYPE_PACK_EXPANSION:
2545     case EXPR_PACK_EXPANSION:
2546       *walk_subtrees = 0;
2547       return NULL_TREE;
2548
2549     case INTEGER_TYPE:
2550       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2551                     ppd, ppd->visited);
2552       *walk_subtrees = 0;
2553       return NULL_TREE;
2554
2555     case IDENTIFIER_NODE:
2556       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
2557                     ppd->visited);
2558       *walk_subtrees = 0;
2559       return NULL_TREE;
2560
2561     default:
2562       return NULL_TREE;
2563     }
2564
2565   return NULL_TREE;
2566 }
2567
2568 /* Determines if the expression or type T uses any parameter packs.  */
2569 bool
2570 uses_parameter_packs (tree t)
2571 {
2572   tree parameter_packs = NULL_TREE;
2573   struct find_parameter_pack_data ppd;
2574   ppd.parameter_packs = &parameter_packs;
2575   ppd.visited = pointer_set_create ();
2576   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2577   pointer_set_destroy (ppd.visited);
2578   return parameter_packs != NULL_TREE;
2579 }
2580
2581 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2582    representation a base-class initializer into a parameter pack
2583    expansion. If all goes well, the resulting node will be an
2584    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2585    respectively.  */
2586 tree 
2587 make_pack_expansion (tree arg)
2588 {
2589   tree result;
2590   tree parameter_packs = NULL_TREE;
2591   bool for_types = false;
2592   struct find_parameter_pack_data ppd;
2593
2594   if (!arg || arg == error_mark_node)
2595     return arg;
2596
2597   if (TREE_CODE (arg) == TREE_LIST)
2598     {
2599       /* The only time we will see a TREE_LIST here is for a base
2600          class initializer.  In this case, the TREE_PURPOSE will be a
2601          _TYPE node (representing the base class expansion we're
2602          initializing) and the TREE_VALUE will be a TREE_LIST
2603          containing the initialization arguments. 
2604
2605          The resulting expansion looks somewhat different from most
2606          expansions. Rather than returning just one _EXPANSION, we
2607          return a TREE_LIST whose TREE_PURPOSE is a
2608          TYPE_PACK_EXPANSION containing the bases that will be
2609          initialized.  The TREE_VALUE will be identical to the
2610          original TREE_VALUE, which is a list of arguments that will
2611          be passed to each base.  We do not introduce any new pack
2612          expansion nodes into the TREE_VALUE (although it is possible
2613          that some already exist), because the TREE_PURPOSE and
2614          TREE_VALUE all need to be expanded together with the same
2615          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2616          resulting TREE_PURPOSE will mention the parameter packs in
2617          both the bases and the arguments to the bases.  */
2618       tree purpose;
2619       tree value;
2620       tree parameter_packs = NULL_TREE;
2621
2622       /* Determine which parameter packs will be used by the base
2623          class expansion.  */
2624       ppd.visited = pointer_set_create ();
2625       ppd.parameter_packs = &parameter_packs;
2626       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2627                     &ppd, ppd.visited);
2628
2629       if (parameter_packs == NULL_TREE)
2630         {
2631           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2632           pointer_set_destroy (ppd.visited);
2633           return error_mark_node;
2634         }
2635
2636       if (TREE_VALUE (arg) != void_type_node)
2637         {
2638           /* Collect the sets of parameter packs used in each of the
2639              initialization arguments.  */
2640           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2641             {
2642               /* Determine which parameter packs will be expanded in this
2643                  argument.  */
2644               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2645                             &ppd, ppd.visited);
2646             }
2647         }
2648
2649       pointer_set_destroy (ppd.visited);
2650
2651       /* Create the pack expansion type for the base type.  */
2652       purpose = make_node (TYPE_PACK_EXPANSION);
2653       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2654       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2655
2656       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2657          they will rarely be compared to anything.  */
2658       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2659
2660       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2661     }
2662
2663   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2664     for_types = true;
2665
2666   /* Build the PACK_EXPANSION_* node.  */
2667   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2668   SET_PACK_EXPANSION_PATTERN (result, arg);
2669   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2670     {
2671       /* Propagate type and const-expression information.  */
2672       TREE_TYPE (result) = TREE_TYPE (arg);
2673       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2674     }
2675   else
2676     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2677        they will rarely be compared to anything.  */
2678     SET_TYPE_STRUCTURAL_EQUALITY (result);
2679
2680   /* Determine which parameter packs will be expanded.  */
2681   ppd.parameter_packs = &parameter_packs;
2682   ppd.visited = pointer_set_create ();
2683   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2684   pointer_set_destroy (ppd.visited);
2685
2686   /* Make sure we found some parameter packs.  */
2687   if (parameter_packs == NULL_TREE)
2688     {
2689       if (TYPE_P (arg))
2690         error ("expansion pattern %<%T%> contains no argument packs", arg);
2691       else
2692         error ("expansion pattern %<%E%> contains no argument packs", arg);
2693       return error_mark_node;
2694     }
2695   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2696
2697   return result;
2698 }
2699
2700 /* Checks T for any "bare" parameter packs, which have not yet been
2701    expanded, and issues an error if any are found. This operation can
2702    only be done on full expressions or types (e.g., an expression
2703    statement, "if" condition, etc.), because we could have expressions like:
2704
2705      foo(f(g(h(args)))...)
2706
2707    where "args" is a parameter pack. check_for_bare_parameter_packs
2708    should not be called for the subexpressions args, h(args),
2709    g(h(args)), or f(g(h(args))), because we would produce erroneous
2710    error messages. 
2711
2712    Returns TRUE and emits an error if there were bare parameter packs,
2713    returns FALSE otherwise.  */
2714 bool 
2715 check_for_bare_parameter_packs (tree t)
2716 {
2717   tree parameter_packs = NULL_TREE;
2718   struct find_parameter_pack_data ppd;
2719
2720   if (!processing_template_decl || !t || t == error_mark_node)
2721     return false;
2722
2723   if (TREE_CODE (t) == TYPE_DECL)
2724     t = TREE_TYPE (t);
2725
2726   ppd.parameter_packs = &parameter_packs;
2727   ppd.visited = pointer_set_create ();
2728   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2729   pointer_set_destroy (ppd.visited);
2730
2731   if (parameter_packs) 
2732     {
2733       error ("parameter packs not expanded with %<...%>:");
2734       while (parameter_packs)
2735         {
2736           tree pack = TREE_VALUE (parameter_packs);
2737           tree name = NULL_TREE;
2738
2739           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2740               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2741             name = TYPE_NAME (pack);
2742           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2743             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2744           else
2745             name = DECL_NAME (pack);
2746
2747           if (name)
2748             inform ("        %qD", name);
2749           else
2750             inform ("        <anonymous>");
2751
2752           parameter_packs = TREE_CHAIN (parameter_packs);
2753         }
2754
2755       return true;
2756     }
2757
2758   return false;
2759 }
2760
2761 /* Expand any parameter packs that occur in the template arguments in
2762    ARGS.  */
2763 tree
2764 expand_template_argument_pack (tree args)
2765 {
2766   tree result_args = NULL_TREE;
2767   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2768   int num_result_args = -1;
2769
2770   /* First, determine if we need to expand anything, and the number of
2771      slots we'll need.  */
2772   for (in_arg = 0; in_arg < nargs; ++in_arg)
2773     {
2774       tree arg = TREE_VEC_ELT (args, in_arg);
2775       if (ARGUMENT_PACK_P (arg))
2776         {
2777           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2778           if (num_result_args < 0)
2779             num_result_args = in_arg + num_packed;
2780           else
2781             num_result_args += num_packed;
2782         }
2783       else
2784         {
2785           if (num_result_args >= 0)
2786             num_result_args++;
2787         }
2788     }
2789
2790   /* If no expansion is necessary, we're done.  */
2791   if (num_result_args < 0)
2792     return args;
2793
2794   /* Expand arguments.  */
2795   result_args = make_tree_vec (num_result_args);
2796   for (in_arg = 0; in_arg < nargs; ++in_arg)
2797     {
2798       tree arg = TREE_VEC_ELT (args, in_arg);
2799       if (ARGUMENT_PACK_P (arg))
2800         {
2801           tree packed = ARGUMENT_PACK_ARGS (arg);
2802           int i, num_packed = TREE_VEC_LENGTH (packed);
2803           for (i = 0; i < num_packed; ++i, ++out_arg)
2804             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2805         }
2806       else
2807         {
2808           TREE_VEC_ELT (result_args, out_arg) = arg;
2809           ++out_arg;
2810         }
2811     }
2812
2813   return result_args;
2814 }
2815
2816 /* Complain if DECL shadows a template parameter.
2817
2818    [temp.local]: A template-parameter shall not be redeclared within its
2819    scope (including nested scopes).  */
2820
2821 void
2822 check_template_shadow (tree decl)
2823 {
2824   tree olddecl;
2825
2826   /* If we're not in a template, we can't possibly shadow a template
2827      parameter.  */
2828   if (!current_template_parms)
2829     return;
2830
2831   /* Figure out what we're shadowing.  */
2832   if (TREE_CODE (decl) == OVERLOAD)
2833     decl = OVL_CURRENT (decl);
2834   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2835
2836   /* If there's no previous binding for this name, we're not shadowing
2837      anything, let alone a template parameter.  */
2838   if (!olddecl)
2839     return;
2840
2841   /* If we're not shadowing a template parameter, we're done.  Note
2842      that OLDDECL might be an OVERLOAD (or perhaps even an
2843      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2844      node.  */
2845   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2846     return;
2847
2848   /* We check for decl != olddecl to avoid bogus errors for using a
2849      name inside a class.  We check TPFI to avoid duplicate errors for
2850      inline member templates.  */
2851   if (decl == olddecl
2852       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2853     return;
2854
2855   error ("declaration of %q+#D", decl);
2856   error (" shadows template parm %q+#D", olddecl);
2857 }
2858
2859 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2860    ORIG_LEVEL, DECL, and TYPE.  */
2861
2862 static tree
2863 build_template_parm_index (int index,
2864                            int level,
2865                            int orig_level,
2866                            tree decl,
2867                            tree type)
2868 {
2869   tree t = make_node (TEMPLATE_PARM_INDEX);
2870   TEMPLATE_PARM_IDX (t) = index;
2871   TEMPLATE_PARM_LEVEL (t) = level;
2872   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2873   TEMPLATE_PARM_DECL (t) = decl;
2874   TREE_TYPE (t) = type;
2875   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2876   TREE_READONLY (t) = TREE_READONLY (decl);
2877
2878   return t;
2879 }
2880
2881 /* Find the canonical type parameter for the given template type
2882    parameter.  Returns the canonical type parameter, which may be TYPE
2883    if no such parameter existed.  */
2884 static tree
2885 canonical_type_parameter (tree type)
2886 {
2887   tree list;
2888   int idx = TEMPLATE_TYPE_IDX (type);
2889   if (!canonical_template_parms)
2890     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2891
2892   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2893     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2894
2895   list = VEC_index (tree, canonical_template_parms, idx);
2896   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2897     list = TREE_CHAIN (list);
2898
2899   if (list)
2900     return TREE_VALUE (list);
2901   else
2902     {
2903       VEC_replace(tree, canonical_template_parms, idx,
2904                   tree_cons (NULL_TREE, type, 
2905                              VEC_index (tree, canonical_template_parms, idx)));
2906       return type;
2907     }
2908 }
2909
2910 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2911    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2912    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2913    new one is created.  */
2914
2915 static tree
2916 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2917                             tsubst_flags_t complain)
2918 {
2919   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2920       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2921           != TEMPLATE_PARM_LEVEL (index) - levels))
2922     {
2923       tree orig_decl = TEMPLATE_PARM_DECL (index);
2924       tree decl, t;
2925
2926       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2927       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2928       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2929       DECL_ARTIFICIAL (decl) = 1;
2930       SET_DECL_TEMPLATE_PARM_P (decl);
2931
2932       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2933                                      TEMPLATE_PARM_LEVEL (index) - levels,
2934                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2935                                      decl, type);
2936       TEMPLATE_PARM_DESCENDANTS (index) = t;
2937       TEMPLATE_PARM_PARAMETER_PACK (t) 
2938         = TEMPLATE_PARM_PARAMETER_PACK (index);
2939
2940         /* Template template parameters need this.  */
2941       if (TREE_CODE (decl) == TEMPLATE_DECL)
2942         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2943           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2944            args, complain);
2945     }
2946
2947   return TEMPLATE_PARM_DESCENDANTS (index);
2948 }
2949
2950 /* Process information from new template parameter PARM and append it to the
2951    LIST being built.  This new parameter is a non-type parameter iff
2952    IS_NON_TYPE is true. This new parameter is a parameter
2953    pack iff IS_PARAMETER_PACK is true.  */
2954
2955 tree
2956 process_template_parm (tree list, tree parm, bool is_non_type, 
2957                        bool is_parameter_pack)
2958 {
2959   tree decl = 0;
2960   tree defval;
2961   tree err_parm_list;
2962   int idx = 0;
2963
2964   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2965   defval = TREE_PURPOSE (parm);
2966
2967   if (list)
2968     {
2969       tree p = tree_last (list);
2970
2971       if (p && TREE_VALUE (p) != error_mark_node)
2972         {
2973           p = TREE_VALUE (p);
2974           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2975             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2976           else
2977             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2978         }
2979
2980       ++idx;
2981     }
2982   else
2983     idx = 0;
2984
2985   if (is_non_type)
2986     {
2987       parm = TREE_VALUE (parm);
2988
2989       SET_DECL_TEMPLATE_PARM_P (parm);
2990
2991       if (TREE_TYPE (parm) == error_mark_node)
2992         {
2993           err_parm_list = build_tree_list (defval, parm);
2994           TREE_VALUE (err_parm_list) = error_mark_node;
2995            return chainon (list, err_parm_list);
2996         }
2997       else
2998       {
2999         /* [temp.param]
3000
3001            The top-level cv-qualifiers on the template-parameter are
3002            ignored when determining its type.  */
3003         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3004         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3005           {
3006             err_parm_list = build_tree_list (defval, parm);
3007             TREE_VALUE (err_parm_list) = error_mark_node;
3008              return chainon (list, err_parm_list);
3009           }
3010
3011         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3012           {
3013             /* This template parameter is not a parameter pack, but it
3014                should be. Complain about "bare" parameter packs.  */
3015             check_for_bare_parameter_packs (TREE_TYPE (parm));
3016             
3017             /* Recover by calling this a parameter pack.  */
3018             is_parameter_pack = true;
3019           }
3020       }
3021
3022       /* A template parameter is not modifiable.  */
3023       TREE_CONSTANT (parm) = 1;
3024       TREE_READONLY (parm) = 1;
3025       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3026       TREE_CONSTANT (decl) = 1;
3027       TREE_READONLY (decl) = 1;
3028       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3029         = build_template_parm_index (idx, processing_template_decl,
3030                                      processing_template_decl,
3031                                      decl, TREE_TYPE (parm));
3032
3033       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3034         = is_parameter_pack;
3035     }
3036   else
3037     {
3038       tree t;
3039       parm = TREE_VALUE (TREE_VALUE (parm));
3040
3041       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3042         {
3043           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3044           /* This is for distinguishing between real templates and template
3045              template parameters */
3046           TREE_TYPE (parm) = t;
3047           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3048           decl = parm;
3049         }
3050       else
3051         {
3052           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3053           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3054           decl = build_decl (TYPE_DECL, parm, t);
3055         }
3056
3057       TYPE_NAME (t) = decl;
3058       TYPE_STUB_DECL (t) = decl;
3059       parm = decl;
3060       TEMPLATE_TYPE_PARM_INDEX (t)
3061         = build_template_parm_index (idx, processing_template_decl,
3062                                      processing_template_decl,
3063                                      decl, TREE_TYPE (parm));
3064       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3065       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3066     }
3067   DECL_ARTIFICIAL (decl) = 1;
3068   SET_DECL_TEMPLATE_PARM_P (decl);
3069   pushdecl (decl);
3070   parm = build_tree_list (defval, parm);
3071   return chainon (list, parm);
3072 }
3073
3074 /* The end of a template parameter list has been reached.  Process the
3075    tree list into a parameter vector, converting each parameter into a more
3076    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3077    as PARM_DECLs.  */
3078
3079 tree
3080 end_template_parm_list (tree parms)
3081 {
3082   int nparms;
3083   tree parm, next;
3084   tree saved_parmlist = make_tree_vec (list_length (parms));
3085
3086   current_template_parms
3087     = tree_cons (size_int (processing_template_decl),
3088                  saved_parmlist, current_template_parms);
3089
3090   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3091     {
3092       next = TREE_CHAIN (parm);
3093       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3094       TREE_CHAIN (parm) = NULL_TREE;
3095     }
3096
3097   --processing_template_parmlist;
3098
3099   return saved_parmlist;
3100 }
3101
3102 /* end_template_decl is called after a template declaration is seen.  */
3103
3104 void
3105 end_template_decl (void)
3106 {
3107   reset_specialization ();
3108
3109   if (! processing_template_decl)
3110     return;
3111
3112   /* This matches the pushlevel in begin_template_parm_list.  */
3113   finish_scope ();
3114
3115   --processing_template_decl;
3116   current_template_parms = TREE_CHAIN (current_template_parms);
3117 }
3118
3119 /* Within the declaration of a template, return all levels of template
3120    parameters that apply.  The template parameters are represented as
3121    a TREE_VEC, in the form documented in cp-tree.h for template
3122    arguments.  */
3123
3124 static tree
3125 current_template_args (void)
3126 {
3127   tree header;
3128   tree args = NULL_TREE;
3129   int length = TMPL_PARMS_DEPTH (current_template_parms);
3130   int l = length;
3131
3132   /* If there is only one level of template parameters, we do not
3133      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3134      TREE_VEC containing the arguments.  */
3135   if (length > 1)
3136     args = make_tree_vec (length);
3137
3138   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3139     {
3140       tree a = copy_node (TREE_VALUE (header));
3141       int i;
3142
3143       TREE_TYPE (a) = NULL_TREE;
3144       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3145         {
3146           tree t = TREE_VEC_ELT (a, i);
3147
3148           /* T will be a list if we are called from within a
3149              begin/end_template_parm_list pair, but a vector directly
3150              if within a begin/end_member_template_processing pair.  */
3151           if (TREE_CODE (t) == TREE_LIST)
3152             {
3153               t = TREE_VALUE (t);
3154
3155               if (!error_operand_p (t))
3156                 {
3157                   if (TREE_CODE (t) == TYPE_DECL
3158                       || TREE_CODE (t) == TEMPLATE_DECL)
3159                     {
3160                       t = TREE_TYPE (t);
3161                       
3162                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3163                         {
3164                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3165                              with a single element, which expands T.  */
3166                           tree vec = make_tree_vec (1);
3167                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3168                           
3169                           t = make_node (TYPE_ARGUMENT_PACK);
3170                           SET_ARGUMENT_PACK_ARGS (t, vec);
3171                         }
3172                     }
3173                   else
3174                     {
3175                       t = DECL_INITIAL (t);
3176                       
3177                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3178                         {
3179                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3180                              with a single element, which expands T.  */
3181                           tree vec = make_tree_vec (1);
3182                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3183                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3184                           
3185                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3186                           SET_ARGUMENT_PACK_ARGS (t, vec);
3187                           TREE_TYPE (t) = type;
3188                         }
3189                     }
3190                   TREE_VEC_ELT (a, i) = t;
3191                 }
3192             }
3193         }
3194
3195       if (length > 1)
3196         TREE_VEC_ELT (args, --l) = a;
3197       else
3198         args = a;
3199     }
3200
3201   return args;
3202 }
3203
3204 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3205    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3206    a member template.  Used by push_template_decl below.  */
3207
3208 static tree
3209 build_template_decl (tree decl, tree parms, bool member_template_p)
3210 {
3211   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3212   DECL_TEMPLATE_PARMS (tmpl) = parms;
3213   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3214   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3215   if (DECL_LANG_SPECIFIC (decl))
3216     {
3217       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3218       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3219       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3220       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3221       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3222       if (DECL_OVERLOADED_OPERATOR_P (decl))
3223         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3224                                       DECL_OVERLOADED_OPERATOR_P (decl));
3225     }
3226
3227   return tmpl;
3228 }
3229
3230 struct template_parm_data
3231 {
3232   /* The level of the template parameters we are currently
3233      processing.  */
3234   int level;
3235
3236   /* The index of the specialization argument we are currently
3237      processing.  */
3238   int current_arg;
3239
3240   /* An array whose size is the number of template parameters.  The
3241      elements are nonzero if the parameter has been used in any one
3242      of the arguments processed so far.  */
3243   int* parms;
3244
3245   /* An array whose size is the number of template arguments.  The
3246      elements are nonzero if the argument makes use of template
3247      parameters of this level.  */
3248   int* arg_uses_template_parms;
3249 };
3250
3251 /* Subroutine of push_template_decl used to see if each template
3252    parameter in a partial specialization is used in the explicit
3253    argument list.  If T is of the LEVEL given in DATA (which is
3254    treated as a template_parm_data*), then DATA->PARMS is marked
3255    appropriately.  */
3256
3257 static int
3258 mark_template_parm (tree t, void* data)
3259 {
3260   int level;
3261   int idx;
3262   struct template_parm_data* tpd = (struct template_parm_data*) data;
3263
3264   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3265     {
3266       level = TEMPLATE_PARM_LEVEL (t);
3267       idx = TEMPLATE_PARM_IDX (t);
3268     }
3269   else
3270     {
3271       level = TEMPLATE_TYPE_LEVEL (t);
3272       idx = TEMPLATE_TYPE_IDX (t);
3273     }
3274
3275   if (level == tpd->level)
3276     {
3277       tpd->parms[idx] = 1;
3278       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3279     }
3280
3281   /* Return zero so that for_each_template_parm will continue the
3282      traversal of the tree; we want to mark *every* template parm.  */
3283   return 0;
3284 }
3285
3286 /* Process the partial specialization DECL.  */
3287
3288 static tree
3289 process_partial_specialization (tree decl)
3290 {
3291   tree type = TREE_TYPE (decl);
3292   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3293   tree specargs = CLASSTYPE_TI_ARGS (type);
3294   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3295   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3296   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3297   int nargs = TREE_VEC_LENGTH (inner_args);
3298   int ntparms = TREE_VEC_LENGTH (inner_parms);
3299   int  i;
3300   int did_error_intro = 0;
3301   struct template_parm_data tpd;
3302   struct template_parm_data tpd2;
3303
3304   /* We check that each of the template parameters given in the
3305      partial specialization is used in the argument list to the
3306      specialization.  For example:
3307
3308        template <class T> struct S;
3309        template <class T> struct S<T*>;
3310
3311      The second declaration is OK because `T*' uses the template
3312      parameter T, whereas
3313
3314        template <class T> struct S<int>;
3315
3316      is no good.  Even trickier is:
3317
3318        template <class T>
3319        struct S1
3320        {
3321           template <class U>
3322           struct S2;
3323           template <class U>
3324           struct S2<T>;
3325        };
3326
3327      The S2<T> declaration is actually invalid; it is a
3328      full-specialization.  Of course,
3329
3330           template <class U>
3331           struct S2<T (*)(U)>;
3332
3333      or some such would have been OK.  */
3334   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3335   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3336   memset (tpd.parms, 0, sizeof (int) * ntparms);
3337
3338   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3339   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3340   for (i = 0; i < nargs; ++i)
3341     {
3342       tpd.current_arg = i;
3343       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3344                               &mark_template_parm,
3345                               &tpd,
3346                               NULL,
3347                               /*include_nondeduced_p=*/false);
3348     }
3349   for (i = 0; i < ntparms; ++i)
3350     if (tpd.parms[i] == 0)
3351       {
3352         /* One of the template parms was not used in the
3353            specialization.  */
3354         if (!did_error_intro)
3355           {
3356             error ("template parameters not used in partial specialization:");
3357             did_error_intro = 1;
3358           }
3359
3360         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3361       }
3362
3363   /* [temp.class.spec]
3364
3365      The argument list of the specialization shall not be identical to
3366      the implicit argument list of the primary template.  */
3367   if (comp_template_args
3368       (inner_args,
3369        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3370                                                    (maintmpl)))))
3371     error ("partial specialization %qT does not specialize any template arguments", type);
3372
3373   /* [temp.class.spec]
3374
3375      A partially specialized non-type argument expression shall not
3376      involve template parameters of the partial specialization except
3377      when the argument expression is a simple identifier.
3378
3379      The type of a template parameter corresponding to a specialized
3380      non-type argument shall not be dependent on a parameter of the
3381      specialization. 
3382
3383      Also, we verify that pack expansions only occur at the
3384      end of the argument list.  */
3385   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3386   tpd2.parms = 0;
3387   for (i = 0; i < nargs; ++i)
3388     {
3389       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3390       tree arg = TREE_VEC_ELT (inner_args, i);
3391       tree packed_args = NULL_TREE;
3392       int j, len = 1;
3393
3394       if (ARGUMENT_PACK_P (arg))
3395         {
3396           /* Extract the arguments from the argument pack. We'll be
3397              iterating over these in the following loop.  */
3398           packed_args = ARGUMENT_PACK_ARGS (arg);
3399           len = TREE_VEC_LENGTH (packed_args);
3400         }
3401
3402       for (j = 0; j < len; j++)
3403         {
3404           if (packed_args)
3405             /* Get the Jth argument in the parameter pack.  */
3406             arg = TREE_VEC_ELT (packed_args, j);
3407
3408           if (PACK_EXPANSION_P (arg))
3409             {
3410               /* Pack expansions must come at the end of the
3411                  argument list.  */
3412               if ((packed_args && j < len - 1)
3413                   || (!packed_args && i < nargs - 1))
3414                 {
3415                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3416                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3417                   else
3418                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3419
3420                   if (packed_args)
3421                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3422                 }
3423             }
3424
3425           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3426             /* We only care about the pattern.  */
3427             arg = PACK_EXPANSION_PATTERN (arg);
3428
3429           if (/* These first two lines are the `non-type' bit.  */
3430               !TYPE_P (arg)
3431               && TREE_CODE (arg) != TEMPLATE_DECL
3432               /* This next line is the `argument expression is not just a
3433                  simple identifier' condition and also the `specialized
3434                  non-type argument' bit.  */
3435               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3436             {
3437               if ((!packed_args && tpd.arg_uses_template_parms[i])
3438                   || (packed_args && uses_template_parms (arg)))
3439                 error ("template argument %qE involves template parameter(s)",
3440                        arg);
3441               else 
3442                 {
3443                   /* Look at the corresponding template parameter,
3444                      marking which template parameters its type depends
3445                      upon.  */
3446                   tree type = TREE_TYPE (parm);
3447
3448                   if (!tpd2.parms)
3449                     {
3450                       /* We haven't yet initialized TPD2.  Do so now.  */
3451                       tpd2.arg_uses_template_parms 
3452                         = (int *) alloca (sizeof (int) * nargs);
3453                       /* The number of parameters here is the number in the
3454                          main template, which, as checked in the assertion
3455                          above, is NARGS.  */
3456                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3457                       tpd2.level = 
3458                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3459                     }
3460
3461                   /* Mark the template parameters.  But this time, we're
3462                      looking for the template parameters of the main
3463                      template, not in the specialization.  */
3464                   tpd2.current_arg = i;
3465                   tpd2.arg_uses_template_parms[i] = 0;
3466                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3467                   for_each_template_parm (type,
3468                                           &mark_template_parm,
3469                                           &tpd2,
3470                                           NULL,
3471                                           /*include_nondeduced_p=*/false);
3472
3473                   if (tpd2.arg_uses_template_parms [i])
3474                     {
3475                       /* The type depended on some template parameters.
3476                          If they are fully specialized in the
3477                          specialization, that's OK.  */
3478                       int j;
3479                       for (j = 0; j < nargs; ++j)
3480                         if (tpd2.parms[j] != 0
3481                             && tpd.arg_uses_template_parms [j])
3482                           {
3483                             error ("type %qT of template argument %qE depends "
3484                                    "on template parameter(s)", 
3485                                    type,
3486                                    arg);
3487                             break;
3488                           }
3489                     }
3490                 }
3491             }
3492         }
3493     }
3494
3495   if (retrieve_specialization (maintmpl, specargs,
3496                                /*class_specializations_p=*/true))
3497     /* We've already got this specialization.  */
3498     return decl;
3499
3500   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3501     = tree_cons (specargs, inner_parms,
3502                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3503   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3504   return decl;
3505 }
3506
3507 /* Check that a template declaration's use of default arguments and
3508    parameter packs is not invalid.  Here, PARMS are the template
3509    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3510    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3511    specialization.
3512    
3513
3514    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3515    declaration (but not a definition); 1 indicates a declaration, 2
3516    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3517    emitted for extraneous default arguments.
3518
3519    Returns TRUE if there were no errors found, FALSE otherwise. */
3520
3521 bool
3522 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3523                          int is_partial, int is_friend_decl)
3524 {
3525   const char *msg;
3526   int last_level_to_check;
3527   tree parm_level;
3528   bool no_errors = true;
3529
3530   /* [temp.param]
3531
3532      A default template-argument shall not be specified in a
3533      function template declaration or a function template definition, nor
3534      in the template-parameter-list of the definition of a member of a
3535      class template.  */
3536
3537   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3538     /* You can't have a function template declaration in a local
3539        scope, nor you can you define a member of a class template in a
3540        local scope.  */
3541     return true;
3542
3543   if (current_class_type
3544       && !TYPE_BEING_DEFINED (current_class_type)
3545       && DECL_LANG_SPECIFIC (decl)
3546       /* If this is either a friend defined in the scope of the class
3547          or a member function.  */
3548       && (DECL_FUNCTION_MEMBER_P (decl)
3549           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3550           : DECL_FRIEND_CONTEXT (decl)
3551           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3552           : false)
3553       /* And, if it was a member function, it really was defined in
3554          the scope of the class.  */
3555       && (!DECL_FUNCTION_MEMBER_P (decl)
3556           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3557     /* We already checked these parameters when the template was
3558        declared, so there's no need to do it again now.  This function
3559        was defined in class scope, but we're processing it's body now
3560        that the class is complete.  */
3561     return true;
3562
3563   /* Core issue 226 (C++0x only): the following only applies to class
3564      templates.  */
3565   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3566     {
3567       /* [temp.param]
3568
3569          If a template-parameter has a default template-argument, all
3570          subsequent template-parameters shall have a default
3571          template-argument supplied.  */
3572       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3573         {
3574           tree inner_parms = TREE_VALUE (parm_level);
3575           int ntparms = TREE_VEC_LENGTH (inner_parms);
3576           int seen_def_arg_p = 0;
3577           int i;
3578
3579           for (i = 0; i < ntparms; ++i)
3580             {
3581               tree parm = TREE_VEC_ELT (inner_parms, i);
3582
3583               if (parm == error_mark_node)
3584                 continue;
3585
3586               if (TREE_PURPOSE (parm))
3587                 seen_def_arg_p = 1;
3588               else if (seen_def_arg_p)
3589                 {
3590                   error ("no default argument for %qD", TREE_VALUE (parm));
3591                   /* For better subsequent error-recovery, we indicate that
3592                      there should have been a default argument.  */
3593                   TREE_PURPOSE (parm) = error_mark_node;
3594                   no_errors = false;
3595                 }
3596               else if (is_primary
3597                        && !is_partial
3598                        && !is_friend_decl
3599                        && TREE_CODE (decl) == TYPE_DECL
3600                        && i < ntparms - 1
3601                        && template_parameter_pack_p (TREE_VALUE (parm)))
3602                 {
3603                   /* A primary class template can only have one
3604                      parameter pack, at the end of the template
3605                      parameter list.  */
3606
3607                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3608                     error ("parameter pack %qE must be at the end of the"
3609                            " template parameter list", TREE_VALUE (parm));
3610                   else
3611                     error ("parameter pack %qT must be at the end of the"
3612                            " template parameter list", 
3613                            TREE_TYPE (TREE_VALUE (parm)));
3614
3615                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3616                     = error_mark_node;
3617                   no_errors = false;
3618                 }
3619             }
3620         }
3621     }
3622
3623   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3624       || is_partial 
3625       || !is_primary
3626       || is_friend_decl)
3627     /* For an ordinary class template, default template arguments are
3628        allowed at the innermost level, e.g.:
3629          template <class T = int>
3630          struct S {};
3631        but, in a partial specialization, they're not allowed even
3632        there, as we have in [temp.class.spec]:
3633
3634          The template parameter list of a specialization shall not
3635          contain default template argument values.
3636
3637        So, for a partial specialization, or for a function template
3638        (in C++98/C++03), we look at all of them.  */
3639     ;
3640   else
3641     /* But, for a primary class template that is not a partial
3642        specialization we look at all template parameters except the
3643        innermost ones.  */
3644     parms = TREE_CHAIN (parms);
3645
3646   /* Figure out what error message to issue.  */
3647   if (is_friend_decl == 2)
3648     msg = "default template arguments may not be used in function template friend re-declaration";
3649   else if (is_friend_decl)
3650     msg = "default template arguments may not be used in function template friend declarations";
3651   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3652     msg = "default template arguments may not be used in function templates";
3653   else if (is_partial)
3654     msg = "default template arguments may not be used in partial specializations";
3655   else
3656     msg = "default argument for template parameter for class enclosing %qD";
3657
3658   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3659     /* If we're inside a class definition, there's no need to
3660        examine the parameters to the class itself.  On the one
3661        hand, they will be checked when the class is defined, and,
3662        on the other, default arguments are valid in things like:
3663          template <class T = double>
3664          struct S { template <class U> void f(U); };
3665        Here the default argument for `S' has no bearing on the
3666        declaration of `f'.  */
3667     last_level_to_check = template_class_depth (current_class_type) + 1;
3668   else
3669     /* Check everything.  */
3670     last_level_to_check = 0;
3671
3672   for (parm_level = parms;
3673        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3674        parm_level = TREE_CHAIN (parm_level))
3675     {
3676       tree inner_parms = TREE_VALUE (parm_level);
3677       int i;
3678       int ntparms;
3679
3680       ntparms = TREE_VEC_LENGTH (inner_parms);
3681       for (i = 0; i < ntparms; ++i)
3682         {
3683           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3684             continue;
3685
3686           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3687             {
3688               if (msg)
3689                 {
3690                   no_errors = false;
3691                   if (is_friend_decl == 2)
3692                     return no_errors;
3693
3694                   error (msg, decl);
3695                   msg = 0;
3696                 }
3697
3698               /* Clear out the default argument so that we are not
3699                  confused later.  */
3700               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3701             }
3702         }
3703
3704       /* At this point, if we're still interested in issuing messages,
3705          they must apply to classes surrounding the object declared.  */
3706       if (msg)
3707         msg = "default argument for template parameter for class enclosing %qD";
3708     }
3709
3710   return no_errors;
3711 }
3712
3713 /* Worker for push_template_decl_real, called via
3714    for_each_template_parm.  DATA is really an int, indicating the
3715    level of the parameters we are interested in.  If T is a template
3716    parameter of that level, return nonzero.  */
3717
3718 static int
3719 template_parm_this_level_p (tree t, void* data)
3720 {
3721   int this_level = *(int *)data;
3722   int level;
3723
3724   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3725     level = TEMPLATE_PARM_LEVEL (t);
3726   else
3727     level = TEMPLATE_TYPE_LEVEL (t);
3728   return level == this_level;
3729 }
3730
3731 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3732    parameters given by current_template_args, or reuses a
3733    previously existing one, if appropriate.  Returns the DECL, or an
3734    equivalent one, if it is replaced via a call to duplicate_decls.
3735
3736    If IS_FRIEND is true, DECL is a friend declaration.  */
3737
3738 tree
3739 push_template_decl_real (tree decl, bool is_friend)
3740 {
3741   tree tmpl;
3742   tree args;
3743   tree info;
3744   tree ctx;
3745   int primary;
3746   int is_partial;
3747   int new_template_p = 0;
3748   /* True if the template is a member template, in the sense of
3749      [temp.mem].  */
3750   bool member_template_p = false;
3751
3752   if (decl == error_mark_node)
3753     return decl;
3754
3755   /* See if this is a partial specialization.  */
3756   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3757                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3758                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3759
3760   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3761     is_friend = true;
3762
3763   if (is_friend)
3764     /* For a friend, we want the context of the friend function, not
3765        the type of which it is a friend.  */
3766     ctx = DECL_CONTEXT (decl);
3767   else if (CP_DECL_CONTEXT (decl)
3768            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3769     /* In the case of a virtual function, we want the class in which
3770        it is defined.  */
3771     ctx = CP_DECL_CONTEXT (decl);
3772   else
3773     /* Otherwise, if we're currently defining some class, the DECL
3774        is assumed to be a member of the class.  */
3775     ctx = current_scope ();
3776
3777   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3778     ctx = NULL_TREE;
3779
3780   if (!DECL_CONTEXT (decl))
3781     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3782
3783   /* See if this is a primary template.  */
3784   if (is_friend && ctx)
3785     /* A friend template that specifies a class context, i.e.
3786          template <typename T> friend void A<T>::f();
3787        is not primary.  */
3788     primary = 0;
3789   else
3790     primary = template_parm_scope_p ();
3791
3792   if (primary)
3793     {
3794       if (DECL_CLASS_SCOPE_P (decl))
3795         member_template_p = true;
3796       if (TREE_CODE (decl) == TYPE_DECL
3797           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3798         {
3799           error ("template class without a name");
3800           return error_mark_node;
3801         }
3802       else if (TREE_CODE (decl) == FUNCTION_DECL)
3803         {
3804           if (DECL_DESTRUCTOR_P (decl))
3805             {
3806               /* [temp.mem]
3807
3808                  A destructor shall not be a member template.  */
3809               error ("destructor %qD declared as member template", decl);
3810               return error_mark_node;
3811             }
3812           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3813               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3814                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3815                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3816                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3817                       == void_list_node)))
3818             {
3819               /* [basic.stc.dynamic.allocation]
3820
3821                  An allocation function can be a function
3822                  template. ... Template allocation functions shall
3823                  have two or more parameters.  */
3824               error ("invalid template declaration of %qD", decl);
3825               return error_mark_node;
3826             }
3827         }
3828       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3829                && CLASS_TYPE_P (TREE_TYPE (decl)))
3830         /* OK */;
3831       else
3832         {
3833           error ("template declaration of %q#D", decl);
3834           return error_mark_node;
3835         }
3836     }
3837
3838   /* Check to see that the rules regarding the use of default
3839      arguments are not being violated.  */
3840   check_default_tmpl_args (decl, current_template_parms,
3841                            primary, is_partial, /*is_friend_decl=*/0);
3842
3843   /* Ensure that there are no parameter packs in the type of this
3844      declaration that have not been expanded.  */
3845   if (TREE_CODE (decl) == FUNCTION_DECL)
3846     {
3847       /* Check each of the arguments individually to see if there are
3848          any bare parameter packs.  */
3849       tree type = TREE_TYPE (decl);
3850       tree arg = DECL_ARGUMENTS (decl);
3851       tree argtype = TYPE_ARG_TYPES (type);
3852
3853       while (arg && argtype)
3854         {
3855           if (!FUNCTION_PARAMETER_PACK_P (arg)
3856               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3857             {
3858             /* This is a PARM_DECL that contains unexpanded parameter
3859                packs. We have already complained about this in the
3860                check_for_bare_parameter_packs call, so just replace
3861                these types with ERROR_MARK_NODE.  */
3862               TREE_TYPE (arg) = error_mark_node;
3863               TREE_VALUE (argtype) = error_mark_node;
3864             }
3865
3866           arg = TREE_CHAIN (arg);
3867           argtype = TREE_CHAIN (argtype);
3868         }
3869
3870       /* Check for bare parameter packs in the return type and the
3871          exception specifiers.  */
3872       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3873         /* Errors were already issued, set return type to int
3874            as the frontend doesn't expect error_mark_node as
3875            the return type.  */
3876         TREE_TYPE (type) = integer_type_node;
3877       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3878         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3879     }
3880   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3881     {
3882       TREE_TYPE (decl) = error_mark_node;
3883       return error_mark_node;
3884     }
3885
3886   if (is_partial)
3887     return process_partial_specialization (decl);
3888
3889   args = current_template_args ();
3890
3891   if (!ctx
3892       || TREE_CODE (ctx) == FUNCTION_DECL
3893       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3894       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3895     {
3896       if (DECL_LANG_SPECIFIC (decl)
3897           && DECL_TEMPLATE_INFO (decl)
3898           && DECL_TI_TEMPLATE (decl))
3899         tmpl = DECL_TI_TEMPLATE (decl);
3900       /* If DECL is a TYPE_DECL for a class-template, then there won't
3901          be DECL_LANG_SPECIFIC.  The information equivalent to
3902          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3903       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3904                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3905                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3906         {
3907           /* Since a template declaration already existed for this
3908              class-type, we must be redeclaring it here.  Make sure
3909              that the redeclaration is valid.  */
3910           redeclare_class_template (TREE_TYPE (decl),
3911                                     current_template_parms);
3912           /* We don't need to create a new TEMPLATE_DECL; just use the
3913              one we already had.  */
3914           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3915         }
3916       else
3917         {
3918           tmpl = build_template_decl (decl, current_template_parms,
3919                                       member_template_p);
3920           new_template_p = 1;
3921
3922           if (DECL_LANG_SPECIFIC (decl)
3923               && DECL_TEMPLATE_SPECIALIZATION (decl))
3924             {
3925               /* A specialization of a member template of a template
3926                  class.  */
3927               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3928               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3929               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3930             }
3931         }
3932     }
3933   else
3934     {
3935       tree a, t, current, parms;
3936       int i;
3937       tree tinfo = get_template_info (decl);
3938
3939       if (!tinfo)
3940         {
3941           error ("template definition of non-template %q#D", decl);
3942           return error_mark_node;
3943         }
3944
3945       tmpl = TI_TEMPLATE (tinfo);
3946
3947       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3948           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3949           && DECL_TEMPLATE_SPECIALIZATION (decl)
3950           && DECL_MEMBER_TEMPLATE_P (tmpl))
3951         {
3952           tree new_tmpl;
3953
3954           /* The declaration is a specialization of a member
3955              template, declared outside the class.  Therefore, the
3956              innermost template arguments will be NULL, so we
3957              replace them with the arguments determined by the
3958              earlier call to check_explicit_specialization.  */
3959           args = DECL_TI_ARGS (decl);
3960
3961           new_tmpl
3962             = build_template_decl (decl, current_template_parms,
3963                                    member_template_p);
3964           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3965           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3966           DECL_TI_TEMPLATE (decl) = new_tmpl;
3967           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3968           DECL_TEMPLATE_INFO (new_tmpl)
3969             = tree_cons (tmpl, args, NULL_TREE);
3970
3971           register_specialization (new_tmpl,
3972                                    most_general_template (tmpl),
3973                                    args,
3974                                    is_friend);
3975           return decl;
3976         }
3977
3978       /* Make sure the template headers we got make sense.  */
3979
3980       parms = DECL_TEMPLATE_PARMS (tmpl);
3981       i = TMPL_PARMS_DEPTH (parms);
3982       if (TMPL_ARGS_DEPTH (args) != i)
3983         {
3984           error ("expected %d levels of template parms for %q#D, got %d",
3985                  i, decl, TMPL_ARGS_DEPTH (args));
3986         }
3987       else
3988         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3989           {
3990             a = TMPL_ARGS_LEVEL (args, i);
3991             t = INNERMOST_TEMPLATE_PARMS (parms);
3992
3993             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3994               {
3995                 if (current == decl)
3996                   error ("got %d template parameters for %q#D",
3997                          TREE_VEC_LENGTH (a), decl);
3998                 else
3999                   error ("got %d template parameters for %q#T",
4000                          TREE_VEC_LENGTH (a), current);
4001                 error ("  but %d required", TREE_VEC_LENGTH (t));
4002                 return error_mark_node;
4003               }
4004
4005             if (current == decl)
4006               current = ctx;
4007             else
4008               current = (TYPE_P (current)
4009                          ? TYPE_CONTEXT (current)
4010                          : DECL_CONTEXT (current));
4011           }
4012
4013       /* Check that the parms are used in the appropriate qualifying scopes
4014          in the declarator.  */
4015       if (!comp_template_args
4016           (TI_ARGS (tinfo),
4017            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4018         {
4019           error ("\
4020 template arguments to %qD do not match original template %qD",
4021                  decl, DECL_TEMPLATE_RESULT (tmpl));
4022           if (!uses_template_parms (TI_ARGS (tinfo)))
4023             inform ("use template<> for an explicit specialization");
4024           /* Avoid crash in import_export_decl.  */
4025           DECL_INTERFACE_KNOWN (decl) = 1;
4026           return error_mark_node;
4027         }
4028     }
4029
4030   DECL_TEMPLATE_RESULT (tmpl) = decl;
4031   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4032
4033   /* Push template declarations for global functions and types.  Note
4034      that we do not try to push a global template friend declared in a
4035      template class; such a thing may well depend on the template
4036      parameters of the class.  */
4037   if (new_template_p && !ctx
4038       && !(is_friend && template_class_depth (current_class_type) > 0))
4039     {
4040       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4041       if (tmpl == error_mark_node)
4042         return error_mark_node;
4043
4044       /* Hide template friend classes that haven't been declared yet.  */
4045       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4046         {
4047           DECL_ANTICIPATED (tmpl) = 1;
4048           DECL_FRIEND_P (tmpl) = 1;
4049         }
4050     }
4051
4052   if (primary)
4053     {
4054       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4055       int i;
4056
4057       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4058       if (DECL_CONV_FN_P (tmpl))
4059         {
4060           int depth = TMPL_PARMS_DEPTH (parms);
4061
4062           /* It is a conversion operator. See if the type converted to
4063              depends on innermost template operands.  */
4064
4065           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4066                                          depth))
4067             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4068         }
4069
4070       /* Give template template parms a DECL_CONTEXT of the template
4071          for which they are a parameter.  */
4072       parms = INNERMOST_TEMPLATE_PARMS (parms);
4073       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4074         {
4075           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4076           if (TREE_CODE (parm) == TEMPLATE_DECL)
4077             DECL_CONTEXT (parm) = tmpl;
4078         }
4079     }
4080
4081   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4082      back to its most general template.  If TMPL is a specialization,
4083      ARGS may only have the innermost set of arguments.  Add the missing
4084      argument levels if necessary.  */
4085   if (DECL_TEMPLATE_INFO (tmpl))
4086     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4087
4088   info = tree_cons (tmpl, args, NULL_TREE);
4089
4090   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4091     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4092   else if (DECL_LANG_SPECIFIC (decl))
4093     DECL_TEMPLATE_INFO (decl) = info;
4094
4095   return DECL_TEMPLATE_RESULT (tmpl);
4096 }
4097
4098 tree
4099 push_template_decl (tree decl)
4100 {
4101   return push_template_decl_real (decl, false);
4102 }
4103
4104 /* Called when a class template TYPE is redeclared with the indicated
4105    template PARMS, e.g.:
4106
4107      template <class T> struct S;
4108      template <class T> struct S {};  */
4109
4110 bool
4111 redeclare_class_template (tree type, tree parms)
4112 {
4113   tree tmpl;
4114   tree tmpl_parms;
4115   int i;
4116
4117   if (!TYPE_TEMPLATE_INFO (type))
4118     {
4119       error ("%qT is not a template type", type);
4120       return false;
4121     }
4122
4123   tmpl = TYPE_TI_TEMPLATE (type);
4124   if (!PRIMARY_TEMPLATE_P (tmpl))
4125     /* The type is nested in some template class.  Nothing to worry
4126        about here; there are no new template parameters for the nested
4127        type.  */
4128     return true;
4129
4130   if (!parms)
4131     {
4132       error ("template specifiers not specified in declaration of %qD",
4133              tmpl);
4134       return false;
4135     }
4136
4137   parms = INNERMOST_TEMPLATE_PARMS (parms);
4138   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4139
4140   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4141     {
4142       error ("redeclared with %d template parameter(s)", 
4143              TREE_VEC_LENGTH (parms));
4144       inform ("previous declaration %q+D used %d template parameter(s)", 
4145              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4146       return false;
4147     }
4148
4149   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4150     {
4151       tree tmpl_parm;
4152       tree parm;
4153       tree tmpl_default;
4154       tree parm_default;
4155
4156       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4157           || TREE_VEC_ELT (parms, i) == error_mark_node)
4158         continue;
4159
4160       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4161       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4162       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4163       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4164
4165       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4166          TEMPLATE_DECL.  */
4167       if (tmpl_parm != error_mark_node
4168           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4169               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4170                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4171               || (TREE_CODE (tmpl_parm) != PARM_DECL
4172                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4173                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4174               || (TREE_CODE (tmpl_parm) == PARM_DECL
4175                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4176                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4177         {
4178           error ("template parameter %q+#D", tmpl_parm);
4179           error ("redeclared here as %q#D", parm);
4180           return false;
4181         }
4182
4183       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4184         {
4185           /* We have in [temp.param]:
4186
4187              A template-parameter may not be given default arguments
4188              by two different declarations in the same scope.  */
4189           error ("redefinition of default argument for %q#D", parm);
4190           inform ("%Joriginal definition appeared here", tmpl_parm);
4191           return false;
4192         }
4193
4194       if (parm_default != NULL_TREE)
4195         /* Update the previous template parameters (which are the ones
4196            that will really count) with the new default value.  */
4197         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4198       else if (tmpl_default != NULL_TREE)
4199         /* Update the new parameters, too; they'll be used as the
4200            parameters for any members.  */
4201         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4202     }
4203
4204     return true;
4205 }
4206
4207 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4208    (possibly simplified) expression.  */
4209
4210 tree
4211 fold_non_dependent_expr (tree expr)
4212 {
4213   if (expr == NULL_TREE)
4214     return NULL_TREE;
4215
4216   /* If we're in a template, but EXPR isn't value dependent, simplify
4217      it.  We're supposed to treat:
4218
4219        template <typename T> void f(T[1 + 1]);
4220        template <typename T> void f(T[2]);
4221
4222      as two declarations of the same function, for example.  */
4223   if (processing_template_decl
4224       && !type_dependent_expression_p (expr)
4225       && !value_dependent_expression_p (expr))
4226     {
4227       HOST_WIDE_INT saved_processing_template_decl;
4228
4229       saved_processing_template_decl = processing_template_decl;
4230       processing_template_decl = 0;
4231       expr = tsubst_copy_and_build (expr,
4232                                     /*args=*/NULL_TREE,
4233                                     tf_error,
4234                                     /*in_decl=*/NULL_TREE,
4235                                     /*function_p=*/false,
4236                                     /*integral_constant_expression_p=*/true);
4237       processing_template_decl = saved_processing_template_decl;
4238     }
4239   return expr;
4240 }
4241
4242 /* EXPR is an expression which is used in a constant-expression context.
4243    For instance, it could be a VAR_DECL with a constant initializer.
4244    Extract the innest constant expression.
4245
4246    This is basically a more powerful version of
4247    integral_constant_value, which can be used also in templates where
4248    initializers can maintain a syntactic rather than semantic form
4249    (even if they are non-dependent, for access-checking purposes).  */
4250
4251 static tree
4252 fold_decl_constant_value (tree expr)
4253 {
4254   tree const_expr = expr;
4255   do
4256     {
4257       expr = fold_non_dependent_expr (const_expr);
4258       const_expr = integral_constant_value (expr);
4259     }
4260   while (expr != const_expr);
4261
4262   return expr;
4263 }
4264
4265 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4266    must be a function or a pointer-to-function type, as specified
4267    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4268    and check that the resulting function has external linkage.  */
4269
4270 static tree
4271 convert_nontype_argument_function (tree type, tree expr)
4272 {
4273   tree fns = expr;
4274   tree fn, fn_no_ptr;
4275
4276   fn = instantiate_type (type, fns, tf_none);
4277   if (fn == error_mark_node)
4278     return error_mark_node;
4279
4280   fn_no_ptr = fn;
4281   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4282     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4283   if (TREE_CODE (fn_no_ptr) == BASELINK)
4284     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4285  
4286   /* [temp.arg.nontype]/1
4287
4288      A template-argument for a non-type, non-template template-parameter
4289      shall be one of:
4290      [...]
4291      -- the address of an object or function with external linkage.  */
4292   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4293     {
4294       error ("%qE is not a valid template argument for type %qT "
4295              "because function %qD has not external linkage",
4296              expr, type, fn_no_ptr);
4297       return NULL_TREE;
4298     }
4299
4300   return fn;
4301 }
4302
4303 /* Attempt to convert the non-type template parameter EXPR to the
4304    indicated TYPE.  If the conversion is successful, return the
4305    converted value.  If the conversion is unsuccessful, return
4306    NULL_TREE if we issued an error message, or error_mark_node if we
4307    did not.  We issue error messages for out-and-out bad template
4308    parameters, but not simply because the conversion failed, since we
4309    might be just trying to do argument deduction.  Both TYPE and EXPR
4310    must be non-dependent.
4311
4312    The conversion follows the special rules described in
4313    [temp.arg.nontype], and it is much more strict than an implicit
4314    conversion.
4315
4316    This function is called twice for each template argument (see
4317    lookup_template_class for a more accurate description of this
4318    problem). This means that we need to handle expressions which
4319    are not valid in a C++ source, but can be created from the
4320    first call (for instance, casts to perform conversions). These
4321    hacks can go away after we fix the double coercion problem.  */
4322
4323 static tree
4324 convert_nontype_argument (tree type, tree expr)
4325 {
4326   tree expr_type;
4327
4328   /* Detect immediately string literals as invalid non-type argument.
4329      This special-case is not needed for correctness (we would easily
4330      catch this later), but only to provide better diagnostic for this
4331      common user mistake. As suggested by DR 100, we do not mention
4332      linkage issues in the diagnostic as this is not the point.  */
4333   if (TREE_CODE (expr) == STRING_CST)
4334     {
4335       error ("%qE is not a valid template argument for type %qT "
4336              "because string literals can never be used in this context",
4337              expr, type);
4338       return NULL_TREE;
4339     }
4340
4341   /* If we are in a template, EXPR may be non-dependent, but still
4342      have a syntactic, rather than semantic, form.  For example, EXPR
4343      might be a SCOPE_REF, rather than the VAR_DECL to which the
4344      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4345      so that access checking can be performed when the template is
4346      instantiated -- but here we need the resolved form so that we can
4347      convert the argument.  */
4348   expr = fold_non_dependent_expr (expr);
4349   if (error_operand_p (expr))
4350     return error_mark_node;
4351   expr_type = TREE_TYPE (expr);
4352
4353   /* HACK: Due to double coercion, we can get a
4354      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4355      which is the tree that we built on the first call (see
4356      below when coercing to reference to object or to reference to
4357      function). We just strip everything and get to the arg.
4358      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4359      for examples.  */
4360   if (TREE_CODE (expr) == NOP_EXPR)
4361     {
4362       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4363         {
4364           /* ??? Maybe we could use convert_from_reference here, but we
4365              would need to relax its constraints because the NOP_EXPR
4366              could actually change the type to something more cv-qualified,
4367              and this is not folded by convert_from_reference.  */
4368           tree addr = TREE_OPERAND (expr, 0);
4369           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4370           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4371           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4372           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4373                       (TREE_TYPE (expr_type),
4374                        TREE_TYPE (TREE_TYPE (addr))));
4375
4376           expr = TREE_OPERAND (addr, 0);
4377           expr_type = TREE_TYPE (expr);
4378         }
4379
4380       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4381          parameter is a pointer to object, through decay and
4382          qualification conversion. Let's strip everything.  */
4383       else if (TYPE_PTROBV_P (type))
4384         {
4385           STRIP_NOPS (expr);
4386           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4387           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4388           /* Skip the ADDR_EXPR only if it is part of the decay for
4389              an array. Otherwise, it is part of the original argument
4390              in the source code.  */
4391           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4392             expr = TREE_OPERAND (expr, 0);
4393           expr_type = TREE_TYPE (expr);
4394         }
4395     }
4396
4397   /* [temp.arg.nontype]/5, bullet 1
4398
4399      For a non-type template-parameter of integral or enumeration type,
4400      integral promotions (_conv.prom_) and integral conversions
4401      (_conv.integral_) are applied.  */
4402   if (INTEGRAL_TYPE_P (type))
4403     {
4404       if (!INTEGRAL_TYPE_P (expr_type))
4405         return error_mark_node;
4406
4407       expr = fold_decl_constant_value (expr);
4408       /* Notice that there are constant expressions like '4 % 0' which
4409          do not fold into integer constants.  */
4410       if (TREE_CODE (expr) != INTEGER_CST)
4411         {
4412           error ("%qE is not a valid template argument for type %qT "
4413                  "because it is a non-constant expression", expr, type);
4414           return NULL_TREE;
4415         }
4416
4417       /* At this point, an implicit conversion does what we want,
4418          because we already know that the expression is of integral
4419          type.  */
4420       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4421       if (expr == error_mark_node)
4422         return error_mark_node;
4423
4424       /* Conversion was allowed: fold it to a bare integer constant.  */
4425       expr = fold (expr);
4426     }
4427   /* [temp.arg.nontype]/5, bullet 2
4428
4429      For a non-type template-parameter of type pointer to object,
4430      qualification conversions (_conv.qual_) and the array-to-pointer
4431      conversion (_conv.array_) are applied.  */
4432   else if (TYPE_PTROBV_P (type))
4433     {
4434       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4435
4436          A template-argument for a non-type, non-template template-parameter
4437          shall be one of: [...]
4438
4439          -- the name of a non-type template-parameter;
4440          -- the address of an object or function with external linkage, [...]
4441             expressed as "& id-expression" where the & is optional if the name
4442             refers to a function or array, or if the corresponding
4443             template-parameter is a reference.
4444
4445         Here, we do not care about functions, as they are invalid anyway
4446         for a parameter of type pointer-to-object.  */
4447
4448       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4449         /* Non-type template parameters are OK.  */
4450         ;
4451       else if (TREE_CODE (expr) != ADDR_EXPR
4452                && TREE_CODE (expr_type) != ARRAY_TYPE)
4453         {
4454           if (TREE_CODE (expr) == VAR_DECL)
4455             {
4456               error ("%qD is not a valid template argument "
4457                      "because %qD is a variable, not the address of "
4458                      "a variable",
4459                      expr, expr);
4460               return NULL_TREE;
4461             }
4462           /* Other values, like integer constants, might be valid
4463              non-type arguments of some other type.  */
4464           return error_mark_node;
4465         }
4466       else
4467         {
4468           tree decl;
4469
4470           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4471                   ? TREE_OPERAND (expr, 0) : expr);
4472           if (TREE_CODE (decl) != VAR_DECL)
4473             {
4474               error ("%qE is not a valid template argument of type %qT "
4475                      "because %qE is not a variable",
4476                      expr, type, decl);
4477               return NULL_TREE;
4478             }
4479           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4480             {
4481               error ("%qE is not a valid template argument of type %qT "
4482                      "because %qD does not have external linkage",
4483                      expr, type, decl);
4484               return NULL_TREE;
4485             }
4486         }
4487
4488       expr = decay_conversion (expr);
4489       if (expr == error_mark_node)
4490         return error_mark_node;
4491
4492       expr = perform_qualification_conversions (type, expr);
4493       if (expr == error_mark_node)
4494         return error_mark_node;
4495     }
4496   /* [temp.arg.nontype]/5, bullet 3
4497
4498      For a non-type template-parameter of type reference to object, no
4499      conversions apply. The type referred to by the reference may be more
4500      cv-qualified than the (otherwise identical) type of the
4501      template-argument. The template-parameter is bound directly to the
4502      template-argument, which must be an lvalue.  */
4503   else if (TYPE_REF_OBJ_P (type))
4504     {
4505       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4506                                                       expr_type))
4507         return error_mark_node;
4508
4509       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4510         {
4511           error ("%qE is not a valid template argument for type %qT "
4512                  "because of conflicts in cv-qualification", expr, type);
4513           return NULL_TREE;
4514         }
4515
4516       if (!real_lvalue_p (expr))
4517         {
4518           error ("%qE is not a valid template argument for type %qT "
4519                  "because it is not an lvalue", expr, type);
4520           return NULL_TREE;
4521         }
4522
4523       /* [temp.arg.nontype]/1
4524
4525          A template-argument for a non-type, non-template template-parameter
4526          shall be one of: [...]
4527
4528          -- the address of an object or function with external linkage.  */
4529       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4530         {
4531           error ("%qE is not a valid template argument for type %qT "
4532                  "because object %qD has not external linkage",
4533                  expr, type, expr);
4534           return NULL_TREE;
4535         }
4536
4537       expr = build_nop (type, build_address (expr));
4538     }
4539   /* [temp.arg.nontype]/5, bullet 4
4540
4541      For a non-type template-parameter of type pointer to function, only
4542      the function-to-pointer conversion (_conv.func_) is applied. If the
4543      template-argument represents a set of overloaded functions (or a
4544      pointer to such), the matching function is selected from the set
4545      (_over.over_).  */
4546   else if (TYPE_PTRFN_P (type))
4547     {
4548       /* If the argument is a template-id, we might not have enough
4549          context information to decay the pointer.  */
4550       if (!type_unknown_p (expr_type))
4551         {
4552           expr = decay_conversion (expr);
4553           if (expr == error_mark_node)
4554             return error_mark_node;
4555         }
4556
4557       expr = convert_nontype_argument_function (type, expr);
4558       if (!expr || expr == error_mark_node)
4559         return expr;
4560     }
4561   /* [temp.arg.nontype]/5, bullet 5
4562
4563      For a non-type template-parameter of type reference to function, no
4564      conversions apply. If the template-argument represents a set of
4565      overloaded functions, the matching function is selected from the set
4566      (_over.over_).  */
4567   else if (TYPE_REFFN_P (type))
4568     {
4569       if (TREE_CODE (expr) == ADDR_EXPR)
4570         {
4571           error ("%qE is not a valid template argument for type %qT "
4572                  "because it is a pointer", expr, type);
4573           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4574           return NULL_TREE;
4575         }
4576
4577       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4578       if (!expr || expr == error_mark_node)
4579         return expr;
4580
4581       expr = build_nop (type, build_address (expr));
4582     }
4583   /* [temp.arg.nontype]/5, bullet 6
4584
4585      For a non-type template-parameter of type pointer to member function,
4586      no conversions apply. If the template-argument represents a set of
4587      overloaded member functions, the matching member function is selected
4588      from the set (_over.over_).  */
4589   else if (TYPE_PTRMEMFUNC_P (type))
4590     {
4591       expr = instantiate_type (type, expr, tf_none);
4592       if (expr == error_mark_node)
4593         return error_mark_node;
4594
4595       /* There is no way to disable standard conversions in
4596          resolve_address_of_overloaded_function (called by
4597          instantiate_type). It is possible that the call succeeded by
4598          converting &B::I to &D::I (where B is a base of D), so we need
4599          to reject this conversion here.
4600
4601          Actually, even if there was a way to disable standard conversions,
4602          it would still be better to reject them here so that we can
4603          provide a superior diagnostic.  */
4604       if (!same_type_p (TREE_TYPE (expr), type))
4605         {
4606           /* Make sure we are just one standard conversion off.  */
4607           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4608           error ("%qE is not a valid template argument for type %qT "
4609                  "because it is of type %qT", expr, type,
4610                  TREE_TYPE (expr));
4611           inform ("standard conversions are not allowed in this context");
4612           return NULL_TREE;
4613         }
4614     }
4615   /* [temp.arg.nontype]/5, bullet 7
4616
4617      For a non-type template-parameter of type pointer to data member,
4618      qualification conversions (_conv.qual_) are applied.  */
4619   else if (TYPE_PTRMEM_P (type))
4620     {
4621       expr = perform_qualification_conversions (type, expr);
4622       if (expr == error_mark_node)
4623         return expr;
4624     }
4625   /* A template non-type parameter must be one of the above.  */
4626   else
4627     gcc_unreachable ();
4628
4629   /* Sanity check: did we actually convert the argument to the
4630      right type?  */
4631   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4632   return expr;
4633 }
4634
4635 /* Subroutine of coerce_template_template_parms, which returns 1 if
4636    PARM_PARM and ARG_PARM match using the rule for the template
4637    parameters of template template parameters. Both PARM and ARG are
4638    template parameters; the rest of the arguments are the same as for
4639    coerce_template_template_parms.
4640  */
4641 static int
4642 coerce_template_template_parm (tree parm,
4643                               tree arg,
4644                               tsubst_flags_t complain,
4645                               tree in_decl,
4646                               tree outer_args)
4647 {
4648   if (arg == NULL_TREE || arg == error_mark_node
4649       || parm == NULL_TREE || parm == error_mark_node)
4650     return 0;
4651   
4652   if (TREE_CODE (arg) != TREE_CODE (parm))
4653     return 0;
4654   
4655   switch (TREE_CODE (parm))
4656     {
4657     case TEMPLATE_DECL:
4658       /* We encounter instantiations of templates like
4659          template <template <template <class> class> class TT>
4660          class C;  */
4661       {
4662         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4663         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4664         
4665         if (!coerce_template_template_parms
4666             (parmparm, argparm, complain, in_decl, outer_args))
4667           return 0;
4668       }
4669       /* Fall through.  */
4670       
4671     case TYPE_DECL:
4672       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4673           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4674         /* Argument is a parameter pack but parameter is not.  */
4675         return 0;
4676       break;
4677       
4678     case PARM_DECL:
4679       /* The tsubst call is used to handle cases such as
4680          
4681            template <int> class C {};
4682            template <class T, template <T> class TT> class D {};
4683            D<int, C> d;
4684
4685          i.e. the parameter list of TT depends on earlier parameters.  */
4686       if (!dependent_type_p (TREE_TYPE (arg))
4687           && !same_type_p
4688                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4689                  TREE_TYPE (arg)))
4690         return 0;
4691       
4692       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4693           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4694         /* Argument is a parameter pack but parameter is not.  */
4695         return 0;
4696       
4697       break;
4698
4699     default:
4700       gcc_unreachable ();
4701     }
4702
4703   return 1;
4704 }
4705
4706
4707 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4708    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4709    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4710    or PARM_DECL.
4711
4712    Consider the example:
4713      template <class T> class A;
4714      template<template <class U> class TT> class B;
4715
4716    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4717    the parameters to A, and OUTER_ARGS contains A.  */
4718
4719 static int
4720 coerce_template_template_parms (tree parm_parms,
4721                                 tree arg_parms,
4722                                 tsubst_flags_t complain,
4723                                 tree in_decl,
4724                                 tree outer_args)
4725 {
4726   int nparms, nargs, i;
4727   tree parm, arg;
4728   int variadic_p = 0;
4729
4730   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4731   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4732
4733   nparms = TREE_VEC_LENGTH (parm_parms);
4734   nargs = TREE_VEC_LENGTH (arg_parms);
4735
4736   /* Determine whether we have a parameter pack at the end of the
4737      template template parameter's template parameter list.  */
4738   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4739     {
4740       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4741       
4742       switch (TREE_CODE (parm))
4743         {
4744         case TEMPLATE_DECL:
4745         case TYPE_DECL:
4746           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4747             variadic_p = 1;
4748           break;
4749           
4750         case PARM_DECL:
4751           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4752             variadic_p = 1;
4753           break;
4754           
4755         default:
4756           gcc_unreachable ();
4757         }
4758     }
4759  
4760   if (nargs != nparms
4761       && !(variadic_p && nargs >= nparms - 1))
4762     return 0;
4763
4764   /* Check all of the template parameters except the parameter pack at
4765      the end (if any).  */
4766   for (i = 0; i < nparms - variadic_p; ++i)
4767     {
4768       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4769           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4770         continue;
4771
4772       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4773       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4774
4775       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4776                                           outer_args))
4777         return 0;
4778
4779     }
4780
4781   if (variadic_p)
4782     {
4783       /* Check each of the template parameters in the template
4784          argument against the template parameter pack at the end of
4785          the template template parameter.  */
4786       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4787         return 0;
4788
4789       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4790
4791       for (; i < nargs; ++i)
4792         {
4793           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4794             continue;
4795  
4796           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4797  
4798           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4799                                               outer_args))
4800             return 0;
4801         }
4802     }
4803
4804   return 1;
4805 }
4806
4807 /* Verifies that the deduced template arguments (in TARGS) for the
4808    template template parameters (in TPARMS) represent valid bindings,
4809    by comparing the template parameter list of each template argument
4810    to the template parameter list of its corresponding template
4811    template parameter, in accordance with DR150. This
4812    routine can only be called after all template arguments have been
4813    deduced. It will return TRUE if all of the template template
4814    parameter bindings are okay, FALSE otherwise.  */
4815 bool 
4816 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4817 {
4818   int i, ntparms = TREE_VEC_LENGTH (tparms);
4819   bool ret = true;
4820
4821   /* We're dealing with template parms in this process.  */
4822   ++processing_template_decl;
4823
4824   targs = INNERMOST_TEMPLATE_ARGS (targs);
4825
4826   for (i = 0; i < ntparms; ++i)
4827     {
4828       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4829       tree targ = TREE_VEC_ELT (targs, i);
4830
4831       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4832         {
4833           tree packed_args = NULL_TREE;
4834           int idx, len = 1;
4835
4836           if (ARGUMENT_PACK_P (targ))
4837             {
4838               /* Look inside the argument pack.  */
4839               packed_args = ARGUMENT_PACK_ARGS (targ);
4840               len = TREE_VEC_LENGTH (packed_args);
4841             }
4842
4843           for (idx = 0; idx < len; ++idx)
4844             {
4845               tree targ_parms = NULL_TREE;
4846
4847               if (packed_args)
4848                 /* Extract the next argument from the argument
4849                    pack.  */
4850                 targ = TREE_VEC_ELT (packed_args, idx);
4851
4852               if (PACK_EXPANSION_P (targ))
4853                 /* Look at the pattern of the pack expansion.  */
4854                 targ = PACK_EXPANSION_PATTERN (targ);
4855
4856               /* Extract the template parameters from the template
4857                  argument.  */
4858               if (TREE_CODE (targ) == TEMPLATE_DECL)
4859                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4860               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4861                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4862
4863               /* Verify that we can coerce the template template
4864                  parameters from the template argument to the template
4865                  parameter.  This requires an exact match.  */
4866               if (targ_parms
4867                   && !coerce_template_template_parms
4868                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4869                         targ_parms,
4870                         tf_none,
4871                         tparm,
4872                         targs))
4873                 {
4874                   ret = false;
4875                   goto out;
4876                 }
4877             }
4878         }
4879     }
4880
4881  out:
4882
4883   --processing_template_decl;
4884   return ret;
4885 }
4886
4887 /* Convert the indicated template ARG as necessary to match the
4888    indicated template PARM.  Returns the converted ARG, or
4889    error_mark_node if the conversion was unsuccessful.  Error and
4890    warning messages are issued under control of COMPLAIN.  This
4891    conversion is for the Ith parameter in the parameter list.  ARGS is
4892    the full set of template arguments deduced so far.  */
4893
4894 static tree
4895 convert_template_argument (tree parm,
4896                            tree arg,
4897                            tree args,
4898                            tsubst_flags_t complain,
4899                            int i,
4900                            tree in_decl)
4901 {
4902   tree orig_arg;
4903   tree val;
4904   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4905
4906   if (TREE_CODE (arg) == TREE_LIST
4907       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4908     {
4909       /* The template argument was the name of some
4910          member function.  That's usually
4911          invalid, but static members are OK.  In any
4912          case, grab the underlying fields/functions
4913          and issue an error later if required.  */
4914       orig_arg = TREE_VALUE (arg);
4915       TREE_TYPE (arg) = unknown_type_node;
4916     }
4917
4918   orig_arg = arg;
4919
4920   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4921   requires_type = (TREE_CODE (parm) == TYPE_DECL
4922                    || requires_tmpl_type);
4923
4924   /* When determining whether an argument pack expansion is a template,
4925      look at the pattern.  */
4926   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4927     arg = PACK_EXPANSION_PATTERN (arg);
4928
4929   is_tmpl_type = 
4930     ((TREE_CODE (arg) == TEMPLATE_DECL
4931       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4932      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4933      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4934
4935   if (is_tmpl_type
4936       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4937           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4938     arg = TYPE_STUB_DECL (arg);
4939
4940   is_type = TYPE_P (arg) || is_tmpl_type;
4941
4942   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4943       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4944     {
4945       permerror ("to refer to a type member of a template parameter, "
4946                  "use %<typename %E%>", orig_arg);
4947
4948       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4949                                      TREE_OPERAND (arg, 1),
4950                                      typename_type,
4951                                      complain & tf_error);
4952       arg = orig_arg;
4953       is_type = 1;
4954     }
4955   if (is_type != requires_type)
4956     {
4957       if (in_decl)
4958         {
4959           if (complain & tf_error)
4960             {
4961               error ("type/value mismatch at argument %d in template "
4962                      "parameter list for %qD",
4963                      i + 1, in_decl);
4964               if (is_type)
4965                 error ("  expected a constant of type %qT, got %qT",
4966                        TREE_TYPE (parm),
4967                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4968               else if (requires_tmpl_type)
4969                 error ("  expected a class template, got %qE", orig_arg);
4970               else
4971                 error ("  expected a type, got %qE", orig_arg);
4972             }
4973         }
4974       return error_mark_node;
4975     }
4976   if (is_tmpl_type ^ requires_tmpl_type)
4977     {
4978       if (in_decl && (complain & tf_error))
4979         {
4980           error ("type/value mismatch at argument %d in template "
4981                  "parameter list for %qD",
4982                  i + 1, in_decl);
4983           if (is_tmpl_type)
4984             error ("  expected a type, got %qT", DECL_NAME (arg));
4985           else
4986             error ("  expected a class template, got %qT", orig_arg);
4987         }
4988       return error_mark_node;
4989     }
4990
4991   if (is_type)
4992     {
4993       if (requires_tmpl_type)
4994         {
4995           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4996             /* The number of argument required is not known yet.
4997                Just accept it for now.  */
4998             val = TREE_TYPE (arg);
4999           else
5000             {
5001               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5002               tree argparm;
5003
5004               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5005
5006               if (coerce_template_template_parms (parmparm, argparm,
5007                                                   complain, in_decl,
5008                                                   args))
5009                 {
5010                   val = orig_arg;
5011
5012                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5013                      TEMPLATE_DECL.  */
5014                   if (val != error_mark_node)
5015                     {
5016                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5017                         val = TREE_TYPE (val);
5018                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5019                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5020                         {
5021                           val = TREE_TYPE (arg);
5022                           val = make_pack_expansion (val);
5023                         }
5024                     }
5025                 }
5026               else
5027                 {
5028                   if (in_decl && (complain & tf_error))
5029                     {
5030                       error ("type/value mismatch at argument %d in "
5031                              "template parameter list for %qD",
5032                              i + 1, in_decl);
5033                       error ("  expected a template of type %qD, got %qD",
5034                              parm, orig_arg);
5035                     }
5036
5037                   val = error_mark_node;
5038                 }
5039             }
5040         }
5041       else
5042         val = orig_arg;
5043       /* We only form one instance of each template specialization.
5044          Therefore, if we use a non-canonical variant (i.e., a
5045          typedef), any future messages referring to the type will use
5046          the typedef, which is confusing if those future uses do not
5047          themselves also use the typedef.  */
5048       if (TYPE_P (val))
5049         val = canonical_type_variant (val);
5050     }
5051   else
5052     {
5053       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5054
5055       if (invalid_nontype_parm_type_p (t, complain))
5056         return error_mark_node;
5057
5058       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5059         /* We used to call digest_init here.  However, digest_init
5060            will report errors, which we don't want when complain
5061            is zero.  More importantly, digest_init will try too
5062            hard to convert things: for example, `0' should not be
5063            converted to pointer type at this point according to
5064            the standard.  Accepting this is not merely an
5065            extension, since deciding whether or not these
5066            conversions can occur is part of determining which
5067            function template to call, or whether a given explicit
5068            argument specification is valid.  */
5069         val = convert_nontype_argument (t, orig_arg);
5070       else
5071         val = orig_arg;
5072
5073       if (val == NULL_TREE)
5074         val = error_mark_node;
5075       else if (val == error_mark_node && (complain & tf_error))
5076         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5077     }
5078
5079   return val;
5080 }
5081
5082 /* Coerces the remaining template arguments in INNER_ARGS (from
5083    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5084    Returns the coerced argument pack. PARM_IDX is the position of this
5085    parameter in the template parameter list. ARGS is the original
5086    template argument list.  */
5087 static tree
5088 coerce_template_parameter_pack (tree parms,
5089                                 int parm_idx,
5090                                 tree args,
5091                                 tree inner_args,
5092                                 int arg_idx,
5093                                 tree new_args,
5094                                 int* lost,
5095                                 tree in_decl,
5096                                 tsubst_flags_t complain)
5097 {
5098   tree parm = TREE_VEC_ELT (parms, parm_idx);
5099   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5100   tree packed_args;
5101   tree argument_pack;
5102   tree packed_types = NULL_TREE;
5103
5104   if (arg_idx > nargs)
5105     arg_idx = nargs;
5106
5107   packed_args = make_tree_vec (nargs - arg_idx);
5108
5109   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5110       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5111     {
5112       /* When the template parameter is a non-type template
5113          parameter pack whose type uses parameter packs, we need
5114          to look at each of the template arguments
5115          separately. Build a vector of the types for these
5116          non-type template parameters in PACKED_TYPES.  */
5117       tree expansion 
5118         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5119       packed_types = tsubst_pack_expansion (expansion, args,
5120                                             complain, in_decl);
5121
5122       if (packed_types == error_mark_node)
5123         return error_mark_node;
5124
5125       /* Check that we have the right number of arguments.  */
5126       if (arg_idx < nargs
5127           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5128           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5129         {
5130           int needed_parms 
5131             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5132           error ("wrong number of template arguments (%d, should be %d)",
5133                  nargs, needed_parms);
5134           return error_mark_node;
5135         }
5136
5137       /* If we aren't able to check the actual arguments now
5138          (because they haven't been expanded yet), we can at least
5139          verify that all of the types used for the non-type
5140          template parameter pack are, in fact, valid for non-type
5141          template parameters.  */
5142       if (arg_idx < nargs 
5143           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5144         {
5145           int j, len = TREE_VEC_LENGTH (packed_types);
5146           for (j = 0; j < len; ++j)
5147             {
5148               tree t = TREE_VEC_ELT (packed_types, j);
5149               if (invalid_nontype_parm_type_p (t, complain))
5150                 return error_mark_node;
5151             }
5152         }
5153     }
5154
5155   /* Convert the remaining arguments, which will be a part of the
5156      parameter pack "parm".  */
5157   for (; arg_idx < nargs; ++arg_idx)
5158     {
5159       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5160       tree actual_parm = TREE_VALUE (parm);
5161
5162       if (packed_types && !PACK_EXPANSION_P (arg))
5163         {
5164           /* When we have a vector of types (corresponding to the
5165              non-type template parameter pack that uses parameter
5166              packs in its type, as mention above), and the
5167              argument is not an expansion (which expands to a
5168              currently unknown number of arguments), clone the
5169              parm and give it the next type in PACKED_TYPES.  */
5170           actual_parm = copy_node (actual_parm);
5171           TREE_TYPE (actual_parm) = 
5172             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5173         }
5174
5175       if (arg != error_mark_node)
5176         arg = convert_template_argument (actual_parm, 
5177                                          arg, new_args, complain, parm_idx,
5178                                          in_decl);
5179       if (arg == error_mark_node)
5180         (*lost)++;
5181       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5182     }
5183
5184   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5185       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5186     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5187   else
5188     {
5189       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5190       TREE_TYPE (argument_pack) 
5191         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5192       TREE_CONSTANT (argument_pack) = 1;
5193     }
5194
5195   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5196   return argument_pack;
5197 }
5198
5199 /* Convert all template arguments to their appropriate types, and
5200    return a vector containing the innermost resulting template
5201    arguments.  If any error occurs, return error_mark_node. Error and
5202    warning messages are issued under control of COMPLAIN.
5203
5204    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5205    for arguments not specified in ARGS.  Otherwise, if
5206    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5207    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5208    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5209    ARGS.  */
5210
5211 static tree
5212 coerce_template_parms (tree parms,
5213                        tree args,
5214                        tree in_decl,
5215                        tsubst_flags_t complain,
5216                        bool require_all_args,
5217                        bool use_default_args)
5218 {
5219   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5220   tree inner_args;
5221   tree new_args;
5222   tree new_inner_args;
5223   bool saved_skip_evaluation;
5224
5225   /* When used as a boolean value, indicates whether this is a
5226      variadic template parameter list. Since it's an int, we can also
5227      subtract it from nparms to get the number of non-variadic
5228      parameters.  */
5229   int variadic_p = 0;
5230
5231   inner_args 
5232     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5233
5234   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5235   nparms = TREE_VEC_LENGTH (parms);
5236
5237   /* Determine if there are any parameter packs.  */
5238   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5239     {
5240       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5241       if (template_parameter_pack_p (tparm))
5242         {
5243           variadic_p = 1;
5244           break;
5245         }
5246     }
5247
5248   if ((nargs > nparms - variadic_p && !variadic_p)
5249       || (nargs < nparms - variadic_p
5250           && require_all_args
5251           && (!use_default_args
5252               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5253                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5254     {
5255       if (complain & tf_error)
5256         {
5257           const char *or_more = "";
5258           if (variadic_p)
5259             {
5260               or_more = " or more";
5261               --nparms;
5262             }
5263
5264           error ("wrong number of template arguments (%d, should be %d%s)",
5265                  nargs, nparms, or_more);
5266
5267           if (in_decl)
5268             error ("provided for %q+D", in_decl);
5269         }
5270
5271       return error_mark_node;
5272     }
5273
5274   /* We need to evaluate the template arguments, even though this
5275      template-id may be nested within a "sizeof".  */
5276   saved_skip_evaluation = skip_evaluation;
5277   skip_evaluation = false;
5278   new_inner_args = make_tree_vec (nparms);
5279   new_args = add_outermost_template_args (args, new_inner_args);
5280   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5281     {
5282       tree arg;
5283       tree parm;
5284
5285       /* Get the Ith template parameter.  */
5286       parm = TREE_VEC_ELT (parms, parm_idx);
5287  
5288       if (parm == error_mark_node)
5289       {
5290         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5291         continue;
5292       }
5293
5294       /* Calculate the next argument.  */
5295       if (template_parameter_pack_p (TREE_VALUE (parm)))
5296         {
5297           /* All remaining arguments will be placed in the
5298              template parameter pack PARM.  */
5299           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5300                                                 inner_args, arg_idx,
5301                                                 new_args, &lost,
5302                                                 in_decl, complain);
5303           
5304           /* Store this argument.  */
5305           if (arg == error_mark_node)
5306             lost++;
5307           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5308
5309           /* We are done with all of the arguments.  */
5310           arg_idx = nargs;
5311
5312           continue;
5313         }
5314       else if (arg_idx < nargs)
5315         {
5316           arg = TREE_VEC_ELT (inner_args, arg_idx);
5317
5318           if (arg && PACK_EXPANSION_P (arg))
5319             {
5320               if (complain & tf_error)
5321                 {
5322                   /* If ARG is a pack expansion, but PARM is not a
5323                      template parameter pack (if it were, we would have
5324                      handled it above), we're trying to expand into a
5325                      fixed-length argument list.  */
5326                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5327                     error ("cannot expand %<%E%> into a fixed-length "
5328                            "argument list", arg);
5329                   else
5330                     error ("cannot expand %<%T%> into a fixed-length "
5331                            "argument list", arg);
5332                 }
5333               return error_mark_node;
5334             }
5335         }
5336       else if (require_all_args)
5337         /* There must be a default arg in this case.  */
5338         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5339                                    complain, in_decl);
5340       else
5341         break;
5342
5343       if (arg == error_mark_node)
5344         {
5345           if (complain & tf_error)
5346             error ("template argument %d is invalid", arg_idx + 1);
5347         }
5348       else if (!arg)
5349         /* This only occurs if there was an error in the template
5350            parameter list itself (which we would already have
5351            reported) that we are trying to recover from, e.g., a class
5352            template with a parameter list such as
5353            template<typename..., typename>.  */
5354         return error_mark_node;
5355       else
5356         arg = convert_template_argument (TREE_VALUE (parm),
5357                                          arg, new_args, complain, 
5358                                          parm_idx, in_decl);
5359
5360       if (arg == error_mark_node)
5361         lost++;
5362       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5363     }
5364   skip_evaluation = saved_skip_evaluation;
5365
5366   if (lost)
5367     return error_mark_node;
5368
5369   return new_inner_args;
5370 }
5371
5372 /* Returns 1 if template args OT and NT are equivalent.  */
5373
5374 static int
5375 template_args_equal (tree ot, tree nt)
5376 {
5377   if (nt == ot)
5378     return 1;
5379
5380   if (TREE_CODE (nt) == TREE_VEC)
5381     /* For member templates */
5382     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5383   else if (PACK_EXPANSION_P (ot))
5384     return PACK_EXPANSION_P (nt) 
5385       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5386                               PACK_EXPANSION_PATTERN (nt));
5387   else if (TYPE_P (nt))
5388     return TYPE_P (ot) && same_type_p (ot, nt);
5389   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5390     return 0;
5391   else
5392     return cp_tree_equal (ot, nt);
5393 }
5394
5395 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5396    of template arguments.  Returns 0 otherwise.  */
5397
5398 int
5399 comp_template_args (tree oldargs, tree newargs)
5400 {
5401   int i;
5402
5403   oldargs = expand_template_argument_pack (oldargs);
5404   newargs = expand_template_argument_pack (newargs);
5405
5406   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5407     return 0;
5408
5409   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5410     {
5411       tree nt = TREE_VEC_ELT (newargs, i);
5412       tree ot = TREE_VEC_ELT (oldargs, i);
5413
5414       if (! template_args_equal (ot, nt))
5415         return 0;
5416     }
5417   return 1;
5418 }
5419
5420 static void
5421 add_pending_template (tree d)
5422 {
5423   tree ti = (TYPE_P (d)
5424              ? CLASSTYPE_TEMPLATE_INFO (d)
5425              : DECL_TEMPLATE_INFO (d));
5426   struct pending_template *pt;
5427   int level;
5428
5429   if (TI_PENDING_TEMPLATE_FLAG (ti))
5430     return;
5431
5432   /* We are called both from instantiate_decl, where we've already had a
5433      tinst_level pushed, and instantiate_template, where we haven't.
5434      Compensate.  */
5435   level = !current_tinst_level || current_tinst_level->decl != d;
5436
5437   if (level)
5438     push_tinst_level (d);
5439
5440   pt = GGC_NEW (struct pending_template);
5441   pt->next = NULL;
5442   pt->tinst = current_tinst_level;
5443   if (last_pending_template)
5444     last_pending_template->next = pt;
5445   else
5446     pending_templates = pt;
5447
5448   last_pending_template = pt;
5449
5450   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5451
5452   if (level)
5453     pop_tinst_level ();
5454 }
5455
5456
5457 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5458    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5459    documentation for TEMPLATE_ID_EXPR.  */
5460
5461 tree
5462 lookup_template_function (tree fns, tree arglist)
5463 {
5464   tree type;
5465
5466   if (fns == error_mark_node || arglist == error_mark_node)
5467     return error_mark_node;
5468
5469   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5470   gcc_assert (fns && (is_overloaded_fn (fns)
5471                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5472
5473   if (BASELINK_P (fns))
5474     {
5475       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5476                                          unknown_type_node,
5477                                          BASELINK_FUNCTIONS (fns),
5478                                          arglist);
5479       return fns;
5480     }
5481
5482   type = TREE_TYPE (fns);
5483   if (TREE_CODE (fns) == OVERLOAD || !type)
5484     type = unknown_type_node;
5485
5486   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5487 }
5488
5489 /* Within the scope of a template class S<T>, the name S gets bound
5490    (in build_self_reference) to a TYPE_DECL for the class, not a
5491    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5492    or one of its enclosing classes, and that type is a template,
5493    return the associated TEMPLATE_DECL.  Otherwise, the original
5494    DECL is returned.  */
5495
5496 tree
5497 maybe_get_template_decl_from_type_decl (tree decl)
5498 {
5499   return (decl != NULL_TREE
5500           && TREE_CODE (decl) == TYPE_DECL
5501           && DECL_ARTIFICIAL (decl)
5502           && CLASS_TYPE_P (TREE_TYPE (decl))
5503           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5504     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5505 }
5506
5507 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5508    parameters, find the desired type.
5509
5510    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5511
5512    IN_DECL, if non-NULL, is the template declaration we are trying to
5513    instantiate.
5514
5515    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5516    the class we are looking up.
5517
5518    Issue error and warning messages under control of COMPLAIN.
5519
5520    If the template class is really a local class in a template
5521    function, then the FUNCTION_CONTEXT is the function in which it is
5522    being instantiated.
5523
5524    ??? Note that this function is currently called *twice* for each
5525    template-id: the first time from the parser, while creating the
5526    incomplete type (finish_template_type), and the second type during the
5527    real instantiation (instantiate_template_class). This is surely something
5528    that we want to avoid. It also causes some problems with argument
5529    coercion (see convert_nontype_argument for more information on this).  */
5530
5531 tree
5532 lookup_template_class (tree d1,
5533                        tree arglist,
5534                        tree in_decl,
5535                        tree context,
5536                        int entering_scope,
5537                        tsubst_flags_t complain)
5538 {
5539   tree template = NULL_TREE, parmlist;
5540   tree t;
5541
5542   timevar_push (TV_NAME_LOOKUP);
5543
5544   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5545     {
5546       tree value = innermost_non_namespace_value (d1);
5547       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5548         template = value;
5549       else
5550         {
5551           if (context)
5552             push_decl_namespace (context);
5553           template = lookup_name (d1);
5554           template = maybe_get_template_decl_from_type_decl (template);
5555           if (context)
5556             pop_decl_namespace ();
5557         }
5558       if (template)
5559         context = DECL_CONTEXT (template);
5560     }
5561   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5562     {
5563       tree type = TREE_TYPE (d1);
5564
5565       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5566          an implicit typename for the second A.  Deal with it.  */
5567       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5568         type = TREE_TYPE (type);
5569
5570       if (CLASSTYPE_TEMPLATE_INFO (type))
5571         {
5572           template = CLASSTYPE_TI_TEMPLATE (type);
5573           d1 = DECL_NAME (template);
5574         }
5575     }
5576   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5577            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5578     {
5579       template = TYPE_TI_TEMPLATE (d1);
5580       d1 = DECL_NAME (template);
5581     }
5582   else if (TREE_CODE (d1) == TEMPLATE_DECL
5583            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5584     {
5585       template = d1;
5586       d1 = DECL_NAME (template);
5587       context = DECL_CONTEXT (template);
5588     }
5589
5590   /* Issue an error message if we didn't find a template.  */
5591   if (! template)
5592     {
5593       if (complain & tf_error)
5594         error ("%qT is not a template", d1);
5595       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5596     }
5597
5598   if (TREE_CODE (template) != TEMPLATE_DECL
5599          /* Make sure it's a user visible template, if it was named by
5600             the user.  */
5601       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5602           && !PRIMARY_TEMPLATE_P (template)))
5603     {
5604       if (complain & tf_error)
5605         {
5606           error ("non-template type %qT used as a template", d1);
5607           if (in_decl)
5608             error ("for template declaration %q+D", in_decl);
5609         }
5610       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5611     }
5612
5613   complain &= ~tf_user;
5614
5615   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5616     {
5617       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5618          template arguments */
5619
5620       tree parm;
5621       tree arglist2;
5622       tree outer;
5623
5624       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5625
5626       /* Consider an example where a template template parameter declared as
5627
5628            template <class T, class U = std::allocator<T> > class TT
5629
5630          The template parameter level of T and U are one level larger than
5631          of TT.  To proper process the default argument of U, say when an
5632          instantiation `TT<int>' is seen, we need to build the full
5633          arguments containing {int} as the innermost level.  Outer levels,
5634          available when not appearing as default template argument, can be
5635          obtained from the arguments of the enclosing template.
5636
5637          Suppose that TT is later substituted with std::vector.  The above
5638          instantiation is `TT<int, std::allocator<T> >' with TT at
5639          level 1, and T at level 2, while the template arguments at level 1
5640          becomes {std::vector} and the inner level 2 is {int}.  */
5641
5642       outer = DECL_CONTEXT (template);
5643       if (outer)
5644         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5645       else if (current_template_parms)
5646         /* This is an argument of the current template, so we haven't set
5647            DECL_CONTEXT yet.  */
5648         outer = current_template_args ();
5649
5650       if (outer)
5651         arglist = add_to_template_args (outer, arglist);
5652
5653       arglist2 = coerce_template_parms (parmlist, arglist, template,
5654                                         complain,
5655                                         /*require_all_args=*/true,
5656                                         /*use_default_args=*/true);
5657       if (arglist2 == error_mark_node
5658           || (!uses_template_parms (arglist2)
5659               && check_instantiated_args (template, arglist2, complain)))
5660         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5661
5662       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5663       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5664     }
5665   else
5666     {
5667       tree template_type = TREE_TYPE (template);
5668       tree gen_tmpl;
5669       tree type_decl;
5670       tree found = NULL_TREE;
5671       int arg_depth;
5672       int parm_depth;
5673       int is_partial_instantiation;
5674
5675       gen_tmpl = most_general_template (template);
5676       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5677       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5678       arg_depth = TMPL_ARGS_DEPTH (arglist);
5679
5680       if (arg_depth == 1 && parm_depth > 1)
5681         {
5682           /* We've been given an incomplete set of template arguments.
5683              For example, given:
5684
5685                template <class T> struct S1 {
5686                  template <class U> struct S2 {};
5687                  template <class U> struct S2<U*> {};
5688                 };
5689
5690              we will be called with an ARGLIST of `U*', but the
5691              TEMPLATE will be `template <class T> template
5692              <class U> struct S1<T>::S2'.  We must fill in the missing
5693              arguments.  */
5694           arglist
5695             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5696                                            arglist);
5697           arg_depth = TMPL_ARGS_DEPTH (arglist);
5698         }
5699
5700       /* Now we should have enough arguments.  */
5701       gcc_assert (parm_depth == arg_depth);
5702
5703       /* From here on, we're only interested in the most general
5704          template.  */
5705       template = gen_tmpl;
5706
5707       /* Calculate the BOUND_ARGS.  These will be the args that are
5708          actually tsubst'd into the definition to create the
5709          instantiation.  */
5710       if (parm_depth > 1)
5711         {
5712           /* We have multiple levels of arguments to coerce, at once.  */
5713           int i;
5714           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5715
5716           tree bound_args = make_tree_vec (parm_depth);
5717
5718           for (i = saved_depth,
5719                  t = DECL_TEMPLATE_PARMS (template);
5720                i > 0 && t != NULL_TREE;
5721                --i, t = TREE_CHAIN (t))
5722             {
5723               tree a = coerce_template_parms (TREE_VALUE (t),
5724                                               arglist, template,
5725                                               complain,
5726                                               /*require_all_args=*/true,
5727                                               /*use_default_args=*/true);
5728
5729               /* Don't process further if one of the levels fails.  */
5730               if (a == error_mark_node)
5731                 {
5732                   /* Restore the ARGLIST to its full size.  */
5733                   TREE_VEC_LENGTH (arglist) = saved_depth;
5734                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5735                 }
5736
5737               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5738
5739               /* We temporarily reduce the length of the ARGLIST so
5740                  that coerce_template_parms will see only the arguments
5741                  corresponding to the template parameters it is
5742                  examining.  */
5743               TREE_VEC_LENGTH (arglist)--;
5744             }
5745
5746           /* Restore the ARGLIST to its full size.  */
5747           TREE_VEC_LENGTH (arglist) = saved_depth;
5748
5749           arglist = bound_args;
5750         }
5751       else
5752         arglist
5753           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5754                                    INNERMOST_TEMPLATE_ARGS (arglist),
5755                                    template,
5756                                    complain,
5757                                    /*require_all_args=*/true,
5758                                    /*use_default_args=*/true);
5759
5760       if (arglist == error_mark_node)
5761         /* We were unable to bind the arguments.  */
5762         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5763
5764       /* In the scope of a template class, explicit references to the
5765          template class refer to the type of the template, not any
5766          instantiation of it.  For example, in:
5767
5768            template <class T> class C { void f(C<T>); }
5769
5770          the `C<T>' is just the same as `C'.  Outside of the
5771          class, however, such a reference is an instantiation.  */
5772       if (comp_template_args (TYPE_TI_ARGS (template_type),
5773                               arglist))
5774         {
5775           found = template_type;
5776
5777           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5778             {
5779               tree ctx;
5780
5781               for (ctx = current_class_type;
5782                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5783                    ctx = (TYPE_P (ctx)
5784                           ? TYPE_CONTEXT (ctx)
5785                           : DECL_CONTEXT (ctx)))
5786                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5787                   goto found_ctx;
5788
5789               /* We're not in the scope of the class, so the
5790                  TEMPLATE_TYPE is not the type we want after all.  */
5791               found = NULL_TREE;
5792             found_ctx:;
5793             }
5794         }
5795       if (found)
5796         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5797
5798       /* If we already have this specialization, return it.  */
5799       found = retrieve_specialization (template, arglist,
5800                                        /*class_specializations_p=*/false);
5801       if (found)
5802         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5803
5804       /* This type is a "partial instantiation" if any of the template
5805          arguments still involve template parameters.  Note that we set
5806          IS_PARTIAL_INSTANTIATION for partial specializations as
5807          well.  */
5808       is_partial_instantiation = uses_template_parms (arglist);
5809
5810       /* If the deduced arguments are invalid, then the binding
5811          failed.  */
5812       if (!is_partial_instantiation
5813           && check_instantiated_args (template,
5814                                       INNERMOST_TEMPLATE_ARGS (arglist),
5815                                       complain))
5816         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5817
5818       if (!is_partial_instantiation
5819           && !PRIMARY_TEMPLATE_P (template)
5820           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5821         {
5822           found = xref_tag_from_type (TREE_TYPE (template),
5823                                       DECL_NAME (template),
5824                                       /*tag_scope=*/ts_global);
5825           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5826         }
5827
5828       context = tsubst (DECL_CONTEXT (template), arglist,
5829                         complain, in_decl);
5830       if (!context)
5831         context = global_namespace;
5832
5833       /* Create the type.  */
5834       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5835         {
5836           if (!is_partial_instantiation)
5837             {
5838               set_current_access_from_decl (TYPE_NAME (template_type));
5839               t = start_enum (TYPE_IDENTIFIER (template_type));
5840             }
5841           else
5842             /* We don't want to call start_enum for this type, since
5843                the values for the enumeration constants may involve
5844                template parameters.  And, no one should be interested
5845                in the enumeration constants for such a type.  */
5846             t = make_node (ENUMERAL_TYPE);
5847         }
5848       else
5849         {
5850           t = make_class_type (TREE_CODE (template_type));
5851           CLASSTYPE_DECLARED_CLASS (t)
5852             = CLASSTYPE_DECLARED_CLASS (template_type);
5853           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5854           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5855
5856           /* A local class.  Make sure the decl gets registered properly.  */
5857           if (context == current_function_decl)
5858             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5859
5860           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5861             /* This instantiation is another name for the primary
5862                template type. Set the TYPE_CANONICAL field
5863                appropriately. */
5864             TYPE_CANONICAL (t) = template_type;
5865           else if (any_template_arguments_need_structural_equality_p (arglist))
5866             /* Some of the template arguments require structural
5867                equality testing, so this template class requires
5868                structural equality testing. */
5869             SET_TYPE_STRUCTURAL_EQUALITY (t);
5870         }
5871
5872       /* If we called start_enum or pushtag above, this information
5873          will already be set up.  */
5874       if (!TYPE_NAME (t))
5875         {
5876           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5877
5878           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5879           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5880           TYPE_STUB_DECL (t) = type_decl;
5881           DECL_SOURCE_LOCATION (type_decl)
5882             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5883         }
5884       else
5885         type_decl = TYPE_NAME (t);
5886
5887       TREE_PRIVATE (type_decl)
5888         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5889       TREE_PROTECTED (type_decl)
5890         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5891       DECL_IN_SYSTEM_HEADER (type_decl)
5892         = DECL_IN_SYSTEM_HEADER (template);
5893       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5894         {
5895           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5896           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5897         }
5898
5899       /* Set up the template information.  We have to figure out which
5900          template is the immediate parent if this is a full
5901          instantiation.  */
5902       if (parm_depth == 1 || is_partial_instantiation
5903           || !PRIMARY_TEMPLATE_P (template))
5904         /* This case is easy; there are no member templates involved.  */
5905         found = template;
5906       else
5907         {
5908           /* This is a full instantiation of a member template.  Look
5909              for a partial instantiation of which this is an instance.  */
5910
5911           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5912                found; found = TREE_CHAIN (found))
5913             {
5914               int success;
5915               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5916
5917               /* We only want partial instantiations, here, not
5918                  specializations or full instantiations.  */
5919               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5920                   || !uses_template_parms (TREE_VALUE (found)))
5921                 continue;
5922
5923               /* Temporarily reduce by one the number of levels in the
5924                  ARGLIST and in FOUND so as to avoid comparing the
5925                  last set of arguments.  */
5926               TREE_VEC_LENGTH (arglist)--;
5927               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5928
5929               /* See if the arguments match.  If they do, then TMPL is
5930                  the partial instantiation we want.  */
5931               success = comp_template_args (TREE_PURPOSE (found), arglist);
5932
5933               /* Restore the argument vectors to their full size.  */
5934               TREE_VEC_LENGTH (arglist)++;
5935               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5936
5937               if (success)
5938                 {
5939                   found = tmpl;
5940                   break;
5941                 }
5942             }
5943
5944           if (!found)
5945             {
5946               /* There was no partial instantiation. This happens
5947                  where C<T> is a member template of A<T> and it's used
5948                  in something like
5949
5950                   template <typename T> struct B { A<T>::C<int> m; };
5951                   B<float>;
5952
5953                  Create the partial instantiation.
5954                */
5955               TREE_VEC_LENGTH (arglist)--;
5956               found = tsubst (template, arglist, complain, NULL_TREE);
5957               TREE_VEC_LENGTH (arglist)++;
5958             }
5959         }
5960
5961       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5962       DECL_TEMPLATE_INSTANTIATIONS (template)
5963         = tree_cons (arglist, t,
5964                      DECL_TEMPLATE_INSTANTIATIONS (template));
5965
5966       if (TREE_CODE (t) == ENUMERAL_TYPE
5967           && !is_partial_instantiation)
5968         /* Now that the type has been registered on the instantiations
5969            list, we set up the enumerators.  Because the enumeration
5970            constants may involve the enumeration type itself, we make
5971            sure to register the type first, and then create the
5972            constants.  That way, doing tsubst_expr for the enumeration
5973            constants won't result in recursive calls here; we'll find
5974            the instantiation and exit above.  */
5975         tsubst_enum (template_type, t, arglist);
5976
5977       if (is_partial_instantiation)
5978         /* If the type makes use of template parameters, the
5979            code that generates debugging information will crash.  */
5980         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5981
5982       /* Possibly limit visibility based on template args.  */
5983       TREE_PUBLIC (type_decl) = 1;
5984       determine_visibility (type_decl);
5985
5986       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5987     }
5988   timevar_pop (TV_NAME_LOOKUP);
5989 }
5990 \f
5991 struct pair_fn_data
5992 {
5993   tree_fn_t fn;
5994   void *data;
5995   /* True when we should also visit template parameters that occur in
5996      non-deduced contexts.  */
5997   bool include_nondeduced_p;
5998   struct pointer_set_t *visited;
5999 };
6000
6001 /* Called from for_each_template_parm via walk_tree.  */
6002
6003 static tree
6004 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6005 {
6006   tree t = *tp;
6007   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6008   tree_fn_t fn = pfd->fn;
6009   void *data = pfd->data;
6010
6011   if (TYPE_P (t)
6012       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6013       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6014                                  pfd->include_nondeduced_p))
6015     return error_mark_node;
6016
6017   switch (TREE_CODE (t))
6018     {
6019     case RECORD_TYPE:
6020       if (TYPE_PTRMEMFUNC_P (t))
6021         break;
6022       /* Fall through.  */
6023
6024     case UNION_TYPE:
6025     case ENUMERAL_TYPE:
6026       if (!TYPE_TEMPLATE_INFO (t))
6027         *walk_subtrees = 0;
6028       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6029                                        fn, data, pfd->visited, 
6030                                        pfd->include_nondeduced_p))
6031         return error_mark_node;
6032       break;
6033
6034     case INTEGER_TYPE:
6035       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6036                                   fn, data, pfd->visited, 
6037                                   pfd->include_nondeduced_p)
6038           || for_each_template_parm (TYPE_MAX_VALUE (t),
6039                                      fn, data, pfd->visited,
6040                                      pfd->include_nondeduced_p))
6041         return error_mark_node;
6042       break;
6043
6044     case METHOD_TYPE:
6045       /* Since we're not going to walk subtrees, we have to do this
6046          explicitly here.  */
6047       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6048                                   pfd->visited, pfd->include_nondeduced_p))
6049         return error_mark_node;
6050       /* Fall through.  */
6051
6052     case FUNCTION_TYPE:
6053       /* Check the return type.  */
6054       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6055                                   pfd->include_nondeduced_p))
6056         return error_mark_node;
6057
6058       /* Check the parameter types.  Since default arguments are not
6059          instantiated until they are needed, the TYPE_ARG_TYPES may
6060          contain expressions that involve template parameters.  But,
6061          no-one should be looking at them yet.  And, once they're
6062          instantiated, they don't contain template parameters, so
6063          there's no point in looking at them then, either.  */
6064       {
6065         tree parm;
6066
6067         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6068           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6069                                       pfd->visited, pfd->include_nondeduced_p))
6070             return error_mark_node;
6071
6072         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6073            want walk_tree walking into them itself.  */
6074         *walk_subtrees = 0;
6075       }
6076       break;
6077
6078     case TYPEOF_TYPE:
6079       if (pfd->include_nondeduced_p
6080           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6081                                      pfd->visited, 
6082                                      pfd->include_nondeduced_p))
6083         return error_mark_node;
6084       break;
6085
6086     case FUNCTION_DECL:
6087     case VAR_DECL:
6088       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6089           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6090                                      pfd->visited, pfd->include_nondeduced_p))
6091         return error_mark_node;
6092       /* Fall through.  */
6093
6094     case PARM_DECL:
6095     case CONST_DECL:
6096       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6097           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6098                                      pfd->visited, pfd->include_nondeduced_p))
6099         return error_mark_node;
6100       if (DECL_CONTEXT (t)
6101           && pfd->include_nondeduced_p
6102           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6103                                      pfd->visited, pfd->include_nondeduced_p))
6104         return error_mark_node;
6105       break;
6106
6107     case BOUND_TEMPLATE_TEMPLATE_PARM:
6108       /* Record template parameters such as `T' inside `TT<T>'.  */
6109       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6110                                   pfd->include_nondeduced_p))
6111         return error_mark_node;
6112       /* Fall through.  */
6113
6114     case TEMPLATE_TEMPLATE_PARM:
6115     case TEMPLATE_TYPE_PARM:
6116     case TEMPLATE_PARM_INDEX:
6117       if (fn && (*fn)(t, data))
6118         return error_mark_node;
6119       else if (!fn)
6120         return error_mark_node;
6121       break;
6122
6123     case TEMPLATE_DECL:
6124       /* A template template parameter is encountered.  */
6125       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6126           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6127                                      pfd->include_nondeduced_p))
6128         return error_mark_node;
6129
6130       /* Already substituted template template parameter */
6131       *walk_subtrees = 0;
6132       break;
6133
6134     case TYPENAME_TYPE:
6135       if (!fn
6136           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6137                                      data, pfd->visited, 
6138                                      pfd->include_nondeduced_p))
6139         return error_mark_node;
6140       break;
6141
6142     case CONSTRUCTOR:
6143       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6144           && pfd->include_nondeduced_p
6145           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6146                                      (TREE_TYPE (t)), fn, data,
6147                                      pfd->visited, pfd->include_nondeduced_p))
6148         return error_mark_node;
6149       break;
6150
6151     case INDIRECT_REF:
6152     case COMPONENT_REF:
6153       /* If there's no type, then this thing must be some expression
6154          involving template parameters.  */
6155       if (!fn && !TREE_TYPE (t))
6156         return error_mark_node;
6157       break;
6158
6159     case MODOP_EXPR:
6160     case CAST_EXPR:
6161     case REINTERPRET_CAST_EXPR:
6162     case CONST_CAST_EXPR:
6163     case STATIC_CAST_EXPR:
6164     case DYNAMIC_CAST_EXPR:
6165     case ARROW_EXPR:
6166     case DOTSTAR_EXPR:
6167     case TYPEID_EXPR:
6168     case PSEUDO_DTOR_EXPR:
6169       if (!fn)
6170         return error_mark_node;
6171       break;
6172
6173     default:
6174       break;
6175     }
6176
6177   /* We didn't find any template parameters we liked.  */
6178   return NULL_TREE;
6179 }
6180
6181 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6182    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6183    call FN with the parameter and the DATA.
6184    If FN returns nonzero, the iteration is terminated, and
6185    for_each_template_parm returns 1.  Otherwise, the iteration
6186    continues.  If FN never returns a nonzero value, the value
6187    returned by for_each_template_parm is 0.  If FN is NULL, it is
6188    considered to be the function which always returns 1.
6189
6190    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6191    parameters that occur in non-deduced contexts.  When false, only
6192    visits those template parameters that can be deduced.  */
6193
6194 static int
6195 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6196                         struct pointer_set_t *visited,
6197                         bool include_nondeduced_p)
6198 {
6199   struct pair_fn_data pfd;
6200   int result;
6201
6202   /* Set up.  */
6203   pfd.fn = fn;
6204   pfd.data = data;
6205   pfd.include_nondeduced_p = include_nondeduced_p;
6206
6207   /* Walk the tree.  (Conceptually, we would like to walk without
6208      duplicates, but for_each_template_parm_r recursively calls
6209      for_each_template_parm, so we would need to reorganize a fair
6210      bit to use walk_tree_without_duplicates, so we keep our own
6211      visited list.)  */
6212   if (visited)
6213     pfd.visited = visited;
6214   else
6215     pfd.visited = pointer_set_create ();
6216   result = cp_walk_tree (&t,
6217                          for_each_template_parm_r,
6218                          &pfd,
6219                          pfd.visited) != NULL_TREE;
6220
6221   /* Clean up.  */
6222   if (!visited)
6223     {
6224       pointer_set_destroy (pfd.visited);
6225       pfd.visited = 0;
6226     }
6227
6228   return result;
6229 }
6230
6231 /* Returns true if T depends on any template parameter.  */
6232
6233 int
6234 uses_template_parms (tree t)
6235 {
6236   bool dependent_p;
6237   int saved_processing_template_decl;
6238
6239   saved_processing_template_decl = processing_template_decl;
6240   if (!saved_processing_template_decl)
6241     processing_template_decl = 1;
6242   if (TYPE_P (t))
6243     dependent_p = dependent_type_p (t);
6244   else if (TREE_CODE (t) == TREE_VEC)
6245     dependent_p = any_dependent_template_arguments_p (t);
6246   else if (TREE_CODE (t) == TREE_LIST)
6247     dependent_p = (uses_template_parms (TREE_VALUE (t))
6248                    || uses_template_parms (TREE_CHAIN (t)));
6249   else if (TREE_CODE (t) == TYPE_DECL)
6250     dependent_p = dependent_type_p (TREE_TYPE (t));
6251   else if (DECL_P (t)
6252            || EXPR_P (t)
6253            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6254            || TREE_CODE (t) == OVERLOAD
6255            || TREE_CODE (t) == BASELINK
6256            || TREE_CODE (t) == IDENTIFIER_NODE
6257            || TREE_CODE (t) == TRAIT_EXPR
6258            || CONSTANT_CLASS_P (t))
6259     dependent_p = (type_dependent_expression_p (t)
6260                    || value_dependent_expression_p (t));
6261   else
6262     {
6263       gcc_assert (t == error_mark_node);
6264       dependent_p = false;
6265     }
6266
6267   processing_template_decl = saved_processing_template_decl;
6268
6269   return dependent_p;
6270 }
6271
6272 /* Returns true if T depends on any template parameter with level LEVEL.  */
6273
6274 int
6275 uses_template_parms_level (tree t, int level)
6276 {
6277   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6278                                  /*include_nondeduced_p=*/true);
6279 }
6280
6281 static int tinst_depth;
6282 extern int max_tinst_depth;
6283 #ifdef GATHER_STATISTICS
6284 int depth_reached;
6285 #endif
6286 static int tinst_level_tick;
6287 static int last_template_error_tick;
6288
6289 /* We're starting to instantiate D; record the template instantiation context
6290    for diagnostics and to restore it later.  */
6291
6292 static int
6293 push_tinst_level (tree d)
6294 {
6295   struct tinst_level *new;
6296
6297   if (tinst_depth >= max_tinst_depth)
6298     {
6299       /* If the instantiation in question still has unbound template parms,
6300          we don't really care if we can't instantiate it, so just return.
6301          This happens with base instantiation for implicit `typename'.  */
6302       if (uses_template_parms (d))
6303         return 0;
6304
6305       last_template_error_tick = tinst_level_tick;
6306       error ("template instantiation depth exceeds maximum of %d (use "
6307              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6308              max_tinst_depth, d);
6309
6310       print_instantiation_context ();
6311
6312       return 0;
6313     }
6314
6315   new = GGC_NEW (struct tinst_level);
6316   new->decl = d;
6317   new->locus = input_location;
6318   new->in_system_header_p = in_system_header;
6319   new->next = current_tinst_level;
6320   current_tinst_level = new;
6321
6322   ++tinst_depth;
6323 #ifdef GATHER_STATISTICS
6324   if (tinst_depth > depth_reached)
6325     depth_reached = tinst_depth;
6326 #endif
6327
6328   ++tinst_level_tick;
6329   return 1;
6330 }
6331
6332 /* We're done instantiating this template; return to the instantiation
6333    context.  */
6334
6335 static void
6336 pop_tinst_level (void)
6337 {
6338   /* Restore the filename and line number stashed away when we started
6339      this instantiation.  */
6340   input_location = current_tinst_level->locus;
6341   in_system_header = current_tinst_level->in_system_header_p;
6342   current_tinst_level = current_tinst_level->next;
6343   --tinst_depth;
6344   ++tinst_level_tick;
6345 }
6346
6347 /* We're instantiating a deferred template; restore the template
6348    instantiation context in which the instantiation was requested, which
6349    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6350
6351 static tree
6352 reopen_tinst_level (struct tinst_level *level)
6353 {
6354   struct tinst_level *t;
6355
6356   tinst_depth = 0;
6357   for (t = level; t; t = t->next)
6358     ++tinst_depth;
6359
6360   current_tinst_level = level;
6361   pop_tinst_level ();
6362   return level->decl;
6363 }
6364
6365 /* Returns the TINST_LEVEL which gives the original instantiation
6366    context.  */
6367
6368 struct tinst_level *
6369 outermost_tinst_level (void)
6370 {
6371   struct tinst_level *level = current_tinst_level;
6372   if (level)
6373     while (level->next)
6374       level = level->next;
6375   return level;
6376 }
6377
6378 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6379    vector of template arguments, as for tsubst.
6380
6381    Returns an appropriate tsubst'd friend declaration.  */
6382
6383 static tree
6384 tsubst_friend_function (tree decl, tree args)
6385 {
6386   tree new_friend;
6387
6388   if (TREE_CODE (decl) == FUNCTION_DECL
6389       && DECL_TEMPLATE_INSTANTIATION (decl)
6390       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6391     /* This was a friend declared with an explicit template
6392        argument list, e.g.:
6393
6394        friend void f<>(T);
6395
6396        to indicate that f was a template instantiation, not a new
6397        function declaration.  Now, we have to figure out what
6398        instantiation of what template.  */
6399     {
6400       tree template_id, arglist, fns;
6401       tree new_args;
6402       tree tmpl;
6403       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6404
6405       /* Friend functions are looked up in the containing namespace scope.
6406          We must enter that scope, to avoid finding member functions of the
6407          current cless with same name.  */
6408       push_nested_namespace (ns);
6409       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6410                          tf_warning_or_error, NULL_TREE,
6411                          /*integral_constant_expression_p=*/false);
6412       pop_nested_namespace (ns);
6413       arglist = tsubst (DECL_TI_ARGS (decl), args,
6414                         tf_warning_or_error, NULL_TREE);
6415       template_id = lookup_template_function (fns, arglist);
6416
6417       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6418       tmpl = determine_specialization (template_id, new_friend,
6419                                        &new_args,
6420                                        /*need_member_template=*/0,
6421                                        TREE_VEC_LENGTH (args),
6422                                        tsk_none);
6423       return instantiate_template (tmpl, new_args, tf_error);
6424     }
6425
6426   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6427
6428   /* The NEW_FRIEND will look like an instantiation, to the
6429      compiler, but is not an instantiation from the point of view of
6430      the language.  For example, we might have had:
6431
6432      template <class T> struct S {
6433        template <class U> friend void f(T, U);
6434      };
6435
6436      Then, in S<int>, template <class U> void f(int, U) is not an
6437      instantiation of anything.  */
6438   if (new_friend == error_mark_node)
6439     return error_mark_node;
6440
6441   DECL_USE_TEMPLATE (new_friend) = 0;
6442   if (TREE_CODE (decl) == TEMPLATE_DECL)
6443     {
6444       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6445       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6446         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6447     }
6448
6449   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6450      is not a template instantiation and should not be mangled like
6451      one.  Therefore, we forget the mangling here; we'll recompute it
6452      later if we need it.  */
6453   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6454     {
6455       SET_DECL_RTL (new_friend, NULL_RTX);
6456       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6457     }
6458
6459   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6460     {
6461       tree old_decl;
6462       tree new_friend_template_info;
6463       tree new_friend_result_template_info;
6464       tree ns;
6465       int  new_friend_is_defn;
6466
6467       /* We must save some information from NEW_FRIEND before calling
6468          duplicate decls since that function will free NEW_FRIEND if
6469          possible.  */
6470       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6471       new_friend_is_defn =
6472             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6473                            (template_for_substitution (new_friend)))
6474              != NULL_TREE);
6475       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6476         {
6477           /* This declaration is a `primary' template.  */
6478           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6479
6480           new_friend_result_template_info
6481             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6482         }
6483       else
6484         new_friend_result_template_info = NULL_TREE;
6485
6486       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6487       if (new_friend_is_defn)
6488         DECL_INITIAL (new_friend) = error_mark_node;
6489
6490       /* Inside pushdecl_namespace_level, we will push into the
6491          current namespace. However, the friend function should go
6492          into the namespace of the template.  */
6493       ns = decl_namespace_context (new_friend);
6494       push_nested_namespace (ns);
6495       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6496       pop_nested_namespace (ns);
6497
6498       if (old_decl == error_mark_node)
6499         return error_mark_node;
6500
6501       if (old_decl != new_friend)
6502         {
6503           /* This new friend declaration matched an existing
6504              declaration.  For example, given:
6505
6506                template <class T> void f(T);
6507                template <class U> class C {
6508                  template <class T> friend void f(T) {}
6509                };
6510
6511              the friend declaration actually provides the definition
6512              of `f', once C has been instantiated for some type.  So,
6513              old_decl will be the out-of-class template declaration,
6514              while new_friend is the in-class definition.
6515
6516              But, if `f' was called before this point, the
6517              instantiation of `f' will have DECL_TI_ARGS corresponding
6518              to `T' but not to `U', references to which might appear
6519              in the definition of `f'.  Previously, the most general
6520              template for an instantiation of `f' was the out-of-class
6521              version; now it is the in-class version.  Therefore, we
6522              run through all specialization of `f', adding to their
6523              DECL_TI_ARGS appropriately.  In particular, they need a
6524              new set of outer arguments, corresponding to the
6525              arguments for this class instantiation.
6526
6527              The same situation can arise with something like this:
6528
6529                friend void f(int);
6530                template <class T> class C {
6531                  friend void f(T) {}
6532                };
6533
6534              when `C<int>' is instantiated.  Now, `f(int)' is defined
6535              in the class.  */
6536
6537           if (!new_friend_is_defn)
6538             /* On the other hand, if the in-class declaration does
6539                *not* provide a definition, then we don't want to alter
6540                existing definitions.  We can just leave everything
6541                alone.  */
6542             ;
6543           else
6544             {
6545               /* Overwrite whatever template info was there before, if
6546                  any, with the new template information pertaining to
6547                  the declaration.  */
6548               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6549
6550               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6551                 reregister_specialization (new_friend,
6552                                            most_general_template (old_decl),
6553                                            old_decl);
6554               else
6555                 {
6556                   tree t;
6557                   tree new_friend_args;
6558
6559                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6560                     = new_friend_result_template_info;
6561
6562                   new_friend_args = TI_ARGS (new_friend_template_info);
6563                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6564                        t != NULL_TREE;
6565                        t = TREE_CHAIN (t))
6566                     {
6567                       tree spec = TREE_VALUE (t);
6568
6569                       DECL_TI_ARGS (spec)
6570                         = add_outermost_template_args (new_friend_args,
6571                                                        DECL_TI_ARGS (spec));
6572                     }
6573
6574                   /* Now, since specializations are always supposed to
6575                      hang off of the most general template, we must move
6576                      them.  */
6577                   t = most_general_template (old_decl);
6578                   if (t != old_decl)
6579                     {
6580                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6581                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6582                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6583                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6584                     }
6585                 }
6586             }
6587
6588           /* The information from NEW_FRIEND has been merged into OLD_DECL
6589              by duplicate_decls.  */
6590           new_friend = old_decl;
6591         }
6592     }
6593   else
6594     {
6595       tree context = DECL_CONTEXT (new_friend);
6596       bool dependent_p;
6597
6598       /* In the code
6599            template <class T> class C {
6600              template <class U> friend void C1<U>::f (); // case 1
6601              friend void C2<T>::f ();                    // case 2
6602            };
6603          we only need to make sure CONTEXT is a complete type for
6604          case 2.  To distinguish between the two cases, we note that
6605          CONTEXT of case 1 remains dependent type after tsubst while
6606          this isn't true for case 2.  */
6607       ++processing_template_decl;
6608       dependent_p = dependent_type_p (context);
6609       --processing_template_decl;
6610
6611       if (!dependent_p
6612           && !complete_type_or_else (context, NULL_TREE))
6613         return error_mark_node;
6614
6615       if (COMPLETE_TYPE_P (context))
6616         {
6617           /* Check to see that the declaration is really present, and,
6618              possibly obtain an improved declaration.  */
6619           tree fn = check_classfn (context,
6620                                    new_friend, NULL_TREE);
6621
6622           if (fn)
6623             new_friend = fn;
6624         }
6625     }
6626
6627   return new_friend;
6628 }
6629
6630 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6631    template arguments, as for tsubst.
6632
6633    Returns an appropriate tsubst'd friend type or error_mark_node on
6634    failure.  */
6635
6636 static tree
6637 tsubst_friend_class (tree friend_tmpl, tree args)
6638 {
6639   tree friend_type;
6640   tree tmpl;
6641   tree context;
6642
6643   context = DECL_CONTEXT (friend_tmpl);
6644
6645   if (context)
6646     {
6647       if (TREE_CODE (context) == NAMESPACE_DECL)
6648         push_nested_namespace (context);
6649       else
6650         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6651     }
6652
6653   /* Look for a class template declaration.  We look for hidden names
6654      because two friend declarations of the same template are the
6655      same.  For example, in:
6656
6657        struct A { 
6658          template <typename> friend class F;
6659        };
6660        template <typename> struct B { 
6661          template <typename> friend class F;
6662        };
6663
6664      both F templates are the same.  */
6665   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6666                            /*block_p=*/true, 0, 
6667                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6668
6669   /* But, if we don't find one, it might be because we're in a
6670      situation like this:
6671
6672        template <class T>
6673        struct S {
6674          template <class U>
6675          friend struct S;
6676        };
6677
6678      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6679      for `S<int>', not the TEMPLATE_DECL.  */
6680   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6681     {
6682       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6683       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6684     }
6685
6686   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6687     {
6688       /* The friend template has already been declared.  Just
6689          check to see that the declarations match, and install any new
6690          default parameters.  We must tsubst the default parameters,
6691          of course.  We only need the innermost template parameters
6692          because that is all that redeclare_class_template will look
6693          at.  */
6694       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6695           > TMPL_ARGS_DEPTH (args))
6696         {
6697           tree parms;
6698           location_t saved_input_location;
6699           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6700                                          args, tf_warning_or_error);
6701
6702           saved_input_location = input_location;
6703           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6704           redeclare_class_template (TREE_TYPE (tmpl), parms);
6705           input_location = saved_input_location;
6706           
6707         }
6708
6709       friend_type = TREE_TYPE (tmpl);
6710     }
6711   else
6712     {
6713       /* The friend template has not already been declared.  In this
6714          case, the instantiation of the template class will cause the
6715          injection of this template into the global scope.  */
6716       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6717       if (tmpl == error_mark_node)
6718         return error_mark_node;
6719
6720       /* The new TMPL is not an instantiation of anything, so we
6721          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6722          the new type because that is supposed to be the corresponding
6723          template decl, i.e., TMPL.  */
6724       DECL_USE_TEMPLATE (tmpl) = 0;
6725       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6726       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6727       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6728         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6729
6730       /* Inject this template into the global scope.  */
6731       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6732     }
6733
6734   if (context)
6735     {
6736       if (TREE_CODE (context) == NAMESPACE_DECL)
6737         pop_nested_namespace (context);
6738       else
6739         pop_nested_class ();
6740     }
6741
6742   return friend_type;
6743 }
6744
6745 /* Returns zero if TYPE cannot be completed later due to circularity.
6746    Otherwise returns one.  */
6747
6748 static int
6749 can_complete_type_without_circularity (tree type)
6750 {
6751   if (type == NULL_TREE || type == error_mark_node)
6752     return 0;
6753   else if (COMPLETE_TYPE_P (type))
6754     return 1;
6755   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6756     return can_complete_type_without_circularity (TREE_TYPE (type));
6757   else if (CLASS_TYPE_P (type)
6758            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6759     return 0;
6760   else
6761     return 1;
6762 }
6763
6764 /* Apply any attributes which had to be deferred until instantiation
6765    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6766    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6767
6768 static void
6769 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6770                                 tree args, tsubst_flags_t complain, tree in_decl)
6771 {
6772   tree last_dep = NULL_TREE;
6773   tree t;
6774   tree *p;
6775
6776   for (t = attributes; t; t = TREE_CHAIN (t))
6777     if (ATTR_IS_DEPENDENT (t))
6778       {
6779         last_dep = t;
6780         attributes = copy_list (attributes);
6781         break;
6782       }
6783
6784   if (DECL_P (*decl_p))
6785     {
6786       if (TREE_TYPE (*decl_p) == error_mark_node)
6787         return;
6788       p = &DECL_ATTRIBUTES (*decl_p);
6789     }
6790   else
6791     p = &TYPE_ATTRIBUTES (*decl_p);
6792
6793   if (last_dep)
6794     {
6795       tree late_attrs = NULL_TREE;
6796       tree *q = &late_attrs;
6797
6798       for (*p = attributes; *p; )
6799         {
6800           t = *p;
6801           if (ATTR_IS_DEPENDENT (t))
6802             {
6803               *p = TREE_CHAIN (t);
6804               TREE_CHAIN (t) = NULL_TREE;
6805               /* If the first attribute argument is an identifier, don't
6806                  pass it through tsubst.  Attributes like mode, format,
6807                  cleanup and several target specific attributes expect it
6808                  unmodified.  */
6809               if (TREE_VALUE (t)
6810                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6811                   && TREE_VALUE (TREE_VALUE (t))
6812                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6813                       == IDENTIFIER_NODE))
6814                 {
6815                   tree chain
6816                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6817                                    in_decl,
6818                                    /*integral_constant_expression_p=*/false);
6819                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6820                     TREE_VALUE (t)
6821                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6822                                    chain);
6823                 }
6824               else
6825                 TREE_VALUE (t)
6826                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6827                                  /*integral_constant_expression_p=*/false);
6828               *q = t;
6829               q = &TREE_CHAIN (t);
6830             }
6831           else
6832             p = &TREE_CHAIN (t);
6833         }
6834
6835       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6836     }
6837 }
6838
6839 tree
6840 instantiate_class_template (tree type)
6841 {
6842   tree template, args, pattern, t, member;
6843   tree typedecl;
6844   tree pbinfo;
6845   tree base_list;
6846
6847   if (type == error_mark_node)
6848     return error_mark_node;
6849
6850   if (TYPE_BEING_DEFINED (type)
6851       || COMPLETE_TYPE_P (type)
6852       || dependent_type_p (type))
6853     return type;
6854
6855   /* Figure out which template is being instantiated.  */
6856   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6857   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6858
6859   /* Determine what specialization of the original template to
6860      instantiate.  */
6861   t = most_specialized_class (type, template);
6862   if (t == error_mark_node)
6863     {
6864       TYPE_BEING_DEFINED (type) = 1;
6865       return error_mark_node;
6866     }
6867   else if (t)
6868     {
6869       /* This TYPE is actually an instantiation of a partial
6870          specialization.  We replace the innermost set of ARGS with
6871          the arguments appropriate for substitution.  For example,
6872          given:
6873
6874            template <class T> struct S {};
6875            template <class T> struct S<T*> {};
6876
6877          and supposing that we are instantiating S<int*>, ARGS will
6878          presently be {int*} -- but we need {int}.  */
6879       pattern = TREE_TYPE (t);
6880       args = TREE_PURPOSE (t);
6881     }
6882   else
6883     {
6884       pattern = TREE_TYPE (template);
6885       args = CLASSTYPE_TI_ARGS (type);
6886     }
6887
6888   /* If the template we're instantiating is incomplete, then clearly
6889      there's nothing we can do.  */
6890   if (!COMPLETE_TYPE_P (pattern))
6891     return type;
6892
6893   /* If we've recursively instantiated too many templates, stop.  */
6894   if (! push_tinst_level (type))
6895     return type;
6896
6897   /* Now we're really doing the instantiation.  Mark the type as in
6898      the process of being defined.  */
6899   TYPE_BEING_DEFINED (type) = 1;
6900
6901   /* We may be in the middle of deferred access check.  Disable
6902      it now.  */
6903   push_deferring_access_checks (dk_no_deferred);
6904
6905   push_to_top_level ();
6906
6907   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6908
6909   /* Set the input location to the template definition. This is needed
6910      if tsubsting causes an error.  */
6911   typedecl = TYPE_MAIN_DECL (type);
6912   input_location = DECL_SOURCE_LOCATION (typedecl);
6913   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6914
6915   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6916   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6917   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6918   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6919   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6920   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6921   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6922   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6923   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6924   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6925   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6926   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6927   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6928   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6929   if (ANON_AGGR_TYPE_P (pattern))
6930     SET_ANON_AGGR_TYPE_P (type);
6931   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6932     {
6933       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6934       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6935     }
6936
6937   pbinfo = TYPE_BINFO (pattern);
6938
6939   /* We should never instantiate a nested class before its enclosing
6940      class; we need to look up the nested class by name before we can
6941      instantiate it, and that lookup should instantiate the enclosing
6942      class.  */
6943   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6944               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6945               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6946
6947   base_list = NULL_TREE;
6948   if (BINFO_N_BASE_BINFOS (pbinfo))
6949     {
6950       tree pbase_binfo;
6951       tree context = TYPE_CONTEXT (type);
6952       tree pushed_scope;
6953       int i;
6954
6955       /* We must enter the scope containing the type, as that is where
6956          the accessibility of types named in dependent bases are
6957          looked up from.  */
6958       pushed_scope = push_scope (context ? context : global_namespace);
6959
6960       /* Substitute into each of the bases to determine the actual
6961          basetypes.  */
6962       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6963         {
6964           tree base;
6965           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6966           tree expanded_bases = NULL_TREE;
6967           int idx, len = 1;
6968
6969           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6970             {
6971               expanded_bases = 
6972                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6973                                        args, tf_error, NULL_TREE);
6974               if (expanded_bases == error_mark_node)
6975                 continue;
6976
6977               len = TREE_VEC_LENGTH (expanded_bases);
6978             }
6979
6980           for (idx = 0; idx < len; idx++)
6981             {
6982               if (expanded_bases)
6983                 /* Extract the already-expanded base class.  */
6984                 base = TREE_VEC_ELT (expanded_bases, idx);
6985               else
6986                 /* Substitute to figure out the base class.  */
6987                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6988                                NULL_TREE);
6989
6990               if (base == error_mark_node)
6991                 continue;
6992
6993               base_list = tree_cons (access, base, base_list);
6994               if (BINFO_VIRTUAL_P (pbase_binfo))
6995                 TREE_TYPE (base_list) = integer_type_node;
6996             }
6997         }
6998
6999       /* The list is now in reverse order; correct that.  */
7000       base_list = nreverse (base_list);
7001
7002       if (pushed_scope)
7003         pop_scope (pushed_scope);
7004     }
7005   /* Now call xref_basetypes to set up all the base-class
7006      information.  */
7007   xref_basetypes (type, base_list);
7008
7009   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7010                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7011                                   args, tf_error, NULL_TREE);
7012
7013   /* Now that our base classes are set up, enter the scope of the
7014      class, so that name lookups into base classes, etc. will work
7015      correctly.  This is precisely analogous to what we do in
7016      begin_class_definition when defining an ordinary non-template
7017      class, except we also need to push the enclosing classes.  */
7018   push_nested_class (type);
7019
7020   /* Now members are processed in the order of declaration.  */
7021   for (member = CLASSTYPE_DECL_LIST (pattern);
7022        member; member = TREE_CHAIN (member))
7023     {
7024       tree t = TREE_VALUE (member);
7025
7026       if (TREE_PURPOSE (member))
7027         {
7028           if (TYPE_P (t))
7029             {
7030               /* Build new CLASSTYPE_NESTED_UTDS.  */
7031
7032               tree newtag;
7033               bool class_template_p;
7034
7035               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7036                                   && TYPE_LANG_SPECIFIC (t)
7037                                   && CLASSTYPE_IS_TEMPLATE (t));
7038               /* If the member is a class template, then -- even after
7039                  substitution -- there may be dependent types in the
7040                  template argument list for the class.  We increment
7041                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7042                  that function will assume that no types are dependent
7043                  when outside of a template.  */
7044               if (class_template_p)
7045                 ++processing_template_decl;
7046               newtag = tsubst (t, args, tf_error, NULL_TREE);
7047               if (class_template_p)
7048                 --processing_template_decl;
7049               if (newtag == error_mark_node)
7050                 continue;
7051
7052               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7053                 {
7054                   tree name = TYPE_IDENTIFIER (t);
7055
7056                   if (class_template_p)
7057                     /* Unfortunately, lookup_template_class sets
7058                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7059                        instantiation (i.e., for the type of a member
7060                        template class nested within a template class.)
7061                        This behavior is required for
7062                        maybe_process_partial_specialization to work
7063                        correctly, but is not accurate in this case;
7064                        the TAG is not an instantiation of anything.
7065                        (The corresponding TEMPLATE_DECL is an
7066                        instantiation, but the TYPE is not.) */
7067                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7068
7069                   /* Now, we call pushtag to put this NEWTAG into the scope of
7070                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7071                      pushtag calling push_template_decl.  We don't have to do
7072                      this for enums because it will already have been done in
7073                      tsubst_enum.  */
7074                   if (name)
7075                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7076                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7077                 }
7078             }
7079           else if (TREE_CODE (t) == FUNCTION_DECL
7080                    || DECL_FUNCTION_TEMPLATE_P (t))
7081             {
7082               /* Build new TYPE_METHODS.  */
7083               tree r;
7084
7085               if (TREE_CODE (t) == TEMPLATE_DECL)
7086                 ++processing_template_decl;
7087               r = tsubst (t, args, tf_error, NULL_TREE);
7088               if (TREE_CODE (t) == TEMPLATE_DECL)
7089                 --processing_template_decl;
7090               set_current_access_from_decl (r);
7091               finish_member_declaration (r);
7092             }
7093           else
7094             {
7095               /* Build new TYPE_FIELDS.  */
7096               if (TREE_CODE (t) == STATIC_ASSERT)
7097                 {
7098                   tree condition = 
7099                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7100                                  tf_warning_or_error, NULL_TREE,
7101                                  /*integral_constant_expression_p=*/true);
7102                   finish_static_assert (condition,
7103                                         STATIC_ASSERT_MESSAGE (t), 
7104                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7105                                         /*member_p=*/true);
7106                 }
7107               else if (TREE_CODE (t) != CONST_DECL)
7108                 {
7109                   tree r;
7110
7111                   /* The the file and line for this declaration, to
7112                      assist in error message reporting.  Since we
7113                      called push_tinst_level above, we don't need to
7114                      restore these.  */
7115                   input_location = DECL_SOURCE_LOCATION (t);
7116
7117                   if (TREE_CODE (t) == TEMPLATE_DECL)
7118                     ++processing_template_decl;
7119                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7120                   if (TREE_CODE (t) == TEMPLATE_DECL)
7121                     --processing_template_decl;
7122                   if (TREE_CODE (r) == VAR_DECL)
7123                     {
7124                       /* In [temp.inst]:
7125
7126                            [t]he initialization (and any associated
7127                            side-effects) of a static data member does
7128                            not occur unless the static data member is
7129                            itself used in a way that requires the
7130                            definition of the static data member to
7131                            exist.
7132
7133                          Therefore, we do not substitute into the
7134                          initialized for the static data member here.  */
7135                       finish_static_data_member_decl
7136                         (r,
7137                          /*init=*/NULL_TREE,
7138                          /*init_const_expr_p=*/false,
7139                          /*asmspec_tree=*/NULL_TREE,
7140                          /*flags=*/0);
7141                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7142                         check_static_variable_definition (r, TREE_TYPE (r));
7143                     }
7144                   else if (TREE_CODE (r) == FIELD_DECL)
7145                     {
7146                       /* Determine whether R has a valid type and can be
7147                          completed later.  If R is invalid, then it is
7148                          replaced by error_mark_node so that it will not be
7149                          added to TYPE_FIELDS.  */
7150                       tree rtype = TREE_TYPE (r);
7151                       if (can_complete_type_without_circularity (rtype))
7152                         complete_type (rtype);
7153
7154                       if (!COMPLETE_TYPE_P (rtype))
7155                         {
7156                           cxx_incomplete_type_error (r, rtype);
7157                           r = error_mark_node;
7158                         }
7159                     }
7160
7161                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7162                      such a thing will already have been added to the field
7163                      list by tsubst_enum in finish_member_declaration in the
7164                      CLASSTYPE_NESTED_UTDS case above.  */
7165                   if (!(TREE_CODE (r) == TYPE_DECL
7166                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7167                         && DECL_ARTIFICIAL (r)))
7168                     {
7169                       set_current_access_from_decl (r);
7170                       finish_member_declaration (r);
7171                     }
7172                 }
7173             }
7174         }
7175       else
7176         {
7177           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7178             {
7179               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7180
7181               tree friend_type = t;
7182               bool adjust_processing_template_decl = false;
7183
7184               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7185                 {
7186                   /* template <class T> friend class C;  */
7187                   friend_type = tsubst_friend_class (friend_type, args);
7188                   adjust_processing_template_decl = true;
7189                 }
7190               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7191                 {
7192                   /* template <class T> friend class C::D;  */
7193                   friend_type = tsubst (friend_type, args,
7194                                         tf_warning_or_error, NULL_TREE);
7195                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7196                     friend_type = TREE_TYPE (friend_type);
7197                   adjust_processing_template_decl = true;
7198                 }
7199               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7200                 {
7201                   /* This could be either
7202
7203                        friend class T::C;
7204
7205                      when dependent_type_p is false or
7206
7207                        template <class U> friend class T::C;
7208
7209                      otherwise.  */
7210                   friend_type = tsubst (friend_type, args,
7211                                         tf_warning_or_error, NULL_TREE);
7212                   /* Bump processing_template_decl for correct
7213                      dependent_type_p calculation.  */
7214                   ++processing_template_decl;
7215                   if (dependent_type_p (friend_type))
7216                     adjust_processing_template_decl = true;
7217                   --processing_template_decl;
7218                 }
7219               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7220                        && hidden_name_p (TYPE_NAME (friend_type)))
7221                 {
7222                   /* friend class C;
7223
7224                      where C hasn't been declared yet.  Let's lookup name
7225                      from namespace scope directly, bypassing any name that
7226                      come from dependent base class.  */
7227                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7228
7229                   /* The call to xref_tag_from_type does injection for friend
7230                      classes.  */
7231                   push_nested_namespace (ns);
7232                   friend_type =
7233                     xref_tag_from_type (friend_type, NULL_TREE,
7234                                         /*tag_scope=*/ts_current);
7235                   pop_nested_namespace (ns);
7236                 }
7237               else if (uses_template_parms (friend_type))
7238                 /* friend class C<T>;  */
7239                 friend_type = tsubst (friend_type, args,
7240                                       tf_warning_or_error, NULL_TREE);
7241               /* Otherwise it's
7242
7243                    friend class C;
7244
7245                  where C is already declared or
7246
7247                    friend class C<int>;
7248
7249                  We don't have to do anything in these cases.  */
7250
7251               if (adjust_processing_template_decl)
7252                 /* Trick make_friend_class into realizing that the friend
7253                    we're adding is a template, not an ordinary class.  It's
7254                    important that we use make_friend_class since it will
7255                    perform some error-checking and output cross-reference
7256                    information.  */
7257                 ++processing_template_decl;
7258
7259               if (friend_type != error_mark_node)
7260                 make_friend_class (type, friend_type, /*complain=*/false);
7261
7262               if (adjust_processing_template_decl)
7263                 --processing_template_decl;
7264             }
7265           else
7266             {
7267               /* Build new DECL_FRIENDLIST.  */
7268               tree r;
7269
7270               /* The the file and line for this declaration, to
7271                  assist in error message reporting.  Since we
7272                  called push_tinst_level above, we don't need to
7273                  restore these.  */
7274               input_location = DECL_SOURCE_LOCATION (t);
7275
7276               if (TREE_CODE (t) == TEMPLATE_DECL)
7277                 {
7278                   ++processing_template_decl;
7279                   push_deferring_access_checks (dk_no_check);
7280                 }
7281
7282               r = tsubst_friend_function (t, args);
7283               add_friend (type, r, /*complain=*/false);
7284               if (TREE_CODE (t) == TEMPLATE_DECL)
7285                 {
7286                   pop_deferring_access_checks ();
7287                   --processing_template_decl;
7288                 }
7289             }
7290         }
7291     }
7292
7293   /* Set the file and line number information to whatever is given for
7294      the class itself.  This puts error messages involving generated
7295      implicit functions at a predictable point, and the same point
7296      that would be used for non-template classes.  */
7297   input_location = DECL_SOURCE_LOCATION (typedecl);
7298
7299   unreverse_member_declarations (type);
7300   finish_struct_1 (type);
7301   TYPE_BEING_DEFINED (type) = 0;
7302
7303   /* Now that the class is complete, instantiate default arguments for
7304      any member functions.  We don't do this earlier because the
7305      default arguments may reference members of the class.  */
7306   if (!PRIMARY_TEMPLATE_P (template))
7307     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7308       if (TREE_CODE (t) == FUNCTION_DECL
7309           /* Implicitly generated member functions will not have template
7310              information; they are not instantiations, but instead are
7311              created "fresh" for each instantiation.  */
7312           && DECL_TEMPLATE_INFO (t))
7313         tsubst_default_arguments (t);
7314
7315   pop_nested_class ();
7316   pop_from_top_level ();
7317   pop_deferring_access_checks ();
7318   pop_tinst_level ();
7319
7320   /* The vtable for a template class can be emitted in any translation
7321      unit in which the class is instantiated.  When there is no key
7322      method, however, finish_struct_1 will already have added TYPE to
7323      the keyed_classes list.  */
7324   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7325     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7326
7327   return type;
7328 }
7329
7330 static tree
7331 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7332 {
7333   tree r;
7334
7335   if (!t)
7336     r = t;
7337   else if (TYPE_P (t))
7338     r = tsubst (t, args, complain, in_decl);
7339   else
7340     {
7341       r = tsubst_expr (t, args, complain, in_decl,
7342                        /*integral_constant_expression_p=*/true);
7343       r = fold_non_dependent_expr (r);
7344     }
7345   return r;
7346 }
7347
7348 /* Substitute ARGS into T, which is an pack expansion
7349    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7350    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7351    (if only a partial substitution could be performed) or
7352    ERROR_MARK_NODE if there was an error.  */
7353 tree
7354 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7355                        tree in_decl)
7356 {
7357   tree pattern;
7358   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7359   tree first_arg_pack; int i, len = -1;
7360   tree result;
7361   int incomplete = 0;
7362
7363   gcc_assert (PACK_EXPANSION_P (t));
7364   pattern = PACK_EXPANSION_PATTERN (t);
7365
7366   /* Determine the argument packs that will instantiate the parameter
7367      packs used in the expansion expression. While we're at it,
7368      compute the number of arguments to be expanded and make sure it
7369      is consistent.  */
7370   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7371        pack = TREE_CHAIN (pack))
7372     {
7373       tree parm_pack = TREE_VALUE (pack);
7374       tree arg_pack = NULL_TREE;
7375       tree orig_arg = NULL_TREE;
7376
7377       if (TREE_CODE (parm_pack) == PARM_DECL)
7378         arg_pack = retrieve_local_specialization (parm_pack);
7379       else
7380         {
7381           int level, idx, levels;
7382           template_parm_level_and_index (parm_pack, &level, &idx);
7383
7384           levels = TMPL_ARGS_DEPTH (args);
7385           if (level <= levels)
7386             arg_pack = TMPL_ARG (args, level, idx);
7387         }
7388
7389       orig_arg = arg_pack;
7390       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7391         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7392       
7393       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7394         /* This can only happen if we forget to expand an argument
7395            pack somewhere else. Just return an error, silently.  */
7396         {
7397           result = make_tree_vec (1);
7398           TREE_VEC_ELT (result, 0) = error_mark_node;
7399           return result;
7400         }
7401
7402       if (arg_pack
7403           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7404           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7405         {
7406           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7407           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7408           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7409               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7410             /* The argument pack that the parameter maps to is just an
7411                expansion of the parameter itself, such as one would
7412                find in the implicit typedef of a class inside the
7413                class itself.  Consider this parameter "unsubstituted",
7414                so that we will maintain the outer pack expansion.  */
7415             arg_pack = NULL_TREE;
7416         }
7417           
7418       if (arg_pack)
7419         {
7420           int my_len = 
7421             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7422
7423           /* It's all-or-nothing with incomplete argument packs.  */
7424           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7425             return error_mark_node;
7426           
7427           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7428             incomplete = 1;
7429
7430           if (len < 0)
7431             {
7432               len = my_len;
7433               first_arg_pack = arg_pack;
7434             }
7435           else if (len != my_len)
7436             {
7437               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7438                 error ("mismatched argument pack lengths while expanding "
7439                        "%<%T%>",
7440                        pattern);
7441               else
7442                 error ("mismatched argument pack lengths while expanding "
7443                        "%<%E%>",
7444                        pattern);
7445               return error_mark_node;
7446             }
7447
7448           /* Keep track of the parameter packs and their corresponding
7449              argument packs.  */
7450           packs = tree_cons (parm_pack, arg_pack, packs);
7451           TREE_TYPE (packs) = orig_arg;
7452         }
7453       else
7454         /* We can't substitute for this parameter pack.  */
7455         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7456                                          TREE_VALUE (pack),
7457                                          unsubstituted_packs);
7458     }
7459
7460   /* We cannot expand this expansion expression, because we don't have
7461      all of the argument packs we need. Substitute into the pattern
7462      and return a PACK_EXPANSION_*. The caller will need to deal with
7463      that.  */
7464   if (unsubstituted_packs)
7465     return make_pack_expansion (tsubst (pattern, args, complain, 
7466                                         in_decl));
7467
7468   /* We could not find any argument packs that work.  */
7469   if (len < 0)
7470     return error_mark_node;
7471
7472   /* For each argument in each argument pack, substitute into the
7473      pattern.  */
7474   result = make_tree_vec (len + incomplete);
7475   for (i = 0; i < len + incomplete; ++i)
7476     {
7477       /* For parameter pack, change the substitution of the parameter
7478          pack to the ith argument in its argument pack, then expand
7479          the pattern.  */
7480       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7481         {
7482           tree parm = TREE_PURPOSE (pack);
7483
7484           if (TREE_CODE (parm) == PARM_DECL)
7485             {
7486               /* Select the Ith argument from the pack.  */
7487               tree arg = make_node (ARGUMENT_PACK_SELECT);
7488               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7489               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7490               mark_used (parm);
7491               register_local_specialization (arg, parm);
7492             }
7493           else
7494             {
7495               tree value = parm;
7496               int idx, level;
7497               template_parm_level_and_index (parm, &level, &idx);
7498               
7499               if (i < len) 
7500                 {
7501                   /* Select the Ith argument from the pack. */
7502                   value = make_node (ARGUMENT_PACK_SELECT);
7503                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7504                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7505                 }
7506
7507               /* Update the corresponding argument.  */
7508               TMPL_ARG (args, level, idx) = value;
7509             }
7510         }
7511
7512       /* Substitute into the PATTERN with the altered arguments.  */
7513       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7514         TREE_VEC_ELT (result, i) = 
7515           tsubst_expr (pattern, args, complain, in_decl,
7516                        /*integral_constant_expression_p=*/false);
7517       else
7518         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7519
7520       if (i == len)
7521         /* When we have incomplete argument packs, the last "expanded"
7522            result is itself a pack expansion, which allows us
7523            to deduce more arguments.  */
7524         TREE_VEC_ELT (result, i) = 
7525           make_pack_expansion (TREE_VEC_ELT (result, i));
7526
7527       if (TREE_VEC_ELT (result, i) == error_mark_node)
7528         {
7529           result = error_mark_node;
7530           break;
7531         }
7532     }
7533   
7534   /* Update ARGS to restore the substitution from parameter packs to
7535      their argument packs.  */
7536   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7537     {
7538       tree parm = TREE_PURPOSE (pack);
7539
7540       if (TREE_CODE (parm) == PARM_DECL)
7541         register_local_specialization (TREE_TYPE (pack), parm);
7542       else
7543         {
7544           int idx, level;
7545           template_parm_level_and_index (parm, &level, &idx);
7546           
7547           /* Update the corresponding argument.  */
7548           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7549             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7550               TREE_TYPE (pack);
7551           else
7552             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7553         }
7554     }
7555
7556   return result;
7557 }
7558
7559 /* Substitute ARGS into the vector or list of template arguments T.  */
7560
7561 static tree
7562 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7563 {
7564   tree orig_t = t;
7565   int len = TREE_VEC_LENGTH (t);
7566   int need_new = 0, i, expanded_len_adjust = 0, out;
7567   tree *elts = (tree *) alloca (len * sizeof (tree));
7568
7569   for (i = 0; i < len; i++)
7570     {
7571       tree orig_arg = TREE_VEC_ELT (t, i);
7572       tree new_arg;
7573
7574       if (TREE_CODE (orig_arg) == TREE_VEC)
7575         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7576       else if (PACK_EXPANSION_P (orig_arg))
7577         {
7578           /* Substitute into an expansion expression.  */
7579           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7580
7581           if (TREE_CODE (new_arg) == TREE_VEC)
7582             /* Add to the expanded length adjustment the number of
7583                expanded arguments. We subtract one from this
7584                measurement, because the argument pack expression
7585                itself is already counted as 1 in
7586                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7587                the argument pack is empty.  */
7588             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7589         }
7590       else if (ARGUMENT_PACK_P (orig_arg))
7591         {
7592           /* Substitute into each of the arguments.  */
7593           new_arg = make_node (TREE_CODE (orig_arg));
7594           
7595           SET_ARGUMENT_PACK_ARGS (
7596             new_arg,
7597             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7598                                   args, complain, in_decl));
7599
7600           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7601             new_arg = error_mark_node;
7602
7603           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7604             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7605                                           complain, in_decl);
7606             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7607
7608             if (TREE_TYPE (new_arg) == error_mark_node)
7609               new_arg = error_mark_node;
7610           }
7611         }
7612       else
7613         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7614
7615       if (new_arg == error_mark_node)
7616         return error_mark_node;
7617
7618       elts[i] = new_arg;
7619       if (new_arg != orig_arg)
7620         need_new = 1;
7621     }
7622
7623   if (!need_new)
7624     return t;
7625
7626   /* Make space for the expanded arguments coming from template
7627      argument packs.  */
7628   t = make_tree_vec (len + expanded_len_adjust);
7629   for (i = 0, out = 0; i < len; i++)
7630     {
7631       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7632            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7633           && TREE_CODE (elts[i]) == TREE_VEC)
7634         {
7635           int idx;
7636
7637           /* Now expand the template argument pack "in place".  */
7638           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7639             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7640         }
7641       else
7642         {
7643           TREE_VEC_ELT (t, out) = elts[i];
7644           out++;
7645         }
7646     }
7647
7648   return t;
7649 }
7650
7651 /* Return the result of substituting ARGS into the template parameters
7652    given by PARMS.  If there are m levels of ARGS and m + n levels of
7653    PARMS, then the result will contain n levels of PARMS.  For
7654    example, if PARMS is `template <class T> template <class U>
7655    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7656    result will be `template <int*, double, class V>'.  */
7657
7658 static tree
7659 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7660 {
7661   tree r = NULL_TREE;
7662   tree* new_parms;
7663
7664   /* When substituting into a template, we must set
7665      PROCESSING_TEMPLATE_DECL as the template parameters may be
7666      dependent if they are based on one-another, and the dependency
7667      predicates are short-circuit outside of templates.  */
7668   ++processing_template_decl;
7669
7670   for (new_parms = &r;
7671        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7672        new_parms = &(TREE_CHAIN (*new_parms)),
7673          parms = TREE_CHAIN (parms))
7674     {
7675       tree new_vec =
7676         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7677       int i;
7678
7679       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7680         {
7681           tree tuple;
7682           tree default_value;
7683           tree parm_decl;
7684
7685           if (parms == error_mark_node)
7686             continue;
7687
7688           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7689
7690           if (tuple == error_mark_node)
7691             continue;
7692
7693           default_value = TREE_PURPOSE (tuple);
7694           parm_decl = TREE_VALUE (tuple);
7695
7696           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7697           if (TREE_CODE (parm_decl) == PARM_DECL
7698               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7699             parm_decl = error_mark_node;
7700           default_value = tsubst_template_arg (default_value, args,
7701                                                complain, NULL_TREE);
7702
7703           tuple = build_tree_list (default_value, parm_decl);
7704           TREE_VEC_ELT (new_vec, i) = tuple;
7705         }
7706
7707       *new_parms =
7708         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7709                              - TMPL_ARGS_DEPTH (args)),
7710                    new_vec, NULL_TREE);
7711     }
7712
7713   --processing_template_decl;
7714
7715   return r;
7716 }
7717
7718 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7719    type T.  If T is not an aggregate or enumeration type, it is
7720    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7721    ENTERING_SCOPE is nonzero, T is the context for a template which
7722    we are presently tsubst'ing.  Return the substituted value.  */
7723
7724 static tree
7725 tsubst_aggr_type (tree t,
7726                   tree args,
7727                   tsubst_flags_t complain,
7728                   tree in_decl,
7729                   int entering_scope)
7730 {
7731   if (t == NULL_TREE)
7732     return NULL_TREE;
7733
7734   switch (TREE_CODE (t))
7735     {
7736     case RECORD_TYPE:
7737       if (TYPE_PTRMEMFUNC_P (t))
7738         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7739
7740       /* Else fall through.  */
7741     case ENUMERAL_TYPE:
7742     case UNION_TYPE:
7743       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7744         {
7745           tree argvec;
7746           tree context;
7747           tree r;
7748           bool saved_skip_evaluation;
7749
7750           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7751           saved_skip_evaluation = skip_evaluation;
7752           skip_evaluation = false;
7753
7754           /* First, determine the context for the type we are looking
7755              up.  */
7756           context = TYPE_CONTEXT (t);
7757           if (context)
7758             {
7759               context = tsubst_aggr_type (context, args, complain,
7760                                           in_decl, /*entering_scope=*/1);
7761               /* If context is a nested class inside a class template,
7762                  it may still need to be instantiated (c++/33959).  */
7763               if (TYPE_P (context))
7764                 context = complete_type (context);
7765             }
7766
7767           /* Then, figure out what arguments are appropriate for the
7768              type we are trying to find.  For example, given:
7769
7770                template <class T> struct S;
7771                template <class T, class U> void f(T, U) { S<U> su; }
7772
7773              and supposing that we are instantiating f<int, double>,
7774              then our ARGS will be {int, double}, but, when looking up
7775              S we only want {double}.  */
7776           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7777                                          complain, in_decl);
7778           if (argvec == error_mark_node)
7779             r = error_mark_node;
7780           else
7781             {
7782               r = lookup_template_class (t, argvec, in_decl, context,
7783                                          entering_scope, complain);
7784               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7785             }
7786
7787           skip_evaluation = saved_skip_evaluation;
7788
7789           return r;
7790         }
7791       else
7792         /* This is not a template type, so there's nothing to do.  */
7793         return t;
7794
7795     default:
7796       return tsubst (t, args, complain, in_decl);
7797     }
7798 }
7799
7800 /* Substitute into the default argument ARG (a default argument for
7801    FN), which has the indicated TYPE.  */
7802
7803 tree
7804 tsubst_default_argument (tree fn, tree type, tree arg)
7805 {
7806   tree saved_class_ptr = NULL_TREE;
7807   tree saved_class_ref = NULL_TREE;
7808
7809   /* This default argument came from a template.  Instantiate the
7810      default argument here, not in tsubst.  In the case of
7811      something like:
7812
7813        template <class T>
7814        struct S {
7815          static T t();
7816          void f(T = t());
7817        };
7818
7819      we must be careful to do name lookup in the scope of S<T>,
7820      rather than in the current class.  */
7821   push_access_scope (fn);
7822   /* The "this" pointer is not valid in a default argument.  */
7823   if (cfun)
7824     {
7825       saved_class_ptr = current_class_ptr;
7826       cp_function_chain->x_current_class_ptr = NULL_TREE;
7827       saved_class_ref = current_class_ref;
7828       cp_function_chain->x_current_class_ref = NULL_TREE;
7829     }
7830
7831   push_deferring_access_checks(dk_no_deferred);
7832   /* The default argument expression may cause implicitly defined
7833      member functions to be synthesized, which will result in garbage
7834      collection.  We must treat this situation as if we were within
7835      the body of function so as to avoid collecting live data on the
7836      stack.  */
7837   ++function_depth;
7838   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7839                      tf_warning_or_error, NULL_TREE,
7840                      /*integral_constant_expression_p=*/false);
7841   --function_depth;
7842   pop_deferring_access_checks();
7843
7844   /* Restore the "this" pointer.  */
7845   if (cfun)
7846     {
7847       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7848       cp_function_chain->x_current_class_ref = saved_class_ref;
7849     }
7850
7851   pop_access_scope (fn);
7852
7853   /* Make sure the default argument is reasonable.  */
7854   arg = check_default_argument (type, arg);
7855
7856   return arg;
7857 }
7858
7859 /* Substitute into all the default arguments for FN.  */
7860
7861 static void
7862 tsubst_default_arguments (tree fn)
7863 {
7864   tree arg;
7865   tree tmpl_args;
7866
7867   tmpl_args = DECL_TI_ARGS (fn);
7868
7869   /* If this function is not yet instantiated, we certainly don't need
7870      its default arguments.  */
7871   if (uses_template_parms (tmpl_args))
7872     return;
7873
7874   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7875        arg;
7876        arg = TREE_CHAIN (arg))
7877     if (TREE_PURPOSE (arg))
7878       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7879                                                     TREE_VALUE (arg),
7880                                                     TREE_PURPOSE (arg));
7881 }
7882
7883 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7884    result of the substitution.  Issue error and warning messages under
7885    control of COMPLAIN.  */
7886
7887 static tree
7888 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7889 {
7890   location_t saved_loc;
7891   tree r = NULL_TREE;
7892   tree in_decl = t;
7893
7894   /* Set the filename and linenumber to improve error-reporting.  */
7895   saved_loc = input_location;
7896   input_location = DECL_SOURCE_LOCATION (t);
7897
7898   switch (TREE_CODE (t))
7899     {
7900     case TEMPLATE_DECL:
7901       {
7902         /* We can get here when processing a member function template,
7903            member class template, and template template parameter of
7904            a template class.  */
7905         tree decl = DECL_TEMPLATE_RESULT (t);
7906         tree spec;
7907         tree tmpl_args;
7908         tree full_args;
7909
7910         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7911           {
7912             /* Template template parameter is treated here.  */
7913             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7914             if (new_type == error_mark_node)
7915               return error_mark_node;
7916
7917             r = copy_decl (t);
7918             TREE_CHAIN (r) = NULL_TREE;
7919             TREE_TYPE (r) = new_type;
7920             DECL_TEMPLATE_RESULT (r)
7921               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7922             DECL_TEMPLATE_PARMS (r)
7923               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7924                                        complain);
7925             TYPE_NAME (new_type) = r;
7926             break;
7927           }
7928
7929         /* We might already have an instance of this template.
7930            The ARGS are for the surrounding class type, so the
7931            full args contain the tsubst'd args for the context,
7932            plus the innermost args from the template decl.  */
7933         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7934           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7935           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7936         /* Because this is a template, the arguments will still be
7937            dependent, even after substitution.  If
7938            PROCESSING_TEMPLATE_DECL is not set, the dependency
7939            predicates will short-circuit.  */
7940         ++processing_template_decl;
7941         full_args = tsubst_template_args (tmpl_args, args,
7942                                           complain, in_decl);
7943         --processing_template_decl;
7944         if (full_args == error_mark_node)
7945           return error_mark_node;
7946
7947         /* tsubst_template_args doesn't copy the vector if
7948            nothing changed.  But, *something* should have
7949            changed.  */
7950         gcc_assert (full_args != tmpl_args);
7951
7952         spec = retrieve_specialization (t, full_args,
7953                                         /*class_specializations_p=*/true);
7954         if (spec != NULL_TREE)
7955           {
7956             r = spec;
7957             break;
7958           }
7959
7960         /* Make a new template decl.  It will be similar to the
7961            original, but will record the current template arguments.
7962            We also create a new function declaration, which is just
7963            like the old one, but points to this new template, rather
7964            than the old one.  */
7965         r = copy_decl (t);
7966         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7967         TREE_CHAIN (r) = NULL_TREE;
7968
7969         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7970
7971         if (TREE_CODE (decl) == TYPE_DECL)
7972           {
7973             tree new_type;
7974             ++processing_template_decl;
7975             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7976             --processing_template_decl;
7977             if (new_type == error_mark_node)
7978               return error_mark_node;
7979
7980             TREE_TYPE (r) = new_type;
7981             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7982             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7983             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7984             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7985           }
7986         else
7987           {
7988             tree new_decl;
7989             ++processing_template_decl;
7990             new_decl = tsubst (decl, args, complain, in_decl);
7991             --processing_template_decl;
7992             if (new_decl == error_mark_node)
7993               return error_mark_node;
7994
7995             DECL_TEMPLATE_RESULT (r) = new_decl;
7996             DECL_TI_TEMPLATE (new_decl) = r;
7997             TREE_TYPE (r) = TREE_TYPE (new_decl);
7998             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7999             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
8000           }
8001
8002         SET_DECL_IMPLICIT_INSTANTIATION (r);
8003         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8004         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8005
8006         /* The template parameters for this new template are all the
8007            template parameters for the old template, except the
8008            outermost level of parameters.  */
8009         DECL_TEMPLATE_PARMS (r)
8010           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8011                                    complain);
8012
8013         if (PRIMARY_TEMPLATE_P (t))
8014           DECL_PRIMARY_TEMPLATE (r) = r;
8015
8016         if (TREE_CODE (decl) != TYPE_DECL)
8017           /* Record this non-type partial instantiation.  */
8018           register_specialization (r, t,
8019                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8020                                    false);
8021       }
8022       break;
8023
8024     case FUNCTION_DECL:
8025       {
8026         tree ctx;
8027         tree argvec = NULL_TREE;
8028         tree *friends;
8029         tree gen_tmpl;
8030         tree type;
8031         int member;
8032         int args_depth;
8033         int parms_depth;
8034
8035         /* Nobody should be tsubst'ing into non-template functions.  */
8036         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8037
8038         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8039           {
8040             tree spec;
8041             bool dependent_p;
8042
8043             /* If T is not dependent, just return it.  We have to
8044                increment PROCESSING_TEMPLATE_DECL because
8045                value_dependent_expression_p assumes that nothing is
8046                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8047             ++processing_template_decl;
8048             dependent_p = value_dependent_expression_p (t);
8049             --processing_template_decl;
8050             if (!dependent_p)
8051               return t;
8052
8053             /* Calculate the most general template of which R is a
8054                specialization, and the complete set of arguments used to
8055                specialize R.  */
8056             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8057             argvec = tsubst_template_args (DECL_TI_ARGS
8058                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8059                                            args, complain, in_decl);
8060
8061             /* Check to see if we already have this specialization.  */
8062             spec = retrieve_specialization (gen_tmpl, argvec,
8063                                             /*class_specializations_p=*/false);
8064
8065             if (spec)
8066               {
8067                 r = spec;
8068                 break;
8069               }
8070
8071             /* We can see more levels of arguments than parameters if
8072                there was a specialization of a member template, like
8073                this:
8074
8075                  template <class T> struct S { template <class U> void f(); }
8076                  template <> template <class U> void S<int>::f(U);
8077
8078                Here, we'll be substituting into the specialization,
8079                because that's where we can find the code we actually
8080                want to generate, but we'll have enough arguments for
8081                the most general template.
8082
8083                We also deal with the peculiar case:
8084
8085                  template <class T> struct S {
8086                    template <class U> friend void f();
8087                  };
8088                  template <class U> void f() {}
8089                  template S<int>;
8090                  template void f<double>();
8091
8092                Here, the ARGS for the instantiation of will be {int,
8093                double}.  But, we only need as many ARGS as there are
8094                levels of template parameters in CODE_PATTERN.  We are
8095                careful not to get fooled into reducing the ARGS in
8096                situations like:
8097
8098                  template <class T> struct S { template <class U> void f(U); }
8099                  template <class T> template <> void S<T>::f(int) {}
8100
8101                which we can spot because the pattern will be a
8102                specialization in this case.  */
8103             args_depth = TMPL_ARGS_DEPTH (args);
8104             parms_depth =
8105               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8106             if (args_depth > parms_depth
8107                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8108               args = get_innermost_template_args (args, parms_depth);
8109           }
8110         else
8111           {
8112             /* This special case arises when we have something like this:
8113
8114                  template <class T> struct S {
8115                    friend void f<int>(int, double);
8116                  };
8117
8118                Here, the DECL_TI_TEMPLATE for the friend declaration
8119                will be an IDENTIFIER_NODE.  We are being called from
8120                tsubst_friend_function, and we want only to create a
8121                new decl (R) with appropriate types so that we can call
8122                determine_specialization.  */
8123             gen_tmpl = NULL_TREE;
8124           }
8125
8126         if (DECL_CLASS_SCOPE_P (t))
8127           {
8128             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8129               member = 2;
8130             else
8131               member = 1;
8132             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8133                                     complain, t, /*entering_scope=*/1);
8134           }
8135         else
8136           {
8137             member = 0;
8138             ctx = DECL_CONTEXT (t);
8139           }
8140         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8141         if (type == error_mark_node)
8142           return error_mark_node;
8143
8144         /* We do NOT check for matching decls pushed separately at this
8145            point, as they may not represent instantiations of this
8146            template, and in any case are considered separate under the
8147            discrete model.  */
8148         r = copy_decl (t);
8149         DECL_USE_TEMPLATE (r) = 0;
8150         TREE_TYPE (r) = type;
8151         /* Clear out the mangled name and RTL for the instantiation.  */
8152         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8153         SET_DECL_RTL (r, NULL_RTX);
8154         DECL_INITIAL (r) = NULL_TREE;
8155         DECL_CONTEXT (r) = ctx;
8156
8157         if (member && DECL_CONV_FN_P (r))
8158           /* Type-conversion operator.  Reconstruct the name, in
8159              case it's the name of one of the template's parameters.  */
8160           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8161
8162         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8163                                      complain, t);
8164         DECL_RESULT (r) = NULL_TREE;
8165
8166         TREE_STATIC (r) = 0;
8167         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8168         DECL_EXTERNAL (r) = 1;
8169         /* If this is an instantiation of a function with internal
8170            linkage, we already know what object file linkage will be
8171            assigned to the instantiation.  */
8172         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8173         DECL_DEFER_OUTPUT (r) = 0;
8174         TREE_CHAIN (r) = NULL_TREE;
8175         DECL_PENDING_INLINE_INFO (r) = 0;
8176         DECL_PENDING_INLINE_P (r) = 0;
8177         DECL_SAVED_TREE (r) = NULL_TREE;
8178         TREE_USED (r) = 0;
8179         if (DECL_CLONED_FUNCTION (r))
8180           {
8181             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8182                                                args, complain, t);
8183             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8184             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8185           }
8186
8187         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8188            this in the special friend case mentioned above where
8189            GEN_TMPL is NULL.  */
8190         if (gen_tmpl)
8191           {
8192             DECL_TEMPLATE_INFO (r)
8193               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8194             SET_DECL_IMPLICIT_INSTANTIATION (r);
8195             register_specialization (r, gen_tmpl, argvec, false);
8196
8197             /* We're not supposed to instantiate default arguments
8198                until they are called, for a template.  But, for a
8199                declaration like:
8200
8201                  template <class T> void f ()
8202                  { extern void g(int i = T()); }
8203
8204                we should do the substitution when the template is
8205                instantiated.  We handle the member function case in
8206                instantiate_class_template since the default arguments
8207                might refer to other members of the class.  */
8208             if (!member
8209                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8210                 && !uses_template_parms (argvec))
8211               tsubst_default_arguments (r);
8212           }
8213         else
8214           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8215
8216         /* Copy the list of befriending classes.  */
8217         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8218              *friends;
8219              friends = &TREE_CHAIN (*friends))
8220           {
8221             *friends = copy_node (*friends);
8222             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8223                                             args, complain,
8224                                             in_decl);
8225           }
8226
8227         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8228           {
8229             maybe_retrofit_in_chrg (r);
8230             if (DECL_CONSTRUCTOR_P (r))
8231               grok_ctor_properties (ctx, r);
8232             /* If this is an instantiation of a member template, clone it.
8233                If it isn't, that'll be handled by
8234                clone_constructors_and_destructors.  */
8235             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8236               clone_function_decl (r, /*update_method_vec_p=*/0);
8237           }
8238         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8239                  && !grok_op_properties (r, (complain & tf_error) != 0))
8240           return error_mark_node;
8241
8242         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8243           SET_DECL_FRIEND_CONTEXT (r,
8244                                    tsubst (DECL_FRIEND_CONTEXT (t),
8245                                             args, complain, in_decl));
8246
8247         /* Possibly limit visibility based on template args.  */
8248         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8249         if (DECL_VISIBILITY_SPECIFIED (t))
8250           {
8251             DECL_VISIBILITY_SPECIFIED (r) = 0;
8252             DECL_ATTRIBUTES (r)
8253               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8254           }
8255         determine_visibility (r);
8256
8257         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8258                                         args, complain, in_decl);
8259       }
8260       break;
8261
8262     case PARM_DECL:
8263       {
8264         tree type = NULL_TREE;
8265         int i, len = 1;
8266         tree expanded_types = NULL_TREE;
8267         tree prev_r = NULL_TREE;
8268         tree first_r = NULL_TREE;
8269
8270         if (FUNCTION_PARAMETER_PACK_P (t))
8271           {
8272             /* If there is a local specialization that isn't a
8273                parameter pack, it means that we're doing a "simple"
8274                substitution from inside tsubst_pack_expansion. Just
8275                return the local specialization (which will be a single
8276                parm).  */
8277             tree spec = retrieve_local_specialization (t);
8278             if (spec 
8279                 && TREE_CODE (spec) == PARM_DECL
8280                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8281               return spec;
8282
8283             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8284                the parameters in this function parameter pack.  */
8285             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8286                                                     complain, in_decl);
8287             if (TREE_CODE (expanded_types) == TREE_VEC)
8288               {
8289                 len = TREE_VEC_LENGTH (expanded_types);
8290
8291                 /* Zero-length parameter packs are boring. Just substitute
8292                    into the chain.  */
8293                 if (len == 0)
8294                   return tsubst (TREE_CHAIN (t), args, complain, 
8295                                  TREE_CHAIN (t));
8296               }
8297             else
8298               {
8299                 /* All we did was update the type. Make a note of that.  */
8300                 type = expanded_types;
8301                 expanded_types = NULL_TREE;
8302               }
8303           }
8304
8305         /* Loop through all of the parameter's we'll build. When T is
8306            a function parameter pack, LEN is the number of expanded
8307            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8308         r = NULL_TREE;
8309         for (i = 0; i < len; ++i)
8310           {
8311             prev_r = r;
8312             r = copy_node (t);
8313             if (DECL_TEMPLATE_PARM_P (t))
8314               SET_DECL_TEMPLATE_PARM_P (r);
8315
8316             if (expanded_types)
8317               /* We're on the Ith parameter of the function parameter
8318                  pack.  */
8319               {
8320                 /* Get the Ith type.  */
8321                 type = TREE_VEC_ELT (expanded_types, i);
8322
8323                 if (DECL_NAME (r))
8324                   /* Rename the parameter to include the index.  */
8325                   DECL_NAME (r) =
8326                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8327               }
8328             else if (!type)
8329               /* We're dealing with a normal parameter.  */
8330               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8331
8332             type = type_decays_to (type);
8333             TREE_TYPE (r) = type;
8334             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8335
8336             if (DECL_INITIAL (r))
8337               {
8338                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8339                   DECL_INITIAL (r) = TREE_TYPE (r);
8340                 else
8341                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8342                                              complain, in_decl);
8343               }
8344
8345             DECL_CONTEXT (r) = NULL_TREE;
8346
8347             if (!DECL_TEMPLATE_PARM_P (r))
8348               DECL_ARG_TYPE (r) = type_passed_as (type);
8349
8350             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8351                                             args, complain, in_decl);
8352
8353             /* Keep track of the first new parameter we
8354                generate. That's what will be returned to the
8355                caller.  */
8356             if (!first_r)
8357               first_r = r;
8358
8359             /* Build a proper chain of parameters when substituting
8360                into a function parameter pack.  */
8361             if (prev_r)
8362               TREE_CHAIN (prev_r) = r;
8363           }
8364
8365         if (TREE_CHAIN (t))
8366           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8367                                    complain, TREE_CHAIN (t));
8368
8369         /* FIRST_R contains the start of the chain we've built.  */
8370         r = first_r;
8371       }
8372       break;
8373
8374     case FIELD_DECL:
8375       {
8376         tree type;
8377
8378         r = copy_decl (t);
8379         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8380         if (type == error_mark_node)
8381           return error_mark_node;
8382         TREE_TYPE (r) = type;
8383         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8384
8385         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8386         DECL_INITIAL (r)
8387           = tsubst_expr (DECL_INITIAL (t), args,
8388                          complain, in_decl,
8389                          /*integral_constant_expression_p=*/true);
8390         /* We don't have to set DECL_CONTEXT here; it is set by
8391            finish_member_declaration.  */
8392         TREE_CHAIN (r) = NULL_TREE;
8393         if (VOID_TYPE_P (type))
8394           error ("instantiation of %q+D as type %qT", r, type);
8395
8396         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8397                                         args, complain, in_decl);
8398       }
8399       break;
8400
8401     case USING_DECL:
8402       /* We reach here only for member using decls.  */
8403       if (DECL_DEPENDENT_P (t))
8404         {
8405           r = do_class_using_decl
8406             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8407              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8408           if (!r)
8409             r = error_mark_node;
8410         }
8411       else
8412         {
8413           r = copy_node (t);
8414           TREE_CHAIN (r) = NULL_TREE;
8415         }
8416       break;
8417
8418     case TYPE_DECL:
8419     case VAR_DECL:
8420       {
8421         tree argvec = NULL_TREE;
8422         tree gen_tmpl = NULL_TREE;
8423         tree spec;
8424         tree tmpl = NULL_TREE;
8425         tree ctx;
8426         tree type = NULL_TREE;
8427         bool local_p;
8428
8429         if (TREE_CODE (t) == TYPE_DECL
8430             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8431           {
8432             /* If this is the canonical decl, we don't have to
8433                mess with instantiations, and often we can't (for
8434                typename, template type parms and such).  Note that
8435                TYPE_NAME is not correct for the above test if
8436                we've copied the type for a typedef.  */
8437             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8438             if (type == error_mark_node)
8439               return error_mark_node;
8440             r = TYPE_NAME (type);
8441             break;
8442           }
8443
8444         /* Check to see if we already have the specialization we
8445            need.  */
8446         spec = NULL_TREE;
8447         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8448           {
8449             /* T is a static data member or namespace-scope entity.
8450                We have to substitute into namespace-scope variables
8451                (even though such entities are never templates) because
8452                of cases like:
8453                
8454                  template <class T> void f() { extern T t; }
8455
8456                where the entity referenced is not known until
8457                instantiation time.  */
8458             local_p = false;
8459             ctx = DECL_CONTEXT (t);
8460             if (DECL_CLASS_SCOPE_P (t))
8461               {
8462                 ctx = tsubst_aggr_type (ctx, args,
8463                                         complain,
8464                                         in_decl, /*entering_scope=*/1);
8465                 /* If CTX is unchanged, then T is in fact the
8466                    specialization we want.  That situation occurs when
8467                    referencing a static data member within in its own
8468                    class.  We can use pointer equality, rather than
8469                    same_type_p, because DECL_CONTEXT is always
8470                    canonical.  */
8471                 if (ctx == DECL_CONTEXT (t))
8472                   spec = t;
8473               }
8474
8475             if (!spec)
8476               {
8477                 tmpl = DECL_TI_TEMPLATE (t);
8478                 gen_tmpl = most_general_template (tmpl);
8479                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8480                 spec = (retrieve_specialization 
8481                         (gen_tmpl, argvec,
8482                          /*class_specializations_p=*/false));
8483               }
8484           }
8485         else
8486           {
8487             /* A local variable.  */
8488             local_p = true;
8489             /* Subsequent calls to pushdecl will fill this in.  */
8490             ctx = NULL_TREE;
8491             spec = retrieve_local_specialization (t);
8492           }
8493         /* If we already have the specialization we need, there is
8494            nothing more to do.  */ 
8495         if (spec)
8496           {
8497             r = spec;
8498             break;
8499           }
8500
8501         /* Create a new node for the specialization we need.  */
8502         r = copy_decl (t);
8503         if (type == NULL_TREE)
8504           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8505         if (TREE_CODE (r) == VAR_DECL)
8506           {
8507             /* Even if the original location is out of scope, the
8508                newly substituted one is not.  */
8509             DECL_DEAD_FOR_LOCAL (r) = 0;
8510             DECL_INITIALIZED_P (r) = 0;
8511             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8512             if (type == error_mark_node)
8513               return error_mark_node;
8514             if (TREE_CODE (type) == FUNCTION_TYPE)
8515               {
8516                 /* It may seem that this case cannot occur, since:
8517
8518                      typedef void f();
8519                      void g() { f x; }
8520
8521                    declares a function, not a variable.  However:
8522       
8523                      typedef void f();
8524                      template <typename T> void g() { T t; }
8525                      template void g<f>();
8526
8527                    is an attempt to declare a variable with function
8528                    type.  */
8529                 error ("variable %qD has function type",
8530                        /* R is not yet sufficiently initialized, so we
8531                           just use its name.  */
8532                        DECL_NAME (r));
8533                 return error_mark_node;
8534               }
8535             type = complete_type (type);
8536             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8537               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8538             type = check_var_type (DECL_NAME (r), type);
8539
8540             if (DECL_HAS_VALUE_EXPR_P (t))
8541               {
8542                 tree ve = DECL_VALUE_EXPR (t);
8543                 ve = tsubst_expr (ve, args, complain, in_decl,
8544                                   /*constant_expression_p=*/false);
8545                 SET_DECL_VALUE_EXPR (r, ve);
8546               }
8547           }
8548         else if (DECL_SELF_REFERENCE_P (t))
8549           SET_DECL_SELF_REFERENCE_P (r);
8550         TREE_TYPE (r) = type;
8551         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8552         DECL_CONTEXT (r) = ctx;
8553         /* Clear out the mangled name and RTL for the instantiation.  */
8554         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8555         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8556           SET_DECL_RTL (r, NULL_RTX);
8557         /* The initializer must not be expanded until it is required;
8558            see [temp.inst].  */
8559         DECL_INITIAL (r) = NULL_TREE;
8560         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8561           SET_DECL_RTL (r, NULL_RTX);
8562         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8563         if (TREE_CODE (r) == VAR_DECL)
8564           {
8565             /* Possibly limit visibility based on template args.  */
8566             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8567             if (DECL_VISIBILITY_SPECIFIED (t))
8568               {
8569                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8570                 DECL_ATTRIBUTES (r)
8571                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8572               }
8573             determine_visibility (r);
8574           }
8575         /* Preserve a typedef that names a type.  */
8576         else if (TREE_CODE (r) == TYPE_DECL
8577                  && DECL_ORIGINAL_TYPE (t)
8578                  && type != error_mark_node)
8579           {
8580             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8581                                              args, complain, in_decl);
8582             TREE_TYPE (r) = type = build_variant_type_copy (type);
8583             TYPE_NAME (type) = r;
8584           }
8585
8586         if (!local_p)
8587           {
8588             /* A static data member declaration is always marked
8589                external when it is declared in-class, even if an
8590                initializer is present.  We mimic the non-template
8591                processing here.  */
8592             DECL_EXTERNAL (r) = 1;
8593
8594             register_specialization (r, gen_tmpl, argvec, false);
8595             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8596             SET_DECL_IMPLICIT_INSTANTIATION (r);
8597           }
8598         else
8599           register_local_specialization (r, t);
8600
8601         TREE_CHAIN (r) = NULL_TREE;
8602
8603         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8604                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8605                                         args, complain, in_decl);
8606         layout_decl (r, 0);
8607       }
8608       break;
8609
8610     default:
8611       gcc_unreachable ();
8612     }
8613
8614   /* Restore the file and line information.  */
8615   input_location = saved_loc;
8616
8617   return r;
8618 }
8619
8620 /* Substitute into the ARG_TYPES of a function type.  */
8621
8622 static tree
8623 tsubst_arg_types (tree arg_types,
8624                   tree args,
8625                   tsubst_flags_t complain,
8626                   tree in_decl)
8627 {
8628   tree remaining_arg_types;
8629   tree type = NULL_TREE;
8630   int i = 1;
8631   tree expanded_args = NULL_TREE;
8632   tree default_arg;
8633
8634   if (!arg_types || arg_types == void_list_node)
8635     return arg_types;
8636
8637   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8638                                           args, complain, in_decl);
8639   if (remaining_arg_types == error_mark_node)
8640     return error_mark_node;
8641
8642   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8643     {
8644       /* For a pack expansion, perform substitution on the
8645          entire expression. Later on, we'll handle the arguments
8646          one-by-one.  */
8647       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8648                                             args, complain, in_decl);
8649
8650       if (TREE_CODE (expanded_args) == TREE_VEC)
8651         /* So that we'll spin through the parameters, one by one.  */
8652         i = TREE_VEC_LENGTH (expanded_args);
8653       else
8654         {
8655           /* We only partially substituted into the parameter
8656              pack. Our type is TYPE_PACK_EXPANSION.  */
8657           type = expanded_args;
8658           expanded_args = NULL_TREE;
8659         }
8660     }
8661
8662   while (i > 0) {
8663     --i;
8664     
8665     if (expanded_args)
8666       type = TREE_VEC_ELT (expanded_args, i);
8667     else if (!type)
8668       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8669
8670     if (type == error_mark_node)
8671       return error_mark_node;
8672     if (VOID_TYPE_P (type))
8673       {
8674         if (complain & tf_error)
8675           {
8676             error ("invalid parameter type %qT", type);
8677             if (in_decl)
8678               error ("in declaration %q+D", in_decl);
8679           }
8680         return error_mark_node;
8681     }
8682     
8683     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8684        top-level qualifiers as required.  */
8685     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8686
8687     /* We do not substitute into default arguments here.  The standard
8688        mandates that they be instantiated only when needed, which is
8689        done in build_over_call.  */
8690     default_arg = TREE_PURPOSE (arg_types);
8691
8692     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8693       {
8694         /* We've instantiated a template before its default arguments
8695            have been parsed.  This can happen for a nested template
8696            class, and is not an error unless we require the default
8697            argument in a call of this function.  */
8698         remaining_arg_types = 
8699           tree_cons (default_arg, type, remaining_arg_types);
8700         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8701                        remaining_arg_types);
8702       }
8703     else
8704       remaining_arg_types = 
8705         hash_tree_cons (default_arg, type, remaining_arg_types);
8706   }
8707         
8708   return remaining_arg_types;
8709 }
8710
8711 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8712    *not* handle the exception-specification for FNTYPE, because the
8713    initial substitution of explicitly provided template parameters
8714    during argument deduction forbids substitution into the
8715    exception-specification:
8716
8717      [temp.deduct]
8718
8719      All references in the function type of the function template to  the
8720      corresponding template parameters are replaced by the specified tem-
8721      plate argument values.  If a substitution in a template parameter or
8722      in  the function type of the function template results in an invalid
8723      type, type deduction fails.  [Note: The equivalent  substitution  in
8724      exception specifications is done only when the function is instanti-
8725      ated, at which point a program is  ill-formed  if  the  substitution
8726      results in an invalid type.]  */
8727
8728 static tree
8729 tsubst_function_type (tree t,
8730                       tree args,
8731                       tsubst_flags_t complain,
8732                       tree in_decl)
8733 {
8734   tree return_type;
8735   tree arg_types;
8736   tree fntype;
8737
8738   /* The TYPE_CONTEXT is not used for function/method types.  */
8739   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8740
8741   /* Substitute the return type.  */
8742   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8743   if (return_type == error_mark_node)
8744     return error_mark_node;
8745   /* The standard does not presently indicate that creation of a
8746      function type with an invalid return type is a deduction failure.
8747      However, that is clearly analogous to creating an array of "void"
8748      or a reference to a reference.  This is core issue #486.  */
8749   if (TREE_CODE (return_type) == ARRAY_TYPE
8750       || TREE_CODE (return_type) == FUNCTION_TYPE)
8751     {
8752       if (complain & tf_error)
8753         {
8754           if (TREE_CODE (return_type) == ARRAY_TYPE)
8755             error ("function returning an array");
8756           else
8757             error ("function returning a function");
8758         }
8759       return error_mark_node;
8760     }
8761
8762   /* Substitute the argument types.  */
8763   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8764                                 complain, in_decl);
8765   if (arg_types == error_mark_node)
8766     return error_mark_node;
8767
8768   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8769       && in_decl != NULL_TREE
8770       && !TREE_NO_WARNING (in_decl)
8771       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8772     warning (OPT_Wignored_qualifiers,
8773             "type qualifiers ignored on function return type");
8774
8775   /* Construct a new type node and return it.  */
8776   if (TREE_CODE (t) == FUNCTION_TYPE)
8777     fntype = build_function_type (return_type, arg_types);
8778   else
8779     {
8780       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8781       if (! MAYBE_CLASS_TYPE_P (r))
8782         {
8783           /* [temp.deduct]
8784
8785              Type deduction may fail for any of the following
8786              reasons:
8787
8788              -- Attempting to create "pointer to member of T" when T
8789              is not a class type.  */
8790           if (complain & tf_error)
8791             error ("creating pointer to member function of non-class type %qT",
8792                       r);
8793           return error_mark_node;
8794         }
8795
8796       fntype = build_method_type_directly (r, return_type,
8797                                            TREE_CHAIN (arg_types));
8798     }
8799   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8800   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8801
8802   return fntype;
8803 }
8804
8805 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8806    ARGS into that specification, and return the substituted
8807    specification.  If there is no specification, return NULL_TREE.  */
8808
8809 static tree
8810 tsubst_exception_specification (tree fntype,
8811                                 tree args,
8812                                 tsubst_flags_t complain,
8813                                 tree in_decl)
8814 {
8815   tree specs;
8816   tree new_specs;
8817
8818   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8819   new_specs = NULL_TREE;
8820   if (specs)
8821     {
8822       if (! TREE_VALUE (specs))
8823         new_specs = specs;
8824       else
8825         while (specs)
8826           {
8827             tree spec;
8828             int i, len = 1;
8829             tree expanded_specs = NULL_TREE;
8830
8831             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8832               {
8833                 /* Expand the pack expansion type.  */
8834                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8835                                                        args, complain,
8836                                                        in_decl);
8837
8838                 if (expanded_specs == error_mark_node)
8839                   return error_mark_node;
8840                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8841                   len = TREE_VEC_LENGTH (expanded_specs);
8842                 else
8843                   {
8844                     /* We're substituting into a member template, so
8845                        we got a TYPE_PACK_EXPANSION back.  Add that
8846                        expansion and move on.  */
8847                     gcc_assert (TREE_CODE (expanded_specs) 
8848                                 == TYPE_PACK_EXPANSION);
8849                     new_specs = add_exception_specifier (new_specs,
8850                                                          expanded_specs,
8851                                                          complain);
8852                     specs = TREE_CHAIN (specs);
8853                     continue;
8854                   }
8855               }
8856
8857             for (i = 0; i < len; ++i)
8858               {
8859                 if (expanded_specs)
8860                   spec = TREE_VEC_ELT (expanded_specs, i);
8861                 else
8862                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8863                 if (spec == error_mark_node)
8864                   return spec;
8865                 new_specs = add_exception_specifier (new_specs, spec, 
8866                                                      complain);
8867               }
8868
8869             specs = TREE_CHAIN (specs);
8870           }
8871     }
8872   return new_specs;
8873 }
8874
8875 /* Take the tree structure T and replace template parameters used
8876    therein with the argument vector ARGS.  IN_DECL is an associated
8877    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8878    Issue error and warning messages under control of COMPLAIN.  Note
8879    that we must be relatively non-tolerant of extensions here, in
8880    order to preserve conformance; if we allow substitutions that
8881    should not be allowed, we may allow argument deductions that should
8882    not succeed, and therefore report ambiguous overload situations
8883    where there are none.  In theory, we could allow the substitution,
8884    but indicate that it should have failed, and allow our caller to
8885    make sure that the right thing happens, but we don't try to do this
8886    yet.
8887
8888    This function is used for dealing with types, decls and the like;
8889    for expressions, use tsubst_expr or tsubst_copy.  */
8890
8891 static tree
8892 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8893 {
8894   tree type, r;
8895
8896   if (t == NULL_TREE || t == error_mark_node
8897       || t == integer_type_node
8898       || t == void_type_node
8899       || t == char_type_node
8900       || t == unknown_type_node
8901       || TREE_CODE (t) == NAMESPACE_DECL)
8902     return t;
8903
8904   if (DECL_P (t))
8905     return tsubst_decl (t, args, complain);
8906
8907   if (TREE_CODE (t) == IDENTIFIER_NODE)
8908     type = IDENTIFIER_TYPE_VALUE (t);
8909   else
8910     type = TREE_TYPE (t);
8911
8912   gcc_assert (type != unknown_type_node);
8913
8914   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8915      such as attribute aligned.  */
8916   if (TYPE_P (t)
8917       && TYPE_NAME (t)
8918       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8919     {
8920       tree decl = TYPE_NAME (t);
8921       
8922       if (DECL_CLASS_SCOPE_P (decl)
8923           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8924           && uses_template_parms (DECL_CONTEXT (decl)))
8925         {
8926           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8927           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8928           r = retrieve_specialization (tmpl, gen_args, false);
8929         }
8930       else if (DECL_FUNCTION_SCOPE_P (decl)
8931                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8932                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8933         r = retrieve_local_specialization (decl);
8934       else
8935         /* The typedef is from a non-template context.  */
8936         return t;
8937
8938       if (r)
8939         {
8940           r = TREE_TYPE (r);
8941           r = cp_build_qualified_type_real
8942             (r, cp_type_quals (t) | cp_type_quals (r),
8943              complain | tf_ignore_bad_quals);
8944           return r;
8945         }
8946       /* Else we must be instantiating the typedef, so fall through.  */
8947     }
8948
8949   if (type
8950       && TREE_CODE (t) != TYPENAME_TYPE
8951       && TREE_CODE (t) != IDENTIFIER_NODE
8952       && TREE_CODE (t) != FUNCTION_TYPE
8953       && TREE_CODE (t) != METHOD_TYPE)
8954     type = tsubst (type, args, complain, in_decl);
8955   if (type == error_mark_node)
8956     return error_mark_node;
8957
8958   switch (TREE_CODE (t))
8959     {
8960     case RECORD_TYPE:
8961     case UNION_TYPE:
8962     case ENUMERAL_TYPE:
8963       return tsubst_aggr_type (t, args, complain, in_decl,
8964                                /*entering_scope=*/0);
8965
8966     case ERROR_MARK:
8967     case IDENTIFIER_NODE:
8968     case VOID_TYPE:
8969     case REAL_TYPE:
8970     case COMPLEX_TYPE:
8971     case VECTOR_TYPE:
8972     case BOOLEAN_TYPE:
8973     case INTEGER_CST:
8974     case REAL_CST:
8975     case STRING_CST:
8976       return t;
8977
8978     case INTEGER_TYPE:
8979       if (t == integer_type_node)
8980         return t;
8981
8982       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8983           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8984         return t;
8985
8986       {
8987         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8988
8989         max = tsubst_expr (omax, args, complain, in_decl,
8990                            /*integral_constant_expression_p=*/false);
8991         max = fold_decl_constant_value (max);
8992
8993         if (TREE_CODE (max) != INTEGER_CST
8994             && !at_function_scope_p ()
8995             && !value_dependent_expression_p (max))
8996           {
8997             if (complain & tf_error)
8998               error ("array bound is not an integer constant");
8999             return error_mark_node;
9000           }
9001
9002         /* [temp.deduct]
9003
9004            Type deduction may fail for any of the following
9005            reasons:
9006
9007              Attempting to create an array with a size that is
9008              zero or negative.  */
9009         if (integer_zerop (max) && !(complain & tf_error))
9010           /* We must fail if performing argument deduction (as
9011              indicated by the state of complain), so that
9012              another substitution can be found.  */
9013           return error_mark_node;
9014         else if (TREE_CODE (max) == INTEGER_CST
9015                  && INT_CST_LT (max, integer_zero_node))
9016           {
9017             if (complain & tf_error)
9018               error ("creating array with negative size (%qE)", max);
9019
9020             return error_mark_node;
9021           }
9022
9023         return compute_array_index_type (NULL_TREE, max);
9024       }
9025
9026     case TEMPLATE_TYPE_PARM:
9027     case TEMPLATE_TEMPLATE_PARM:
9028     case BOUND_TEMPLATE_TEMPLATE_PARM:
9029     case TEMPLATE_PARM_INDEX:
9030       {
9031         int idx;
9032         int level;
9033         int levels;
9034         tree arg = NULL_TREE;
9035
9036         r = NULL_TREE;
9037
9038         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9039         template_parm_level_and_index (t, &level, &idx); 
9040
9041         levels = TMPL_ARGS_DEPTH (args);
9042         if (level <= levels)
9043           {
9044             arg = TMPL_ARG (args, level, idx);
9045
9046             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9047               /* See through ARGUMENT_PACK_SELECT arguments. */
9048               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9049           }
9050
9051         if (arg == error_mark_node)
9052           return error_mark_node;
9053         else if (arg != NULL_TREE)
9054           {
9055             if (ARGUMENT_PACK_P (arg))
9056               /* If ARG is an argument pack, we don't actually want to
9057                  perform a substitution here, because substitutions
9058                  for argument packs are only done
9059                  element-by-element. We can get to this point when
9060                  substituting the type of a non-type template
9061                  parameter pack, when that type actually contains
9062                  template parameter packs from an outer template, e.g.,
9063
9064                  template<typename... Types> struct A {
9065                    template<Types... Values> struct B { };
9066                  };  */
9067               return t;
9068
9069             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9070               {
9071                 int quals;
9072                 gcc_assert (TYPE_P (arg));
9073
9074                 /* cv-quals from the template are discarded when
9075                    substituting in a function or reference type.  */
9076                 if (TREE_CODE (arg) == FUNCTION_TYPE
9077                     || TREE_CODE (arg) == METHOD_TYPE
9078                     || TREE_CODE (arg) == REFERENCE_TYPE)
9079                   quals = cp_type_quals (arg);
9080                 else
9081                   quals = cp_type_quals (arg) | cp_type_quals (t);
9082                   
9083                 return cp_build_qualified_type_real
9084                   (arg, quals, complain | tf_ignore_bad_quals);
9085               }
9086             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9087               {
9088                 /* We are processing a type constructed from a
9089                    template template parameter.  */
9090                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9091                                       args, complain, in_decl);
9092                 if (argvec == error_mark_node)
9093                   return error_mark_node;
9094
9095                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9096                    are resolving nested-types in the signature of a
9097                    member function templates.  Otherwise ARG is a
9098                    TEMPLATE_DECL and is the real template to be
9099                    instantiated.  */
9100                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9101                   arg = TYPE_NAME (arg);
9102
9103                 r = lookup_template_class (arg,
9104                                            argvec, in_decl,
9105                                            DECL_CONTEXT (arg),
9106                                             /*entering_scope=*/0,
9107                                            complain);
9108                 return cp_build_qualified_type_real
9109                   (r, TYPE_QUALS (t), complain);
9110               }
9111             else
9112               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9113               return arg;
9114           }
9115
9116         if (level == 1)
9117           /* This can happen during the attempted tsubst'ing in
9118              unify.  This means that we don't yet have any information
9119              about the template parameter in question.  */
9120           return t;
9121
9122         /* If we get here, we must have been looking at a parm for a
9123            more deeply nested template.  Make a new version of this
9124            template parameter, but with a lower level.  */
9125         switch (TREE_CODE (t))
9126           {
9127           case TEMPLATE_TYPE_PARM:
9128           case TEMPLATE_TEMPLATE_PARM:
9129           case BOUND_TEMPLATE_TEMPLATE_PARM:
9130             if (cp_type_quals (t))
9131               {
9132                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9133                 r = cp_build_qualified_type_real
9134                   (r, cp_type_quals (t),
9135                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9136                                ? tf_ignore_bad_quals : 0));
9137               }
9138             else
9139               {
9140                 r = copy_type (t);
9141                 TEMPLATE_TYPE_PARM_INDEX (r)
9142                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9143                                                 r, levels, args, complain);
9144                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9145                 TYPE_MAIN_VARIANT (r) = r;
9146                 TYPE_POINTER_TO (r) = NULL_TREE;
9147                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9148
9149                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9150                   /* We have reduced the level of the template
9151                      template parameter, but not the levels of its
9152                      template parameters, so canonical_type_parameter
9153                      will not be able to find the canonical template
9154                      template parameter for this level. Thus, we
9155                      require structural equality checking to compare
9156                      TEMPLATE_TEMPLATE_PARMs. */
9157                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9158                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9159                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9160                 else
9161                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9162
9163                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9164                   {
9165                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9166                                           complain, in_decl);
9167                     if (argvec == error_mark_node)
9168                       return error_mark_node;
9169
9170                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9171                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9172                   }
9173               }
9174             break;
9175
9176           case TEMPLATE_PARM_INDEX:
9177             r = reduce_template_parm_level (t, type, levels, args, complain);
9178             break;
9179
9180           default:
9181             gcc_unreachable ();
9182           }
9183
9184         return r;
9185       }
9186
9187     case TREE_LIST:
9188       {
9189         tree purpose, value, chain;
9190
9191         if (t == void_list_node)
9192           return t;
9193
9194         purpose = TREE_PURPOSE (t);
9195         if (purpose)
9196           {
9197             purpose = tsubst (purpose, args, complain, in_decl);
9198             if (purpose == error_mark_node)
9199               return error_mark_node;
9200           }
9201         value = TREE_VALUE (t);
9202         if (value)
9203           {
9204             value = tsubst (value, args, complain, in_decl);
9205             if (value == error_mark_node)
9206               return error_mark_node;
9207           }
9208         chain = TREE_CHAIN (t);
9209         if (chain && chain != void_type_node)
9210           {
9211             chain = tsubst (chain, args, complain, in_decl);
9212             if (chain == error_mark_node)
9213               return error_mark_node;
9214           }
9215         if (purpose == TREE_PURPOSE (t)
9216             && value == TREE_VALUE (t)
9217             && chain == TREE_CHAIN (t))
9218           return t;
9219         return hash_tree_cons (purpose, value, chain);
9220       }
9221
9222     case TREE_BINFO:
9223       /* We should never be tsubsting a binfo.  */
9224       gcc_unreachable ();
9225
9226     case TREE_VEC:
9227       /* A vector of template arguments.  */
9228       gcc_assert (!type);
9229       return tsubst_template_args (t, args, complain, in_decl);
9230
9231     case POINTER_TYPE:
9232     case REFERENCE_TYPE:
9233       {
9234         enum tree_code code;
9235
9236         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9237           return t;
9238
9239         code = TREE_CODE (t);
9240
9241
9242         /* [temp.deduct]
9243
9244            Type deduction may fail for any of the following
9245            reasons:
9246
9247            -- Attempting to create a pointer to reference type.
9248            -- Attempting to create a reference to a reference type or
9249               a reference to void.
9250
9251           Core issue 106 says that creating a reference to a reference
9252           during instantiation is no longer a cause for failure. We
9253           only enforce this check in strict C++98 mode.  */
9254         if ((TREE_CODE (type) == REFERENCE_TYPE
9255              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9256             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9257           {
9258             static location_t last_loc;
9259
9260             /* We keep track of the last time we issued this error
9261                message to avoid spewing a ton of messages during a
9262                single bad template instantiation.  */
9263             if (complain & tf_error
9264                 && last_loc != input_location)
9265               {
9266                 if (TREE_CODE (type) == VOID_TYPE)
9267                   error ("forming reference to void");
9268                 else
9269                   error ("forming %s to reference type %qT",
9270                          (code == POINTER_TYPE) ? "pointer" : "reference",
9271                          type);
9272                 last_loc = input_location;
9273               }
9274
9275             return error_mark_node;
9276           }
9277         else if (code == POINTER_TYPE)
9278           {
9279             r = build_pointer_type (type);
9280             if (TREE_CODE (type) == METHOD_TYPE)
9281               r = build_ptrmemfunc_type (r);
9282           }
9283         else if (TREE_CODE (type) == REFERENCE_TYPE)
9284           /* In C++0x, during template argument substitution, when there is an
9285              attempt to create a reference to a reference type, reference
9286              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9287
9288              "If a template-argument for a template-parameter T names a type
9289              that is a reference to a type A, an attempt to create the type
9290              'lvalue reference to cv T' creates the type 'lvalue reference to
9291              A,' while an attempt to create the type type rvalue reference to
9292              cv T' creates the type T"
9293           */
9294           r = cp_build_reference_type
9295               (TREE_TYPE (type),
9296                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9297         else
9298           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9299         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9300
9301         if (r != error_mark_node)
9302           /* Will this ever be needed for TYPE_..._TO values?  */
9303           layout_type (r);
9304
9305         return r;
9306       }
9307     case OFFSET_TYPE:
9308       {
9309         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9310         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9311           {
9312             /* [temp.deduct]
9313
9314                Type deduction may fail for any of the following
9315                reasons:
9316
9317                -- Attempting to create "pointer to member of T" when T
9318                   is not a class type.  */
9319             if (complain & tf_error)
9320               error ("creating pointer to member of non-class type %qT", r);
9321             return error_mark_node;
9322           }
9323         if (TREE_CODE (type) == REFERENCE_TYPE)
9324           {
9325             if (complain & tf_error)
9326               error ("creating pointer to member reference type %qT", type);
9327             return error_mark_node;
9328           }
9329         if (TREE_CODE (type) == VOID_TYPE)
9330           {
9331             if (complain & tf_error)
9332               error ("creating pointer to member of type void");
9333             return error_mark_node;
9334           }
9335         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9336         if (TREE_CODE (type) == FUNCTION_TYPE)
9337           {
9338             /* The type of the implicit object parameter gets its
9339                cv-qualifiers from the FUNCTION_TYPE. */
9340             tree method_type;
9341             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9342                                                       cp_type_quals (type));
9343             tree memptr;
9344             method_type = build_method_type_directly (this_type,
9345                                                       TREE_TYPE (type),
9346                                                       TYPE_ARG_TYPES (type));
9347             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9348             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9349                                                  complain);
9350           }
9351         else
9352           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9353                                                TYPE_QUALS (t),
9354                                                complain);
9355       }
9356     case FUNCTION_TYPE:
9357     case METHOD_TYPE:
9358       {
9359         tree fntype;
9360         tree specs;
9361         fntype = tsubst_function_type (t, args, complain, in_decl);
9362         if (fntype == error_mark_node)
9363           return error_mark_node;
9364
9365         /* Substitute the exception specification.  */
9366         specs = tsubst_exception_specification (t, args, complain,
9367                                                 in_decl);
9368         if (specs == error_mark_node)
9369           return error_mark_node;
9370         if (specs)
9371           fntype = build_exception_variant (fntype, specs);
9372         return fntype;
9373       }
9374     case ARRAY_TYPE:
9375       {
9376         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9377         if (domain == error_mark_node)
9378           return error_mark_node;
9379
9380         /* As an optimization, we avoid regenerating the array type if
9381            it will obviously be the same as T.  */
9382         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9383           return t;
9384
9385         /* These checks should match the ones in grokdeclarator.
9386
9387            [temp.deduct]
9388
9389            The deduction may fail for any of the following reasons:
9390
9391            -- Attempting to create an array with an element type that
9392               is void, a function type, or a reference type, or [DR337]
9393               an abstract class type.  */
9394         if (TREE_CODE (type) == VOID_TYPE
9395             || TREE_CODE (type) == FUNCTION_TYPE
9396             || TREE_CODE (type) == REFERENCE_TYPE)
9397           {
9398             if (complain & tf_error)
9399               error ("creating array of %qT", type);
9400             return error_mark_node;
9401           }
9402         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9403           {
9404             if (complain & tf_error)
9405               error ("creating array of %qT, which is an abstract class type",
9406                      type);
9407             return error_mark_node;
9408           }
9409
9410         r = build_cplus_array_type (type, domain);
9411
9412         if (TYPE_USER_ALIGN (t))
9413           {
9414             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9415             TYPE_USER_ALIGN (r) = 1;
9416           }
9417
9418         return r;
9419       }
9420
9421     case PLUS_EXPR:
9422     case MINUS_EXPR:
9423       {
9424         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9425         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9426
9427         if (e1 == error_mark_node || e2 == error_mark_node)
9428           return error_mark_node;
9429
9430         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9431       }
9432
9433     case NEGATE_EXPR:
9434     case NOP_EXPR:
9435       {
9436         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9437         if (e == error_mark_node)
9438           return error_mark_node;
9439
9440         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9441       }
9442
9443     case TYPENAME_TYPE:
9444       {
9445         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9446                                      in_decl, /*entering_scope=*/1);
9447         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9448                               complain, in_decl);
9449
9450         if (ctx == error_mark_node || f == error_mark_node)
9451           return error_mark_node;
9452
9453         if (!MAYBE_CLASS_TYPE_P (ctx))
9454           {
9455             if (complain & tf_error)
9456               error ("%qT is not a class, struct, or union type", ctx);
9457             return error_mark_node;
9458           }
9459         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9460           {
9461             /* Normally, make_typename_type does not require that the CTX
9462                have complete type in order to allow things like:
9463
9464                  template <class T> struct S { typename S<T>::X Y; };
9465
9466                But, such constructs have already been resolved by this
9467                point, so here CTX really should have complete type, unless
9468                it's a partial instantiation.  */
9469             ctx = complete_type (ctx);
9470             if (!COMPLETE_TYPE_P (ctx))
9471               {
9472                 if (complain & tf_error)
9473                   cxx_incomplete_type_error (NULL_TREE, ctx);
9474                 return error_mark_node;
9475               }
9476           }
9477
9478         f = make_typename_type (ctx, f, typename_type,
9479                                 (complain & tf_error) | tf_keep_type_decl);
9480         if (f == error_mark_node)
9481           return f;
9482         if (TREE_CODE (f) == TYPE_DECL)
9483           {
9484             complain |= tf_ignore_bad_quals;
9485             f = TREE_TYPE (f);
9486           }
9487
9488         if (TREE_CODE (f) != TYPENAME_TYPE)
9489           {
9490             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9491               error ("%qT resolves to %qT, which is not an enumeration type",
9492                      t, f);
9493             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9494               error ("%qT resolves to %qT, which is is not a class type",
9495                      t, f);
9496           }
9497
9498         return cp_build_qualified_type_real
9499           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9500       }
9501
9502     case UNBOUND_CLASS_TEMPLATE:
9503       {
9504         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9505                                      in_decl, /*entering_scope=*/1);
9506         tree name = TYPE_IDENTIFIER (t);
9507         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9508
9509         if (ctx == error_mark_node || name == error_mark_node)
9510           return error_mark_node;
9511
9512         if (parm_list)
9513           parm_list = tsubst_template_parms (parm_list, args, complain);
9514         return make_unbound_class_template (ctx, name, parm_list, complain);
9515       }
9516
9517     case INDIRECT_REF:
9518     case ADDR_EXPR:
9519     case CALL_EXPR:
9520       gcc_unreachable ();
9521
9522     case ARRAY_REF:
9523       {
9524         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9525         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9526                                /*integral_constant_expression_p=*/false);
9527         if (e1 == error_mark_node || e2 == error_mark_node)
9528           return error_mark_node;
9529
9530         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9531       }
9532
9533     case SCOPE_REF:
9534       {
9535         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9536         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9537         if (e1 == error_mark_node || e2 == error_mark_node)
9538           return error_mark_node;
9539
9540         return build_qualified_name (/*type=*/NULL_TREE,
9541                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9542       }
9543
9544     case TYPEOF_TYPE:
9545       {
9546         tree type;
9547
9548         type = finish_typeof (tsubst_expr 
9549                               (TYPEOF_TYPE_EXPR (t), args,
9550                                complain, in_decl,
9551                                /*integral_constant_expression_p=*/false));
9552         return cp_build_qualified_type_real (type,
9553                                              cp_type_quals (t)
9554                                              | cp_type_quals (type),
9555                                              complain);
9556       }
9557
9558     case DECLTYPE_TYPE:
9559       {
9560         tree type;
9561
9562         type = 
9563           finish_decltype_type (tsubst_expr 
9564                                 (DECLTYPE_TYPE_EXPR (t), args,
9565                                  complain, in_decl,
9566                                  /*integral_constant_expression_p=*/false),
9567                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9568         return cp_build_qualified_type_real (type,
9569                                              cp_type_quals (t)
9570                                              | cp_type_quals (type),
9571                                              complain);
9572       }
9573
9574     case TYPE_ARGUMENT_PACK:
9575     case NONTYPE_ARGUMENT_PACK:
9576       {
9577         tree r = make_node (TREE_CODE (t));
9578         tree packed_out = 
9579           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9580                                 args,
9581                                 complain,
9582                                 in_decl);
9583         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9584
9585         /* For template nontype argument packs, also substitute into
9586            the type.  */
9587         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9588           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9589
9590         return r;
9591       }
9592       break;
9593
9594     default:
9595       sorry ("use of %qs in template",
9596              tree_code_name [(int) TREE_CODE (t)]);
9597       return error_mark_node;
9598     }
9599 }
9600
9601 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9602    type of the expression on the left-hand side of the "." or "->"
9603    operator.  */
9604
9605 static tree
9606 tsubst_baselink (tree baselink, tree object_type,
9607                  tree args, tsubst_flags_t complain, tree in_decl)
9608 {
9609     tree name;
9610     tree qualifying_scope;
9611     tree fns;
9612     tree optype;
9613     tree template_args = 0;
9614     bool template_id_p = false;
9615
9616     /* A baselink indicates a function from a base class.  Both the
9617        BASELINK_ACCESS_BINFO and the base class referenced may
9618        indicate bases of the template class, rather than the
9619        instantiated class.  In addition, lookups that were not
9620        ambiguous before may be ambiguous now.  Therefore, we perform
9621        the lookup again.  */
9622     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9623     qualifying_scope = tsubst (qualifying_scope, args,
9624                                complain, in_decl);
9625     fns = BASELINK_FUNCTIONS (baselink);
9626     optype = BASELINK_OPTYPE (baselink);
9627     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9628       {
9629         template_id_p = true;
9630         template_args = TREE_OPERAND (fns, 1);
9631         fns = TREE_OPERAND (fns, 0);
9632         if (template_args)
9633           template_args = tsubst_template_args (template_args, args,
9634                                                 complain, in_decl);
9635       }
9636     name = DECL_NAME (get_first_fn (fns));
9637     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9638
9639     /* If lookup found a single function, mark it as used at this
9640        point.  (If it lookup found multiple functions the one selected
9641        later by overload resolution will be marked as used at that
9642        point.)  */
9643     if (BASELINK_P (baselink))
9644       fns = BASELINK_FUNCTIONS (baselink);
9645     if (!template_id_p && !really_overloaded_fn (fns))
9646       mark_used (OVL_CURRENT (fns));
9647
9648     /* Add back the template arguments, if present.  */
9649     if (BASELINK_P (baselink) && template_id_p)
9650       BASELINK_FUNCTIONS (baselink)
9651         = build_nt (TEMPLATE_ID_EXPR,
9652                     BASELINK_FUNCTIONS (baselink),
9653                     template_args);
9654     /* Update the conversion operator type.  */
9655     BASELINK_OPTYPE (baselink) 
9656       = tsubst (optype, args, complain, in_decl);
9657
9658     if (!object_type)
9659       object_type = current_class_type;
9660     return adjust_result_of_qualified_name_lookup (baselink,
9661                                                    qualifying_scope,
9662                                                    object_type);
9663 }
9664
9665 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9666    true if the qualified-id will be a postfix-expression in-and-of
9667    itself; false if more of the postfix-expression follows the
9668    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9669    of "&".  */
9670
9671 static tree
9672 tsubst_qualified_id (tree qualified_id, tree args,
9673                      tsubst_flags_t complain, tree in_decl,
9674                      bool done, bool address_p)
9675 {
9676   tree expr;
9677   tree scope;
9678   tree name;
9679   bool is_template;
9680   tree template_args;
9681
9682   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9683
9684   /* Figure out what name to look up.  */
9685   name = TREE_OPERAND (qualified_id, 1);
9686   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9687     {
9688       is_template = true;
9689       template_args = TREE_OPERAND (name, 1);
9690       if (template_args)
9691         template_args = tsubst_template_args (template_args, args,
9692                                               complain, in_decl);
9693       name = TREE_OPERAND (name, 0);
9694     }
9695   else
9696     {
9697       is_template = false;
9698       template_args = NULL_TREE;
9699     }
9700
9701   /* Substitute into the qualifying scope.  When there are no ARGS, we
9702      are just trying to simplify a non-dependent expression.  In that
9703      case the qualifying scope may be dependent, and, in any case,
9704      substituting will not help.  */
9705   scope = TREE_OPERAND (qualified_id, 0);
9706   if (args)
9707     {
9708       scope = tsubst (scope, args, complain, in_decl);
9709       expr = tsubst_copy (name, args, complain, in_decl);
9710     }
9711   else
9712     expr = name;
9713
9714   if (dependent_type_p (scope))
9715     return build_qualified_name (/*type=*/NULL_TREE,
9716                                  scope, expr,
9717                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9718
9719   if (!BASELINK_P (name) && !DECL_P (expr))
9720     {
9721       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9722         /* If this were actually a destructor call, it would have been
9723            parsed as such by the parser.  */
9724         expr = error_mark_node;
9725       else
9726         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9727       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9728                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9729         {
9730           if (complain & tf_error)
9731             {
9732               error ("dependent-name %qE is parsed as a non-type, but "
9733                      "instantiation yields a type", qualified_id);
9734               inform ("say %<typename %E%> if a type is meant", qualified_id);
9735             }
9736           return error_mark_node;
9737         }
9738     }
9739
9740   if (DECL_P (expr))
9741     {
9742       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9743                                            scope);
9744       /* Remember that there was a reference to this entity.  */
9745       mark_used (expr);
9746     }
9747
9748   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9749     {
9750       if (complain & tf_error)
9751         qualified_name_lookup_error (scope,
9752                                      TREE_OPERAND (qualified_id, 1),
9753                                      expr);
9754       return error_mark_node;
9755     }
9756
9757   if (is_template)
9758     expr = lookup_template_function (expr, template_args);
9759
9760   if (expr == error_mark_node && complain & tf_error)
9761     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9762                                  expr);
9763   else if (TYPE_P (scope))
9764     {
9765       expr = (adjust_result_of_qualified_name_lookup
9766               (expr, scope, current_class_type));
9767       expr = (finish_qualified_id_expr
9768               (scope, expr, done, address_p,
9769                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9770                /*template_arg_p=*/false));
9771     }
9772
9773   /* Expressions do not generally have reference type.  */
9774   if (TREE_CODE (expr) != SCOPE_REF
9775       /* However, if we're about to form a pointer-to-member, we just
9776          want the referenced member referenced.  */
9777       && TREE_CODE (expr) != OFFSET_REF)
9778     expr = convert_from_reference (expr);
9779
9780   return expr;
9781 }
9782
9783 /* Like tsubst, but deals with expressions.  This function just replaces
9784    template parms; to finish processing the resultant expression, use
9785    tsubst_expr.  */
9786
9787 static tree
9788 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9789 {
9790   enum tree_code code;
9791   tree r;
9792
9793   if (t == NULL_TREE || t == error_mark_node)
9794     return t;
9795
9796   code = TREE_CODE (t);
9797
9798   switch (code)
9799     {
9800     case PARM_DECL:
9801       r = retrieve_local_specialization (t);
9802       gcc_assert (r != NULL);
9803       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9804         r = ARGUMENT_PACK_SELECT_ARG (r);
9805       mark_used (r);
9806       return r;
9807
9808     case CONST_DECL:
9809       {
9810         tree enum_type;
9811         tree v;
9812
9813         if (DECL_TEMPLATE_PARM_P (t))
9814           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9815         /* There is no need to substitute into namespace-scope
9816            enumerators.  */
9817         if (DECL_NAMESPACE_SCOPE_P (t))
9818           return t;
9819         /* If ARGS is NULL, then T is known to be non-dependent.  */
9820         if (args == NULL_TREE)
9821           return integral_constant_value (t);
9822
9823         /* Unfortunately, we cannot just call lookup_name here.
9824            Consider:
9825
9826              template <int I> int f() {
9827              enum E { a = I };
9828              struct S { void g() { E e = a; } };
9829              };
9830
9831            When we instantiate f<7>::S::g(), say, lookup_name is not
9832            clever enough to find f<7>::a.  */
9833         enum_type
9834           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9835                               /*entering_scope=*/0);
9836
9837         for (v = TYPE_VALUES (enum_type);
9838              v != NULL_TREE;
9839              v = TREE_CHAIN (v))
9840           if (TREE_PURPOSE (v) == DECL_NAME (t))
9841             return TREE_VALUE (v);
9842
9843           /* We didn't find the name.  That should never happen; if
9844              name-lookup found it during preliminary parsing, we
9845              should find it again here during instantiation.  */
9846         gcc_unreachable ();
9847       }
9848       return t;
9849
9850     case FIELD_DECL:
9851       if (DECL_CONTEXT (t))
9852         {
9853           tree ctx;
9854
9855           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9856                                   /*entering_scope=*/1);
9857           if (ctx != DECL_CONTEXT (t))
9858             {
9859               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9860               if (!r)
9861                 {
9862                   if (complain & tf_error)
9863                     error ("using invalid field %qD", t);
9864                   return error_mark_node;
9865                 }
9866               return r;
9867             }
9868         }
9869
9870       return t;
9871
9872     case VAR_DECL:
9873     case FUNCTION_DECL:
9874       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9875           || local_variable_p (t))
9876         t = tsubst (t, args, complain, in_decl);
9877       mark_used (t);
9878       return t;
9879
9880     case BASELINK:
9881       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9882
9883     case TEMPLATE_DECL:
9884       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9885         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9886                        args, complain, in_decl);
9887       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9888         return tsubst (t, args, complain, in_decl);
9889       else if (DECL_CLASS_SCOPE_P (t)
9890                && uses_template_parms (DECL_CONTEXT (t)))
9891         {
9892           /* Template template argument like the following example need
9893              special treatment:
9894
9895                template <template <class> class TT> struct C {};
9896                template <class T> struct D {
9897                  template <class U> struct E {};
9898                  C<E> c;                                // #1
9899                };
9900                D<int> d;                                // #2
9901
9902              We are processing the template argument `E' in #1 for
9903              the template instantiation #2.  Originally, `E' is a
9904              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9905              have to substitute this with one having context `D<int>'.  */
9906
9907           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9908           return lookup_field (context, DECL_NAME(t), 0, false);
9909         }
9910       else
9911         /* Ordinary template template argument.  */
9912         return t;
9913
9914     case CAST_EXPR:
9915     case REINTERPRET_CAST_EXPR:
9916     case CONST_CAST_EXPR:
9917     case STATIC_CAST_EXPR:
9918     case DYNAMIC_CAST_EXPR:
9919     case NOP_EXPR:
9920       return build1
9921         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9922          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9923
9924     case SIZEOF_EXPR:
9925       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9926         {
9927           /* We only want to compute the number of arguments.  */
9928           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9929                                                 complain, in_decl);
9930           int len = 0;
9931
9932           if (TREE_CODE (expanded) == TREE_VEC)
9933             len = TREE_VEC_LENGTH (expanded);
9934
9935           if (expanded == error_mark_node)
9936             return error_mark_node;
9937           else if (PACK_EXPANSION_P (expanded)
9938                    || (TREE_CODE (expanded) == TREE_VEC
9939                        && len > 0
9940                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9941             {
9942               if (TREE_CODE (expanded) == TREE_VEC)
9943                 expanded = TREE_VEC_ELT (expanded, len - 1);
9944
9945               if (TYPE_P (expanded))
9946                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9947                                                    complain & tf_error);
9948               else
9949                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9950                                                    complain & tf_error);
9951             }
9952           else
9953             return build_int_cst (size_type_node, len);
9954         }
9955       /* Fall through */
9956
9957     case INDIRECT_REF:
9958     case NEGATE_EXPR:
9959     case TRUTH_NOT_EXPR:
9960     case BIT_NOT_EXPR:
9961     case ADDR_EXPR:
9962     case UNARY_PLUS_EXPR:      /* Unary + */
9963     case ALIGNOF_EXPR:
9964     case ARROW_EXPR:
9965     case THROW_EXPR:
9966     case TYPEID_EXPR:
9967     case REALPART_EXPR:
9968     case IMAGPART_EXPR:
9969       return build1
9970         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9971          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9972
9973     case COMPONENT_REF:
9974       {
9975         tree object;
9976         tree name;
9977
9978         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9979         name = TREE_OPERAND (t, 1);
9980         if (TREE_CODE (name) == BIT_NOT_EXPR)
9981           {
9982             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9983                                 complain, in_decl);
9984             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9985           }
9986         else if (TREE_CODE (name) == SCOPE_REF
9987                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9988           {
9989             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9990                                      complain, in_decl);
9991             name = TREE_OPERAND (name, 1);
9992             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9993                                 complain, in_decl);
9994             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9995             name = build_qualified_name (/*type=*/NULL_TREE,
9996                                          base, name,
9997                                          /*template_p=*/false);
9998           }
9999         else if (TREE_CODE (name) == BASELINK)
10000           name = tsubst_baselink (name,
10001                                   non_reference (TREE_TYPE (object)),
10002                                   args, complain,
10003                                   in_decl);
10004         else
10005           name = tsubst_copy (name, args, complain, in_decl);
10006         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
10007       }
10008
10009     case PLUS_EXPR:
10010     case MINUS_EXPR:
10011     case MULT_EXPR:
10012     case TRUNC_DIV_EXPR:
10013     case CEIL_DIV_EXPR:
10014     case FLOOR_DIV_EXPR:
10015     case ROUND_DIV_EXPR:
10016     case EXACT_DIV_EXPR:
10017     case BIT_AND_EXPR:
10018     case BIT_IOR_EXPR:
10019     case BIT_XOR_EXPR:
10020     case TRUNC_MOD_EXPR:
10021     case FLOOR_MOD_EXPR:
10022     case TRUTH_ANDIF_EXPR:
10023     case TRUTH_ORIF_EXPR:
10024     case TRUTH_AND_EXPR:
10025     case TRUTH_OR_EXPR:
10026     case RSHIFT_EXPR:
10027     case LSHIFT_EXPR:
10028     case RROTATE_EXPR:
10029     case LROTATE_EXPR:
10030     case EQ_EXPR:
10031     case NE_EXPR:
10032     case MAX_EXPR:
10033     case MIN_EXPR:
10034     case LE_EXPR:
10035     case GE_EXPR:
10036     case LT_EXPR:
10037     case GT_EXPR:
10038     case COMPOUND_EXPR:
10039     case DOTSTAR_EXPR:
10040     case MEMBER_REF:
10041     case PREDECREMENT_EXPR:
10042     case PREINCREMENT_EXPR:
10043     case POSTDECREMENT_EXPR:
10044     case POSTINCREMENT_EXPR:
10045       return build_nt
10046         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10047          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10048
10049     case SCOPE_REF:
10050       return build_qualified_name (/*type=*/NULL_TREE,
10051                                    tsubst_copy (TREE_OPERAND (t, 0),
10052                                                 args, complain, in_decl),
10053                                    tsubst_copy (TREE_OPERAND (t, 1),
10054                                                 args, complain, in_decl),
10055                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10056
10057     case ARRAY_REF:
10058       return build_nt
10059         (ARRAY_REF,
10060          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10061          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10062          NULL_TREE, NULL_TREE);
10063
10064     case CALL_EXPR:
10065       {
10066         int n = VL_EXP_OPERAND_LENGTH (t);
10067         tree result = build_vl_exp (CALL_EXPR, n);
10068         int i;
10069         for (i = 0; i < n; i++)
10070           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10071                                              complain, in_decl);
10072         return result;
10073       }
10074
10075     case COND_EXPR:
10076     case MODOP_EXPR:
10077     case PSEUDO_DTOR_EXPR:
10078       {
10079         r = build_nt
10080           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10081            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10082            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10083         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10084         return r;
10085       }
10086
10087     case NEW_EXPR:
10088       {
10089         r = build_nt
10090         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10091          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10092          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10093         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10094         return r;
10095       }
10096
10097     case DELETE_EXPR:
10098       {
10099         r = build_nt
10100         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10101          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10102         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10103         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10104         return r;
10105       }
10106
10107     case TEMPLATE_ID_EXPR:
10108       {
10109         /* Substituted template arguments */
10110         tree fn = TREE_OPERAND (t, 0);
10111         tree targs = TREE_OPERAND (t, 1);
10112
10113         fn = tsubst_copy (fn, args, complain, in_decl);
10114         if (targs)
10115           targs = tsubst_template_args (targs, args, complain, in_decl);
10116
10117         return lookup_template_function (fn, targs);
10118       }
10119
10120     case TREE_LIST:
10121       {
10122         tree purpose, value, chain;
10123
10124         if (t == void_list_node)
10125           return t;
10126
10127         purpose = TREE_PURPOSE (t);
10128         if (purpose)
10129           purpose = tsubst_copy (purpose, args, complain, in_decl);
10130         value = TREE_VALUE (t);
10131         if (value)
10132           value = tsubst_copy (value, args, complain, in_decl);
10133         chain = TREE_CHAIN (t);
10134         if (chain && chain != void_type_node)
10135           chain = tsubst_copy (chain, args, complain, in_decl);
10136         if (purpose == TREE_PURPOSE (t)
10137             && value == TREE_VALUE (t)
10138             && chain == TREE_CHAIN (t))
10139           return t;
10140         return tree_cons (purpose, value, chain);
10141       }
10142
10143     case RECORD_TYPE:
10144     case UNION_TYPE:
10145     case ENUMERAL_TYPE:
10146     case INTEGER_TYPE:
10147     case TEMPLATE_TYPE_PARM:
10148     case TEMPLATE_TEMPLATE_PARM:
10149     case BOUND_TEMPLATE_TEMPLATE_PARM:
10150     case TEMPLATE_PARM_INDEX:
10151     case POINTER_TYPE:
10152     case REFERENCE_TYPE:
10153     case OFFSET_TYPE:
10154     case FUNCTION_TYPE:
10155     case METHOD_TYPE:
10156     case ARRAY_TYPE:
10157     case TYPENAME_TYPE:
10158     case UNBOUND_CLASS_TEMPLATE:
10159     case TYPEOF_TYPE:
10160     case DECLTYPE_TYPE:
10161     case TYPE_DECL:
10162       return tsubst (t, args, complain, in_decl);
10163
10164     case IDENTIFIER_NODE:
10165       if (IDENTIFIER_TYPENAME_P (t))
10166         {
10167           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10168           return mangle_conv_op_name_for_type (new_type);
10169         }
10170       else
10171         return t;
10172
10173     case CONSTRUCTOR:
10174       /* This is handled by tsubst_copy_and_build.  */
10175       gcc_unreachable ();
10176
10177     case VA_ARG_EXPR:
10178       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10179                                           in_decl),
10180                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10181
10182     case CLEANUP_POINT_EXPR:
10183       /* We shouldn't have built any of these during initial template
10184          generation.  Instead, they should be built during instantiation
10185          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10186       gcc_unreachable ();
10187
10188     case OFFSET_REF:
10189       mark_used (TREE_OPERAND (t, 1));
10190       return t;
10191
10192     case EXPR_PACK_EXPANSION:
10193       error ("invalid use of pack expansion expression");
10194       return error_mark_node;
10195
10196     case NONTYPE_ARGUMENT_PACK:
10197       error ("use %<...%> to expand argument pack");
10198       return error_mark_node;
10199
10200     default:
10201       return t;
10202     }
10203 }
10204
10205 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10206
10207 static tree
10208 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10209                     tree in_decl)
10210 {
10211   tree new_clauses = NULL, nc, oc;
10212
10213   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10214     {
10215       nc = copy_node (oc);
10216       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10217       new_clauses = nc;
10218
10219       switch (OMP_CLAUSE_CODE (nc))
10220         {
10221         case OMP_CLAUSE_LASTPRIVATE:
10222           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10223             {
10224               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10225               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10226                            in_decl, /*integral_constant_expression_p=*/false);
10227               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10228                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10229             }
10230           /* FALLTHRU */
10231         case OMP_CLAUSE_PRIVATE:
10232         case OMP_CLAUSE_SHARED:
10233         case OMP_CLAUSE_FIRSTPRIVATE:
10234         case OMP_CLAUSE_REDUCTION:
10235         case OMP_CLAUSE_COPYIN:
10236         case OMP_CLAUSE_COPYPRIVATE:
10237         case OMP_CLAUSE_IF:
10238         case OMP_CLAUSE_NUM_THREADS:
10239         case OMP_CLAUSE_SCHEDULE:
10240         case OMP_CLAUSE_COLLAPSE:
10241           OMP_CLAUSE_OPERAND (nc, 0)
10242             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10243                            in_decl, /*integral_constant_expression_p=*/false);
10244           break;
10245         case OMP_CLAUSE_NOWAIT:
10246         case OMP_CLAUSE_ORDERED:
10247         case OMP_CLAUSE_DEFAULT:
10248         case OMP_CLAUSE_UNTIED:
10249           break;
10250         default:
10251           gcc_unreachable ();
10252         }
10253     }
10254
10255   return finish_omp_clauses (nreverse (new_clauses));
10256 }
10257
10258 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10259
10260 static tree
10261 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10262                           tree in_decl)
10263 {
10264 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10265
10266   tree purpose, value, chain;
10267
10268   if (t == NULL)
10269     return t;
10270
10271   if (TREE_CODE (t) != TREE_LIST)
10272     return tsubst_copy_and_build (t, args, complain, in_decl,
10273                                   /*function_p=*/false,
10274                                   /*integral_constant_expression_p=*/false);
10275
10276   if (t == void_list_node)
10277     return t;
10278
10279   purpose = TREE_PURPOSE (t);
10280   if (purpose)
10281     purpose = RECUR (purpose);
10282   value = TREE_VALUE (t);
10283   if (value)
10284     value = RECUR (value);
10285   chain = TREE_CHAIN (t);
10286   if (chain && chain != void_type_node)
10287     chain = RECUR (chain);
10288   return tree_cons (purpose, value, chain);
10289 #undef RECUR
10290 }
10291
10292 /* Substitute one OMP_FOR iterator.  */
10293
10294 static void
10295 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10296                          tree condv, tree incrv, tree *clauses,
10297                          tree args, tsubst_flags_t complain, tree in_decl,
10298                          bool integral_constant_expression_p)
10299 {
10300 #define RECUR(NODE)                             \
10301   tsubst_expr ((NODE), args, complain, in_decl, \
10302                integral_constant_expression_p)
10303   tree decl, init, cond, incr;
10304
10305   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10306   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10307   decl = RECUR (TREE_OPERAND (init, 0));
10308   init = TREE_OPERAND (init, 1);
10309   gcc_assert (!type_dependent_expression_p (decl));
10310
10311   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10312     {
10313       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10314       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10315       if (TREE_CODE (incr) == MODIFY_EXPR)
10316         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10317                                     RECUR (TREE_OPERAND (incr, 1)),
10318                                     complain);
10319       else
10320         incr = RECUR (incr);
10321       TREE_VEC_ELT (declv, i) = decl;
10322       TREE_VEC_ELT (initv, i) = init;
10323       TREE_VEC_ELT (condv, i) = cond;
10324       TREE_VEC_ELT (incrv, i) = incr;
10325       return;
10326     }
10327
10328   if (init && TREE_CODE (init) != DECL_EXPR)
10329     {
10330       tree c;
10331       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10332         {
10333           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10334                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10335               && OMP_CLAUSE_DECL (c) == decl)
10336             break;
10337           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10338                    && OMP_CLAUSE_DECL (c) == decl)
10339             error ("iteration variable %qD should not be firstprivate", decl);
10340           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10341                    && OMP_CLAUSE_DECL (c) == decl)
10342             error ("iteration variable %qD should not be reduction", decl);
10343         }
10344       if (c == NULL)
10345         {
10346           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10347           OMP_CLAUSE_DECL (c) = decl;
10348           c = finish_omp_clauses (c);
10349           if (c)
10350             {
10351               OMP_CLAUSE_CHAIN (c) = *clauses;
10352               *clauses = c;
10353             }
10354         }
10355     }
10356   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10357   if (COMPARISON_CLASS_P (cond))
10358     cond = build2 (TREE_CODE (cond), boolean_type_node,
10359                    RECUR (TREE_OPERAND (cond, 0)),
10360                    RECUR (TREE_OPERAND (cond, 1)));
10361   else
10362     cond = RECUR (cond);
10363   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10364   switch (TREE_CODE (incr))
10365     {
10366     case PREINCREMENT_EXPR:
10367     case PREDECREMENT_EXPR:
10368     case POSTINCREMENT_EXPR:
10369     case POSTDECREMENT_EXPR:
10370       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10371                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10372       break;
10373     case MODIFY_EXPR:
10374       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10375           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10376         {
10377           tree rhs = TREE_OPERAND (incr, 1);
10378           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10379                          RECUR (TREE_OPERAND (incr, 0)),
10380                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10381                                  RECUR (TREE_OPERAND (rhs, 0)),
10382                                  RECUR (TREE_OPERAND (rhs, 1))));
10383         }
10384       else
10385         incr = RECUR (incr);
10386       break;
10387     case MODOP_EXPR:
10388       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10389           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10390         {
10391           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10392           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10393                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10394                                  TREE_TYPE (decl), lhs,
10395                                  RECUR (TREE_OPERAND (incr, 2))));
10396         }
10397       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10398                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10399                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10400         {
10401           tree rhs = TREE_OPERAND (incr, 2);
10402           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10403                          RECUR (TREE_OPERAND (incr, 0)),
10404                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10405                                  RECUR (TREE_OPERAND (rhs, 0)),
10406                                  RECUR (TREE_OPERAND (rhs, 1))));
10407         }
10408       else
10409         incr = RECUR (incr);
10410       break;
10411     default:
10412       incr = RECUR (incr);
10413       break;
10414     }
10415
10416   TREE_VEC_ELT (declv, i) = decl;
10417   TREE_VEC_ELT (initv, i) = init;
10418   TREE_VEC_ELT (condv, i) = cond;
10419   TREE_VEC_ELT (incrv, i) = incr;
10420 #undef RECUR
10421 }
10422
10423 /* Like tsubst_copy for expressions, etc. but also does semantic
10424    processing.  */
10425
10426 static tree
10427 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10428              bool integral_constant_expression_p)
10429 {
10430 #define RECUR(NODE)                             \
10431   tsubst_expr ((NODE), args, complain, in_decl, \
10432                integral_constant_expression_p)
10433
10434   tree stmt, tmp;
10435
10436   if (t == NULL_TREE || t == error_mark_node)
10437     return t;
10438
10439   if (EXPR_HAS_LOCATION (t))
10440     input_location = EXPR_LOCATION (t);
10441   if (STATEMENT_CODE_P (TREE_CODE (t)))
10442     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10443
10444   switch (TREE_CODE (t))
10445     {
10446     case STATEMENT_LIST:
10447       {
10448         tree_stmt_iterator i;
10449         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10450           RECUR (tsi_stmt (i));
10451         break;
10452       }
10453
10454     case CTOR_INITIALIZER:
10455       finish_mem_initializers (tsubst_initializer_list
10456                                (TREE_OPERAND (t, 0), args));
10457       break;
10458
10459     case RETURN_EXPR:
10460       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10461       break;
10462
10463     case EXPR_STMT:
10464       tmp = RECUR (EXPR_STMT_EXPR (t));
10465       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10466         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10467       else
10468         finish_expr_stmt (tmp);
10469       break;
10470
10471     case USING_STMT:
10472       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10473       break;
10474
10475     case DECL_EXPR:
10476       {
10477         tree decl;
10478         tree init;
10479
10480         decl = DECL_EXPR_DECL (t);
10481         if (TREE_CODE (decl) == LABEL_DECL)
10482           finish_label_decl (DECL_NAME (decl));
10483         else if (TREE_CODE (decl) == USING_DECL)
10484           {
10485             tree scope = USING_DECL_SCOPE (decl);
10486             tree name = DECL_NAME (decl);
10487             tree decl;
10488
10489             scope = RECUR (scope);
10490             decl = lookup_qualified_name (scope, name,
10491                                           /*is_type_p=*/false,
10492                                           /*complain=*/false);
10493             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10494               qualified_name_lookup_error (scope, name, decl);
10495             else
10496               do_local_using_decl (decl, scope, name);
10497           }
10498         else
10499           {
10500             init = DECL_INITIAL (decl);
10501             decl = tsubst (decl, args, complain, in_decl);
10502             if (decl != error_mark_node)
10503               {
10504                 /* By marking the declaration as instantiated, we avoid
10505                    trying to instantiate it.  Since instantiate_decl can't
10506                    handle local variables, and since we've already done
10507                    all that needs to be done, that's the right thing to
10508                    do.  */
10509                 if (TREE_CODE (decl) == VAR_DECL)
10510                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10511                 if (TREE_CODE (decl) == VAR_DECL
10512                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10513                   /* Anonymous aggregates are a special case.  */
10514                   finish_anon_union (decl);
10515                 else
10516                   {
10517                     maybe_push_decl (decl);
10518                     if (TREE_CODE (decl) == VAR_DECL
10519                         && DECL_PRETTY_FUNCTION_P (decl))
10520                       {
10521                         /* For __PRETTY_FUNCTION__ we have to adjust the
10522                            initializer.  */
10523                         const char *const name
10524                           = cxx_printable_name (current_function_decl, 2);
10525                         init = cp_fname_init (name, &TREE_TYPE (decl));
10526                       }
10527                     else
10528                       {
10529                         tree t = RECUR (init);
10530
10531                         if (init && !t)
10532                           /* If we had an initializer but it
10533                              instantiated to nothing,
10534                              value-initialize the object.  This will
10535                              only occur when the initializer was a
10536                              pack expansion where the parameter packs
10537                              used in that expansion were of length
10538                              zero.  */
10539                           init = build_default_init (TREE_TYPE (decl),
10540                                                      NULL_TREE);
10541                         else
10542                           init = t;
10543                       }
10544
10545                     finish_decl (decl, init, NULL_TREE);
10546                   }
10547               }
10548           }
10549
10550         /* A DECL_EXPR can also be used as an expression, in the condition
10551            clause of an if/for/while construct.  */
10552         return decl;
10553       }
10554
10555     case FOR_STMT:
10556       stmt = begin_for_stmt ();
10557                           RECUR (FOR_INIT_STMT (t));
10558       finish_for_init_stmt (stmt);
10559       tmp = RECUR (FOR_COND (t));
10560       finish_for_cond (tmp, stmt);
10561       tmp = RECUR (FOR_EXPR (t));
10562       finish_for_expr (tmp, stmt);
10563       RECUR (FOR_BODY (t));
10564       finish_for_stmt (stmt);
10565       break;
10566
10567     case WHILE_STMT:
10568       stmt = begin_while_stmt ();
10569       tmp = RECUR (WHILE_COND (t));
10570       finish_while_stmt_cond (tmp, stmt);
10571       RECUR (WHILE_BODY (t));
10572       finish_while_stmt (stmt);
10573       break;
10574
10575     case DO_STMT:
10576       stmt = begin_do_stmt ();
10577       RECUR (DO_BODY (t));
10578       finish_do_body (stmt);
10579       tmp = RECUR (DO_COND (t));
10580       finish_do_stmt (tmp, stmt);
10581       break;
10582
10583     case IF_STMT:
10584       stmt = begin_if_stmt ();
10585       tmp = RECUR (IF_COND (t));
10586       finish_if_stmt_cond (tmp, stmt);
10587       RECUR (THEN_CLAUSE (t));
10588       finish_then_clause (stmt);
10589
10590       if (ELSE_CLAUSE (t))
10591         {
10592           begin_else_clause (stmt);
10593           RECUR (ELSE_CLAUSE (t));
10594           finish_else_clause (stmt);
10595         }
10596
10597       finish_if_stmt (stmt);
10598       break;
10599
10600     case BIND_EXPR:
10601       if (BIND_EXPR_BODY_BLOCK (t))
10602         stmt = begin_function_body ();
10603       else
10604         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10605                                     ? BCS_TRY_BLOCK : 0);
10606
10607       RECUR (BIND_EXPR_BODY (t));
10608
10609       if (BIND_EXPR_BODY_BLOCK (t))
10610         finish_function_body (stmt);
10611       else
10612         finish_compound_stmt (stmt);
10613       break;
10614
10615     case BREAK_STMT:
10616       finish_break_stmt ();
10617       break;
10618
10619     case CONTINUE_STMT:
10620       finish_continue_stmt ();
10621       break;
10622
10623     case SWITCH_STMT:
10624       stmt = begin_switch_stmt ();
10625       tmp = RECUR (SWITCH_STMT_COND (t));
10626       finish_switch_cond (tmp, stmt);
10627       RECUR (SWITCH_STMT_BODY (t));
10628       finish_switch_stmt (stmt);
10629       break;
10630
10631     case CASE_LABEL_EXPR:
10632       finish_case_label (RECUR (CASE_LOW (t)),
10633                          RECUR (CASE_HIGH (t)));
10634       break;
10635
10636     case LABEL_EXPR:
10637       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10638       break;
10639
10640     case GOTO_EXPR:
10641       tmp = GOTO_DESTINATION (t);
10642       if (TREE_CODE (tmp) != LABEL_DECL)
10643         /* Computed goto's must be tsubst'd into.  On the other hand,
10644            non-computed gotos must not be; the identifier in question
10645            will have no binding.  */
10646         tmp = RECUR (tmp);
10647       else
10648         tmp = DECL_NAME (tmp);
10649       finish_goto_stmt (tmp);
10650       break;
10651
10652     case ASM_EXPR:
10653       tmp = finish_asm_stmt
10654         (ASM_VOLATILE_P (t),
10655          RECUR (ASM_STRING (t)),
10656          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10657          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10658          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10659       {
10660         tree asm_expr = tmp;
10661         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10662           asm_expr = TREE_OPERAND (asm_expr, 0);
10663         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10664       }
10665       break;
10666
10667     case TRY_BLOCK:
10668       if (CLEANUP_P (t))
10669         {
10670           stmt = begin_try_block ();
10671           RECUR (TRY_STMTS (t));
10672           finish_cleanup_try_block (stmt);
10673           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10674         }
10675       else
10676         {
10677           tree compound_stmt = NULL_TREE;
10678
10679           if (FN_TRY_BLOCK_P (t))
10680             stmt = begin_function_try_block (&compound_stmt);
10681           else
10682             stmt = begin_try_block ();
10683
10684           RECUR (TRY_STMTS (t));
10685
10686           if (FN_TRY_BLOCK_P (t))
10687             finish_function_try_block (stmt);
10688           else
10689             finish_try_block (stmt);
10690
10691           RECUR (TRY_HANDLERS (t));
10692           if (FN_TRY_BLOCK_P (t))
10693             finish_function_handler_sequence (stmt, compound_stmt);
10694           else
10695             finish_handler_sequence (stmt);
10696         }
10697       break;
10698
10699     case HANDLER:
10700       {
10701         tree decl = HANDLER_PARMS (t);
10702
10703         if (decl)
10704           {
10705             decl = tsubst (decl, args, complain, in_decl);
10706             /* Prevent instantiate_decl from trying to instantiate
10707                this variable.  We've already done all that needs to be
10708                done.  */
10709             if (decl != error_mark_node)
10710               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10711           }
10712         stmt = begin_handler ();
10713         finish_handler_parms (decl, stmt);
10714         RECUR (HANDLER_BODY (t));
10715         finish_handler (stmt);
10716       }
10717       break;
10718
10719     case TAG_DEFN:
10720       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10721       break;
10722
10723     case STATIC_ASSERT:
10724       {
10725         tree condition = 
10726           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10727                        args,
10728                        complain, in_decl,
10729                        /*integral_constant_expression_p=*/true);
10730         finish_static_assert (condition,
10731                               STATIC_ASSERT_MESSAGE (t),
10732                               STATIC_ASSERT_SOURCE_LOCATION (t),
10733                               /*member_p=*/false);
10734       }
10735       break;
10736
10737     case OMP_PARALLEL:
10738       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10739                                 args, complain, in_decl);
10740       stmt = begin_omp_parallel ();
10741       RECUR (OMP_PARALLEL_BODY (t));
10742       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10743         = OMP_PARALLEL_COMBINED (t);
10744       break;
10745
10746     case OMP_TASK:
10747       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10748                                 args, complain, in_decl);
10749       stmt = begin_omp_task ();
10750       RECUR (OMP_TASK_BODY (t));
10751       finish_omp_task (tmp, stmt);
10752       break;
10753
10754     case OMP_FOR:
10755       {
10756         tree clauses, body, pre_body;
10757         tree declv, initv, condv, incrv;
10758         int i;
10759
10760         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10761                                       args, complain, in_decl);
10762         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10763         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10764         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10765         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10766
10767         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10768           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10769                                    &clauses, args, complain, in_decl,
10770                                    integral_constant_expression_p);
10771
10772         stmt = begin_omp_structured_block ();
10773
10774         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10775           if (TREE_VEC_ELT (initv, i) == NULL
10776               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10777             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10778           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10779             {
10780               tree init = RECUR (TREE_VEC_ELT (initv, i));
10781               gcc_assert (init == TREE_VEC_ELT (declv, i));
10782               TREE_VEC_ELT (initv, i) = NULL_TREE;
10783             }
10784           else
10785             {
10786               tree decl_expr = TREE_VEC_ELT (initv, i);
10787               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10788               gcc_assert (init != NULL);
10789               TREE_VEC_ELT (initv, i) = RECUR (init);
10790               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10791               RECUR (decl_expr);
10792               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10793             }
10794
10795         pre_body = push_stmt_list ();
10796         RECUR (OMP_FOR_PRE_BODY (t));
10797         pre_body = pop_stmt_list (pre_body);
10798
10799         body = push_stmt_list ();
10800         RECUR (OMP_FOR_BODY (t));
10801         body = pop_stmt_list (body);
10802
10803         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10804                             body, pre_body, clauses);
10805
10806         add_stmt (finish_omp_structured_block (stmt));
10807       }
10808       break;
10809
10810     case OMP_SECTIONS:
10811     case OMP_SINGLE:
10812       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10813       stmt = push_stmt_list ();
10814       RECUR (OMP_BODY (t));
10815       stmt = pop_stmt_list (stmt);
10816
10817       t = copy_node (t);
10818       OMP_BODY (t) = stmt;
10819       OMP_CLAUSES (t) = tmp;
10820       add_stmt (t);
10821       break;
10822
10823     case OMP_SECTION:
10824     case OMP_CRITICAL:
10825     case OMP_MASTER:
10826     case OMP_ORDERED:
10827       stmt = push_stmt_list ();
10828       RECUR (OMP_BODY (t));
10829       stmt = pop_stmt_list (stmt);
10830
10831       t = copy_node (t);
10832       OMP_BODY (t) = stmt;
10833       add_stmt (t);
10834       break;
10835
10836     case OMP_ATOMIC:
10837       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10838       {
10839         tree op1 = TREE_OPERAND (t, 1);
10840         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10841         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10842         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10843       }
10844       break;
10845
10846     case EXPR_PACK_EXPANSION:
10847       error ("invalid use of pack expansion expression");
10848       return error_mark_node;
10849
10850     case NONTYPE_ARGUMENT_PACK:
10851       error ("use %<...%> to expand argument pack");
10852       return error_mark_node;
10853
10854     default:
10855       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10856
10857       return tsubst_copy_and_build (t, args, complain, in_decl,
10858                                     /*function_p=*/false,
10859                                     integral_constant_expression_p);
10860     }
10861
10862   return NULL_TREE;
10863 #undef RECUR
10864 }
10865
10866 /* T is a postfix-expression that is not being used in a function
10867    call.  Return the substituted version of T.  */
10868
10869 static tree
10870 tsubst_non_call_postfix_expression (tree t, tree args,
10871                                     tsubst_flags_t complain,
10872                                     tree in_decl)
10873 {
10874   if (TREE_CODE (t) == SCOPE_REF)
10875     t = tsubst_qualified_id (t, args, complain, in_decl,
10876                              /*done=*/false, /*address_p=*/false);
10877   else
10878     t = tsubst_copy_and_build (t, args, complain, in_decl,
10879                                /*function_p=*/false,
10880                                /*integral_constant_expression_p=*/false);
10881
10882   return t;
10883 }
10884
10885 /* Like tsubst but deals with expressions and performs semantic
10886    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10887
10888 tree
10889 tsubst_copy_and_build (tree t,
10890                        tree args,
10891                        tsubst_flags_t complain,
10892                        tree in_decl,
10893                        bool function_p,
10894                        bool integral_constant_expression_p)
10895 {
10896 #define RECUR(NODE)                                             \
10897   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10898                          /*function_p=*/false,                  \
10899                          integral_constant_expression_p)
10900
10901   tree op1;
10902
10903   if (t == NULL_TREE || t == error_mark_node)
10904     return t;
10905
10906   switch (TREE_CODE (t))
10907     {
10908     case USING_DECL:
10909       t = DECL_NAME (t);
10910       /* Fall through.  */
10911     case IDENTIFIER_NODE:
10912       {
10913         tree decl;
10914         cp_id_kind idk;
10915         bool non_integral_constant_expression_p;
10916         const char *error_msg;
10917
10918         if (IDENTIFIER_TYPENAME_P (t))
10919           {
10920             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10921             t = mangle_conv_op_name_for_type (new_type);
10922           }
10923
10924         /* Look up the name.  */
10925         decl = lookup_name (t);
10926
10927         /* By convention, expressions use ERROR_MARK_NODE to indicate
10928            failure, not NULL_TREE.  */
10929         if (decl == NULL_TREE)
10930           decl = error_mark_node;
10931
10932         decl = finish_id_expression (t, decl, NULL_TREE,
10933                                      &idk,
10934                                      integral_constant_expression_p,
10935                                      /*allow_non_integral_constant_expression_p=*/false,
10936                                      &non_integral_constant_expression_p,
10937                                      /*template_p=*/false,
10938                                      /*done=*/true,
10939                                      /*address_p=*/false,
10940                                      /*template_arg_p=*/false,
10941                                      &error_msg);
10942         if (error_msg)
10943           error (error_msg);
10944         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10945           decl = unqualified_name_lookup_error (decl);
10946         return decl;
10947       }
10948
10949     case TEMPLATE_ID_EXPR:
10950       {
10951         tree object;
10952         tree template = RECUR (TREE_OPERAND (t, 0));
10953         tree targs = TREE_OPERAND (t, 1);
10954
10955         if (targs)
10956           targs = tsubst_template_args (targs, args, complain, in_decl);
10957
10958         if (TREE_CODE (template) == COMPONENT_REF)
10959           {
10960             object = TREE_OPERAND (template, 0);
10961             template = TREE_OPERAND (template, 1);
10962           }
10963         else
10964           object = NULL_TREE;
10965         template = lookup_template_function (template, targs);
10966
10967         if (object)
10968           return build3 (COMPONENT_REF, TREE_TYPE (template),
10969                          object, template, NULL_TREE);
10970         else
10971           return baselink_for_fns (template);
10972       }
10973
10974     case INDIRECT_REF:
10975       {
10976         tree r = RECUR (TREE_OPERAND (t, 0));
10977
10978         if (REFERENCE_REF_P (t))
10979           {
10980             /* A type conversion to reference type will be enclosed in
10981                such an indirect ref, but the substitution of the cast
10982                will have also added such an indirect ref.  */
10983             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10984               r = convert_from_reference (r);
10985           }
10986         else
10987           r = build_x_indirect_ref (r, "unary *", complain);
10988         return r;
10989       }
10990
10991     case NOP_EXPR:
10992       return build_nop
10993         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10994          RECUR (TREE_OPERAND (t, 0)));
10995
10996     case CAST_EXPR:
10997     case REINTERPRET_CAST_EXPR:
10998     case CONST_CAST_EXPR:
10999     case DYNAMIC_CAST_EXPR:
11000     case STATIC_CAST_EXPR:
11001       {
11002         tree type;
11003         tree op;
11004
11005         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11006         if (integral_constant_expression_p
11007             && !cast_valid_in_integral_constant_expression_p (type))
11008           {
11009             if (complain & tf_error)
11010               error ("a cast to a type other than an integral or "
11011                      "enumeration type cannot appear in a constant-expression");
11012             return error_mark_node; 
11013           }
11014
11015         op = RECUR (TREE_OPERAND (t, 0));
11016
11017         switch (TREE_CODE (t))
11018           {
11019           case CAST_EXPR:
11020             return build_functional_cast (type, op, complain);
11021           case REINTERPRET_CAST_EXPR:
11022             return build_reinterpret_cast (type, op, complain);
11023           case CONST_CAST_EXPR:
11024             return build_const_cast (type, op, complain);
11025           case DYNAMIC_CAST_EXPR:
11026             return build_dynamic_cast (type, op, complain);
11027           case STATIC_CAST_EXPR:
11028             return build_static_cast (type, op, complain);
11029           default:
11030             gcc_unreachable ();
11031           }
11032       }
11033
11034     case POSTDECREMENT_EXPR:
11035     case POSTINCREMENT_EXPR:
11036       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11037                                                 args, complain, in_decl);
11038       return build_x_unary_op (TREE_CODE (t), op1, complain);
11039
11040     case PREDECREMENT_EXPR:
11041     case PREINCREMENT_EXPR:
11042     case NEGATE_EXPR:
11043     case BIT_NOT_EXPR:
11044     case ABS_EXPR:
11045     case TRUTH_NOT_EXPR:
11046     case UNARY_PLUS_EXPR:  /* Unary + */
11047     case REALPART_EXPR:
11048     case IMAGPART_EXPR:
11049       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11050                                complain);
11051
11052     case ADDR_EXPR:
11053       op1 = TREE_OPERAND (t, 0);
11054       if (TREE_CODE (op1) == SCOPE_REF)
11055         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11056                                    /*done=*/true, /*address_p=*/true);
11057       else
11058         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11059                                                   in_decl);
11060       if (TREE_CODE (op1) == LABEL_DECL)
11061         return finish_label_address_expr (DECL_NAME (op1));
11062       return build_x_unary_op (ADDR_EXPR, op1, complain);
11063
11064     case PLUS_EXPR:
11065     case MINUS_EXPR:
11066     case MULT_EXPR:
11067     case TRUNC_DIV_EXPR:
11068     case CEIL_DIV_EXPR:
11069     case FLOOR_DIV_EXPR:
11070     case ROUND_DIV_EXPR:
11071     case EXACT_DIV_EXPR:
11072     case BIT_AND_EXPR:
11073     case BIT_IOR_EXPR:
11074     case BIT_XOR_EXPR:
11075     case TRUNC_MOD_EXPR:
11076     case FLOOR_MOD_EXPR:
11077     case TRUTH_ANDIF_EXPR:
11078     case TRUTH_ORIF_EXPR:
11079     case TRUTH_AND_EXPR:
11080     case TRUTH_OR_EXPR:
11081     case RSHIFT_EXPR:
11082     case LSHIFT_EXPR:
11083     case RROTATE_EXPR:
11084     case LROTATE_EXPR:
11085     case EQ_EXPR:
11086     case NE_EXPR:
11087     case MAX_EXPR:
11088     case MIN_EXPR:
11089     case LE_EXPR:
11090     case GE_EXPR:
11091     case LT_EXPR:
11092     case GT_EXPR:
11093     case MEMBER_REF:
11094     case DOTSTAR_EXPR:
11095       return build_x_binary_op
11096         (TREE_CODE (t),
11097          RECUR (TREE_OPERAND (t, 0)),
11098          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11099           ? ERROR_MARK
11100           : TREE_CODE (TREE_OPERAND (t, 0))),
11101          RECUR (TREE_OPERAND (t, 1)),
11102          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11103           ? ERROR_MARK
11104           : TREE_CODE (TREE_OPERAND (t, 1))),
11105          /*overloaded_p=*/NULL,
11106          complain);
11107
11108     case SCOPE_REF:
11109       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11110                                   /*address_p=*/false);
11111     case ARRAY_REF:
11112       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11113                                                 args, complain, in_decl);
11114       return build_x_binary_op (ARRAY_REF, op1,
11115                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11116                                  ? ERROR_MARK
11117                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11118                                 RECUR (TREE_OPERAND (t, 1)),
11119                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11120                                  ? ERROR_MARK
11121                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11122                                 /*overloaded_p=*/NULL,
11123                                 complain);
11124
11125     case SIZEOF_EXPR:
11126       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11127         return tsubst_copy (t, args, complain, in_decl);
11128       /* Fall through */
11129       
11130     case ALIGNOF_EXPR:
11131       op1 = TREE_OPERAND (t, 0);
11132       if (!args)
11133         {
11134           /* When there are no ARGS, we are trying to evaluate a
11135              non-dependent expression from the parser.  Trying to do
11136              the substitutions may not work.  */
11137           if (!TYPE_P (op1))
11138             op1 = TREE_TYPE (op1);
11139         }
11140       else
11141         {
11142           ++skip_evaluation;
11143           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11144                                        /*function_p=*/false,
11145                                        /*integral_constant_expression_p=*/false);
11146           --skip_evaluation;
11147         }
11148       if (TYPE_P (op1))
11149         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11150                                            complain & tf_error);
11151       else
11152         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11153                                            complain & tf_error);
11154
11155     case MODOP_EXPR:
11156       {
11157         tree r = build_x_modify_expr
11158           (RECUR (TREE_OPERAND (t, 0)),
11159            TREE_CODE (TREE_OPERAND (t, 1)),
11160            RECUR (TREE_OPERAND (t, 2)),
11161            complain);
11162         /* TREE_NO_WARNING must be set if either the expression was
11163            parenthesized or it uses an operator such as >>= rather
11164            than plain assignment.  In the former case, it was already
11165            set and must be copied.  In the latter case,
11166            build_x_modify_expr sets it and it must not be reset
11167            here.  */
11168         if (TREE_NO_WARNING (t))
11169           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11170         return r;
11171       }
11172
11173     case ARROW_EXPR:
11174       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11175                                                 args, complain, in_decl);
11176       /* Remember that there was a reference to this entity.  */
11177       if (DECL_P (op1))
11178         mark_used (op1);
11179       return build_x_arrow (op1);
11180
11181     case NEW_EXPR:
11182       {
11183         tree init = RECUR (TREE_OPERAND (t, 3));
11184
11185         if (TREE_OPERAND (t, 3) && !init)
11186           /* If there was an initializer in the the original tree, but
11187              it instantiated to an empty list, then we should pass on
11188              VOID_ZERO_NODE to tell build_new that it was an empty
11189              initializer () rather than no initializer.  This can only
11190              happen when the initializer is a pack expansion whose
11191              parameter packs are of length zero.  */
11192           init = void_zero_node;
11193
11194         return build_new
11195           (RECUR (TREE_OPERAND (t, 0)),
11196            RECUR (TREE_OPERAND (t, 1)),
11197            RECUR (TREE_OPERAND (t, 2)),
11198            init,
11199            NEW_EXPR_USE_GLOBAL (t),
11200            complain);
11201       }
11202
11203     case DELETE_EXPR:
11204      return delete_sanity
11205        (RECUR (TREE_OPERAND (t, 0)),
11206         RECUR (TREE_OPERAND (t, 1)),
11207         DELETE_EXPR_USE_VEC (t),
11208         DELETE_EXPR_USE_GLOBAL (t));
11209
11210     case COMPOUND_EXPR:
11211       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11212                                     RECUR (TREE_OPERAND (t, 1)),
11213                                     complain);
11214
11215     case CALL_EXPR:
11216       {
11217         tree function;
11218         tree call_args;
11219         bool qualified_p;
11220         bool koenig_p;
11221
11222         function = CALL_EXPR_FN (t);
11223         /* When we parsed the expression,  we determined whether or
11224            not Koenig lookup should be performed.  */
11225         koenig_p = KOENIG_LOOKUP_P (t);
11226         if (TREE_CODE (function) == SCOPE_REF)
11227           {
11228             qualified_p = true;
11229             function = tsubst_qualified_id (function, args, complain, in_decl,
11230                                             /*done=*/false,
11231                                             /*address_p=*/false);
11232           }
11233         else
11234           {
11235             if (TREE_CODE (function) == COMPONENT_REF)
11236               {
11237                 tree op = TREE_OPERAND (function, 1);
11238
11239                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11240                                || (BASELINK_P (op)
11241                                    && BASELINK_QUALIFIED_P (op)));
11242               }
11243             else
11244               qualified_p = false;
11245
11246             function = tsubst_copy_and_build (function, args, complain,
11247                                               in_decl,
11248                                               !qualified_p,
11249                                               integral_constant_expression_p);
11250
11251             if (BASELINK_P (function))
11252               qualified_p = true;
11253           }
11254
11255         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11256         call_args = RECUR (CALL_EXPR_ARGS (t));
11257
11258         /* We do not perform argument-dependent lookup if normal
11259            lookup finds a non-function, in accordance with the
11260            expected resolution of DR 218.  */
11261         if (koenig_p
11262             && ((is_overloaded_fn (function)
11263                  /* If lookup found a member function, the Koenig lookup is
11264                     not appropriate, even if an unqualified-name was used
11265                     to denote the function.  */
11266                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11267                 || TREE_CODE (function) == IDENTIFIER_NODE))
11268           function = perform_koenig_lookup (function, call_args);
11269
11270         if (TREE_CODE (function) == IDENTIFIER_NODE)
11271           {
11272             unqualified_name_lookup_error (function);
11273             return error_mark_node;
11274           }
11275
11276         /* Remember that there was a reference to this entity.  */
11277         if (DECL_P (function))
11278           mark_used (function);
11279
11280         if (TREE_CODE (function) == OFFSET_REF)
11281           return build_offset_ref_call_from_tree (function, call_args);
11282         if (TREE_CODE (function) == COMPONENT_REF)
11283           {
11284             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11285               return finish_call_expr (function, call_args,
11286                                        /*disallow_virtual=*/false,
11287                                        /*koenig_p=*/false,
11288                                        complain);
11289             else
11290               return (build_new_method_call
11291                       (TREE_OPERAND (function, 0),
11292                        TREE_OPERAND (function, 1),
11293                        call_args, NULL_TREE,
11294                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11295                        /*fn_p=*/NULL,
11296                        complain));
11297           }
11298         return finish_call_expr (function, call_args,
11299                                  /*disallow_virtual=*/qualified_p,
11300                                  koenig_p,
11301                                  complain);
11302       }
11303
11304     case COND_EXPR:
11305       return build_x_conditional_expr
11306         (RECUR (TREE_OPERAND (t, 0)),
11307          RECUR (TREE_OPERAND (t, 1)),
11308          RECUR (TREE_OPERAND (t, 2)),
11309          complain);
11310
11311     case PSEUDO_DTOR_EXPR:
11312       return finish_pseudo_destructor_expr
11313         (RECUR (TREE_OPERAND (t, 0)),
11314          RECUR (TREE_OPERAND (t, 1)),
11315          RECUR (TREE_OPERAND (t, 2)));
11316
11317     case TREE_LIST:
11318       {
11319         tree purpose, value, chain;
11320
11321         if (t == void_list_node)
11322           return t;
11323
11324         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11325             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11326           {
11327             /* We have pack expansions, so expand those and
11328                create a new list out of it.  */
11329             tree purposevec = NULL_TREE;
11330             tree valuevec = NULL_TREE;
11331             tree chain;
11332             int i, len = -1;
11333
11334             /* Expand the argument expressions.  */
11335             if (TREE_PURPOSE (t))
11336               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11337                                                  complain, in_decl);
11338             if (TREE_VALUE (t))
11339               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11340                                                complain, in_decl);
11341
11342             /* Build the rest of the list.  */
11343             chain = TREE_CHAIN (t);
11344             if (chain && chain != void_type_node)
11345               chain = RECUR (chain);
11346
11347             /* Determine the number of arguments.  */
11348             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11349               {
11350                 len = TREE_VEC_LENGTH (purposevec);
11351                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11352               }
11353             else if (TREE_CODE (valuevec) == TREE_VEC)
11354               len = TREE_VEC_LENGTH (valuevec);
11355             else
11356               {
11357                 /* Since we only performed a partial substitution into
11358                    the argument pack, we only return a single list
11359                    node.  */
11360                 if (purposevec == TREE_PURPOSE (t)
11361                     && valuevec == TREE_VALUE (t)
11362                     && chain == TREE_CHAIN (t))
11363                   return t;
11364
11365                 return tree_cons (purposevec, valuevec, chain);
11366               }
11367             
11368             /* Convert the argument vectors into a TREE_LIST */
11369             i = len;
11370             while (i > 0)
11371               {
11372                 /* Grab the Ith values.  */
11373                 i--;
11374                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11375                                      : NULL_TREE;
11376                 value 
11377                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11378                              : NULL_TREE;
11379
11380                 /* Build the list (backwards).  */
11381                 chain = tree_cons (purpose, value, chain);
11382               }
11383
11384             return chain;
11385           }
11386
11387         purpose = TREE_PURPOSE (t);
11388         if (purpose)
11389           purpose = RECUR (purpose);
11390         value = TREE_VALUE (t);
11391         if (value)
11392           value = RECUR (value);
11393         chain = TREE_CHAIN (t);
11394         if (chain && chain != void_type_node)
11395           chain = RECUR (chain);
11396         if (purpose == TREE_PURPOSE (t)
11397             && value == TREE_VALUE (t)
11398             && chain == TREE_CHAIN (t))
11399           return t;
11400         return tree_cons (purpose, value, chain);
11401       }
11402
11403     case COMPONENT_REF:
11404       {
11405         tree object;
11406         tree object_type;
11407         tree member;
11408
11409         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11410                                                      args, complain, in_decl);
11411         /* Remember that there was a reference to this entity.  */
11412         if (DECL_P (object))
11413           mark_used (object);
11414         object_type = TREE_TYPE (object);
11415
11416         member = TREE_OPERAND (t, 1);
11417         if (BASELINK_P (member))
11418           member = tsubst_baselink (member,
11419                                     non_reference (TREE_TYPE (object)),
11420                                     args, complain, in_decl);
11421         else
11422           member = tsubst_copy (member, args, complain, in_decl);
11423         if (member == error_mark_node)
11424           return error_mark_node;
11425
11426         if (object_type && !CLASS_TYPE_P (object_type))
11427           {
11428             if (SCALAR_TYPE_P (object_type))
11429               {
11430                 tree s = NULL_TREE;
11431                 tree dtor = member;
11432
11433                 if (TREE_CODE (dtor) == SCOPE_REF)
11434                   {
11435                     s = TREE_OPERAND (dtor, 0);
11436                     dtor = TREE_OPERAND (dtor, 1);
11437                   }
11438                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11439                   {
11440                     dtor = TREE_OPERAND (dtor, 0);
11441                     if (TYPE_P (dtor))
11442                       return finish_pseudo_destructor_expr (object, s, dtor);
11443                   }
11444               }
11445           }
11446         else if (TREE_CODE (member) == SCOPE_REF
11447                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11448           {
11449             tree tmpl;
11450             tree args;
11451
11452             /* Lookup the template functions now that we know what the
11453                scope is.  */
11454             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11455             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11456             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11457                                             /*is_type_p=*/false,
11458                                             /*complain=*/false);
11459             if (BASELINK_P (member))
11460               {
11461                 BASELINK_FUNCTIONS (member)
11462                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11463                               args);
11464                 member = (adjust_result_of_qualified_name_lookup
11465                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11466                            object_type));
11467               }
11468             else
11469               {
11470                 qualified_name_lookup_error (object_type, tmpl, member);
11471                 return error_mark_node;
11472               }
11473           }
11474         else if (TREE_CODE (member) == SCOPE_REF
11475                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11476                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11477           {
11478             if (complain & tf_error)
11479               {
11480                 if (TYPE_P (TREE_OPERAND (member, 0)))
11481                   error ("%qT is not a class or namespace",
11482                          TREE_OPERAND (member, 0));
11483                 else
11484                   error ("%qD is not a class or namespace",
11485                          TREE_OPERAND (member, 0));
11486               }
11487             return error_mark_node;
11488           }
11489         else if (TREE_CODE (member) == FIELD_DECL)
11490           return finish_non_static_data_member (member, object, NULL_TREE);
11491
11492         return finish_class_member_access_expr (object, member,
11493                                                 /*template_p=*/false,
11494                                                 complain);
11495       }
11496
11497     case THROW_EXPR:
11498       return build_throw
11499         (RECUR (TREE_OPERAND (t, 0)));
11500
11501     case CONSTRUCTOR:
11502       {
11503         VEC(constructor_elt,gc) *n;
11504         constructor_elt *ce;
11505         unsigned HOST_WIDE_INT idx;
11506         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11507         bool process_index_p;
11508         int newlen;
11509         bool need_copy_p = false;
11510
11511         if (type == error_mark_node)
11512           return error_mark_node;
11513
11514         /* digest_init will do the wrong thing if we let it.  */
11515         if (type && TYPE_PTRMEMFUNC_P (type))
11516           return t;
11517
11518         /* We do not want to process the index of aggregate
11519            initializers as they are identifier nodes which will be
11520            looked up by digest_init.  */
11521         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11522
11523         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11524         newlen = VEC_length (constructor_elt, n);
11525         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11526           {
11527             if (ce->index && process_index_p)
11528               ce->index = RECUR (ce->index);
11529
11530             if (PACK_EXPANSION_P (ce->value))
11531               {
11532                 /* Substitute into the pack expansion.  */
11533                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11534                                                   in_decl);
11535
11536                 if (ce->value == error_mark_node)
11537                   ;
11538                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11539                   /* Just move the argument into place.  */
11540                   ce->value = TREE_VEC_ELT (ce->value, 0);
11541                 else
11542                   {
11543                     /* Update the length of the final CONSTRUCTOR
11544                        arguments vector, and note that we will need to
11545                        copy.*/
11546                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11547                     need_copy_p = true;
11548                   }
11549               }
11550             else
11551               ce->value = RECUR (ce->value);
11552           }
11553
11554         if (need_copy_p)
11555           {
11556             VEC(constructor_elt,gc) *old_n = n;
11557
11558             n = VEC_alloc (constructor_elt, gc, newlen);
11559             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11560                  idx++)
11561               {
11562                 if (TREE_CODE (ce->value) == TREE_VEC)
11563                   {
11564                     int i, len = TREE_VEC_LENGTH (ce->value);
11565                     for (i = 0; i < len; ++i)
11566                       CONSTRUCTOR_APPEND_ELT (n, 0,
11567                                               TREE_VEC_ELT (ce->value, i));
11568                   }
11569                 else
11570                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11571               }
11572           }
11573
11574         if (TREE_HAS_CONSTRUCTOR (t))
11575           return finish_compound_literal (type, n);
11576
11577         return build_constructor (NULL_TREE, n);
11578       }
11579
11580     case TYPEID_EXPR:
11581       {
11582         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11583         if (TYPE_P (operand_0))
11584           return get_typeid (operand_0);
11585         return build_typeid (operand_0);
11586       }
11587
11588     case VAR_DECL:
11589       if (!args)
11590         return t;
11591       /* Fall through */
11592
11593     case PARM_DECL:
11594       {
11595         tree r = tsubst_copy (t, args, complain, in_decl);
11596
11597         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11598           /* If the original type was a reference, we'll be wrapped in
11599              the appropriate INDIRECT_REF.  */
11600           r = convert_from_reference (r);
11601         return r;
11602       }
11603
11604     case VA_ARG_EXPR:
11605       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11606                              tsubst_copy (TREE_TYPE (t), args, complain,
11607                                           in_decl));
11608
11609     case OFFSETOF_EXPR:
11610       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11611
11612     case TRAIT_EXPR:
11613       {
11614         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11615                                   complain, in_decl);
11616
11617         tree type2 = TRAIT_EXPR_TYPE2 (t);
11618         if (type2)
11619           type2 = tsubst_copy (type2, args, complain, in_decl);
11620         
11621         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11622       }
11623
11624     case STMT_EXPR:
11625       {
11626         tree old_stmt_expr = cur_stmt_expr;
11627         tree stmt_expr = begin_stmt_expr ();
11628
11629         cur_stmt_expr = stmt_expr;
11630         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11631                      integral_constant_expression_p);
11632         stmt_expr = finish_stmt_expr (stmt_expr, false);
11633         cur_stmt_expr = old_stmt_expr;
11634
11635         return stmt_expr;
11636       }
11637
11638     case CONST_DECL:
11639       t = tsubst_copy (t, args, complain, in_decl);
11640       /* As in finish_id_expression, we resolve enumeration constants
11641          to their underlying values.  */
11642       if (TREE_CODE (t) == CONST_DECL)
11643         {
11644           used_types_insert (TREE_TYPE (t));
11645           return DECL_INITIAL (t);
11646         }
11647       return t;
11648
11649     default:
11650       /* Handle Objective-C++ constructs, if appropriate.  */
11651       {
11652         tree subst
11653           = objcp_tsubst_copy_and_build (t, args, complain,
11654                                          in_decl, /*function_p=*/false);
11655         if (subst)
11656           return subst;
11657       }
11658       return tsubst_copy (t, args, complain, in_decl);
11659     }
11660
11661 #undef RECUR
11662 }
11663
11664 /* Verify that the instantiated ARGS are valid. For type arguments,
11665    make sure that the type's linkage is ok. For non-type arguments,
11666    make sure they are constants if they are integral or enumerations.
11667    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11668
11669 static bool
11670 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11671 {
11672   int ix, len = DECL_NTPARMS (tmpl);
11673   bool result = false;
11674
11675   for (ix = 0; ix != len; ix++)
11676     {
11677       tree t = TREE_VEC_ELT (args, ix);
11678
11679       if (TYPE_P (t))
11680         {
11681           /* [basic.link]: A name with no linkage (notably, the name
11682              of a class or enumeration declared in a local scope)
11683              shall not be used to declare an entity with linkage.
11684              This implies that names with no linkage cannot be used as
11685              template arguments.  */
11686           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11687
11688           if (nt)
11689             {
11690               /* DR 488 makes use of a type with no linkage cause
11691                  type deduction to fail.  */
11692               if (complain & tf_error)
11693                 {
11694                   if (TYPE_ANONYMOUS_P (nt))
11695                     error ("%qT is/uses anonymous type", t);
11696                   else
11697                     error ("template argument for %qD uses local type %qT",
11698                            tmpl, t);
11699                 }
11700               result = true;
11701             }
11702           /* In order to avoid all sorts of complications, we do not
11703              allow variably-modified types as template arguments.  */
11704           else if (variably_modified_type_p (t, NULL_TREE))
11705             {
11706               if (complain & tf_error)
11707                 error ("%qT is a variably modified type", t);
11708               result = true;
11709             }
11710         }
11711       /* A non-type argument of integral or enumerated type must be a
11712          constant.  */
11713       else if (TREE_TYPE (t)
11714                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11715                && !TREE_CONSTANT (t))
11716         {
11717           if (complain & tf_error)
11718             error ("integral expression %qE is not constant", t);
11719           result = true;
11720         }
11721     }
11722   if (result && (complain & tf_error))
11723     error ("  trying to instantiate %qD", tmpl);
11724   return result;
11725 }
11726
11727 /* Instantiate the indicated variable or function template TMPL with
11728    the template arguments in TARG_PTR.  */
11729
11730 tree
11731 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11732 {
11733   tree fndecl;
11734   tree gen_tmpl;
11735   tree spec;
11736   HOST_WIDE_INT saved_processing_template_decl;
11737
11738   if (tmpl == error_mark_node)
11739     return error_mark_node;
11740
11741   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11742
11743   /* If this function is a clone, handle it specially.  */
11744   if (DECL_CLONED_FUNCTION_P (tmpl))
11745     {
11746       tree spec;
11747       tree clone;
11748
11749       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11750                                    complain);
11751       if (spec == error_mark_node)
11752         return error_mark_node;
11753
11754       /* Look for the clone.  */
11755       FOR_EACH_CLONE (clone, spec)
11756         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11757           return clone;
11758       /* We should always have found the clone by now.  */
11759       gcc_unreachable ();
11760       return NULL_TREE;
11761     }
11762
11763   /* Check to see if we already have this specialization.  */
11764   spec = retrieve_specialization (tmpl, targ_ptr,
11765                                   /*class_specializations_p=*/false);
11766   if (spec != NULL_TREE)
11767     return spec;
11768
11769   gen_tmpl = most_general_template (tmpl);
11770   if (tmpl != gen_tmpl)
11771     {
11772       /* The TMPL is a partial instantiation.  To get a full set of
11773          arguments we must add the arguments used to perform the
11774          partial instantiation.  */
11775       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11776                                               targ_ptr);
11777
11778       /* Check to see if we already have this specialization.  */
11779       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11780                                       /*class_specializations_p=*/false);
11781       if (spec != NULL_TREE)
11782         return spec;
11783     }
11784
11785   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11786                                complain))
11787     return error_mark_node;
11788
11789   /* We are building a FUNCTION_DECL, during which the access of its
11790      parameters and return types have to be checked.  However this
11791      FUNCTION_DECL which is the desired context for access checking
11792      is not built yet.  We solve this chicken-and-egg problem by
11793      deferring all checks until we have the FUNCTION_DECL.  */
11794   push_deferring_access_checks (dk_deferred);
11795
11796   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11797      (because, for example, we have encountered a non-dependent
11798      function call in the body of a template function and must now
11799      determine which of several overloaded functions will be called),
11800      within the instantiation itself we are not processing a
11801      template.  */  
11802   saved_processing_template_decl = processing_template_decl;
11803   processing_template_decl = 0;
11804   /* Substitute template parameters to obtain the specialization.  */
11805   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11806                    targ_ptr, complain, gen_tmpl);
11807   processing_template_decl = saved_processing_template_decl;
11808   if (fndecl == error_mark_node)
11809     return error_mark_node;
11810
11811   /* Now we know the specialization, compute access previously
11812      deferred.  */
11813   push_access_scope (fndecl);
11814   perform_deferred_access_checks ();
11815   pop_access_scope (fndecl);
11816   pop_deferring_access_checks ();
11817
11818   /* The DECL_TI_TEMPLATE should always be the immediate parent
11819      template, not the most general template.  */
11820   DECL_TI_TEMPLATE (fndecl) = tmpl;
11821
11822   /* If we've just instantiated the main entry point for a function,
11823      instantiate all the alternate entry points as well.  We do this
11824      by cloning the instantiation of the main entry point, not by
11825      instantiating the template clones.  */
11826   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11827     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11828
11829   return fndecl;
11830 }
11831
11832 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11833    arguments that are being used when calling it.  TARGS is a vector
11834    into which the deduced template arguments are placed.
11835
11836    Return zero for success, 2 for an incomplete match that doesn't resolve
11837    all the types, and 1 for complete failure.  An error message will be
11838    printed only for an incomplete match.
11839
11840    If FN is a conversion operator, or we are trying to produce a specific
11841    specialization, RETURN_TYPE is the return type desired.
11842
11843    The EXPLICIT_TARGS are explicit template arguments provided via a
11844    template-id.
11845
11846    The parameter STRICT is one of:
11847
11848    DEDUCE_CALL:
11849      We are deducing arguments for a function call, as in
11850      [temp.deduct.call].
11851
11852    DEDUCE_CONV:
11853      We are deducing arguments for a conversion function, as in
11854      [temp.deduct.conv].
11855
11856    DEDUCE_EXACT:
11857      We are deducing arguments when doing an explicit instantiation
11858      as in [temp.explicit], when determining an explicit specialization
11859      as in [temp.expl.spec], or when taking the address of a function
11860      template, as in [temp.deduct.funcaddr].  */
11861
11862 int
11863 fn_type_unification (tree fn,
11864                      tree explicit_targs,
11865                      tree targs,
11866                      tree args,
11867                      tree return_type,
11868                      unification_kind_t strict,
11869                      int flags)
11870 {
11871   tree parms;
11872   tree fntype;
11873   int result;
11874   bool incomplete_argument_packs_p = false;
11875
11876   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11877
11878   fntype = TREE_TYPE (fn);
11879   if (explicit_targs)
11880     {
11881       /* [temp.deduct]
11882
11883          The specified template arguments must match the template
11884          parameters in kind (i.e., type, nontype, template), and there
11885          must not be more arguments than there are parameters;
11886          otherwise type deduction fails.
11887
11888          Nontype arguments must match the types of the corresponding
11889          nontype template parameters, or must be convertible to the
11890          types of the corresponding nontype parameters as specified in
11891          _temp.arg.nontype_, otherwise type deduction fails.
11892
11893          All references in the function type of the function template
11894          to the corresponding template parameters are replaced by the
11895          specified template argument values.  If a substitution in a
11896          template parameter or in the function type of the function
11897          template results in an invalid type, type deduction fails.  */
11898       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11899       int i, len = TREE_VEC_LENGTH (tparms);
11900       tree converted_args;
11901       bool incomplete = false;
11902
11903       if (explicit_targs == error_mark_node)
11904         return 1;
11905
11906       converted_args
11907         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11908                                   /*require_all_args=*/false,
11909                                   /*use_default_args=*/false));
11910       if (converted_args == error_mark_node)
11911         return 1;
11912
11913       /* Substitute the explicit args into the function type.  This is
11914          necessary so that, for instance, explicitly declared function
11915          arguments can match null pointed constants.  If we were given
11916          an incomplete set of explicit args, we must not do semantic
11917          processing during substitution as we could create partial
11918          instantiations.  */
11919       for (i = 0; i < len; i++)
11920         {
11921           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11922           bool parameter_pack = false;
11923
11924           /* Dig out the actual parm.  */
11925           if (TREE_CODE (parm) == TYPE_DECL
11926               || TREE_CODE (parm) == TEMPLATE_DECL)
11927             {
11928               parm = TREE_TYPE (parm);
11929               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11930             }
11931           else if (TREE_CODE (parm) == PARM_DECL)
11932             {
11933               parm = DECL_INITIAL (parm);
11934               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11935             }
11936
11937           if (parameter_pack)
11938             {
11939               int level, idx;
11940               tree targ;
11941               template_parm_level_and_index (parm, &level, &idx);
11942
11943               /* Mark the argument pack as "incomplete". We could
11944                  still deduce more arguments during unification.  */
11945               targ = TMPL_ARG (converted_args, level, idx);
11946               if (targ)
11947                 {
11948                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11949                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11950                     = ARGUMENT_PACK_ARGS (targ);
11951                 }
11952
11953               /* We have some incomplete argument packs.  */
11954               incomplete_argument_packs_p = true;
11955             }
11956         }
11957
11958       if (incomplete_argument_packs_p)
11959         /* Any substitution is guaranteed to be incomplete if there
11960            are incomplete argument packs, because we can still deduce
11961            more arguments.  */
11962         incomplete = 1;
11963       else
11964         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11965
11966       processing_template_decl += incomplete;
11967       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11968       processing_template_decl -= incomplete;
11969
11970       if (fntype == error_mark_node)
11971         return 1;
11972
11973       /* Place the explicitly specified arguments in TARGS.  */
11974       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11975         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11976     }
11977
11978   /* Never do unification on the 'this' parameter.  */
11979   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11980
11981   if (return_type)
11982     {
11983       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11984       args = tree_cons (NULL_TREE, return_type, args);
11985     }
11986
11987   /* We allow incomplete unification without an error message here
11988      because the standard doesn't seem to explicitly prohibit it.  Our
11989      callers must be ready to deal with unification failures in any
11990      event.  */
11991   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11992                                   targs, parms, args, /*subr=*/0,
11993                                   strict, flags);
11994
11995   if (result == 0 && incomplete_argument_packs_p)
11996     {
11997       int i, len = NUM_TMPL_ARGS (targs);
11998
11999       /* Clear the "incomplete" flags on all argument packs.  */
12000       for (i = 0; i < len; i++)
12001         {
12002           tree arg = TREE_VEC_ELT (targs, i);
12003           if (ARGUMENT_PACK_P (arg))
12004             {
12005               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12006               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12007             }
12008         }
12009     }
12010
12011   /* Now that we have bindings for all of the template arguments,
12012      ensure that the arguments deduced for the template template
12013      parameters have compatible template parameter lists.  We cannot
12014      check this property before we have deduced all template
12015      arguments, because the template parameter types of a template
12016      template parameter might depend on prior template parameters
12017      deduced after the template template parameter.  The following
12018      ill-formed example illustrates this issue:
12019
12020        template<typename T, template<T> class C> void f(C<5>, T);
12021
12022        template<int N> struct X {};
12023
12024        void g() {
12025          f(X<5>(), 5l); // error: template argument deduction fails
12026        }
12027
12028      The template parameter list of 'C' depends on the template type
12029      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12030      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12031      time that we deduce 'C'.  */
12032   if (result == 0
12033       && !template_template_parm_bindings_ok_p 
12034            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12035     return 1;
12036
12037   if (result == 0)
12038     /* All is well so far.  Now, check:
12039
12040        [temp.deduct]
12041
12042        When all template arguments have been deduced, all uses of
12043        template parameters in nondeduced contexts are replaced with
12044        the corresponding deduced argument values.  If the
12045        substitution results in an invalid type, as described above,
12046        type deduction fails.  */
12047     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12048         == error_mark_node)
12049       return 1;
12050
12051   return result;
12052 }
12053
12054 /* Adjust types before performing type deduction, as described in
12055    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12056    sections are symmetric.  PARM is the type of a function parameter
12057    or the return type of the conversion function.  ARG is the type of
12058    the argument passed to the call, or the type of the value
12059    initialized with the result of the conversion function.
12060    ARG_EXPR is the original argument expression, which may be null.  */
12061
12062 static int
12063 maybe_adjust_types_for_deduction (unification_kind_t strict,
12064                                   tree* parm,
12065                                   tree* arg,
12066                                   tree arg_expr)
12067 {
12068   int result = 0;
12069
12070   switch (strict)
12071     {
12072     case DEDUCE_CALL:
12073       break;
12074
12075     case DEDUCE_CONV:
12076       {
12077         /* Swap PARM and ARG throughout the remainder of this
12078            function; the handling is precisely symmetric since PARM
12079            will initialize ARG rather than vice versa.  */
12080         tree* temp = parm;
12081         parm = arg;
12082         arg = temp;
12083         break;
12084       }
12085
12086     case DEDUCE_EXACT:
12087       /* There is nothing to do in this case.  */
12088       return 0;
12089
12090     default:
12091       gcc_unreachable ();
12092     }
12093
12094   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12095     {
12096       /* [temp.deduct.call]
12097
12098          If P is not a reference type:
12099
12100          --If A is an array type, the pointer type produced by the
12101          array-to-pointer standard conversion (_conv.array_) is
12102          used in place of A for type deduction; otherwise,
12103
12104          --If A is a function type, the pointer type produced by
12105          the function-to-pointer standard conversion
12106          (_conv.func_) is used in place of A for type deduction;
12107          otherwise,
12108
12109          --If A is a cv-qualified type, the top level
12110          cv-qualifiers of A's type are ignored for type
12111          deduction.  */
12112       if (TREE_CODE (*arg) == ARRAY_TYPE)
12113         *arg = build_pointer_type (TREE_TYPE (*arg));
12114       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12115         *arg = build_pointer_type (*arg);
12116       else
12117         *arg = TYPE_MAIN_VARIANT (*arg);
12118     }
12119
12120   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12121      of the form T&&, where T is a template parameter, and the argument
12122      is an lvalue, T is deduced as A& */
12123   if (TREE_CODE (*parm) == REFERENCE_TYPE
12124       && TYPE_REF_IS_RVALUE (*parm)
12125       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12126       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12127       && arg_expr && real_lvalue_p (arg_expr))
12128     *arg = build_reference_type (*arg);
12129
12130   /* [temp.deduct.call]
12131
12132      If P is a cv-qualified type, the top level cv-qualifiers
12133      of P's type are ignored for type deduction.  If P is a
12134      reference type, the type referred to by P is used for
12135      type deduction.  */
12136   *parm = TYPE_MAIN_VARIANT (*parm);
12137   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12138     {
12139       *parm = TREE_TYPE (*parm);
12140       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12141     }
12142
12143   /* DR 322. For conversion deduction, remove a reference type on parm
12144      too (which has been swapped into ARG).  */
12145   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12146     *arg = TREE_TYPE (*arg);
12147
12148   return result;
12149 }
12150
12151 /* Most parms like fn_type_unification.
12152
12153    If SUBR is 1, we're being called recursively (to unify the
12154    arguments of a function or method parameter of a function
12155    template). */
12156
12157 static int
12158 type_unification_real (tree tparms,
12159                        tree targs,
12160                        tree xparms,
12161                        tree xargs,
12162                        int subr,
12163                        unification_kind_t strict,
12164                        int flags)
12165 {
12166   tree parm, arg, arg_expr;
12167   int i;
12168   int ntparms = TREE_VEC_LENGTH (tparms);
12169   int sub_strict;
12170   int saw_undeduced = 0;
12171   tree parms, args;
12172
12173   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12174   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12175   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12176   gcc_assert (ntparms > 0);
12177
12178   switch (strict)
12179     {
12180     case DEDUCE_CALL:
12181       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12182                     | UNIFY_ALLOW_DERIVED);
12183       break;
12184
12185     case DEDUCE_CONV:
12186       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12187       break;
12188
12189     case DEDUCE_EXACT:
12190       sub_strict = UNIFY_ALLOW_NONE;
12191       break;
12192
12193     default:
12194       gcc_unreachable ();
12195     }
12196
12197  again:
12198   parms = xparms;
12199   args = xargs;
12200
12201   while (parms && parms != void_list_node
12202          && args && args != void_list_node)
12203     {
12204       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12205         break;
12206
12207       parm = TREE_VALUE (parms);
12208       parms = TREE_CHAIN (parms);
12209       arg = TREE_VALUE (args);
12210       args = TREE_CHAIN (args);
12211       arg_expr = NULL;
12212
12213       if (arg == error_mark_node)
12214         return 1;
12215       if (arg == unknown_type_node)
12216         /* We can't deduce anything from this, but we might get all the
12217            template args from other function args.  */
12218         continue;
12219
12220       /* Conversions will be performed on a function argument that
12221          corresponds with a function parameter that contains only
12222          non-deducible template parameters and explicitly specified
12223          template parameters.  */
12224       if (!uses_template_parms (parm))
12225         {
12226           tree type;
12227
12228           if (!TYPE_P (arg))
12229             type = TREE_TYPE (arg);
12230           else
12231             type = arg;
12232
12233           if (same_type_p (parm, type))
12234             continue;
12235           if (strict != DEDUCE_EXACT
12236               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12237                                   flags))
12238             continue;
12239
12240           return 1;
12241         }
12242
12243       if (!TYPE_P (arg))
12244         {
12245           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12246           if (type_unknown_p (arg))
12247             {
12248               /* [temp.deduct.type] 
12249
12250                  A template-argument can be deduced from a pointer to
12251                  function or pointer to member function argument if
12252                  the set of overloaded functions does not contain
12253                  function templates and at most one of a set of
12254                  overloaded functions provides a unique match.  */
12255               if (resolve_overloaded_unification
12256                   (tparms, targs, parm, arg, strict, sub_strict))
12257                 continue;
12258
12259               return 1;
12260             }
12261           arg_expr = arg;
12262           arg = unlowered_expr_type (arg);
12263           if (arg == error_mark_node)
12264             return 1;
12265         }
12266
12267       {
12268         int arg_strict = sub_strict;
12269
12270         if (!subr)
12271           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12272                                                           arg_expr);
12273
12274         if (unify (tparms, targs, parm, arg, arg_strict))
12275           return 1;
12276       }
12277     }
12278
12279
12280   if (parms 
12281       && parms != void_list_node
12282       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12283     {
12284       /* Unify the remaining arguments with the pack expansion type.  */
12285       tree argvec;
12286       tree parmvec = make_tree_vec (1);
12287       int len = 0;
12288       tree t;
12289
12290       /* Count the number of arguments that remain.  */
12291       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12292         len++;
12293         
12294       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12295       argvec = make_tree_vec (len);
12296       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12297         {
12298           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12299           ++i;
12300         }
12301
12302       /* Copy the parameter into parmvec.  */
12303       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12304       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12305                                 /*call_args_p=*/true, /*subr=*/subr))
12306         return 1;
12307
12308       /* Advance to the end of the list of parameters.  */
12309       parms = TREE_CHAIN (parms);
12310     }
12311
12312   /* Fail if we've reached the end of the parm list, and more args
12313      are present, and the parm list isn't variadic.  */
12314   if (args && args != void_list_node && parms == void_list_node)
12315     return 1;
12316   /* Fail if parms are left and they don't have default values.  */
12317   if (parms && parms != void_list_node
12318       && TREE_PURPOSE (parms) == NULL_TREE)
12319     return 1;
12320
12321   if (!subr)
12322     for (i = 0; i < ntparms; i++)
12323       if (!TREE_VEC_ELT (targs, i))
12324         {
12325           tree tparm;
12326
12327           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12328             continue;
12329
12330           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12331
12332           /* If this is an undeduced nontype parameter that depends on
12333              a type parameter, try another pass; its type may have been
12334              deduced from a later argument than the one from which
12335              this parameter can be deduced.  */
12336           if (TREE_CODE (tparm) == PARM_DECL
12337               && uses_template_parms (TREE_TYPE (tparm))
12338               && !saw_undeduced++)
12339             goto again;
12340
12341           /* Core issue #226 (C++0x) [temp.deduct]:
12342
12343                If a template argument has not been deduced, its
12344                default template argument, if any, is used. 
12345
12346              When we are in C++98 mode, TREE_PURPOSE will either
12347              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12348              to explicitly check cxx_dialect here.  */
12349           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12350             {
12351               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12352                                  targs, tf_none, NULL_TREE);
12353               if (arg == error_mark_node)
12354                 return 1;
12355               else
12356                 {
12357                   TREE_VEC_ELT (targs, i) = arg;
12358                   continue;
12359                 }
12360             }
12361
12362           /* If the type parameter is a parameter pack, then it will
12363              be deduced to an empty parameter pack.  */
12364           if (template_parameter_pack_p (tparm))
12365             {
12366               tree arg;
12367
12368               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12369                 {
12370                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12371                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12372                   TREE_CONSTANT (arg) = 1;
12373                 }
12374               else
12375                 arg = make_node (TYPE_ARGUMENT_PACK);
12376
12377               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12378
12379               TREE_VEC_ELT (targs, i) = arg;
12380               continue;
12381             }
12382
12383           return 2;
12384         }
12385
12386   return 0;
12387 }
12388
12389 /* Subroutine of type_unification_real.  Args are like the variables
12390    at the call site.  ARG is an overloaded function (or template-id);
12391    we try deducing template args from each of the overloads, and if
12392    only one succeeds, we go with that.  Modifies TARGS and returns
12393    true on success.  */
12394
12395 static bool
12396 resolve_overloaded_unification (tree tparms,
12397                                 tree targs,
12398                                 tree parm,
12399                                 tree arg,
12400                                 unification_kind_t strict,
12401                                 int sub_strict)
12402 {
12403   tree tempargs = copy_node (targs);
12404   int good = 0;
12405   bool addr_p;
12406
12407   if (TREE_CODE (arg) == ADDR_EXPR)
12408     {
12409       arg = TREE_OPERAND (arg, 0);
12410       addr_p = true;
12411     }
12412   else
12413     addr_p = false;
12414
12415   if (TREE_CODE (arg) == COMPONENT_REF)
12416     /* Handle `&x' where `x' is some static or non-static member
12417        function name.  */
12418     arg = TREE_OPERAND (arg, 1);
12419
12420   if (TREE_CODE (arg) == OFFSET_REF)
12421     arg = TREE_OPERAND (arg, 1);
12422
12423   /* Strip baselink information.  */
12424   if (BASELINK_P (arg))
12425     arg = BASELINK_FUNCTIONS (arg);
12426
12427   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12428     {
12429       /* If we got some explicit template args, we need to plug them into
12430          the affected templates before we try to unify, in case the
12431          explicit args will completely resolve the templates in question.  */
12432
12433       tree expl_subargs = TREE_OPERAND (arg, 1);
12434       arg = TREE_OPERAND (arg, 0);
12435
12436       for (; arg; arg = OVL_NEXT (arg))
12437         {
12438           tree fn = OVL_CURRENT (arg);
12439           tree subargs, elem;
12440
12441           if (TREE_CODE (fn) != TEMPLATE_DECL)
12442             continue;
12443
12444           ++processing_template_decl;
12445           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12446                                   expl_subargs, /*check_ret=*/false);
12447           if (subargs)
12448             {
12449               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12450               good += try_one_overload (tparms, targs, tempargs, parm,
12451                                         elem, strict, sub_strict, addr_p);
12452             }
12453           --processing_template_decl;
12454         }
12455     }
12456   else if (TREE_CODE (arg) != OVERLOAD
12457            && TREE_CODE (arg) != FUNCTION_DECL)
12458     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12459        -- but the deduction does not succeed because the expression is
12460        not just the function on its own.  */
12461     return false;
12462   else
12463     for (; arg; arg = OVL_NEXT (arg))
12464       good += try_one_overload (tparms, targs, tempargs, parm,
12465                                 TREE_TYPE (OVL_CURRENT (arg)),
12466                                 strict, sub_strict, addr_p);
12467
12468   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12469      to function or pointer to member function argument if the set of
12470      overloaded functions does not contain function templates and at most
12471      one of a set of overloaded functions provides a unique match.
12472
12473      So if we found multiple possibilities, we return success but don't
12474      deduce anything.  */
12475
12476   if (good == 1)
12477     {
12478       int i = TREE_VEC_LENGTH (targs);
12479       for (; i--; )
12480         if (TREE_VEC_ELT (tempargs, i))
12481           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12482     }
12483   if (good)
12484     return true;
12485
12486   return false;
12487 }
12488
12489 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12490    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12491    different overloads deduce different arguments for a given parm.
12492    ADDR_P is true if the expression for which deduction is being
12493    performed was of the form "& fn" rather than simply "fn".
12494
12495    Returns 1 on success.  */
12496
12497 static int
12498 try_one_overload (tree tparms,
12499                   tree orig_targs,
12500                   tree targs,
12501                   tree parm,
12502                   tree arg,
12503                   unification_kind_t strict,
12504                   int sub_strict,
12505                   bool addr_p)
12506 {
12507   int nargs;
12508   tree tempargs;
12509   int i;
12510
12511   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12512      to function or pointer to member function argument if the set of
12513      overloaded functions does not contain function templates and at most
12514      one of a set of overloaded functions provides a unique match.
12515
12516      So if this is a template, just return success.  */
12517
12518   if (uses_template_parms (arg))
12519     return 1;
12520
12521   if (TREE_CODE (arg) == METHOD_TYPE)
12522     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12523   else if (addr_p)
12524     arg = build_pointer_type (arg);
12525
12526   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12527
12528   /* We don't copy orig_targs for this because if we have already deduced
12529      some template args from previous args, unify would complain when we
12530      try to deduce a template parameter for the same argument, even though
12531      there isn't really a conflict.  */
12532   nargs = TREE_VEC_LENGTH (targs);
12533   tempargs = make_tree_vec (nargs);
12534
12535   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12536     return 0;
12537
12538   /* First make sure we didn't deduce anything that conflicts with
12539      explicitly specified args.  */
12540   for (i = nargs; i--; )
12541     {
12542       tree elt = TREE_VEC_ELT (tempargs, i);
12543       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12544
12545       if (!elt)
12546         /*NOP*/;
12547       else if (uses_template_parms (elt))
12548         /* Since we're unifying against ourselves, we will fill in
12549            template args used in the function parm list with our own
12550            template parms.  Discard them.  */
12551         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12552       else if (oldelt && !template_args_equal (oldelt, elt))
12553         return 0;
12554     }
12555
12556   for (i = nargs; i--; )
12557     {
12558       tree elt = TREE_VEC_ELT (tempargs, i);
12559
12560       if (elt)
12561         TREE_VEC_ELT (targs, i) = elt;
12562     }
12563
12564   return 1;
12565 }
12566
12567 /* PARM is a template class (perhaps with unbound template
12568    parameters).  ARG is a fully instantiated type.  If ARG can be
12569    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12570    TARGS are as for unify.  */
12571
12572 static tree
12573 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12574 {
12575   tree copy_of_targs;
12576
12577   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12578       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12579           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12580     return NULL_TREE;
12581
12582   /* We need to make a new template argument vector for the call to
12583      unify.  If we used TARGS, we'd clutter it up with the result of
12584      the attempted unification, even if this class didn't work out.
12585      We also don't want to commit ourselves to all the unifications
12586      we've already done, since unification is supposed to be done on
12587      an argument-by-argument basis.  In other words, consider the
12588      following pathological case:
12589
12590        template <int I, int J, int K>
12591        struct S {};
12592
12593        template <int I, int J>
12594        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12595
12596        template <int I, int J, int K>
12597        void f(S<I, J, K>, S<I, I, I>);
12598
12599        void g() {
12600          S<0, 0, 0> s0;
12601          S<0, 1, 2> s2;
12602
12603          f(s0, s2);
12604        }
12605
12606      Now, by the time we consider the unification involving `s2', we
12607      already know that we must have `f<0, 0, 0>'.  But, even though
12608      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12609      because there are two ways to unify base classes of S<0, 1, 2>
12610      with S<I, I, I>.  If we kept the already deduced knowledge, we
12611      would reject the possibility I=1.  */
12612   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12613
12614   /* If unification failed, we're done.  */
12615   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12616              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12617     return NULL_TREE;
12618
12619   return arg;
12620 }
12621
12622 /* Given a template type PARM and a class type ARG, find the unique
12623    base type in ARG that is an instance of PARM.  We do not examine
12624    ARG itself; only its base-classes.  If there is not exactly one
12625    appropriate base class, return NULL_TREE.  PARM may be the type of
12626    a partial specialization, as well as a plain template type.  Used
12627    by unify.  */
12628
12629 static tree
12630 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12631 {
12632   tree rval = NULL_TREE;
12633   tree binfo;
12634
12635   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12636
12637   binfo = TYPE_BINFO (complete_type (arg));
12638   if (!binfo)
12639     /* The type could not be completed.  */
12640     return NULL_TREE;
12641
12642   /* Walk in inheritance graph order.  The search order is not
12643      important, and this avoids multiple walks of virtual bases.  */
12644   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12645     {
12646       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12647
12648       if (r)
12649         {
12650           /* If there is more than one satisfactory baseclass, then:
12651
12652                [temp.deduct.call]
12653
12654               If they yield more than one possible deduced A, the type
12655               deduction fails.
12656
12657              applies.  */
12658           if (rval && !same_type_p (r, rval))
12659             return NULL_TREE;
12660
12661           rval = r;
12662         }
12663     }
12664
12665   return rval;
12666 }
12667
12668 /* Returns the level of DECL, which declares a template parameter.  */
12669
12670 static int
12671 template_decl_level (tree decl)
12672 {
12673   switch (TREE_CODE (decl))
12674     {
12675     case TYPE_DECL:
12676     case TEMPLATE_DECL:
12677       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12678
12679     case PARM_DECL:
12680       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12681
12682     default:
12683       gcc_unreachable ();
12684     }
12685   return 0;
12686 }
12687
12688 /* Decide whether ARG can be unified with PARM, considering only the
12689    cv-qualifiers of each type, given STRICT as documented for unify.
12690    Returns nonzero iff the unification is OK on that basis.  */
12691
12692 static int
12693 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12694 {
12695   int arg_quals = cp_type_quals (arg);
12696   int parm_quals = cp_type_quals (parm);
12697
12698   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12699       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12700     {
12701       /*  Although a CVR qualifier is ignored when being applied to a
12702           substituted template parameter ([8.3.2]/1 for example), that
12703           does not apply during deduction [14.8.2.4]/1, (even though
12704           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12705           this).  Except when we're allowing additional CV qualifiers
12706           at the outer level [14.8.2.1]/3,1st bullet.  */
12707       if ((TREE_CODE (arg) == REFERENCE_TYPE
12708            || TREE_CODE (arg) == FUNCTION_TYPE
12709            || TREE_CODE (arg) == METHOD_TYPE)
12710           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12711         return 0;
12712
12713       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12714           && (parm_quals & TYPE_QUAL_RESTRICT))
12715         return 0;
12716     }
12717
12718   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12719       && (arg_quals & parm_quals) != parm_quals)
12720     return 0;
12721
12722   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12723       && (parm_quals & arg_quals) != arg_quals)
12724     return 0;
12725
12726   return 1;
12727 }
12728
12729 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12730 void 
12731 template_parm_level_and_index (tree parm, int* level, int* index)
12732 {
12733   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12734       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12735       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12736     {
12737       *index = TEMPLATE_TYPE_IDX (parm);
12738       *level = TEMPLATE_TYPE_LEVEL (parm);
12739     }
12740   else
12741     {
12742       *index = TEMPLATE_PARM_IDX (parm);
12743       *level = TEMPLATE_PARM_LEVEL (parm);
12744     }
12745 }
12746
12747 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12748    expansion at the end of PACKED_PARMS. Returns 0 if the type
12749    deduction succeeds, 1 otherwise. STRICT is the same as in
12750    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12751    call argument list. We'll need to adjust the arguments to make them
12752    types. SUBR tells us if this is from a recursive call to
12753    type_unification_real.  */
12754 int
12755 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12756                       tree packed_args, int strict, bool call_args_p,
12757                       bool subr)
12758 {
12759   tree parm 
12760     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12761   tree pattern = PACK_EXPANSION_PATTERN (parm);
12762   tree pack, packs = NULL_TREE;
12763   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12764   int len = TREE_VEC_LENGTH (packed_args);
12765
12766   /* Determine the parameter packs we will be deducing from the
12767      pattern, and record their current deductions.  */
12768   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12769        pack; pack = TREE_CHAIN (pack))
12770     {
12771       tree parm_pack = TREE_VALUE (pack);
12772       int idx, level;
12773
12774       /* Determine the index and level of this parameter pack.  */
12775       template_parm_level_and_index (parm_pack, &level, &idx);
12776
12777       /* Keep track of the parameter packs and their corresponding
12778          argument packs.  */
12779       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12780       TREE_TYPE (packs) = make_tree_vec (len - start);
12781     }
12782   
12783   /* Loop through all of the arguments that have not yet been
12784      unified and unify each with the pattern.  */
12785   for (i = start; i < len; i++)
12786     {
12787       tree parm = pattern;
12788
12789       /* For each parameter pack, clear out the deduced value so that
12790          we can deduce it again.  */
12791       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12792         {
12793           int idx, level;
12794           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12795
12796           TMPL_ARG (targs, level, idx) = NULL_TREE;
12797         }
12798
12799       /* Unify the pattern with the current argument.  */
12800       {
12801         tree arg = TREE_VEC_ELT (packed_args, i);
12802         tree arg_expr = NULL_TREE;
12803         int arg_strict = strict;
12804         bool skip_arg_p = false;
12805
12806         if (call_args_p)
12807           {
12808             int sub_strict;
12809
12810             /* This mirrors what we do in type_unification_real.  */
12811             switch (strict)
12812               {
12813               case DEDUCE_CALL:
12814                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12815                               | UNIFY_ALLOW_MORE_CV_QUAL
12816                               | UNIFY_ALLOW_DERIVED);
12817                 break;
12818                 
12819               case DEDUCE_CONV:
12820                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12821                 break;
12822                 
12823               case DEDUCE_EXACT:
12824                 sub_strict = UNIFY_ALLOW_NONE;
12825                 break;
12826                 
12827               default:
12828                 gcc_unreachable ();
12829               }
12830
12831             if (!TYPE_P (arg))
12832               {
12833                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12834                 if (type_unknown_p (arg))
12835                   {
12836                     /* [temp.deduct.type] A template-argument can be
12837                        deduced from a pointer to function or pointer
12838                        to member function argument if the set of
12839                        overloaded functions does not contain function
12840                        templates and at most one of a set of
12841                        overloaded functions provides a unique
12842                        match.  */
12843
12844                     if (resolve_overloaded_unification
12845                         (tparms, targs, parm, arg, strict, sub_strict)
12846                         != 0)
12847                       return 1;
12848                     skip_arg_p = true;
12849                   }
12850
12851                 if (!skip_arg_p)
12852                   {
12853                     arg_expr = arg;
12854                     arg = unlowered_expr_type (arg);
12855                     if (arg == error_mark_node)
12856                       return 1;
12857                   }
12858               }
12859       
12860             arg_strict = sub_strict;
12861
12862             if (!subr)
12863               arg_strict |= 
12864                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12865                                                   arg_expr);
12866           }
12867
12868         if (!skip_arg_p)
12869           {
12870             if (unify (tparms, targs, parm, arg, arg_strict))
12871               return 1;
12872           }
12873       }
12874
12875       /* For each parameter pack, collect the deduced value.  */
12876       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12877         {
12878           int idx, level;
12879           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12880
12881           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12882             TMPL_ARG (targs, level, idx);
12883         }
12884     }
12885
12886   /* Verify that the results of unification with the parameter packs
12887      produce results consistent with what we've seen before, and make
12888      the deduced argument packs available.  */
12889   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12890     {
12891       tree old_pack = TREE_VALUE (pack);
12892       tree new_args = TREE_TYPE (pack);
12893       int i, len = TREE_VEC_LENGTH (new_args);
12894       bool nondeduced_p = false;
12895
12896       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12897          actually deduce anything.  */
12898       for (i = 0; i < len && !nondeduced_p; ++i)
12899         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12900           nondeduced_p = true;
12901       if (nondeduced_p)
12902         continue;
12903
12904       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12905         {
12906           /* Prepend the explicit arguments onto NEW_ARGS.  */
12907           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12908           tree old_args = new_args;
12909           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12910           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12911
12912           /* Copy the explicit arguments.  */
12913           new_args = make_tree_vec (len);
12914           for (i = 0; i < explicit_len; i++)
12915             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12916
12917           /* Copy the deduced arguments.  */
12918           for (; i < len; i++)
12919             TREE_VEC_ELT (new_args, i) =
12920               TREE_VEC_ELT (old_args, i - explicit_len);
12921         }
12922
12923       if (!old_pack)
12924         {
12925           tree result;
12926           int idx, level;
12927           
12928           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12929
12930           /* Build the deduced *_ARGUMENT_PACK.  */
12931           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12932             {
12933               result = make_node (NONTYPE_ARGUMENT_PACK);
12934               TREE_TYPE (result) = 
12935                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12936               TREE_CONSTANT (result) = 1;
12937             }
12938           else
12939             result = make_node (TYPE_ARGUMENT_PACK);
12940
12941           SET_ARGUMENT_PACK_ARGS (result, new_args);
12942
12943           /* Note the deduced argument packs for this parameter
12944              pack.  */
12945           TMPL_ARG (targs, level, idx) = result;
12946         }
12947       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12948                && (ARGUMENT_PACK_ARGS (old_pack) 
12949                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12950         {
12951           /* We only had the explicitly-provided arguments before, but
12952              now we have a complete set of arguments.  */
12953           int idx, level;
12954           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12955           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12956
12957           /* Keep the original deduced argument pack.  */
12958           TMPL_ARG (targs, level, idx) = old_pack;
12959
12960           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12961           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12962           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12963         }
12964       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12965                                     new_args))
12966         /* Inconsistent unification of this parameter pack.  */
12967         return 1;
12968       else
12969         {
12970           int idx, level;
12971           
12972           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12973
12974           /* Keep the original deduced argument pack.  */
12975           TMPL_ARG (targs, level, idx) = old_pack;
12976         }
12977     }
12978
12979   return 0;
12980 }
12981
12982 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12983    set of template parameters to a template.  TARGS is the bindings
12984    for those template parameters, as determined thus far; TARGS may
12985    include template arguments for outer levels of template parameters
12986    as well.  PARM is a parameter to a template function, or a
12987    subcomponent of that parameter; ARG is the corresponding argument.
12988    This function attempts to match PARM with ARG in a manner
12989    consistent with the existing assignments in TARGS.  If more values
12990    are deduced, then TARGS is updated.
12991
12992    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12993    parameter STRICT is a bitwise or of the following flags:
12994
12995      UNIFY_ALLOW_NONE:
12996        Require an exact match between PARM and ARG.
12997      UNIFY_ALLOW_MORE_CV_QUAL:
12998        Allow the deduced ARG to be more cv-qualified (by qualification
12999        conversion) than ARG.
13000      UNIFY_ALLOW_LESS_CV_QUAL:
13001        Allow the deduced ARG to be less cv-qualified than ARG.
13002      UNIFY_ALLOW_DERIVED:
13003        Allow the deduced ARG to be a template base class of ARG,
13004        or a pointer to a template base class of the type pointed to by
13005        ARG.
13006      UNIFY_ALLOW_INTEGER:
13007        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13008        case for more information.
13009      UNIFY_ALLOW_OUTER_LEVEL:
13010        This is the outermost level of a deduction. Used to determine validity
13011        of qualification conversions. A valid qualification conversion must
13012        have const qualified pointers leading up to the inner type which
13013        requires additional CV quals, except at the outer level, where const
13014        is not required [conv.qual]. It would be normal to set this flag in
13015        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13016      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13017        This is the outermost level of a deduction, and PARM can be more CV
13018        qualified at this point.
13019      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13020        This is the outermost level of a deduction, and PARM can be less CV
13021        qualified at this point.  */
13022
13023 static int
13024 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13025 {
13026   int idx;
13027   tree targ;
13028   tree tparm;
13029   int strict_in = strict;
13030
13031   /* I don't think this will do the right thing with respect to types.
13032      But the only case I've seen it in so far has been array bounds, where
13033      signedness is the only information lost, and I think that will be
13034      okay.  */
13035   while (TREE_CODE (parm) == NOP_EXPR)
13036     parm = TREE_OPERAND (parm, 0);
13037
13038   if (arg == error_mark_node)
13039     return 1;
13040   if (arg == unknown_type_node)
13041     /* We can't deduce anything from this, but we might get all the
13042        template args from other function args.  */
13043     return 0;
13044
13045   /* If PARM uses template parameters, then we can't bail out here,
13046      even if ARG == PARM, since we won't record unifications for the
13047      template parameters.  We might need them if we're trying to
13048      figure out which of two things is more specialized.  */
13049   if (arg == parm && !uses_template_parms (parm))
13050     return 0;
13051
13052   /* Immediately reject some pairs that won't unify because of
13053      cv-qualification mismatches.  */
13054   if (TREE_CODE (arg) == TREE_CODE (parm)
13055       && TYPE_P (arg)
13056       /* It is the elements of the array which hold the cv quals of an array
13057          type, and the elements might be template type parms. We'll check
13058          when we recurse.  */
13059       && TREE_CODE (arg) != ARRAY_TYPE
13060       /* We check the cv-qualifiers when unifying with template type
13061          parameters below.  We want to allow ARG `const T' to unify with
13062          PARM `T' for example, when computing which of two templates
13063          is more specialized, for example.  */
13064       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13065       && !check_cv_quals_for_unify (strict_in, arg, parm))
13066     return 1;
13067
13068   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13069       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13070     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13071   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13072   strict &= ~UNIFY_ALLOW_DERIVED;
13073   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13074   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13075
13076   switch (TREE_CODE (parm))
13077     {
13078     case TYPENAME_TYPE:
13079     case SCOPE_REF:
13080     case UNBOUND_CLASS_TEMPLATE:
13081       /* In a type which contains a nested-name-specifier, template
13082          argument values cannot be deduced for template parameters used
13083          within the nested-name-specifier.  */
13084       return 0;
13085
13086     case TEMPLATE_TYPE_PARM:
13087     case TEMPLATE_TEMPLATE_PARM:
13088     case BOUND_TEMPLATE_TEMPLATE_PARM:
13089       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13090       if (tparm == error_mark_node)
13091         return 1;
13092
13093       if (TEMPLATE_TYPE_LEVEL (parm)
13094           != template_decl_level (tparm))
13095         /* The PARM is not one we're trying to unify.  Just check
13096            to see if it matches ARG.  */
13097         return (TREE_CODE (arg) == TREE_CODE (parm)
13098                 && same_type_p (parm, arg)) ? 0 : 1;
13099       idx = TEMPLATE_TYPE_IDX (parm);
13100       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13101       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13102
13103       /* Check for mixed types and values.  */
13104       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13105            && TREE_CODE (tparm) != TYPE_DECL)
13106           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13107               && TREE_CODE (tparm) != TEMPLATE_DECL))
13108         return 1;
13109
13110       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13111         {
13112           /* ARG must be constructed from a template class or a template
13113              template parameter.  */
13114           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13115               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13116             return 1;
13117
13118           {
13119             tree parmvec = TYPE_TI_ARGS (parm);
13120             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13121             tree parm_parms 
13122               = DECL_INNERMOST_TEMPLATE_PARMS
13123                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13124             int i, len;
13125             int parm_variadic_p = 0;
13126
13127             /* The resolution to DR150 makes clear that default
13128                arguments for an N-argument may not be used to bind T
13129                to a template template parameter with fewer than N
13130                parameters.  It is not safe to permit the binding of
13131                default arguments as an extension, as that may change
13132                the meaning of a conforming program.  Consider:
13133
13134                   struct Dense { static const unsigned int dim = 1; };
13135
13136                   template <template <typename> class View,
13137                             typename Block>
13138                   void operator+(float, View<Block> const&);
13139
13140                   template <typename Block,
13141                             unsigned int Dim = Block::dim>
13142                   struct Lvalue_proxy { operator float() const; };
13143
13144                   void
13145                   test_1d (void) {
13146                     Lvalue_proxy<Dense> p;
13147                     float b;
13148                     b + p;
13149                   }
13150
13151               Here, if Lvalue_proxy is permitted to bind to View, then
13152               the global operator+ will be used; if they are not, the
13153               Lvalue_proxy will be converted to float.  */
13154             if (coerce_template_parms (parm_parms,
13155                                        argvec,
13156                                        TYPE_TI_TEMPLATE (parm),
13157                                        tf_none,
13158                                        /*require_all_args=*/true,
13159                                        /*use_default_args=*/false)
13160                 == error_mark_node)
13161               return 1;
13162
13163             /* Deduce arguments T, i from TT<T> or TT<i>.
13164                We check each element of PARMVEC and ARGVEC individually
13165                rather than the whole TREE_VEC since they can have
13166                different number of elements.  */
13167
13168             parmvec = expand_template_argument_pack (parmvec);
13169             argvec = expand_template_argument_pack (argvec);
13170
13171             len = TREE_VEC_LENGTH (parmvec);
13172
13173             /* Check if the parameters end in a pack, making them
13174                variadic.  */
13175             if (len > 0
13176                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13177               parm_variadic_p = 1;
13178             
13179             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13180               return 1;
13181
13182              for (i = 0; i < len - parm_variadic_p; ++i)
13183               {
13184                 if (unify (tparms, targs,
13185                            TREE_VEC_ELT (parmvec, i),
13186                            TREE_VEC_ELT (argvec, i),
13187                            UNIFY_ALLOW_NONE))
13188                   return 1;
13189               }
13190
13191             if (parm_variadic_p
13192                 && unify_pack_expansion (tparms, targs,
13193                                          parmvec, argvec,
13194                                          UNIFY_ALLOW_NONE,
13195                                          /*call_args_p=*/false,
13196                                          /*subr=*/false))
13197               return 1;
13198           }
13199           arg = TYPE_TI_TEMPLATE (arg);
13200
13201           /* Fall through to deduce template name.  */
13202         }
13203
13204       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13205           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13206         {
13207           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13208
13209           /* Simple cases: Value already set, does match or doesn't.  */
13210           if (targ != NULL_TREE && template_args_equal (targ, arg))
13211             return 0;
13212           else if (targ)
13213             return 1;
13214         }
13215       else
13216         {
13217           /* If PARM is `const T' and ARG is only `int', we don't have
13218              a match unless we are allowing additional qualification.
13219              If ARG is `const int' and PARM is just `T' that's OK;
13220              that binds `const int' to `T'.  */
13221           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13222                                          arg, parm))
13223             return 1;
13224
13225           /* Consider the case where ARG is `const volatile int' and
13226              PARM is `const T'.  Then, T should be `volatile int'.  */
13227           arg = cp_build_qualified_type_real
13228             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13229           if (arg == error_mark_node)
13230             return 1;
13231
13232           /* Simple cases: Value already set, does match or doesn't.  */
13233           if (targ != NULL_TREE && same_type_p (targ, arg))
13234             return 0;
13235           else if (targ)
13236             return 1;
13237
13238           /* Make sure that ARG is not a variable-sized array.  (Note
13239              that were talking about variable-sized arrays (like
13240              `int[n]'), rather than arrays of unknown size (like
13241              `int[]').)  We'll get very confused by such a type since
13242              the bound of the array will not be computable in an
13243              instantiation.  Besides, such types are not allowed in
13244              ISO C++, so we can do as we please here.  */
13245           if (variably_modified_type_p (arg, NULL_TREE))
13246             return 1;
13247         }
13248
13249       /* If ARG is a parameter pack or an expansion, we cannot unify
13250          against it unless PARM is also a parameter pack.  */
13251       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13252           && !template_parameter_pack_p (parm))
13253         return 1;
13254
13255       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13256       return 0;
13257
13258     case TEMPLATE_PARM_INDEX:
13259       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13260       if (tparm == error_mark_node)
13261         return 1;
13262
13263       if (TEMPLATE_PARM_LEVEL (parm)
13264           != template_decl_level (tparm))
13265         /* The PARM is not one we're trying to unify.  Just check
13266            to see if it matches ARG.  */
13267         return !(TREE_CODE (arg) == TREE_CODE (parm)
13268                  && cp_tree_equal (parm, arg));
13269
13270       idx = TEMPLATE_PARM_IDX (parm);
13271       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13272
13273       if (targ)
13274         return !cp_tree_equal (targ, arg);
13275
13276       /* [temp.deduct.type] If, in the declaration of a function template
13277          with a non-type template-parameter, the non-type
13278          template-parameter is used in an expression in the function
13279          parameter-list and, if the corresponding template-argument is
13280          deduced, the template-argument type shall match the type of the
13281          template-parameter exactly, except that a template-argument
13282          deduced from an array bound may be of any integral type.
13283          The non-type parameter might use already deduced type parameters.  */
13284       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13285       if (!TREE_TYPE (arg))
13286         /* Template-parameter dependent expression.  Just accept it for now.
13287            It will later be processed in convert_template_argument.  */
13288         ;
13289       else if (same_type_p (TREE_TYPE (arg), tparm))
13290         /* OK */;
13291       else if ((strict & UNIFY_ALLOW_INTEGER)
13292                && (TREE_CODE (tparm) == INTEGER_TYPE
13293                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13294         /* Convert the ARG to the type of PARM; the deduced non-type
13295            template argument must exactly match the types of the
13296            corresponding parameter.  */
13297         arg = fold (build_nop (TREE_TYPE (parm), arg));
13298       else if (uses_template_parms (tparm))
13299         /* We haven't deduced the type of this parameter yet.  Try again
13300            later.  */
13301         return 0;
13302       else
13303         return 1;
13304
13305       /* If ARG is a parameter pack or an expansion, we cannot unify
13306          against it unless PARM is also a parameter pack.  */
13307       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13308           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13309         return 1;
13310
13311       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13312       return 0;
13313
13314     case PTRMEM_CST:
13315      {
13316         /* A pointer-to-member constant can be unified only with
13317          another constant.  */
13318       if (TREE_CODE (arg) != PTRMEM_CST)
13319         return 1;
13320
13321       /* Just unify the class member. It would be useless (and possibly
13322          wrong, depending on the strict flags) to unify also
13323          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13324          arg refer to the same variable, even if through different
13325          classes. For instance:
13326
13327          struct A { int x; };
13328          struct B : A { };
13329
13330          Unification of &A::x and &B::x must succeed.  */
13331       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13332                     PTRMEM_CST_MEMBER (arg), strict);
13333      }
13334
13335     case POINTER_TYPE:
13336       {
13337         if (TREE_CODE (arg) != POINTER_TYPE)
13338           return 1;
13339
13340         /* [temp.deduct.call]
13341
13342            A can be another pointer or pointer to member type that can
13343            be converted to the deduced A via a qualification
13344            conversion (_conv.qual_).
13345
13346            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13347            This will allow for additional cv-qualification of the
13348            pointed-to types if appropriate.  */
13349
13350         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13351           /* The derived-to-base conversion only persists through one
13352              level of pointers.  */
13353           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13354
13355         return unify (tparms, targs, TREE_TYPE (parm),
13356                       TREE_TYPE (arg), strict);
13357       }
13358
13359     case REFERENCE_TYPE:
13360       if (TREE_CODE (arg) != REFERENCE_TYPE)
13361         return 1;
13362       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13363                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13364
13365     case ARRAY_TYPE:
13366       if (TREE_CODE (arg) != ARRAY_TYPE)
13367         return 1;
13368       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13369           != (TYPE_DOMAIN (arg) == NULL_TREE))
13370         return 1;
13371       if (TYPE_DOMAIN (parm) != NULL_TREE)
13372         {
13373           tree parm_max;
13374           tree arg_max;
13375           bool parm_cst;
13376           bool arg_cst;
13377
13378           /* Our representation of array types uses "N - 1" as the
13379              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13380              not an integer constant.  We cannot unify arbitrarily
13381              complex expressions, so we eliminate the MINUS_EXPRs
13382              here.  */
13383           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13384           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13385           if (!parm_cst)
13386             {
13387               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13388               parm_max = TREE_OPERAND (parm_max, 0);
13389             }
13390           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13391           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13392           if (!arg_cst)
13393             {
13394               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13395                  trying to unify the type of a variable with the type
13396                  of a template parameter.  For example:
13397
13398                    template <unsigned int N>
13399                    void f (char (&) [N]);
13400                    int g(); 
13401                    void h(int i) {
13402                      char a[g(i)];
13403                      f(a); 
13404                    }
13405
13406                 Here, the type of the ARG will be "int [g(i)]", and
13407                 may be a SAVE_EXPR, etc.  */
13408               if (TREE_CODE (arg_max) != MINUS_EXPR)
13409                 return 1;
13410               arg_max = TREE_OPERAND (arg_max, 0);
13411             }
13412
13413           /* If only one of the bounds used a MINUS_EXPR, compensate
13414              by adding one to the other bound.  */
13415           if (parm_cst && !arg_cst)
13416             parm_max = fold_build2 (PLUS_EXPR,
13417                                     integer_type_node,
13418                                     parm_max,
13419                                     integer_one_node);
13420           else if (arg_cst && !parm_cst)
13421             arg_max = fold_build2 (PLUS_EXPR,
13422                                    integer_type_node,
13423                                    arg_max,
13424                                    integer_one_node);
13425
13426           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13427             return 1;
13428         }
13429       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13430                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13431
13432     case REAL_TYPE:
13433     case COMPLEX_TYPE:
13434     case VECTOR_TYPE:
13435     case INTEGER_TYPE:
13436     case BOOLEAN_TYPE:
13437     case ENUMERAL_TYPE:
13438     case VOID_TYPE:
13439       if (TREE_CODE (arg) != TREE_CODE (parm))
13440         return 1;
13441
13442       /* We have already checked cv-qualification at the top of the
13443          function.  */
13444       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13445         return 1;
13446
13447       /* As far as unification is concerned, this wins.  Later checks
13448          will invalidate it if necessary.  */
13449       return 0;
13450
13451       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13452       /* Type INTEGER_CST can come from ordinary constant template args.  */
13453     case INTEGER_CST:
13454       while (TREE_CODE (arg) == NOP_EXPR)
13455         arg = TREE_OPERAND (arg, 0);
13456
13457       if (TREE_CODE (arg) != INTEGER_CST)
13458         return 1;
13459       return !tree_int_cst_equal (parm, arg);
13460
13461     case TREE_VEC:
13462       {
13463         int i;
13464         if (TREE_CODE (arg) != TREE_VEC)
13465           return 1;
13466         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13467           return 1;
13468         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13469           if (unify (tparms, targs,
13470                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13471                      UNIFY_ALLOW_NONE))
13472             return 1;
13473         return 0;
13474       }
13475
13476     case RECORD_TYPE:
13477     case UNION_TYPE:
13478       if (TREE_CODE (arg) != TREE_CODE (parm))
13479         return 1;
13480
13481       if (TYPE_PTRMEMFUNC_P (parm))
13482         {
13483           if (!TYPE_PTRMEMFUNC_P (arg))
13484             return 1;
13485
13486           return unify (tparms, targs,
13487                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13488                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13489                         strict);
13490         }
13491
13492       if (CLASSTYPE_TEMPLATE_INFO (parm))
13493         {
13494           tree t = NULL_TREE;
13495
13496           if (strict_in & UNIFY_ALLOW_DERIVED)
13497             {
13498               /* First, we try to unify the PARM and ARG directly.  */
13499               t = try_class_unification (tparms, targs,
13500                                          parm, arg);
13501
13502               if (!t)
13503                 {
13504                   /* Fallback to the special case allowed in
13505                      [temp.deduct.call]:
13506
13507                        If P is a class, and P has the form
13508                        template-id, then A can be a derived class of
13509                        the deduced A.  Likewise, if P is a pointer to
13510                        a class of the form template-id, A can be a
13511                        pointer to a derived class pointed to by the
13512                        deduced A.  */
13513                   t = get_template_base (tparms, targs, parm, arg);
13514
13515                   if (!t)
13516                     return 1;
13517                 }
13518             }
13519           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13520                    && (CLASSTYPE_TI_TEMPLATE (parm)
13521                        == CLASSTYPE_TI_TEMPLATE (arg)))
13522             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13523                Then, we should unify `int' and `U'.  */
13524             t = arg;
13525           else
13526             /* There's no chance of unification succeeding.  */
13527             return 1;
13528
13529           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13530                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13531         }
13532       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13533         return 1;
13534       return 0;
13535
13536     case METHOD_TYPE:
13537     case FUNCTION_TYPE:
13538       if (TREE_CODE (arg) != TREE_CODE (parm))
13539         return 1;
13540
13541       /* CV qualifications for methods can never be deduced, they must
13542          match exactly.  We need to check them explicitly here,
13543          because type_unification_real treats them as any other
13544          cvqualified parameter.  */
13545       if (TREE_CODE (parm) == METHOD_TYPE
13546           && (!check_cv_quals_for_unify
13547               (UNIFY_ALLOW_NONE,
13548                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13549                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13550         return 1;
13551
13552       if (unify (tparms, targs, TREE_TYPE (parm),
13553                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13554         return 1;
13555       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13556                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13557                                     LOOKUP_NORMAL);
13558
13559     case OFFSET_TYPE:
13560       /* Unify a pointer to member with a pointer to member function, which
13561          deduces the type of the member as a function type. */
13562       if (TYPE_PTRMEMFUNC_P (arg))
13563         {
13564           tree method_type;
13565           tree fntype;
13566           cp_cv_quals cv_quals;
13567
13568           /* Check top-level cv qualifiers */
13569           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13570             return 1;
13571
13572           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13573                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13574             return 1;
13575
13576           /* Determine the type of the function we are unifying against. */
13577           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13578           fntype =
13579             build_function_type (TREE_TYPE (method_type),
13580                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13581
13582           /* Extract the cv-qualifiers of the member function from the
13583              implicit object parameter and place them on the function
13584              type to be restored later. */
13585           cv_quals =
13586             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13587           fntype = build_qualified_type (fntype, cv_quals);
13588           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13589         }
13590
13591       if (TREE_CODE (arg) != OFFSET_TYPE)
13592         return 1;
13593       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13594                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13595         return 1;
13596       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13597                     strict);
13598
13599     case CONST_DECL:
13600       if (DECL_TEMPLATE_PARM_P (parm))
13601         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13602       if (arg != integral_constant_value (parm))
13603         return 1;
13604       return 0;
13605
13606     case FIELD_DECL:
13607     case TEMPLATE_DECL:
13608       /* Matched cases are handled by the ARG == PARM test above.  */
13609       return 1;
13610
13611     case TYPE_ARGUMENT_PACK:
13612     case NONTYPE_ARGUMENT_PACK:
13613       {
13614         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13615         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13616         int i, len = TREE_VEC_LENGTH (packed_parms);
13617         int argslen = TREE_VEC_LENGTH (packed_args);
13618         int parm_variadic_p = 0;
13619
13620         for (i = 0; i < len; ++i)
13621           {
13622             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13623               {
13624                 if (i == len - 1)
13625                   /* We can unify against something with a trailing
13626                      parameter pack.  */
13627                   parm_variadic_p = 1;
13628                 else
13629                   /* Since there is something following the pack
13630                      expansion, we cannot unify this template argument
13631                      list.  */
13632                   return 0;
13633               }
13634           }
13635           
13636
13637         /* If we don't have enough arguments to satisfy the parameters
13638            (not counting the pack expression at the end), or we have
13639            too many arguments for a parameter list that doesn't end in
13640            a pack expression, we can't unify.  */
13641         if (argslen < (len - parm_variadic_p)
13642             || (argslen > len && !parm_variadic_p))
13643           return 1;
13644
13645         /* Unify all of the parameters that precede the (optional)
13646            pack expression.  */
13647         for (i = 0; i < len - parm_variadic_p; ++i)
13648           {
13649             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13650                        TREE_VEC_ELT (packed_args, i), strict))
13651               return 1;
13652           }
13653
13654         if (parm_variadic_p)
13655           return unify_pack_expansion (tparms, targs, 
13656                                        packed_parms, packed_args,
13657                                        strict, /*call_args_p=*/false,
13658                                        /*subr=*/false);
13659         return 0;
13660       }
13661
13662       break;
13663
13664     case TYPEOF_TYPE:
13665     case DECLTYPE_TYPE:
13666       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13667          nodes.  */
13668       return 0;
13669
13670     case ERROR_MARK:
13671       /* Unification fails if we hit an error node.  */
13672       return 1;
13673
13674     default:
13675       gcc_assert (EXPR_P (parm));
13676
13677       /* We must be looking at an expression.  This can happen with
13678          something like:
13679
13680            template <int I>
13681            void foo(S<I>, S<I + 2>);
13682
13683          This is a "nondeduced context":
13684
13685            [deduct.type]
13686
13687            The nondeduced contexts are:
13688
13689            --A type that is a template-id in which one or more of
13690              the template-arguments is an expression that references
13691              a template-parameter.
13692
13693          In these cases, we assume deduction succeeded, but don't
13694          actually infer any unifications.  */
13695
13696       if (!uses_template_parms (parm)
13697           && !template_args_equal (parm, arg))
13698         return 1;
13699       else
13700         return 0;
13701     }
13702 }
13703 \f
13704 /* Note that DECL can be defined in this translation unit, if
13705    required.  */
13706
13707 static void
13708 mark_definable (tree decl)
13709 {
13710   tree clone;
13711   DECL_NOT_REALLY_EXTERN (decl) = 1;
13712   FOR_EACH_CLONE (clone, decl)
13713     DECL_NOT_REALLY_EXTERN (clone) = 1;
13714 }
13715
13716 /* Called if RESULT is explicitly instantiated, or is a member of an
13717    explicitly instantiated class.  */
13718
13719 void
13720 mark_decl_instantiated (tree result, int extern_p)
13721 {
13722   SET_DECL_EXPLICIT_INSTANTIATION (result);
13723
13724   /* If this entity has already been written out, it's too late to
13725      make any modifications.  */
13726   if (TREE_ASM_WRITTEN (result))
13727     return;
13728
13729   if (TREE_CODE (result) != FUNCTION_DECL)
13730     /* The TREE_PUBLIC flag for function declarations will have been
13731        set correctly by tsubst.  */
13732     TREE_PUBLIC (result) = 1;
13733
13734   /* This might have been set by an earlier implicit instantiation.  */
13735   DECL_COMDAT (result) = 0;
13736
13737   if (extern_p)
13738     DECL_NOT_REALLY_EXTERN (result) = 0;
13739   else
13740     {
13741       mark_definable (result);
13742       /* Always make artificials weak.  */
13743       if (DECL_ARTIFICIAL (result) && flag_weak)
13744         comdat_linkage (result);
13745       /* For WIN32 we also want to put explicit instantiations in
13746          linkonce sections.  */
13747       else if (TREE_PUBLIC (result))
13748         maybe_make_one_only (result);
13749     }
13750
13751   /* If EXTERN_P, then this function will not be emitted -- unless
13752      followed by an explicit instantiation, at which point its linkage
13753      will be adjusted.  If !EXTERN_P, then this function will be
13754      emitted here.  In neither circumstance do we want
13755      import_export_decl to adjust the linkage.  */
13756   DECL_INTERFACE_KNOWN (result) = 1;
13757 }
13758
13759 /* Given two function templates PAT1 and PAT2, return:
13760
13761    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13762    -1 if PAT2 is more specialized than PAT1.
13763    0 if neither is more specialized.
13764
13765    LEN indicates the number of parameters we should consider
13766    (defaulted parameters should not be considered).
13767
13768    The 1998 std underspecified function template partial ordering, and
13769    DR214 addresses the issue.  We take pairs of arguments, one from
13770    each of the templates, and deduce them against each other.  One of
13771    the templates will be more specialized if all the *other*
13772    template's arguments deduce against its arguments and at least one
13773    of its arguments *does* *not* deduce against the other template's
13774    corresponding argument.  Deduction is done as for class templates.
13775    The arguments used in deduction have reference and top level cv
13776    qualifiers removed.  Iff both arguments were originally reference
13777    types *and* deduction succeeds in both directions, the template
13778    with the more cv-qualified argument wins for that pairing (if
13779    neither is more cv-qualified, they both are equal).  Unlike regular
13780    deduction, after all the arguments have been deduced in this way,
13781    we do *not* verify the deduced template argument values can be
13782    substituted into non-deduced contexts, nor do we have to verify
13783    that all template arguments have been deduced.  */
13784
13785 int
13786 more_specialized_fn (tree pat1, tree pat2, int len)
13787 {
13788   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13789   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13790   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13791   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13792   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13793   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13794   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13795   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13796   int better1 = 0;
13797   int better2 = 0;
13798
13799   /* Remove the this parameter from non-static member functions.  If
13800      one is a non-static member function and the other is not a static
13801      member function, remove the first parameter from that function
13802      also.  This situation occurs for operator functions where we
13803      locate both a member function (with this pointer) and non-member
13804      operator (with explicit first operand).  */
13805   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13806     {
13807       len--; /* LEN is the number of significant arguments for DECL1 */
13808       args1 = TREE_CHAIN (args1);
13809       if (!DECL_STATIC_FUNCTION_P (decl2))
13810         args2 = TREE_CHAIN (args2);
13811     }
13812   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13813     {
13814       args2 = TREE_CHAIN (args2);
13815       if (!DECL_STATIC_FUNCTION_P (decl1))
13816         {
13817           len--;
13818           args1 = TREE_CHAIN (args1);
13819         }
13820     }
13821
13822   /* If only one is a conversion operator, they are unordered.  */
13823   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13824     return 0;
13825
13826   /* Consider the return type for a conversion function */
13827   if (DECL_CONV_FN_P (decl1))
13828     {
13829       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13830       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13831       len++;
13832     }
13833
13834   processing_template_decl++;
13835
13836   while (len--
13837          /* Stop when an ellipsis is seen.  */
13838          && args1 != NULL_TREE && args2 != NULL_TREE)
13839     {
13840       tree arg1 = TREE_VALUE (args1);
13841       tree arg2 = TREE_VALUE (args2);
13842       int deduce1, deduce2;
13843       int quals1 = -1;
13844       int quals2 = -1;
13845
13846       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13847           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13848         {
13849           /* When both arguments are pack expansions, we need only
13850              unify the patterns themselves.  */
13851           arg1 = PACK_EXPANSION_PATTERN (arg1);
13852           arg2 = PACK_EXPANSION_PATTERN (arg2);
13853
13854           /* This is the last comparison we need to do.  */
13855           len = 0;
13856         }
13857
13858       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13859         {
13860           arg1 = TREE_TYPE (arg1);
13861           quals1 = cp_type_quals (arg1);
13862         }
13863
13864       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13865         {
13866           arg2 = TREE_TYPE (arg2);
13867           quals2 = cp_type_quals (arg2);
13868         }
13869
13870       if ((quals1 < 0) != (quals2 < 0))
13871         {
13872           /* Only of the args is a reference, see if we should apply
13873              array/function pointer decay to it.  This is not part of
13874              DR214, but is, IMHO, consistent with the deduction rules
13875              for the function call itself, and with our earlier
13876              implementation of the underspecified partial ordering
13877              rules.  (nathan).  */
13878           if (quals1 >= 0)
13879             {
13880               switch (TREE_CODE (arg1))
13881                 {
13882                 case ARRAY_TYPE:
13883                   arg1 = TREE_TYPE (arg1);
13884                   /* FALLTHROUGH. */
13885                 case FUNCTION_TYPE:
13886                   arg1 = build_pointer_type (arg1);
13887                   break;
13888
13889                 default:
13890                   break;
13891                 }
13892             }
13893           else
13894             {
13895               switch (TREE_CODE (arg2))
13896                 {
13897                 case ARRAY_TYPE:
13898                   arg2 = TREE_TYPE (arg2);
13899                   /* FALLTHROUGH. */
13900                 case FUNCTION_TYPE:
13901                   arg2 = build_pointer_type (arg2);
13902                   break;
13903
13904                 default:
13905                   break;
13906                 }
13907             }
13908         }
13909
13910       arg1 = TYPE_MAIN_VARIANT (arg1);
13911       arg2 = TYPE_MAIN_VARIANT (arg2);
13912
13913       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13914         {
13915           int i, len2 = list_length (args2);
13916           tree parmvec = make_tree_vec (1);
13917           tree argvec = make_tree_vec (len2);
13918           tree ta = args2;
13919
13920           /* Setup the parameter vector, which contains only ARG1.  */
13921           TREE_VEC_ELT (parmvec, 0) = arg1;
13922
13923           /* Setup the argument vector, which contains the remaining
13924              arguments.  */
13925           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13926             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13927
13928           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13929                                            argvec, UNIFY_ALLOW_NONE, 
13930                                            /*call_args_p=*/false, 
13931                                            /*subr=*/0);
13932
13933           /* We cannot deduce in the other direction, because ARG1 is
13934              a pack expansion but ARG2 is not.  */
13935           deduce2 = 0;
13936         }
13937       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13938         {
13939           int i, len1 = list_length (args1);
13940           tree parmvec = make_tree_vec (1);
13941           tree argvec = make_tree_vec (len1);
13942           tree ta = args1;
13943
13944           /* Setup the parameter vector, which contains only ARG1.  */
13945           TREE_VEC_ELT (parmvec, 0) = arg2;
13946
13947           /* Setup the argument vector, which contains the remaining
13948              arguments.  */
13949           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13950             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13951
13952           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13953                                            argvec, UNIFY_ALLOW_NONE, 
13954                                            /*call_args_p=*/false, 
13955                                            /*subr=*/0);
13956
13957           /* We cannot deduce in the other direction, because ARG2 is
13958              a pack expansion but ARG1 is not.*/
13959           deduce1 = 0;
13960         }
13961
13962       else
13963         {
13964           /* The normal case, where neither argument is a pack
13965              expansion.  */
13966           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13967           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13968         }
13969
13970       if (!deduce1)
13971         better2 = -1;
13972       if (!deduce2)
13973         better1 = -1;
13974       if (better1 < 0 && better2 < 0)
13975         /* We've failed to deduce something in either direction.
13976            These must be unordered.  */
13977         break;
13978
13979       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13980         {
13981           /* Deduces in both directions, see if quals can
13982              disambiguate.  Pretend the worse one failed to deduce. */
13983           if ((quals1 & quals2) == quals2)
13984             deduce1 = 0;
13985           if ((quals1 & quals2) == quals1)
13986             deduce2 = 0;
13987         }
13988       if (deduce1 && !deduce2 && !better2)
13989         better2 = 1;
13990       if (deduce2 && !deduce1 && !better1)
13991         better1 = 1;
13992
13993       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13994           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13995         /* We have already processed all of the arguments in our
13996            handing of the pack expansion type.  */
13997         len = 0;
13998
13999       args1 = TREE_CHAIN (args1);
14000       args2 = TREE_CHAIN (args2);
14001     }
14002
14003   processing_template_decl--;
14004
14005   /* All things being equal, if the next argument is a pack expansion
14006      for one function but not for the other, prefer the
14007      non-variadic function.  */
14008   if ((better1 > 0) - (better2 > 0) == 0
14009       && args1 && TREE_VALUE (args1)
14010       && args2 && TREE_VALUE (args2))
14011     {
14012       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14013         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14014       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14015         return 1;
14016     }
14017
14018   return (better1 > 0) - (better2 > 0);
14019 }
14020
14021 /* Determine which of two partial specializations is more specialized.
14022
14023    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14024    to the first partial specialization.  The TREE_VALUE is the
14025    innermost set of template parameters for the partial
14026    specialization.  PAT2 is similar, but for the second template.
14027
14028    Return 1 if the first partial specialization is more specialized;
14029    -1 if the second is more specialized; 0 if neither is more
14030    specialized.
14031
14032    See [temp.class.order] for information about determining which of
14033    two templates is more specialized.  */
14034
14035 static int
14036 more_specialized_class (tree pat1, tree pat2)
14037 {
14038   tree targs;
14039   tree tmpl1, tmpl2;
14040   int winner = 0;
14041   bool any_deductions = false;
14042
14043   tmpl1 = TREE_TYPE (pat1);
14044   tmpl2 = TREE_TYPE (pat2);
14045
14046   /* Just like what happens for functions, if we are ordering between
14047      different class template specializations, we may encounter dependent
14048      types in the arguments, and we need our dependency check functions
14049      to behave correctly.  */
14050   ++processing_template_decl;
14051   targs = get_class_bindings (TREE_VALUE (pat1),
14052                               CLASSTYPE_TI_ARGS (tmpl1),
14053                               CLASSTYPE_TI_ARGS (tmpl2));
14054   if (targs)
14055     {
14056       --winner;
14057       any_deductions = true;
14058     }
14059
14060   targs = get_class_bindings (TREE_VALUE (pat2),
14061                               CLASSTYPE_TI_ARGS (tmpl2),
14062                               CLASSTYPE_TI_ARGS (tmpl1));
14063   if (targs)
14064     {
14065       ++winner;
14066       any_deductions = true;
14067     }
14068   --processing_template_decl;
14069
14070   /* In the case of a tie where at least one of the class templates
14071      has a parameter pack at the end, the template with the most
14072      non-packed parameters wins.  */
14073   if (winner == 0
14074       && any_deductions
14075       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14076           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14077     {
14078       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14079       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14080       int len1 = TREE_VEC_LENGTH (args1);
14081       int len2 = TREE_VEC_LENGTH (args2);
14082
14083       /* We don't count the pack expansion at the end.  */
14084       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14085         --len1;
14086       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14087         --len2;
14088
14089       if (len1 > len2)
14090         return 1;
14091       else if (len1 < len2)
14092         return -1;
14093     }
14094
14095   return winner;
14096 }
14097
14098 /* Return the template arguments that will produce the function signature
14099    DECL from the function template FN, with the explicit template
14100    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14101    also match.  Return NULL_TREE if no satisfactory arguments could be
14102    found.  */
14103
14104 static tree
14105 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14106 {
14107   int ntparms = DECL_NTPARMS (fn);
14108   tree targs = make_tree_vec (ntparms);
14109   tree decl_type;
14110   tree decl_arg_types;
14111
14112   /* Substitute the explicit template arguments into the type of DECL.
14113      The call to fn_type_unification will handle substitution into the
14114      FN.  */
14115   decl_type = TREE_TYPE (decl);
14116   if (explicit_args && uses_template_parms (decl_type))
14117     {
14118       tree tmpl;
14119       tree converted_args;
14120
14121       if (DECL_TEMPLATE_INFO (decl))
14122         tmpl = DECL_TI_TEMPLATE (decl);
14123       else
14124         /* We can get here for some invalid specializations.  */
14125         return NULL_TREE;
14126
14127       converted_args
14128         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14129                                  explicit_args, NULL_TREE,
14130                                  tf_none,
14131                                  /*require_all_args=*/false,
14132                                  /*use_default_args=*/false);
14133       if (converted_args == error_mark_node)
14134         return NULL_TREE;
14135
14136       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14137       if (decl_type == error_mark_node)
14138         return NULL_TREE;
14139     }
14140
14141   /* Never do unification on the 'this' parameter.  */
14142   decl_arg_types = skip_artificial_parms_for (decl, 
14143                                               TYPE_ARG_TYPES (decl_type));
14144
14145   if (fn_type_unification (fn, explicit_args, targs,
14146                            decl_arg_types,
14147                            (check_rettype || DECL_CONV_FN_P (fn)
14148                             ? TREE_TYPE (decl_type) : NULL_TREE),
14149                            DEDUCE_EXACT, LOOKUP_NORMAL))
14150     return NULL_TREE;
14151
14152   return targs;
14153 }
14154
14155 /* Return the innermost template arguments that, when applied to a
14156    template specialization whose innermost template parameters are
14157    TPARMS, and whose specialization arguments are PARMS, yield the
14158    ARGS.
14159
14160    For example, suppose we have:
14161
14162      template <class T, class U> struct S {};
14163      template <class T> struct S<T*, int> {};
14164
14165    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14166    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14167    int}.  The resulting vector will be {double}, indicating that `T'
14168    is bound to `double'.  */
14169
14170 static tree
14171 get_class_bindings (tree tparms, tree spec_args, tree args)
14172 {
14173   int i, ntparms = TREE_VEC_LENGTH (tparms);
14174   tree deduced_args;
14175   tree innermost_deduced_args;
14176
14177   innermost_deduced_args = make_tree_vec (ntparms);
14178   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14179     {
14180       deduced_args = copy_node (args);
14181       SET_TMPL_ARGS_LEVEL (deduced_args,
14182                            TMPL_ARGS_DEPTH (deduced_args),
14183                            innermost_deduced_args);
14184     }
14185   else
14186     deduced_args = innermost_deduced_args;
14187
14188   if (unify (tparms, deduced_args,
14189              INNERMOST_TEMPLATE_ARGS (spec_args),
14190              INNERMOST_TEMPLATE_ARGS (args),
14191              UNIFY_ALLOW_NONE))
14192     return NULL_TREE;
14193
14194   for (i =  0; i < ntparms; ++i)
14195     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14196       return NULL_TREE;
14197
14198   /* Verify that nondeduced template arguments agree with the type
14199      obtained from argument deduction.
14200
14201      For example:
14202
14203        struct A { typedef int X; };
14204        template <class T, class U> struct C {};
14205        template <class T> struct C<T, typename T::X> {};
14206
14207      Then with the instantiation `C<A, int>', we can deduce that
14208      `T' is `A' but unify () does not check whether `typename T::X'
14209      is `int'.  */
14210   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14211   if (spec_args == error_mark_node
14212       /* We only need to check the innermost arguments; the other
14213          arguments will always agree.  */
14214       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14215                               INNERMOST_TEMPLATE_ARGS (args)))
14216     return NULL_TREE;
14217
14218   /* Now that we have bindings for all of the template arguments,
14219      ensure that the arguments deduced for the template template
14220      parameters have compatible template parameter lists.  See the use
14221      of template_template_parm_bindings_ok_p in fn_type_unification
14222      for more information.  */
14223   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14224     return NULL_TREE;
14225
14226   return deduced_args;
14227 }
14228
14229 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14230    Return the TREE_LIST node with the most specialized template, if
14231    any.  If there is no most specialized template, the error_mark_node
14232    is returned.
14233
14234    Note that this function does not look at, or modify, the
14235    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14236    returned is one of the elements of INSTANTIATIONS, callers may
14237    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14238    and retrieve it from the value returned.  */
14239
14240 tree
14241 most_specialized_instantiation (tree templates)
14242 {
14243   tree fn, champ;
14244
14245   ++processing_template_decl;
14246
14247   champ = templates;
14248   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14249     {
14250       int fate = 0;
14251
14252       if (get_bindings (TREE_VALUE (champ),
14253                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14254                         NULL_TREE, /*check_ret=*/false))
14255         fate--;
14256
14257       if (get_bindings (TREE_VALUE (fn),
14258                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14259                         NULL_TREE, /*check_ret=*/false))
14260         fate++;
14261
14262       if (fate == -1)
14263         champ = fn;
14264       else if (!fate)
14265         {
14266           /* Equally specialized, move to next function.  If there
14267              is no next function, nothing's most specialized.  */
14268           fn = TREE_CHAIN (fn);
14269           champ = fn;
14270           if (!fn)
14271             break;
14272         }
14273     }
14274
14275   if (champ)
14276     /* Now verify that champ is better than everything earlier in the
14277        instantiation list.  */
14278     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14279       if (get_bindings (TREE_VALUE (champ),
14280                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14281                         NULL_TREE, /*check_ret=*/false)
14282           || !get_bindings (TREE_VALUE (fn),
14283                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14284                             NULL_TREE, /*check_ret=*/false))
14285         {
14286           champ = NULL_TREE;
14287           break;
14288         }
14289
14290   processing_template_decl--;
14291
14292   if (!champ)
14293     return error_mark_node;
14294
14295   return champ;
14296 }
14297
14298 /* If DECL is a specialization of some template, return the most
14299    general such template.  Otherwise, returns NULL_TREE.
14300
14301    For example, given:
14302
14303      template <class T> struct S { template <class U> void f(U); };
14304
14305    if TMPL is `template <class U> void S<int>::f(U)' this will return
14306    the full template.  This function will not trace past partial
14307    specializations, however.  For example, given in addition:
14308
14309      template <class T> struct S<T*> { template <class U> void f(U); };
14310
14311    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14312    `template <class T> template <class U> S<T*>::f(U)'.  */
14313
14314 tree
14315 most_general_template (tree decl)
14316 {
14317   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14318      an immediate specialization.  */
14319   if (TREE_CODE (decl) == FUNCTION_DECL)
14320     {
14321       if (DECL_TEMPLATE_INFO (decl)) {
14322         decl = DECL_TI_TEMPLATE (decl);
14323
14324         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14325            template friend.  */
14326         if (TREE_CODE (decl) != TEMPLATE_DECL)
14327           return NULL_TREE;
14328       } else
14329         return NULL_TREE;
14330     }
14331
14332   /* Look for more and more general templates.  */
14333   while (DECL_TEMPLATE_INFO (decl))
14334     {
14335       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14336          (See cp-tree.h for details.)  */
14337       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14338         break;
14339
14340       if (CLASS_TYPE_P (TREE_TYPE (decl))
14341           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14342         break;
14343
14344       /* Stop if we run into an explicitly specialized class template.  */
14345       if (!DECL_NAMESPACE_SCOPE_P (decl)
14346           && DECL_CONTEXT (decl)
14347           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14348         break;
14349
14350       decl = DECL_TI_TEMPLATE (decl);
14351     }
14352
14353   return decl;
14354 }
14355
14356 /* Return the most specialized of the class template partial
14357    specializations of TMPL which can produce TYPE, a specialization of
14358    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14359    a _TYPE node corresponding to the partial specialization, while the
14360    TREE_PURPOSE is the set of template arguments that must be
14361    substituted into the TREE_TYPE in order to generate TYPE.
14362
14363    If the choice of partial specialization is ambiguous, a diagnostic
14364    is issued, and the error_mark_node is returned.  If there are no
14365    partial specializations of TMPL matching TYPE, then NULL_TREE is
14366    returned.  */
14367
14368 static tree
14369 most_specialized_class (tree type, tree tmpl)
14370 {
14371   tree list = NULL_TREE;
14372   tree t;
14373   tree champ;
14374   int fate;
14375   bool ambiguous_p;
14376   tree args;
14377   tree outer_args = NULL_TREE;
14378
14379   tmpl = most_general_template (tmpl);
14380   args = CLASSTYPE_TI_ARGS (type);
14381
14382   /* For determining which partial specialization to use, only the
14383      innermost args are interesting.  */
14384   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14385     {
14386       outer_args = strip_innermost_template_args (args, 1);
14387       args = INNERMOST_TEMPLATE_ARGS (args);
14388     }
14389
14390   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14391     {
14392       tree partial_spec_args;
14393       tree spec_args;
14394       tree parms = TREE_VALUE (t);
14395
14396       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14397       if (outer_args)
14398         {
14399           int i;
14400
14401           ++processing_template_decl;
14402
14403           /* Discard the outer levels of args, and then substitute in the
14404              template args from the enclosing class.  */
14405           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14406           partial_spec_args = tsubst_template_args
14407             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14408
14409           /* PARMS already refers to just the innermost parms, but the
14410              template parms in partial_spec_args had their levels lowered
14411              by tsubst, so we need to do the same for the parm list.  We
14412              can't just tsubst the TREE_VEC itself, as tsubst wants to
14413              treat a TREE_VEC as an argument vector.  */
14414           parms = copy_node (parms);
14415           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14416             TREE_VEC_ELT (parms, i) =
14417               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14418
14419           --processing_template_decl;
14420         }
14421       spec_args = get_class_bindings (parms,
14422                                       partial_spec_args,
14423                                       args);
14424       if (spec_args)
14425         {
14426           if (outer_args)
14427             spec_args = add_to_template_args (outer_args, spec_args);
14428           list = tree_cons (spec_args, TREE_VALUE (t), list);
14429           TREE_TYPE (list) = TREE_TYPE (t);
14430         }
14431     }
14432
14433   if (! list)
14434     return NULL_TREE;
14435
14436   ambiguous_p = false;
14437   t = list;
14438   champ = t;
14439   t = TREE_CHAIN (t);
14440   for (; t; t = TREE_CHAIN (t))
14441     {
14442       fate = more_specialized_class (champ, t);
14443       if (fate == 1)
14444         ;
14445       else
14446         {
14447           if (fate == 0)
14448             {
14449               t = TREE_CHAIN (t);
14450               if (! t)
14451                 {
14452                   ambiguous_p = true;
14453                   break;
14454                 }
14455             }
14456           champ = t;
14457         }
14458     }
14459
14460   if (!ambiguous_p)
14461     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14462       {
14463         fate = more_specialized_class (champ, t);
14464         if (fate != 1)
14465           {
14466             ambiguous_p = true;
14467             break;
14468           }
14469       }
14470
14471   if (ambiguous_p)
14472     {
14473       const char *str = "candidates are:";
14474       error ("ambiguous class template instantiation for %q#T", type);
14475       for (t = list; t; t = TREE_CHAIN (t))
14476         {
14477           error ("%s %+#T", str, TREE_TYPE (t));
14478           str = "               ";
14479         }
14480       return error_mark_node;
14481     }
14482
14483   return champ;
14484 }
14485
14486 /* Explicitly instantiate DECL.  */
14487
14488 void
14489 do_decl_instantiation (tree decl, tree storage)
14490 {
14491   tree result = NULL_TREE;
14492   int extern_p = 0;
14493
14494   if (!decl || decl == error_mark_node)
14495     /* An error occurred, for which grokdeclarator has already issued
14496        an appropriate message.  */
14497     return;
14498   else if (! DECL_LANG_SPECIFIC (decl))
14499     {
14500       error ("explicit instantiation of non-template %q#D", decl);
14501       return;
14502     }
14503   else if (TREE_CODE (decl) == VAR_DECL)
14504     {
14505       /* There is an asymmetry here in the way VAR_DECLs and
14506          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14507          the latter, the DECL we get back will be marked as a
14508          template instantiation, and the appropriate
14509          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14510          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14511          should handle VAR_DECLs as it currently handles
14512          FUNCTION_DECLs.  */
14513       if (!DECL_CLASS_SCOPE_P (decl))
14514         {
14515           error ("%qD is not a static data member of a class template", decl);
14516           return;
14517         }
14518       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14519       if (!result || TREE_CODE (result) != VAR_DECL)
14520         {
14521           error ("no matching template for %qD found", decl);
14522           return;
14523         }
14524       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14525         {
14526           error ("type %qT for explicit instantiation %qD does not match "
14527                  "declared type %qT", TREE_TYPE (result), decl,
14528                  TREE_TYPE (decl));
14529           return;
14530         }
14531     }
14532   else if (TREE_CODE (decl) != FUNCTION_DECL)
14533     {
14534       error ("explicit instantiation of %q#D", decl);
14535       return;
14536     }
14537   else
14538     result = decl;
14539
14540   /* Check for various error cases.  Note that if the explicit
14541      instantiation is valid the RESULT will currently be marked as an
14542      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14543      until we get here.  */
14544
14545   if (DECL_TEMPLATE_SPECIALIZATION (result))
14546     {
14547       /* DR 259 [temp.spec].
14548
14549          Both an explicit instantiation and a declaration of an explicit
14550          specialization shall not appear in a program unless the explicit
14551          instantiation follows a declaration of the explicit specialization.
14552
14553          For a given set of template parameters, if an explicit
14554          instantiation of a template appears after a declaration of an
14555          explicit specialization for that template, the explicit
14556          instantiation has no effect.  */
14557       return;
14558     }
14559   else if (DECL_EXPLICIT_INSTANTIATION (result))
14560     {
14561       /* [temp.spec]
14562
14563          No program shall explicitly instantiate any template more
14564          than once.
14565
14566          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14567          the first instantiation was `extern' and the second is not,
14568          and EXTERN_P for the opposite case.  */
14569       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14570         permerror ("duplicate explicit instantiation of %q#D", result);
14571       /* If an "extern" explicit instantiation follows an ordinary
14572          explicit instantiation, the template is instantiated.  */
14573       if (extern_p)
14574         return;
14575     }
14576   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14577     {
14578       error ("no matching template for %qD found", result);
14579       return;
14580     }
14581   else if (!DECL_TEMPLATE_INFO (result))
14582     {
14583       permerror ("explicit instantiation of non-template %q#D", result);
14584       return;
14585     }
14586
14587   if (storage == NULL_TREE)
14588     ;
14589   else if (storage == ridpointers[(int) RID_EXTERN])
14590     {
14591       if (pedantic && !in_system_header)
14592         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
14593                  "instantiations");
14594       extern_p = 1;
14595     }
14596   else
14597     error ("storage class %qD applied to template instantiation", storage);
14598
14599   check_explicit_instantiation_namespace (result);
14600   mark_decl_instantiated (result, extern_p);
14601   if (! extern_p)
14602     instantiate_decl (result, /*defer_ok=*/1,
14603                       /*expl_inst_class_mem_p=*/false);
14604 }
14605
14606 static void
14607 mark_class_instantiated (tree t, int extern_p)
14608 {
14609   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14610   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14611   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14612   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14613   if (! extern_p)
14614     {
14615       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14616       rest_of_type_compilation (t, 1);
14617     }
14618 }
14619
14620 /* Called from do_type_instantiation through binding_table_foreach to
14621    do recursive instantiation for the type bound in ENTRY.  */
14622 static void
14623 bt_instantiate_type_proc (binding_entry entry, void *data)
14624 {
14625   tree storage = *(tree *) data;
14626
14627   if (MAYBE_CLASS_TYPE_P (entry->type)
14628       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14629     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14630 }
14631
14632 /* Called from do_type_instantiation to instantiate a member
14633    (a member function or a static member variable) of an
14634    explicitly instantiated class template.  */
14635 static void
14636 instantiate_class_member (tree decl, int extern_p)
14637 {
14638   mark_decl_instantiated (decl, extern_p);
14639   if (! extern_p)
14640     instantiate_decl (decl, /*defer_ok=*/1,
14641                       /*expl_inst_class_mem_p=*/true);
14642 }
14643
14644 /* Perform an explicit instantiation of template class T.  STORAGE, if
14645    non-null, is the RID for extern, inline or static.  COMPLAIN is
14646    nonzero if this is called from the parser, zero if called recursively,
14647    since the standard is unclear (as detailed below).  */
14648
14649 void
14650 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14651 {
14652   int extern_p = 0;
14653   int nomem_p = 0;
14654   int static_p = 0;
14655   int previous_instantiation_extern_p = 0;
14656
14657   if (TREE_CODE (t) == TYPE_DECL)
14658     t = TREE_TYPE (t);
14659
14660   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14661     {
14662       error ("explicit instantiation of non-template type %qT", t);
14663       return;
14664     }
14665
14666   complete_type (t);
14667
14668   if (!COMPLETE_TYPE_P (t))
14669     {
14670       if (complain & tf_error)
14671         error ("explicit instantiation of %q#T before definition of template",
14672                t);
14673       return;
14674     }
14675
14676   if (storage != NULL_TREE)
14677     {
14678       if (pedantic && !in_system_header)
14679         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14680                 storage);
14681
14682       if (storage == ridpointers[(int) RID_INLINE])
14683         nomem_p = 1;
14684       else if (storage == ridpointers[(int) RID_EXTERN])
14685         extern_p = 1;
14686       else if (storage == ridpointers[(int) RID_STATIC])
14687         static_p = 1;
14688       else
14689         {
14690           error ("storage class %qD applied to template instantiation",
14691                  storage);
14692           extern_p = 0;
14693         }
14694     }
14695
14696   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14697     {
14698       /* DR 259 [temp.spec].
14699
14700          Both an explicit instantiation and a declaration of an explicit
14701          specialization shall not appear in a program unless the explicit
14702          instantiation follows a declaration of the explicit specialization.
14703
14704          For a given set of template parameters, if an explicit
14705          instantiation of a template appears after a declaration of an
14706          explicit specialization for that template, the explicit
14707          instantiation has no effect.  */
14708       return;
14709     }
14710   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14711     {
14712       /* [temp.spec]
14713
14714          No program shall explicitly instantiate any template more
14715          than once.
14716
14717          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14718          instantiation was `extern'.  If EXTERN_P then the second is.
14719          These cases are OK.  */
14720       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14721
14722       if (!previous_instantiation_extern_p && !extern_p
14723           && (complain & tf_error))
14724         permerror ("duplicate explicit instantiation of %q#T", t);
14725
14726       /* If we've already instantiated the template, just return now.  */
14727       if (!CLASSTYPE_INTERFACE_ONLY (t))
14728         return;
14729     }
14730
14731   check_explicit_instantiation_namespace (TYPE_NAME (t));
14732   mark_class_instantiated (t, extern_p);
14733
14734   if (nomem_p)
14735     return;
14736
14737   {
14738     tree tmp;
14739
14740     /* In contrast to implicit instantiation, where only the
14741        declarations, and not the definitions, of members are
14742        instantiated, we have here:
14743
14744          [temp.explicit]
14745
14746          The explicit instantiation of a class template specialization
14747          implies the instantiation of all of its members not
14748          previously explicitly specialized in the translation unit
14749          containing the explicit instantiation.
14750
14751        Of course, we can't instantiate member template classes, since
14752        we don't have any arguments for them.  Note that the standard
14753        is unclear on whether the instantiation of the members are
14754        *explicit* instantiations or not.  However, the most natural
14755        interpretation is that it should be an explicit instantiation.  */
14756
14757     if (! static_p)
14758       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14759         if (TREE_CODE (tmp) == FUNCTION_DECL
14760             && DECL_TEMPLATE_INSTANTIATION (tmp))
14761           instantiate_class_member (tmp, extern_p);
14762
14763     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14764       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14765         instantiate_class_member (tmp, extern_p);
14766
14767     if (CLASSTYPE_NESTED_UTDS (t))
14768       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14769                              bt_instantiate_type_proc, &storage);
14770   }
14771 }
14772
14773 /* Given a function DECL, which is a specialization of TMPL, modify
14774    DECL to be a re-instantiation of TMPL with the same template
14775    arguments.  TMPL should be the template into which tsubst'ing
14776    should occur for DECL, not the most general template.
14777
14778    One reason for doing this is a scenario like this:
14779
14780      template <class T>
14781      void f(const T&, int i);
14782
14783      void g() { f(3, 7); }
14784
14785      template <class T>
14786      void f(const T& t, const int i) { }
14787
14788    Note that when the template is first instantiated, with
14789    instantiate_template, the resulting DECL will have no name for the
14790    first parameter, and the wrong type for the second.  So, when we go
14791    to instantiate the DECL, we regenerate it.  */
14792
14793 static void
14794 regenerate_decl_from_template (tree decl, tree tmpl)
14795 {
14796   /* The arguments used to instantiate DECL, from the most general
14797      template.  */
14798   tree args;
14799   tree code_pattern;
14800
14801   args = DECL_TI_ARGS (decl);
14802   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14803
14804   /* Make sure that we can see identifiers, and compute access
14805      correctly.  */
14806   push_access_scope (decl);
14807
14808   if (TREE_CODE (decl) == FUNCTION_DECL)
14809     {
14810       tree decl_parm;
14811       tree pattern_parm;
14812       tree specs;
14813       int args_depth;
14814       int parms_depth;
14815
14816       args_depth = TMPL_ARGS_DEPTH (args);
14817       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14818       if (args_depth > parms_depth)
14819         args = get_innermost_template_args (args, parms_depth);
14820
14821       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14822                                               args, tf_error, NULL_TREE);
14823       if (specs)
14824         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14825                                                     specs);
14826
14827       /* Merge parameter declarations.  */
14828       decl_parm = skip_artificial_parms_for (decl,
14829                                              DECL_ARGUMENTS (decl));
14830       pattern_parm
14831         = skip_artificial_parms_for (code_pattern,
14832                                      DECL_ARGUMENTS (code_pattern));
14833       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14834         {
14835           tree parm_type;
14836           tree attributes;
14837           
14838           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14839             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14840           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14841                               NULL_TREE);
14842           parm_type = type_decays_to (parm_type);
14843           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14844             TREE_TYPE (decl_parm) = parm_type;
14845           attributes = DECL_ATTRIBUTES (pattern_parm);
14846           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14847             {
14848               DECL_ATTRIBUTES (decl_parm) = attributes;
14849               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14850             }
14851           decl_parm = TREE_CHAIN (decl_parm);
14852           pattern_parm = TREE_CHAIN (pattern_parm);
14853         }
14854       /* Merge any parameters that match with the function parameter
14855          pack.  */
14856       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14857         {
14858           int i, len;
14859           tree expanded_types;
14860           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14861              the parameters in this function parameter pack.  */
14862           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14863                                                  args, tf_error, NULL_TREE);
14864           len = TREE_VEC_LENGTH (expanded_types);
14865           for (i = 0; i < len; i++)
14866             {
14867               tree parm_type;
14868               tree attributes;
14869           
14870               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14871                 /* Rename the parameter to include the index.  */
14872                 DECL_NAME (decl_parm) = 
14873                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14874               parm_type = TREE_VEC_ELT (expanded_types, i);
14875               parm_type = type_decays_to (parm_type);
14876               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14877                 TREE_TYPE (decl_parm) = parm_type;
14878               attributes = DECL_ATTRIBUTES (pattern_parm);
14879               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14880                 {
14881                   DECL_ATTRIBUTES (decl_parm) = attributes;
14882                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14883                 }
14884               decl_parm = TREE_CHAIN (decl_parm);
14885             }
14886         }
14887       /* Merge additional specifiers from the CODE_PATTERN.  */
14888       if (DECL_DECLARED_INLINE_P (code_pattern)
14889           && !DECL_DECLARED_INLINE_P (decl))
14890         DECL_DECLARED_INLINE_P (decl) = 1;
14891       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14892         DECL_INLINE (decl) = 1;
14893     }
14894   else if (TREE_CODE (decl) == VAR_DECL)
14895     DECL_INITIAL (decl) =
14896       tsubst_expr (DECL_INITIAL (code_pattern), args,
14897                    tf_error, DECL_TI_TEMPLATE (decl),
14898                    /*integral_constant_expression_p=*/false);
14899   else
14900     gcc_unreachable ();
14901
14902   pop_access_scope (decl);
14903 }
14904
14905 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14906    substituted to get DECL.  */
14907
14908 tree
14909 template_for_substitution (tree decl)
14910 {
14911   tree tmpl = DECL_TI_TEMPLATE (decl);
14912
14913   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14914      for the instantiation.  This is not always the most general
14915      template.  Consider, for example:
14916
14917         template <class T>
14918         struct S { template <class U> void f();
14919                    template <> void f<int>(); };
14920
14921      and an instantiation of S<double>::f<int>.  We want TD to be the
14922      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14923   while (/* An instantiation cannot have a definition, so we need a
14924             more general template.  */
14925          DECL_TEMPLATE_INSTANTIATION (tmpl)
14926            /* We must also deal with friend templates.  Given:
14927
14928                 template <class T> struct S {
14929                   template <class U> friend void f() {};
14930                 };
14931
14932               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14933               so far as the language is concerned, but that's still
14934               where we get the pattern for the instantiation from.  On
14935               other hand, if the definition comes outside the class, say:
14936
14937                 template <class T> struct S {
14938                   template <class U> friend void f();
14939                 };
14940                 template <class U> friend void f() {}
14941
14942               we don't need to look any further.  That's what the check for
14943               DECL_INITIAL is for.  */
14944           || (TREE_CODE (decl) == FUNCTION_DECL
14945               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14946               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14947     {
14948       /* The present template, TD, should not be a definition.  If it
14949          were a definition, we should be using it!  Note that we
14950          cannot restructure the loop to just keep going until we find
14951          a template with a definition, since that might go too far if
14952          a specialization was declared, but not defined.  */
14953       gcc_assert (TREE_CODE (decl) != VAR_DECL
14954                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14955
14956       /* Fetch the more general template.  */
14957       tmpl = DECL_TI_TEMPLATE (tmpl);
14958     }
14959
14960   return tmpl;
14961 }
14962
14963 /* Produce the definition of D, a _DECL generated from a template.  If
14964    DEFER_OK is nonzero, then we don't have to actually do the
14965    instantiation now; we just have to do it sometime.  Normally it is
14966    an error if this is an explicit instantiation but D is undefined.
14967    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14968    explicitly instantiated class template.  */
14969
14970 tree
14971 instantiate_decl (tree d, int defer_ok,
14972                   bool expl_inst_class_mem_p)
14973 {
14974   tree tmpl = DECL_TI_TEMPLATE (d);
14975   tree gen_args;
14976   tree args;
14977   tree td;
14978   tree code_pattern;
14979   tree spec;
14980   tree gen_tmpl;
14981   bool pattern_defined;
14982   int need_push;
14983   location_t saved_loc = input_location;
14984   int saved_in_system_header = in_system_header;
14985   bool external_p;
14986
14987   /* This function should only be used to instantiate templates for
14988      functions and static member variables.  */
14989   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14990               || TREE_CODE (d) == VAR_DECL);
14991
14992   /* Variables are never deferred; if instantiation is required, they
14993      are instantiated right away.  That allows for better code in the
14994      case that an expression refers to the value of the variable --
14995      if the variable has a constant value the referring expression can
14996      take advantage of that fact.  */
14997   if (TREE_CODE (d) == VAR_DECL)
14998     defer_ok = 0;
14999
15000   /* Don't instantiate cloned functions.  Instead, instantiate the
15001      functions they cloned.  */
15002   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15003     d = DECL_CLONED_FUNCTION (d);
15004
15005   if (DECL_TEMPLATE_INSTANTIATED (d))
15006     /* D has already been instantiated.  It might seem reasonable to
15007        check whether or not D is an explicit instantiation, and, if so,
15008        stop here.  But when an explicit instantiation is deferred
15009        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15010        is set, even though we still need to do the instantiation.  */
15011     return d;
15012
15013   /* If we already have a specialization of this declaration, then
15014      there's no reason to instantiate it.  Note that
15015      retrieve_specialization gives us both instantiations and
15016      specializations, so we must explicitly check
15017      DECL_TEMPLATE_SPECIALIZATION.  */
15018   gen_tmpl = most_general_template (tmpl);
15019   gen_args = DECL_TI_ARGS (d);
15020   spec = retrieve_specialization (gen_tmpl, gen_args,
15021                                   /*class_specializations_p=*/false);
15022   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15023     return spec;
15024
15025   /* This needs to happen before any tsubsting.  */
15026   if (! push_tinst_level (d))
15027     return d;
15028
15029   timevar_push (TV_PARSE);
15030
15031   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15032      for the instantiation.  */
15033   td = template_for_substitution (d);
15034   code_pattern = DECL_TEMPLATE_RESULT (td);
15035
15036   /* We should never be trying to instantiate a member of a class
15037      template or partial specialization.  */
15038   gcc_assert (d != code_pattern);
15039
15040   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15041       || DECL_TEMPLATE_SPECIALIZATION (td))
15042     /* In the case of a friend template whose definition is provided
15043        outside the class, we may have too many arguments.  Drop the
15044        ones we don't need.  The same is true for specializations.  */
15045     args = get_innermost_template_args
15046       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15047   else
15048     args = gen_args;
15049
15050   if (TREE_CODE (d) == FUNCTION_DECL)
15051     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15052   else
15053     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15054
15055   /* We may be in the middle of deferred access check.  Disable it now.  */
15056   push_deferring_access_checks (dk_no_deferred);
15057
15058   /* Unless an explicit instantiation directive has already determined
15059      the linkage of D, remember that a definition is available for
15060      this entity.  */
15061   if (pattern_defined
15062       && !DECL_INTERFACE_KNOWN (d)
15063       && !DECL_NOT_REALLY_EXTERN (d))
15064     mark_definable (d);
15065
15066   input_location = DECL_SOURCE_LOCATION (d);
15067   in_system_header = DECL_IN_SYSTEM_HEADER (d);
15068
15069   /* If D is a member of an explicitly instantiated class template,
15070      and no definition is available, treat it like an implicit
15071      instantiation.  */
15072   if (!pattern_defined && expl_inst_class_mem_p
15073       && DECL_EXPLICIT_INSTANTIATION (d))
15074     {
15075       DECL_NOT_REALLY_EXTERN (d) = 0;
15076       DECL_INTERFACE_KNOWN (d) = 0;
15077       SET_DECL_IMPLICIT_INSTANTIATION (d);
15078     }
15079
15080   if (!defer_ok)
15081     {
15082       /* Recheck the substitutions to obtain any warning messages
15083          about ignoring cv qualifiers.  */
15084       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15085       tree type = TREE_TYPE (gen);
15086
15087       /* Make sure that we can see identifiers, and compute access
15088          correctly.  D is already the target FUNCTION_DECL with the
15089          right context.  */
15090       push_access_scope (d);
15091
15092       if (TREE_CODE (gen) == FUNCTION_DECL)
15093         {
15094           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15095           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15096                                           d);
15097           /* Don't simply tsubst the function type, as that will give
15098              duplicate warnings about poor parameter qualifications.
15099              The function arguments are the same as the decl_arguments
15100              without the top level cv qualifiers.  */
15101           type = TREE_TYPE (type);
15102         }
15103       tsubst (type, gen_args, tf_warning_or_error, d);
15104
15105       pop_access_scope (d);
15106     }
15107
15108   /* Check to see whether we know that this template will be
15109      instantiated in some other file, as with "extern template"
15110      extension.  */
15111   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15112   /* In general, we do not instantiate such templates...  */
15113   if (external_p
15114       /* ... but we instantiate inline functions so that we can inline
15115          them and ... */
15116       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
15117       /* ... we instantiate static data members whose values are
15118          needed in integral constant expressions.  */
15119       && ! (TREE_CODE (d) == VAR_DECL
15120             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15121     goto out;
15122   /* Defer all other templates, unless we have been explicitly
15123      forbidden from doing so.  */
15124   if (/* If there is no definition, we cannot instantiate the
15125          template.  */
15126       ! pattern_defined
15127       /* If it's OK to postpone instantiation, do so.  */
15128       || defer_ok
15129       /* If this is a static data member that will be defined
15130          elsewhere, we don't want to instantiate the entire data
15131          member, but we do want to instantiate the initializer so that
15132          we can substitute that elsewhere.  */
15133       || (external_p && TREE_CODE (d) == VAR_DECL))
15134     {
15135       /* The definition of the static data member is now required so
15136          we must substitute the initializer.  */
15137       if (TREE_CODE (d) == VAR_DECL
15138           && !DECL_INITIAL (d)
15139           && DECL_INITIAL (code_pattern))
15140         {
15141           tree ns;
15142           tree init;
15143
15144           ns = decl_namespace_context (d);
15145           push_nested_namespace (ns);
15146           push_nested_class (DECL_CONTEXT (d));
15147           init = tsubst_expr (DECL_INITIAL (code_pattern),
15148                               args,
15149                               tf_warning_or_error, NULL_TREE,
15150                               /*integral_constant_expression_p=*/false);
15151           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15152                           /*asmspec_tree=*/NULL_TREE,
15153                           LOOKUP_ONLYCONVERTING);
15154           pop_nested_class ();
15155           pop_nested_namespace (ns);
15156         }
15157
15158       /* We restore the source position here because it's used by
15159          add_pending_template.  */
15160       input_location = saved_loc;
15161
15162       if (at_eof && !pattern_defined
15163           && DECL_EXPLICIT_INSTANTIATION (d))
15164         /* [temp.explicit]
15165
15166            The definition of a non-exported function template, a
15167            non-exported member function template, or a non-exported
15168            member function or static data member of a class template
15169            shall be present in every translation unit in which it is
15170            explicitly instantiated.  */
15171         permerror
15172           ("explicit instantiation of %qD but no definition available", d);
15173
15174       /* ??? Historically, we have instantiated inline functions, even
15175          when marked as "extern template".  */
15176       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15177         add_pending_template (d);
15178       goto out;
15179     }
15180   /* Tell the repository that D is available in this translation unit
15181      -- and see if it is supposed to be instantiated here.  */
15182   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15183     {
15184       /* In a PCH file, despite the fact that the repository hasn't
15185          requested instantiation in the PCH it is still possible that
15186          an instantiation will be required in a file that includes the
15187          PCH.  */
15188       if (pch_file)
15189         add_pending_template (d);
15190       /* Instantiate inline functions so that the inliner can do its
15191          job, even though we'll not be emitting a copy of this
15192          function.  */
15193       if (!(TREE_CODE (d) == FUNCTION_DECL
15194             && flag_inline_trees
15195             && DECL_DECLARED_INLINE_P (d)))
15196         goto out;
15197     }
15198
15199   need_push = !cfun || !global_bindings_p ();
15200   if (need_push)
15201     push_to_top_level ();
15202
15203   /* Mark D as instantiated so that recursive calls to
15204      instantiate_decl do not try to instantiate it again.  */
15205   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15206
15207   /* Regenerate the declaration in case the template has been modified
15208      by a subsequent redeclaration.  */
15209   regenerate_decl_from_template (d, td);
15210
15211   /* We already set the file and line above.  Reset them now in case
15212      they changed as a result of calling regenerate_decl_from_template.  */
15213   input_location = DECL_SOURCE_LOCATION (d);
15214
15215   if (TREE_CODE (d) == VAR_DECL)
15216     {
15217       tree init;
15218
15219       /* Clear out DECL_RTL; whatever was there before may not be right
15220          since we've reset the type of the declaration.  */
15221       SET_DECL_RTL (d, NULL_RTX);
15222       DECL_IN_AGGR_P (d) = 0;
15223
15224       /* The initializer is placed in DECL_INITIAL by
15225          regenerate_decl_from_template.  Pull it out so that
15226          finish_decl can process it.  */
15227       init = DECL_INITIAL (d);
15228       DECL_INITIAL (d) = NULL_TREE;
15229       DECL_INITIALIZED_P (d) = 0;
15230
15231       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15232          initializer.  That function will defer actual emission until
15233          we have a chance to determine linkage.  */
15234       DECL_EXTERNAL (d) = 0;
15235
15236       /* Enter the scope of D so that access-checking works correctly.  */
15237       push_nested_class (DECL_CONTEXT (d));
15238       finish_decl (d, init, NULL_TREE);
15239       pop_nested_class ();
15240     }
15241   else if (TREE_CODE (d) == FUNCTION_DECL)
15242     {
15243       htab_t saved_local_specializations;
15244       tree subst_decl;
15245       tree tmpl_parm;
15246       tree spec_parm;
15247
15248       /* Save away the current list, in case we are instantiating one
15249          template from within the body of another.  */
15250       saved_local_specializations = local_specializations;
15251
15252       /* Set up the list of local specializations.  */
15253       local_specializations = htab_create (37,
15254                                            hash_local_specialization,
15255                                            eq_local_specializations,
15256                                            NULL);
15257
15258       /* Set up context.  */
15259       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15260
15261       /* Create substitution entries for the parameters.  */
15262       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15263       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15264       spec_parm = DECL_ARGUMENTS (d);
15265       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15266         {
15267           register_local_specialization (spec_parm, tmpl_parm);
15268           spec_parm = skip_artificial_parms_for (d, spec_parm);
15269           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15270         }
15271       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15272         {
15273           register_local_specialization (spec_parm, tmpl_parm);
15274           tmpl_parm = TREE_CHAIN (tmpl_parm);
15275           spec_parm = TREE_CHAIN (spec_parm);
15276         }
15277       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15278         {
15279           /* Collect all of the extra "packed" parameters into an
15280              argument pack.  */
15281           tree parmvec;
15282           tree parmtypevec;
15283           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15284           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15285           int i, len = 0;
15286           tree t;
15287           
15288           /* Count how many parameters remain.  */
15289           for (t = spec_parm; t; t = TREE_CHAIN (t))
15290             len++;
15291
15292           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15293           parmvec = make_tree_vec (len);
15294           parmtypevec = make_tree_vec (len);
15295           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15296             {
15297               TREE_VEC_ELT (parmvec, i) = spec_parm;
15298               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15299             }
15300
15301           /* Build the argument packs.  */
15302           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15303           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15304           TREE_TYPE (argpack) = argtypepack;
15305           
15306           /* Register the (value) argument pack as a specialization of
15307              TMPL_PARM, then move on.  */
15308           register_local_specialization (argpack, tmpl_parm);
15309           tmpl_parm = TREE_CHAIN (tmpl_parm);
15310         }
15311       gcc_assert (!spec_parm);
15312
15313       /* Substitute into the body of the function.  */
15314       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15315                    tf_warning_or_error, tmpl,
15316                    /*integral_constant_expression_p=*/false);
15317
15318       /* Set the current input_location to the end of the function
15319          so that finish_function knows where we are.  */
15320       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15321
15322       /* We don't need the local specializations any more.  */
15323       htab_delete (local_specializations);
15324       local_specializations = saved_local_specializations;
15325
15326       /* Finish the function.  */
15327       d = finish_function (0);
15328       expand_or_defer_fn (d);
15329     }
15330
15331   /* We're not deferring instantiation any more.  */
15332   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15333
15334   if (need_push)
15335     pop_from_top_level ();
15336
15337 out:
15338   input_location = saved_loc;
15339   in_system_header = saved_in_system_header;
15340   pop_deferring_access_checks ();
15341   pop_tinst_level ();
15342
15343   timevar_pop (TV_PARSE);
15344
15345   return d;
15346 }
15347
15348 /* Run through the list of templates that we wish we could
15349    instantiate, and instantiate any we can.  RETRIES is the
15350    number of times we retry pending template instantiation.  */
15351
15352 void
15353 instantiate_pending_templates (int retries)
15354 {
15355   int reconsider;
15356   location_t saved_loc = input_location;
15357   int saved_in_system_header = in_system_header;
15358
15359   /* Instantiating templates may trigger vtable generation.  This in turn
15360      may require further template instantiations.  We place a limit here
15361      to avoid infinite loop.  */
15362   if (pending_templates && retries >= max_tinst_depth)
15363     {
15364       tree decl = pending_templates->tinst->decl;
15365
15366       error ("template instantiation depth exceeds maximum of %d"
15367              " instantiating %q+D, possibly from virtual table generation"
15368              " (use -ftemplate-depth-NN to increase the maximum)",
15369              max_tinst_depth, decl);
15370       if (TREE_CODE (decl) == FUNCTION_DECL)
15371         /* Pretend that we defined it.  */
15372         DECL_INITIAL (decl) = error_mark_node;
15373       return;
15374     }
15375
15376   do
15377     {
15378       struct pending_template **t = &pending_templates;
15379       struct pending_template *last = NULL;
15380       reconsider = 0;
15381       while (*t)
15382         {
15383           tree instantiation = reopen_tinst_level ((*t)->tinst);
15384           bool complete = false;
15385
15386           if (TYPE_P (instantiation))
15387             {
15388               tree fn;
15389
15390               if (!COMPLETE_TYPE_P (instantiation))
15391                 {
15392                   instantiate_class_template (instantiation);
15393                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15394                     for (fn = TYPE_METHODS (instantiation);
15395                          fn;
15396                          fn = TREE_CHAIN (fn))
15397                       if (! DECL_ARTIFICIAL (fn))
15398                         instantiate_decl (fn,
15399                                           /*defer_ok=*/0,
15400                                           /*expl_inst_class_mem_p=*/false);
15401                   if (COMPLETE_TYPE_P (instantiation))
15402                     reconsider = 1;
15403                 }
15404
15405               complete = COMPLETE_TYPE_P (instantiation);
15406             }
15407           else
15408             {
15409               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15410                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15411                 {
15412                   instantiation
15413                     = instantiate_decl (instantiation,
15414                                         /*defer_ok=*/0,
15415                                         /*expl_inst_class_mem_p=*/false);
15416                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15417                     reconsider = 1;
15418                 }
15419
15420               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15421                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15422             }
15423
15424           if (complete)
15425             /* If INSTANTIATION has been instantiated, then we don't
15426                need to consider it again in the future.  */
15427             *t = (*t)->next;
15428           else
15429             {
15430               last = *t;
15431               t = &(*t)->next;
15432             }
15433           tinst_depth = 0;
15434           current_tinst_level = NULL;
15435         }
15436       last_pending_template = last;
15437     }
15438   while (reconsider);
15439
15440   input_location = saved_loc;
15441   in_system_header = saved_in_system_header;
15442 }
15443
15444 /* Substitute ARGVEC into T, which is a list of initializers for
15445    either base class or a non-static data member.  The TREE_PURPOSEs
15446    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15447    instantiate_decl.  */
15448
15449 static tree
15450 tsubst_initializer_list (tree t, tree argvec)
15451 {
15452   tree inits = NULL_TREE;
15453
15454   for (; t; t = TREE_CHAIN (t))
15455     {
15456       tree decl;
15457       tree init;
15458       tree expanded_bases = NULL_TREE;
15459       tree expanded_arguments = NULL_TREE;
15460       int i, len = 1;
15461
15462       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15463         {
15464           tree expr;
15465           tree arg;
15466
15467           /* Expand the base class expansion type into separate base
15468              classes.  */
15469           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15470                                                  tf_warning_or_error,
15471                                                  NULL_TREE);
15472           if (expanded_bases == error_mark_node)
15473             continue;
15474           
15475           /* We'll be building separate TREE_LISTs of arguments for
15476              each base.  */
15477           len = TREE_VEC_LENGTH (expanded_bases);
15478           expanded_arguments = make_tree_vec (len);
15479           for (i = 0; i < len; i++)
15480             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15481
15482           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15483              expand each argument in the TREE_VALUE of t.  */
15484           expr = make_node (EXPR_PACK_EXPANSION);
15485           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15486             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15487
15488           if (TREE_VALUE (t) == void_type_node)
15489             /* VOID_TYPE_NODE is used to indicate
15490                value-initialization.  */
15491             {
15492               for (i = 0; i < len; i++)
15493                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15494             }
15495           else
15496             {
15497               /* Substitute parameter packs into each argument in the
15498                  TREE_LIST.  */
15499               in_base_initializer = 1;
15500               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15501                 {
15502                   tree expanded_exprs;
15503
15504                   /* Expand the argument.  */
15505                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15506                   expanded_exprs 
15507                     = tsubst_pack_expansion (expr, argvec,
15508                                              tf_warning_or_error,
15509                                              NULL_TREE);
15510                   if (expanded_exprs == error_mark_node)
15511                     continue;
15512
15513                   /* Prepend each of the expanded expressions to the
15514                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15515                   for (i = 0; i < len; i++)
15516                     {
15517                       TREE_VEC_ELT (expanded_arguments, i) = 
15518                         tree_cons (NULL_TREE, 
15519                                    TREE_VEC_ELT (expanded_exprs, i),
15520                                    TREE_VEC_ELT (expanded_arguments, i));
15521                     }
15522                 }
15523               in_base_initializer = 0;
15524
15525               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15526                  since we built them backwards.  */
15527               for (i = 0; i < len; i++)
15528                 {
15529                   TREE_VEC_ELT (expanded_arguments, i) = 
15530                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15531                 }
15532             }
15533         }
15534
15535       for (i = 0; i < len; ++i)
15536         {
15537           if (expanded_bases)
15538             {
15539               decl = TREE_VEC_ELT (expanded_bases, i);
15540               decl = expand_member_init (decl);
15541               init = TREE_VEC_ELT (expanded_arguments, i);
15542             }
15543           else
15544             {
15545               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15546                                   tf_warning_or_error, NULL_TREE);
15547
15548               decl = expand_member_init (decl);
15549               if (decl && !DECL_P (decl))
15550                 in_base_initializer = 1;
15551
15552               init = tsubst_expr (TREE_VALUE (t), argvec, 
15553                                   tf_warning_or_error, NULL_TREE,
15554                                   /*integral_constant_expression_p=*/false);
15555               in_base_initializer = 0;
15556             }
15557
15558           if (decl)
15559             {
15560               init = build_tree_list (decl, init);
15561               TREE_CHAIN (init) = inits;
15562               inits = init;
15563             }
15564         }
15565     }
15566   return inits;
15567 }
15568
15569 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15570
15571 static void
15572 set_current_access_from_decl (tree decl)
15573 {
15574   if (TREE_PRIVATE (decl))
15575     current_access_specifier = access_private_node;
15576   else if (TREE_PROTECTED (decl))
15577     current_access_specifier = access_protected_node;
15578   else
15579     current_access_specifier = access_public_node;
15580 }
15581
15582 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15583    is the instantiation (which should have been created with
15584    start_enum) and ARGS are the template arguments to use.  */
15585
15586 static void
15587 tsubst_enum (tree tag, tree newtag, tree args)
15588 {
15589   tree e;
15590
15591   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15592     {
15593       tree value;
15594       tree decl;
15595
15596       decl = TREE_VALUE (e);
15597       /* Note that in a template enum, the TREE_VALUE is the
15598          CONST_DECL, not the corresponding INTEGER_CST.  */
15599       value = tsubst_expr (DECL_INITIAL (decl),
15600                            args, tf_warning_or_error, NULL_TREE,
15601                            /*integral_constant_expression_p=*/true);
15602
15603       /* Give this enumeration constant the correct access.  */
15604       set_current_access_from_decl (decl);
15605
15606       /* Actually build the enumerator itself.  */
15607       build_enumerator (DECL_NAME (decl), value, newtag);
15608     }
15609
15610   finish_enum (newtag);
15611   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15612     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15613 }
15614
15615 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15616    its type -- but without substituting the innermost set of template
15617    arguments.  So, innermost set of template parameters will appear in
15618    the type.  */
15619
15620 tree
15621 get_mostly_instantiated_function_type (tree decl)
15622 {
15623   tree fn_type;
15624   tree tmpl;
15625   tree targs;
15626   tree tparms;
15627   int parm_depth;
15628
15629   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15630   targs = DECL_TI_ARGS (decl);
15631   tparms = DECL_TEMPLATE_PARMS (tmpl);
15632   parm_depth = TMPL_PARMS_DEPTH (tparms);
15633
15634   /* There should be as many levels of arguments as there are levels
15635      of parameters.  */
15636   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15637
15638   fn_type = TREE_TYPE (tmpl);
15639
15640   if (parm_depth == 1)
15641     /* No substitution is necessary.  */
15642     ;
15643   else
15644     {
15645       int i, save_access_control;
15646       tree partial_args;
15647
15648       /* Replace the innermost level of the TARGS with NULL_TREEs to
15649          let tsubst know not to substitute for those parameters.  */
15650       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15651       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15652         SET_TMPL_ARGS_LEVEL (partial_args, i,
15653                              TMPL_ARGS_LEVEL (targs, i));
15654       SET_TMPL_ARGS_LEVEL (partial_args,
15655                            TMPL_ARGS_DEPTH (targs),
15656                            make_tree_vec (DECL_NTPARMS (tmpl)));
15657
15658       /* Disable access control as this function is used only during
15659          name-mangling.  */
15660       save_access_control = flag_access_control;
15661       flag_access_control = 0;
15662
15663       ++processing_template_decl;
15664       /* Now, do the (partial) substitution to figure out the
15665          appropriate function type.  */
15666       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15667       --processing_template_decl;
15668
15669       /* Substitute into the template parameters to obtain the real
15670          innermost set of parameters.  This step is important if the
15671          innermost set of template parameters contains value
15672          parameters whose types depend on outer template parameters.  */
15673       TREE_VEC_LENGTH (partial_args)--;
15674       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15675
15676       flag_access_control = save_access_control;
15677     }
15678
15679   return fn_type;
15680 }
15681
15682 /* Return truthvalue if we're processing a template different from
15683    the last one involved in diagnostics.  */
15684 int
15685 problematic_instantiation_changed (void)
15686 {
15687   return last_template_error_tick != tinst_level_tick;
15688 }
15689
15690 /* Remember current template involved in diagnostics.  */
15691 void
15692 record_last_problematic_instantiation (void)
15693 {
15694   last_template_error_tick = tinst_level_tick;
15695 }
15696
15697 struct tinst_level *
15698 current_instantiation (void)
15699 {
15700   return current_tinst_level;
15701 }
15702
15703 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15704    type. Return zero for ok, nonzero for disallowed. Issue error and
15705    warning messages under control of COMPLAIN.  */
15706
15707 static int
15708 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15709 {
15710   if (INTEGRAL_TYPE_P (type))
15711     return 0;
15712   else if (POINTER_TYPE_P (type))
15713     return 0;
15714   else if (TYPE_PTR_TO_MEMBER_P (type))
15715     return 0;
15716   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15717     return 0;
15718   else if (TREE_CODE (type) == TYPENAME_TYPE)
15719     return 0;
15720
15721   if (complain & tf_error)
15722     error ("%q#T is not a valid type for a template constant parameter", type);
15723   return 1;
15724 }
15725
15726 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15727    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15728
15729 static bool
15730 dependent_type_p_r (tree type)
15731 {
15732   tree scope;
15733
15734   /* [temp.dep.type]
15735
15736      A type is dependent if it is:
15737
15738      -- a template parameter. Template template parameters are types
15739         for us (since TYPE_P holds true for them) so we handle
15740         them here.  */
15741   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15742       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15743     return true;
15744   /* -- a qualified-id with a nested-name-specifier which contains a
15745         class-name that names a dependent type or whose unqualified-id
15746         names a dependent type.  */
15747   if (TREE_CODE (type) == TYPENAME_TYPE)
15748     return true;
15749   /* -- a cv-qualified type where the cv-unqualified type is
15750         dependent.  */
15751   type = TYPE_MAIN_VARIANT (type);
15752   /* -- a compound type constructed from any dependent type.  */
15753   if (TYPE_PTR_TO_MEMBER_P (type))
15754     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15755             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15756                                            (type)));
15757   else if (TREE_CODE (type) == POINTER_TYPE
15758            || TREE_CODE (type) == REFERENCE_TYPE)
15759     return dependent_type_p (TREE_TYPE (type));
15760   else if (TREE_CODE (type) == FUNCTION_TYPE
15761            || TREE_CODE (type) == METHOD_TYPE)
15762     {
15763       tree arg_type;
15764
15765       if (dependent_type_p (TREE_TYPE (type)))
15766         return true;
15767       for (arg_type = TYPE_ARG_TYPES (type);
15768            arg_type;
15769            arg_type = TREE_CHAIN (arg_type))
15770         if (dependent_type_p (TREE_VALUE (arg_type)))
15771           return true;
15772       return false;
15773     }
15774   /* -- an array type constructed from any dependent type or whose
15775         size is specified by a constant expression that is
15776         value-dependent.  */
15777   if (TREE_CODE (type) == ARRAY_TYPE)
15778     {
15779       if (TYPE_DOMAIN (type)
15780           && dependent_type_p (TYPE_DOMAIN (type)))
15781         return true;
15782       return dependent_type_p (TREE_TYPE (type));
15783     }
15784   else if (TREE_CODE (type) == INTEGER_TYPE
15785            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15786     {
15787       /* If this is the TYPE_DOMAIN of an array type, consider it
15788          dependent.  */
15789       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15790               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15791     }
15792
15793   /* -- a template-id in which either the template name is a template
15794      parameter ...  */
15795   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15796     return true;
15797   /* ... or any of the template arguments is a dependent type or
15798         an expression that is type-dependent or value-dependent.  */
15799   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15800            && (any_dependent_template_arguments_p
15801                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15802     return true;
15803
15804   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15805      argument of the `typeof' expression is not type-dependent, then
15806      it should already been have resolved.  */
15807   if (TREE_CODE (type) == TYPEOF_TYPE
15808       || TREE_CODE (type) == DECLTYPE_TYPE)
15809     return true;
15810
15811   /* A template argument pack is dependent if any of its packed
15812      arguments are.  */
15813   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15814     {
15815       tree args = ARGUMENT_PACK_ARGS (type);
15816       int i, len = TREE_VEC_LENGTH (args);
15817       for (i = 0; i < len; ++i)
15818         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15819           return true;
15820     }
15821
15822   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15823      be template parameters.  */
15824   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15825     return true;
15826
15827   /* The standard does not specifically mention types that are local
15828      to template functions or local classes, but they should be
15829      considered dependent too.  For example:
15830
15831        template <int I> void f() {
15832          enum E { a = I };
15833          S<sizeof (E)> s;
15834        }
15835
15836      The size of `E' cannot be known until the value of `I' has been
15837      determined.  Therefore, `E' must be considered dependent.  */
15838   scope = TYPE_CONTEXT (type);
15839   if (scope && TYPE_P (scope))
15840     return dependent_type_p (scope);
15841   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15842     return type_dependent_expression_p (scope);
15843
15844   /* Other types are non-dependent.  */
15845   return false;
15846 }
15847
15848 /* Returns TRUE if TYPE is dependent, in the sense of
15849    [temp.dep.type].  */
15850
15851 bool
15852 dependent_type_p (tree type)
15853 {
15854   /* If there are no template parameters in scope, then there can't be
15855      any dependent types.  */
15856   if (!processing_template_decl)
15857     {
15858       /* If we are not processing a template, then nobody should be
15859          providing us with a dependent type.  */
15860       gcc_assert (type);
15861       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15862       return false;
15863     }
15864
15865   /* If the type is NULL, we have not computed a type for the entity
15866      in question; in that case, the type is dependent.  */
15867   if (!type)
15868     return true;
15869
15870   /* Erroneous types can be considered non-dependent.  */
15871   if (type == error_mark_node)
15872     return false;
15873
15874   /* If we have not already computed the appropriate value for TYPE,
15875      do so now.  */
15876   if (!TYPE_DEPENDENT_P_VALID (type))
15877     {
15878       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15879       TYPE_DEPENDENT_P_VALID (type) = 1;
15880     }
15881
15882   return TYPE_DEPENDENT_P (type);
15883 }
15884
15885 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15886
15887 static bool
15888 dependent_scope_ref_p (tree expression, bool criterion (tree))
15889 {
15890   tree scope;
15891   tree name;
15892
15893   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15894
15895   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15896     return true;
15897
15898   scope = TREE_OPERAND (expression, 0);
15899   name = TREE_OPERAND (expression, 1);
15900
15901   /* [temp.dep.expr]
15902
15903      An id-expression is type-dependent if it contains a
15904      nested-name-specifier that contains a class-name that names a
15905      dependent type.  */
15906   /* The suggested resolution to Core Issue 2 implies that if the
15907      qualifying type is the current class, then we must peek
15908      inside it.  */
15909   if (DECL_P (name)
15910       && currently_open_class (scope)
15911       && !criterion (name))
15912     return false;
15913   if (dependent_type_p (scope))
15914     return true;
15915
15916   return false;
15917 }
15918
15919 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15920    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15921    expression.  */
15922
15923 bool
15924 value_dependent_expression_p (tree expression)
15925 {
15926   if (!processing_template_decl)
15927     return false;
15928
15929   /* A name declared with a dependent type.  */
15930   if (DECL_P (expression) && type_dependent_expression_p (expression))
15931     return true;
15932
15933   switch (TREE_CODE (expression))
15934     {
15935     case IDENTIFIER_NODE:
15936       /* A name that has not been looked up -- must be dependent.  */
15937       return true;
15938
15939     case TEMPLATE_PARM_INDEX:
15940       /* A non-type template parm.  */
15941       return true;
15942
15943     case CONST_DECL:
15944       /* A non-type template parm.  */
15945       if (DECL_TEMPLATE_PARM_P (expression))
15946         return true;
15947       return value_dependent_expression_p (DECL_INITIAL (expression));
15948
15949     case VAR_DECL:
15950        /* A constant with integral or enumeration type and is initialized
15951           with an expression that is value-dependent.  */
15952       if (DECL_INITIAL (expression)
15953           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15954           && value_dependent_expression_p (DECL_INITIAL (expression)))
15955         return true;
15956       return false;
15957
15958     case DYNAMIC_CAST_EXPR:
15959     case STATIC_CAST_EXPR:
15960     case CONST_CAST_EXPR:
15961     case REINTERPRET_CAST_EXPR:
15962     case CAST_EXPR:
15963       /* These expressions are value-dependent if the type to which
15964          the cast occurs is dependent or the expression being casted
15965          is value-dependent.  */
15966       {
15967         tree type = TREE_TYPE (expression);
15968
15969         if (dependent_type_p (type))
15970           return true;
15971
15972         /* A functional cast has a list of operands.  */
15973         expression = TREE_OPERAND (expression, 0);
15974         if (!expression)
15975           {
15976             /* If there are no operands, it must be an expression such
15977                as "int()". This should not happen for aggregate types
15978                because it would form non-constant expressions.  */
15979             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15980
15981             return false;
15982           }
15983
15984         if (TREE_CODE (expression) == TREE_LIST)
15985           return any_value_dependent_elements_p (expression);
15986
15987         return value_dependent_expression_p (expression);
15988       }
15989
15990     case SIZEOF_EXPR:
15991     case ALIGNOF_EXPR:
15992       /* A `sizeof' expression is value-dependent if the operand is
15993          type-dependent or is a pack expansion.  */
15994       expression = TREE_OPERAND (expression, 0);
15995       if (PACK_EXPANSION_P (expression))
15996         return true;
15997       else if (TYPE_P (expression))
15998         return dependent_type_p (expression);
15999       return type_dependent_expression_p (expression);
16000
16001     case SCOPE_REF:
16002       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16003
16004     case COMPONENT_REF:
16005       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16006               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16007
16008     case CALL_EXPR:
16009       /* A CALL_EXPR may appear in a constant expression if it is a
16010          call to a builtin function, e.g., __builtin_constant_p.  All
16011          such calls are value-dependent.  */
16012       return true;
16013
16014     case NONTYPE_ARGUMENT_PACK:
16015       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16016          is value-dependent.  */
16017       {
16018         tree values = ARGUMENT_PACK_ARGS (expression);
16019         int i, len = TREE_VEC_LENGTH (values);
16020         
16021         for (i = 0; i < len; ++i)
16022           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16023             return true;
16024         
16025         return false;
16026       }
16027
16028     case TRAIT_EXPR:
16029       {
16030         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16031         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16032                 || (type2 ? dependent_type_p (type2) : false));
16033       }
16034
16035     case MODOP_EXPR:
16036       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16037               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16038
16039     default:
16040       /* A constant expression is value-dependent if any subexpression is
16041          value-dependent.  */
16042       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16043         {
16044         case tcc_reference:
16045         case tcc_unary:
16046           return (value_dependent_expression_p
16047                   (TREE_OPERAND (expression, 0)));
16048
16049         case tcc_comparison:
16050         case tcc_binary:
16051           return ((value_dependent_expression_p
16052                    (TREE_OPERAND (expression, 0)))
16053                   || (value_dependent_expression_p
16054                       (TREE_OPERAND (expression, 1))));
16055
16056         case tcc_expression:
16057         case tcc_vl_exp:
16058           {
16059             int i;
16060             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16061               /* In some cases, some of the operands may be missing.
16062                  (For example, in the case of PREDECREMENT_EXPR, the
16063                  amount to increment by may be missing.)  That doesn't
16064                  make the expression dependent.  */
16065               if (TREE_OPERAND (expression, i)
16066                   && (value_dependent_expression_p
16067                       (TREE_OPERAND (expression, i))))
16068                 return true;
16069             return false;
16070           }
16071
16072         default:
16073           break;
16074         }
16075     }
16076
16077   /* The expression is not value-dependent.  */
16078   return false;
16079 }
16080
16081 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16082    [temp.dep.expr].  */
16083
16084 bool
16085 type_dependent_expression_p (tree expression)
16086 {
16087   if (!processing_template_decl)
16088     return false;
16089
16090   if (expression == error_mark_node)
16091     return false;
16092
16093   /* An unresolved name is always dependent.  */
16094   if (TREE_CODE (expression) == IDENTIFIER_NODE
16095       || TREE_CODE (expression) == USING_DECL)
16096     return true;
16097
16098   /* Some expression forms are never type-dependent.  */
16099   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16100       || TREE_CODE (expression) == SIZEOF_EXPR
16101       || TREE_CODE (expression) == ALIGNOF_EXPR
16102       || TREE_CODE (expression) == TRAIT_EXPR
16103       || TREE_CODE (expression) == TYPEID_EXPR
16104       || TREE_CODE (expression) == DELETE_EXPR
16105       || TREE_CODE (expression) == VEC_DELETE_EXPR
16106       || TREE_CODE (expression) == THROW_EXPR)
16107     return false;
16108
16109   /* The types of these expressions depends only on the type to which
16110      the cast occurs.  */
16111   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16112       || TREE_CODE (expression) == STATIC_CAST_EXPR
16113       || TREE_CODE (expression) == CONST_CAST_EXPR
16114       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16115       || TREE_CODE (expression) == CAST_EXPR)
16116     return dependent_type_p (TREE_TYPE (expression));
16117
16118   /* The types of these expressions depends only on the type created
16119      by the expression.  */
16120   if (TREE_CODE (expression) == NEW_EXPR
16121       || TREE_CODE (expression) == VEC_NEW_EXPR)
16122     {
16123       /* For NEW_EXPR tree nodes created inside a template, either
16124          the object type itself or a TREE_LIST may appear as the
16125          operand 1.  */
16126       tree type = TREE_OPERAND (expression, 1);
16127       if (TREE_CODE (type) == TREE_LIST)
16128         /* This is an array type.  We need to check array dimensions
16129            as well.  */
16130         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16131                || value_dependent_expression_p
16132                     (TREE_OPERAND (TREE_VALUE (type), 1));
16133       else
16134         return dependent_type_p (type);
16135     }
16136
16137   if (TREE_CODE (expression) == SCOPE_REF
16138       && dependent_scope_ref_p (expression,
16139                                 type_dependent_expression_p))
16140     return true;
16141
16142   if (TREE_CODE (expression) == FUNCTION_DECL
16143       && DECL_LANG_SPECIFIC (expression)
16144       && DECL_TEMPLATE_INFO (expression)
16145       && (any_dependent_template_arguments_p
16146           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16147     return true;
16148
16149   if (TREE_CODE (expression) == TEMPLATE_DECL
16150       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16151     return false;
16152
16153   if (TREE_CODE (expression) == STMT_EXPR)
16154     expression = stmt_expr_value_expr (expression);
16155
16156   if (TREE_TYPE (expression) == unknown_type_node)
16157     {
16158       if (TREE_CODE (expression) == ADDR_EXPR)
16159         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16160       if (TREE_CODE (expression) == COMPONENT_REF
16161           || TREE_CODE (expression) == OFFSET_REF)
16162         {
16163           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16164             return true;
16165           expression = TREE_OPERAND (expression, 1);
16166           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16167             return false;
16168         }
16169       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16170       if (TREE_CODE (expression) == SCOPE_REF)
16171         return false;
16172
16173       if (TREE_CODE (expression) == BASELINK)
16174         expression = BASELINK_FUNCTIONS (expression);
16175
16176       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16177         {
16178           if (any_dependent_template_arguments_p
16179               (TREE_OPERAND (expression, 1)))
16180             return true;
16181           expression = TREE_OPERAND (expression, 0);
16182         }
16183       gcc_assert (TREE_CODE (expression) == OVERLOAD
16184                   || TREE_CODE (expression) == FUNCTION_DECL);
16185
16186       while (expression)
16187         {
16188           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16189             return true;
16190           expression = OVL_NEXT (expression);
16191         }
16192       return false;
16193     }
16194
16195   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16196
16197   return (dependent_type_p (TREE_TYPE (expression)));
16198 }
16199
16200 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16201    contains a type-dependent expression.  */
16202
16203 bool
16204 any_type_dependent_arguments_p (const_tree args)
16205 {
16206   while (args)
16207     {
16208       tree arg = TREE_VALUE (args);
16209
16210       if (type_dependent_expression_p (arg))
16211         return true;
16212       args = TREE_CHAIN (args);
16213     }
16214   return false;
16215 }
16216
16217 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16218    expressions) contains any value-dependent expressions.  */
16219
16220 bool
16221 any_value_dependent_elements_p (const_tree list)
16222 {
16223   for (; list; list = TREE_CHAIN (list))
16224     if (value_dependent_expression_p (TREE_VALUE (list)))
16225       return true;
16226
16227   return false;
16228 }
16229
16230 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16231
16232 bool
16233 dependent_template_arg_p (tree arg)
16234 {
16235   if (!processing_template_decl)
16236     return false;
16237
16238   if (TREE_CODE (arg) == TEMPLATE_DECL
16239       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16240     return dependent_template_p (arg);
16241   else if (ARGUMENT_PACK_P (arg))
16242     {
16243       tree args = ARGUMENT_PACK_ARGS (arg);
16244       int i, len = TREE_VEC_LENGTH (args);
16245       for (i = 0; i < len; ++i)
16246         {
16247           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16248             return true;
16249         }
16250
16251       return false;
16252     }
16253   else if (TYPE_P (arg))
16254     return dependent_type_p (arg);
16255   else
16256     return (type_dependent_expression_p (arg)
16257             || value_dependent_expression_p (arg));
16258 }
16259
16260 /* Returns true if ARGS (a collection of template arguments) contains
16261    any types that require structural equality testing.  */
16262
16263 bool
16264 any_template_arguments_need_structural_equality_p (tree args)
16265 {
16266   int i;
16267   int j;
16268
16269   if (!args)
16270     return false;
16271   if (args == error_mark_node)
16272     return true;
16273
16274   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16275     {
16276       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16277       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16278         {
16279           tree arg = TREE_VEC_ELT (level, j);
16280           tree packed_args = NULL_TREE;
16281           int k, len = 1;
16282
16283           if (ARGUMENT_PACK_P (arg))
16284             {
16285               /* Look inside the argument pack.  */
16286               packed_args = ARGUMENT_PACK_ARGS (arg);
16287               len = TREE_VEC_LENGTH (packed_args);
16288             }
16289
16290           for (k = 0; k < len; ++k)
16291             {
16292               if (packed_args)
16293                 arg = TREE_VEC_ELT (packed_args, k);
16294
16295               if (error_operand_p (arg))
16296                 return true;
16297               else if (TREE_CODE (arg) == TEMPLATE_DECL
16298                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16299                 continue;
16300               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16301                 return true;
16302               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16303                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16304                 return true;
16305             }
16306         }
16307     }
16308
16309   return false;
16310 }
16311
16312 /* Returns true if ARGS (a collection of template arguments) contains
16313    any dependent arguments.  */
16314
16315 bool
16316 any_dependent_template_arguments_p (const_tree args)
16317 {
16318   int i;
16319   int j;
16320
16321   if (!args)
16322     return false;
16323   if (args == error_mark_node)
16324     return true;
16325
16326   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16327     {
16328       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16329       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16330         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16331           return true;
16332     }
16333
16334   return false;
16335 }
16336
16337 /* Returns TRUE if the template TMPL is dependent.  */
16338
16339 bool
16340 dependent_template_p (tree tmpl)
16341 {
16342   if (TREE_CODE (tmpl) == OVERLOAD)
16343     {
16344       while (tmpl)
16345         {
16346           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16347             return true;
16348           tmpl = OVL_CHAIN (tmpl);
16349         }
16350       return false;
16351     }
16352
16353   /* Template template parameters are dependent.  */
16354   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16355       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16356     return true;
16357   /* So are names that have not been looked up.  */
16358   if (TREE_CODE (tmpl) == SCOPE_REF
16359       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16360     return true;
16361   /* So are member templates of dependent classes.  */
16362   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16363     return dependent_type_p (DECL_CONTEXT (tmpl));
16364   return false;
16365 }
16366
16367 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16368
16369 bool
16370 dependent_template_id_p (tree tmpl, tree args)
16371 {
16372   return (dependent_template_p (tmpl)
16373           || any_dependent_template_arguments_p (args));
16374 }
16375
16376 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16377    is dependent.  */
16378
16379 bool
16380 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16381 {
16382   int i;
16383
16384   if (!processing_template_decl)
16385     return false;
16386
16387   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16388     {
16389       tree decl = TREE_VEC_ELT (declv, i);
16390       tree init = TREE_VEC_ELT (initv, i);
16391       tree cond = TREE_VEC_ELT (condv, i);
16392       tree incr = TREE_VEC_ELT (incrv, i);
16393
16394       if (type_dependent_expression_p (decl))
16395         return true;
16396
16397       if (init && type_dependent_expression_p (init))
16398         return true;
16399
16400       if (type_dependent_expression_p (cond))
16401         return true;
16402
16403       if (COMPARISON_CLASS_P (cond)
16404           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16405               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16406         return true;
16407
16408       if (TREE_CODE (incr) == MODOP_EXPR)
16409         {
16410           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16411               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16412             return true;
16413         }
16414       else if (type_dependent_expression_p (incr))
16415         return true;
16416       else if (TREE_CODE (incr) == MODIFY_EXPR)
16417         {
16418           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16419             return true;
16420           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16421             {
16422               tree t = TREE_OPERAND (incr, 1);
16423               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16424                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16425                 return true;
16426             }
16427         }
16428     }
16429
16430   return false;
16431 }
16432
16433 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16434    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16435    no such TYPE can be found.  Note that this function peers inside
16436    uninstantiated templates and therefore should be used only in
16437    extremely limited situations.  ONLY_CURRENT_P restricts this
16438    peering to the currently open classes hierarchy (which is required
16439    when comparing types).  */
16440
16441 tree
16442 resolve_typename_type (tree type, bool only_current_p)
16443 {
16444   tree scope;
16445   tree name;
16446   tree decl;
16447   int quals;
16448   tree pushed_scope;
16449   tree result;
16450
16451   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16452
16453   scope = TYPE_CONTEXT (type);
16454   name = TYPE_IDENTIFIER (type);
16455
16456   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16457      it first before we can figure out what NAME refers to.  */
16458   if (TREE_CODE (scope) == TYPENAME_TYPE)
16459     scope = resolve_typename_type (scope, only_current_p);
16460   /* If we don't know what SCOPE refers to, then we cannot resolve the
16461      TYPENAME_TYPE.  */
16462   if (TREE_CODE (scope) == TYPENAME_TYPE)
16463     return type;
16464   /* If the SCOPE is a template type parameter, we have no way of
16465      resolving the name.  */
16466   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16467     return type;
16468   /* If the SCOPE is not the current instantiation, there's no reason
16469      to look inside it.  */
16470   if (only_current_p && !currently_open_class (scope))
16471     return type;
16472   /* If SCOPE isn't the template itself, it will not have a valid
16473      TYPE_FIELDS list.  */
16474   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16475     /* scope is either the template itself or a compatible instantiation
16476        like X<T>, so look up the name in the original template.  */
16477     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16478   else
16479     /* scope is a partial instantiation, so we can't do the lookup or we
16480        will lose the template arguments.  */
16481     return type;
16482   /* Enter the SCOPE so that name lookup will be resolved as if we
16483      were in the class definition.  In particular, SCOPE will no
16484      longer be considered a dependent type.  */
16485   pushed_scope = push_scope (scope);
16486   /* Look up the declaration.  */
16487   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16488
16489   result = NULL_TREE;
16490   
16491   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16492      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16493   if (!decl)
16494     /*nop*/;
16495   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16496            && TREE_CODE (decl) == TYPE_DECL)
16497     {
16498       result = TREE_TYPE (decl);
16499       if (result == error_mark_node)
16500         result = NULL_TREE;
16501     }
16502   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16503            && DECL_CLASS_TEMPLATE_P (decl))
16504     {
16505       tree tmpl;
16506       tree args;
16507       /* Obtain the template and the arguments.  */
16508       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16509       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16510       /* Instantiate the template.  */
16511       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16512                                       /*entering_scope=*/0,
16513                                       tf_error | tf_user);
16514       if (result == error_mark_node)
16515         result = NULL_TREE;
16516     }
16517   
16518   /* Leave the SCOPE.  */
16519   if (pushed_scope)
16520     pop_scope (pushed_scope);
16521
16522   /* If we failed to resolve it, return the original typename.  */
16523   if (!result)
16524     return type;
16525   
16526   /* If lookup found a typename type, resolve that too.  */
16527   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16528     {
16529       /* Ill-formed programs can cause infinite recursion here, so we
16530          must catch that.  */
16531       TYPENAME_IS_RESOLVING_P (type) = 1;
16532       result = resolve_typename_type (result, only_current_p);
16533       TYPENAME_IS_RESOLVING_P (type) = 0;
16534     }
16535   
16536   /* Qualify the resulting type.  */
16537   quals = cp_type_quals (type);
16538   if (quals)
16539     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16540
16541   return result;
16542 }
16543
16544 /* EXPR is an expression which is not type-dependent.  Return a proxy
16545    for EXPR that can be used to compute the types of larger
16546    expressions containing EXPR.  */
16547
16548 tree
16549 build_non_dependent_expr (tree expr)
16550 {
16551   tree inner_expr;
16552
16553   /* Preserve null pointer constants so that the type of things like
16554      "p == 0" where "p" is a pointer can be determined.  */
16555   if (null_ptr_cst_p (expr))
16556     return expr;
16557   /* Preserve OVERLOADs; the functions must be available to resolve
16558      types.  */
16559   inner_expr = expr;
16560   if (TREE_CODE (inner_expr) == STMT_EXPR)
16561     inner_expr = stmt_expr_value_expr (inner_expr);
16562   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16563     inner_expr = TREE_OPERAND (inner_expr, 0);
16564   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16565     inner_expr = TREE_OPERAND (inner_expr, 1);
16566   if (is_overloaded_fn (inner_expr)
16567       || TREE_CODE (inner_expr) == OFFSET_REF)
16568     return expr;
16569   /* There is no need to return a proxy for a variable.  */
16570   if (TREE_CODE (expr) == VAR_DECL)
16571     return expr;
16572   /* Preserve string constants; conversions from string constants to
16573      "char *" are allowed, even though normally a "const char *"
16574      cannot be used to initialize a "char *".  */
16575   if (TREE_CODE (expr) == STRING_CST)
16576     return expr;
16577   /* Preserve arithmetic constants, as an optimization -- there is no
16578      reason to create a new node.  */
16579   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16580     return expr;
16581   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16582      There is at least one place where we want to know that a
16583      particular expression is a throw-expression: when checking a ?:
16584      expression, there are special rules if the second or third
16585      argument is a throw-expression.  */
16586   if (TREE_CODE (expr) == THROW_EXPR)
16587     return expr;
16588
16589   if (TREE_CODE (expr) == COND_EXPR)
16590     return build3 (COND_EXPR,
16591                    TREE_TYPE (expr),
16592                    TREE_OPERAND (expr, 0),
16593                    (TREE_OPERAND (expr, 1)
16594                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16595                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16596                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16597   if (TREE_CODE (expr) == COMPOUND_EXPR
16598       && !COMPOUND_EXPR_OVERLOADED (expr))
16599     return build2 (COMPOUND_EXPR,
16600                    TREE_TYPE (expr),
16601                    TREE_OPERAND (expr, 0),
16602                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16603
16604   /* If the type is unknown, it can't really be non-dependent */
16605   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16606
16607   /* Otherwise, build a NON_DEPENDENT_EXPR.
16608
16609      REFERENCE_TYPEs are not stripped for expressions in templates
16610      because doing so would play havoc with mangling.  Consider, for
16611      example:
16612
16613        template <typename T> void f<T& g>() { g(); }
16614
16615      In the body of "f", the expression for "g" will have
16616      REFERENCE_TYPE, even though the standard says that it should
16617      not.  The reason is that we must preserve the syntactic form of
16618      the expression so that mangling (say) "f<g>" inside the body of
16619      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16620      stripped here.  */
16621   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16622 }
16623
16624 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16625    Return a new TREE_LIST with the various arguments replaced with
16626    equivalent non-dependent expressions.  */
16627
16628 tree
16629 build_non_dependent_args (tree args)
16630 {
16631   tree a;
16632   tree new_args;
16633
16634   new_args = NULL_TREE;
16635   for (a = args; a; a = TREE_CHAIN (a))
16636     new_args = tree_cons (NULL_TREE,
16637                           build_non_dependent_expr (TREE_VALUE (a)),
16638                           new_args);
16639   return nreverse (new_args);
16640 }
16641
16642 #include "gt-cp-pt.h"