OSDN Git Service

PR c++/37006
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008  Free Software Foundation, Inc.
4    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5    Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* Known bugs or deficiencies include:
24
25      all methods must be provided in header files; can't use a source
26      file that contains only the method templates and "just win".  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct pending_template GTY (()) {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 /* Contains canonical template parameter types. The vector is indexed by
85    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
86    TREE_LIST, whose TREE_VALUEs contain the canonical template
87    parameters of various types and levels.  */
88 static GTY(()) VEC(tree,gc) *canonical_template_parms;
89
90 #define UNIFY_ALLOW_NONE 0
91 #define UNIFY_ALLOW_MORE_CV_QUAL 1
92 #define UNIFY_ALLOW_LESS_CV_QUAL 2
93 #define UNIFY_ALLOW_DERIVED 4
94 #define UNIFY_ALLOW_INTEGER 8
95 #define UNIFY_ALLOW_OUTER_LEVEL 16
96 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
97 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
98
99 static void push_access_scope (tree);
100 static void pop_access_scope (tree);
101 static bool resolve_overloaded_unification (tree, tree, tree, tree,
102                                             unification_kind_t, int);
103 static int try_one_overload (tree, tree, tree, tree, tree,
104                              unification_kind_t, int, bool);
105 static int unify (tree, tree, tree, tree, int);
106 static void add_pending_template (tree);
107 static int push_tinst_level (tree);
108 static void pop_tinst_level (void);
109 static tree reopen_tinst_level (struct tinst_level *);
110 static tree tsubst_initializer_list (tree, tree);
111 static tree get_class_bindings (tree, tree, tree);
112 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
113                                    bool, bool);
114 static void tsubst_enum (tree, tree, tree);
115 static tree add_to_template_args (tree, tree);
116 static tree add_outermost_template_args (tree, tree);
117 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
118 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
119                                              tree);
120 static int  type_unification_real (tree, tree, tree, tree,
121                                    int, unification_kind_t, int);
122 static void note_template_header (int);
123 static tree convert_nontype_argument_function (tree, tree);
124 static tree convert_nontype_argument (tree, tree);
125 static tree convert_template_argument (tree, tree, tree,
126                                        tsubst_flags_t, int, tree);
127 static int for_each_template_parm (tree, tree_fn_t, void*,
128                                    struct pointer_set_t*, bool);
129 static tree expand_template_argument_pack (tree);
130 static tree build_template_parm_index (int, int, int, tree, tree);
131 static bool inline_needs_template_parms (tree);
132 static void push_inline_template_parms_recursive (tree, int);
133 static tree retrieve_local_specialization (tree);
134 static void register_local_specialization (tree, tree);
135 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
136 static int mark_template_parm (tree, void *);
137 static int template_parm_this_level_p (tree, void *);
138 static tree tsubst_friend_function (tree, tree);
139 static tree tsubst_friend_class (tree, tree);
140 static int can_complete_type_without_circularity (tree);
141 static tree get_bindings (tree, tree, tree, bool);
142 static int template_decl_level (tree);
143 static int check_cv_quals_for_unify (int, tree, tree);
144 static void template_parm_level_and_index (tree, int*, int*);
145 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
146 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
148 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
149 static void regenerate_decl_from_template (tree, tree);
150 static tree most_specialized_class (tree, tree);
151 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
152 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
153 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
154 static bool check_specialization_scope (void);
155 static tree process_partial_specialization (tree);
156 static void set_current_access_from_decl (tree);
157 static tree get_template_base (tree, tree, tree, tree);
158 static tree try_class_unification (tree, tree, tree, tree);
159 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
160                                            tree, tree);
161 static bool template_template_parm_bindings_ok_p (tree, tree);
162 static int template_args_equal (tree, tree);
163 static void tsubst_default_arguments (tree);
164 static tree for_each_template_parm_r (tree *, int *, void *);
165 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
166 static void copy_default_args_to_explicit_spec (tree);
167 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
168 static int eq_local_specializations (const void *, const void *);
169 static bool dependent_template_arg_p (tree);
170 static bool any_template_arguments_need_structural_equality_p (tree);
171 static bool dependent_type_p_r (tree);
172 static tree tsubst (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
174 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
175 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
176
177 /* Make the current scope suitable for access checking when we are
178    processing T.  T can be FUNCTION_DECL for instantiated function
179    template, or VAR_DECL for static member variable (need by
180    instantiate_decl).  */
181
182 static void
183 push_access_scope (tree t)
184 {
185   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
186               || TREE_CODE (t) == VAR_DECL);
187
188   if (DECL_FRIEND_CONTEXT (t))
189     push_nested_class (DECL_FRIEND_CONTEXT (t));
190   else if (DECL_CLASS_SCOPE_P (t))
191     push_nested_class (DECL_CONTEXT (t));
192   else
193     push_to_top_level ();
194
195   if (TREE_CODE (t) == FUNCTION_DECL)
196     {
197       saved_access_scope = tree_cons
198         (NULL_TREE, current_function_decl, saved_access_scope);
199       current_function_decl = t;
200     }
201 }
202
203 /* Restore the scope set up by push_access_scope.  T is the node we
204    are processing.  */
205
206 static void
207 pop_access_scope (tree t)
208 {
209   if (TREE_CODE (t) == FUNCTION_DECL)
210     {
211       current_function_decl = TREE_VALUE (saved_access_scope);
212       saved_access_scope = TREE_CHAIN (saved_access_scope);
213     }
214
215   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
216     pop_nested_class ();
217   else
218     pop_from_top_level ();
219 }
220
221 /* Do any processing required when DECL (a member template
222    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
223    to DECL, unless it is a specialization, in which case the DECL
224    itself is returned.  */
225
226 tree
227 finish_member_template_decl (tree decl)
228 {
229   if (decl == error_mark_node)
230     return error_mark_node;
231
232   gcc_assert (DECL_P (decl));
233
234   if (TREE_CODE (decl) == TYPE_DECL)
235     {
236       tree type;
237
238       type = TREE_TYPE (decl);
239       if (type == error_mark_node)
240         return error_mark_node;
241       if (MAYBE_CLASS_TYPE_P (type)
242           && CLASSTYPE_TEMPLATE_INFO (type)
243           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
244         {
245           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
246           check_member_template (tmpl);
247           return tmpl;
248         }
249       return NULL_TREE;
250     }
251   else if (TREE_CODE (decl) == FIELD_DECL)
252     error ("data member %qD cannot be a member template", decl);
253   else if (DECL_TEMPLATE_INFO (decl))
254     {
255       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
256         {
257           check_member_template (DECL_TI_TEMPLATE (decl));
258           return DECL_TI_TEMPLATE (decl);
259         }
260       else
261         return decl;
262     }
263   else
264     error ("invalid member template declaration %qD", decl);
265
266   return error_mark_node;
267 }
268
269 /* Return the template info node corresponding to T, whatever T is.  */
270
271 tree
272 get_template_info (tree t)
273 {
274   tree tinfo = NULL_TREE;
275
276   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
277     tinfo = DECL_TEMPLATE_INFO (t);
278
279   if (!tinfo && TREE_CODE (t) == TYPE_DECL)
280     t = TREE_TYPE (t);
281
282   if (TAGGED_TYPE_P (t))
283     tinfo = TYPE_TEMPLATE_INFO (t);
284
285   return tinfo;
286 }
287
288 /* Returns the template nesting level of the indicated class TYPE.
289
290    For example, in:
291      template <class T>
292      struct A
293      {
294        template <class U>
295        struct B {};
296      };
297
298    A<T>::B<U> has depth two, while A<T> has depth one.
299    Both A<T>::B<int> and A<int>::B<U> have depth one, if
300    they are instantiations, not specializations.
301
302    This function is guaranteed to return 0 if passed NULL_TREE so
303    that, for example, `template_class_depth (current_class_type)' is
304    always safe.  */
305
306 int
307 template_class_depth (tree type)
308 {
309   int depth;
310
311   for (depth = 0;
312        type && TREE_CODE (type) != NAMESPACE_DECL;
313        type = (TREE_CODE (type) == FUNCTION_DECL)
314          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
315     {
316       tree tinfo = get_template_info (type);
317
318       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
319           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
320         ++depth;
321     }
322
323   return depth;
324 }
325
326 /* Subroutine of maybe_begin_member_template_processing.
327    Returns true if processing DECL needs us to push template parms.  */
328
329 static bool
330 inline_needs_template_parms (tree decl)
331 {
332   if (! DECL_TEMPLATE_INFO (decl))
333     return false;
334
335   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
336           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
337 }
338
339 /* Subroutine of maybe_begin_member_template_processing.
340    Push the template parms in PARMS, starting from LEVELS steps into the
341    chain, and ending at the beginning, since template parms are listed
342    innermost first.  */
343
344 static void
345 push_inline_template_parms_recursive (tree parmlist, int levels)
346 {
347   tree parms = TREE_VALUE (parmlist);
348   int i;
349
350   if (levels > 1)
351     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
352
353   ++processing_template_decl;
354   current_template_parms
355     = tree_cons (size_int (processing_template_decl),
356                  parms, current_template_parms);
357   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
358
359   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
360                NULL);
361   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
362     {
363       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
364
365       if (parm == error_mark_node)
366         continue;
367
368       gcc_assert (DECL_P (parm));
369
370       switch (TREE_CODE (parm))
371         {
372         case TYPE_DECL:
373         case TEMPLATE_DECL:
374           pushdecl (parm);
375           break;
376
377         case PARM_DECL:
378           {
379             /* Make a CONST_DECL as is done in process_template_parm.
380                It is ugly that we recreate this here; the original
381                version built in process_template_parm is no longer
382                available.  */
383             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
384                                     TREE_TYPE (parm));
385             DECL_ARTIFICIAL (decl) = 1;
386             TREE_CONSTANT (decl) = 1;
387             TREE_READONLY (decl) = 1;
388             DECL_INITIAL (decl) = DECL_INITIAL (parm);
389             SET_DECL_TEMPLATE_PARM_P (decl);
390             pushdecl (decl);
391           }
392           break;
393
394         default:
395           gcc_unreachable ();
396         }
397     }
398 }
399
400 /* Restore the template parameter context for a member template or
401    a friend template defined in a class definition.  */
402
403 void
404 maybe_begin_member_template_processing (tree decl)
405 {
406   tree parms;
407   int levels = 0;
408
409   if (inline_needs_template_parms (decl))
410     {
411       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
412       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
413
414       if (DECL_TEMPLATE_SPECIALIZATION (decl))
415         {
416           --levels;
417           parms = TREE_CHAIN (parms);
418         }
419
420       push_inline_template_parms_recursive (parms, levels);
421     }
422
423   /* Remember how many levels of template parameters we pushed so that
424      we can pop them later.  */
425   VEC_safe_push (int, heap, inline_parm_levels, levels);
426 }
427
428 /* Undo the effects of maybe_begin_member_template_processing.  */
429
430 void
431 maybe_end_member_template_processing (void)
432 {
433   int i;
434   int last;
435
436   if (VEC_length (int, inline_parm_levels) == 0)
437     return;
438
439   last = VEC_pop (int, inline_parm_levels);
440   for (i = 0; i < last; ++i)
441     {
442       --processing_template_decl;
443       current_template_parms = TREE_CHAIN (current_template_parms);
444       poplevel (0, 0, 0);
445     }
446 }
447
448 /* Return a new template argument vector which contains all of ARGS,
449    but has as its innermost set of arguments the EXTRA_ARGS.  */
450
451 static tree
452 add_to_template_args (tree args, tree extra_args)
453 {
454   tree new_args;
455   int extra_depth;
456   int i;
457   int j;
458
459   extra_depth = TMPL_ARGS_DEPTH (extra_args);
460   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
461
462   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
463     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
464
465   for (j = 1; j <= extra_depth; ++j, ++i)
466     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
467
468   return new_args;
469 }
470
471 /* Like add_to_template_args, but only the outermost ARGS are added to
472    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
473    (EXTRA_ARGS) levels are added.  This function is used to combine
474    the template arguments from a partial instantiation with the
475    template arguments used to attain the full instantiation from the
476    partial instantiation.  */
477
478 static tree
479 add_outermost_template_args (tree args, tree extra_args)
480 {
481   tree new_args;
482
483   /* If there are more levels of EXTRA_ARGS than there are ARGS,
484      something very fishy is going on.  */
485   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
486
487   /* If *all* the new arguments will be the EXTRA_ARGS, just return
488      them.  */
489   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
490     return extra_args;
491
492   /* For the moment, we make ARGS look like it contains fewer levels.  */
493   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
494
495   new_args = add_to_template_args (args, extra_args);
496
497   /* Now, we restore ARGS to its full dimensions.  */
498   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
499
500   return new_args;
501 }
502
503 /* Return the N levels of innermost template arguments from the ARGS.  */
504
505 tree
506 get_innermost_template_args (tree args, int n)
507 {
508   tree new_args;
509   int extra_levels;
510   int i;
511
512   gcc_assert (n >= 0);
513
514   /* If N is 1, just return the innermost set of template arguments.  */
515   if (n == 1)
516     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
517
518   /* If we're not removing anything, just return the arguments we were
519      given.  */
520   extra_levels = TMPL_ARGS_DEPTH (args) - n;
521   gcc_assert (extra_levels >= 0);
522   if (extra_levels == 0)
523     return args;
524
525   /* Make a new set of arguments, not containing the outer arguments.  */
526   new_args = make_tree_vec (n);
527   for (i = 1; i <= n; ++i)
528     SET_TMPL_ARGS_LEVEL (new_args, i,
529                          TMPL_ARGS_LEVEL (args, i + extra_levels));
530
531   return new_args;
532 }
533
534 /* The inverse of get_innermost_template_args: Return all but the innermost
535    EXTRA_LEVELS levels of template arguments from the ARGS.  */
536
537 static tree
538 strip_innermost_template_args (tree args, int extra_levels)
539 {
540   tree new_args;
541   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
542   int i;
543
544   gcc_assert (n >= 0);
545
546   /* If N is 1, just return the outermost set of template arguments.  */
547   if (n == 1)
548     return TMPL_ARGS_LEVEL (args, 1);
549
550   /* If we're not removing anything, just return the arguments we were
551      given.  */
552   gcc_assert (extra_levels >= 0);
553   if (extra_levels == 0)
554     return args;
555
556   /* Make a new set of arguments, not containing the inner arguments.  */
557   new_args = make_tree_vec (n);
558   for (i = 1; i <= n; ++i)
559     SET_TMPL_ARGS_LEVEL (new_args, i,
560                          TMPL_ARGS_LEVEL (args, i));
561
562   return new_args;
563 }
564
565 /* We've got a template header coming up; push to a new level for storing
566    the parms.  */
567
568 void
569 begin_template_parm_list (void)
570 {
571   /* We use a non-tag-transparent scope here, which causes pushtag to
572      put tags in this scope, rather than in the enclosing class or
573      namespace scope.  This is the right thing, since we want
574      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
575      global template class, push_template_decl handles putting the
576      TEMPLATE_DECL into top-level scope.  For a nested template class,
577      e.g.:
578
579        template <class T> struct S1 {
580          template <class T> struct S2 {};
581        };
582
583      pushtag contains special code to call pushdecl_with_scope on the
584      TEMPLATE_DECL for S2.  */
585   begin_scope (sk_template_parms, NULL);
586   ++processing_template_decl;
587   ++processing_template_parmlist;
588   note_template_header (0);
589 }
590
591 /* This routine is called when a specialization is declared.  If it is
592    invalid to declare a specialization here, an error is reported and
593    false is returned, otherwise this routine will return true.  */
594
595 static bool
596 check_specialization_scope (void)
597 {
598   tree scope = current_scope ();
599
600   /* [temp.expl.spec]
601
602      An explicit specialization shall be declared in the namespace of
603      which the template is a member, or, for member templates, in the
604      namespace of which the enclosing class or enclosing class
605      template is a member.  An explicit specialization of a member
606      function, member class or static data member of a class template
607      shall be declared in the namespace of which the class template
608      is a member.  */
609   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
610     {
611       error ("explicit specialization in non-namespace scope %qD", scope);
612       return false;
613     }
614
615   /* [temp.expl.spec]
616
617      In an explicit specialization declaration for a member of a class
618      template or a member template that appears in namespace scope,
619      the member template and some of its enclosing class templates may
620      remain unspecialized, except that the declaration shall not
621      explicitly specialize a class member template if its enclosing
622      class templates are not explicitly specialized as well.  */
623   if (current_template_parms)
624     {
625       error ("enclosing class templates are not explicitly specialized");
626       return false;
627     }
628
629   return true;
630 }
631
632 /* We've just seen template <>.  */
633
634 bool
635 begin_specialization (void)
636 {
637   begin_scope (sk_template_spec, NULL);
638   note_template_header (1);
639   return check_specialization_scope ();
640 }
641
642 /* Called at then end of processing a declaration preceded by
643    template<>.  */
644
645 void
646 end_specialization (void)
647 {
648   finish_scope ();
649   reset_specialization ();
650 }
651
652 /* Any template <>'s that we have seen thus far are not referring to a
653    function specialization.  */
654
655 void
656 reset_specialization (void)
657 {
658   processing_specialization = 0;
659   template_header_count = 0;
660 }
661
662 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
663    it was of the form template <>.  */
664
665 static void
666 note_template_header (int specialization)
667 {
668   processing_specialization = specialization;
669   template_header_count++;
670 }
671
672 /* We're beginning an explicit instantiation.  */
673
674 void
675 begin_explicit_instantiation (void)
676 {
677   gcc_assert (!processing_explicit_instantiation);
678   processing_explicit_instantiation = true;
679 }
680
681
682 void
683 end_explicit_instantiation (void)
684 {
685   gcc_assert (processing_explicit_instantiation);
686   processing_explicit_instantiation = false;
687 }
688
689 /* An explicit specialization or partial specialization TMPL is being
690    declared.  Check that the namespace in which the specialization is
691    occurring is permissible.  Returns false iff it is invalid to
692    specialize TMPL in the current namespace.  */
693
694 static bool
695 check_specialization_namespace (tree tmpl)
696 {
697   tree tpl_ns = decl_namespace_context (tmpl);
698
699   /* [tmpl.expl.spec]
700
701      An explicit specialization shall be declared in the namespace of
702      which the template is a member, or, for member templates, in the
703      namespace of which the enclosing class or enclosing class
704      template is a member.  An explicit specialization of a member
705      function, member class or static data member of a class template
706      shall be declared in the namespace of which the class template is
707      a member.  */
708   if (is_associated_namespace (current_namespace, tpl_ns))
709     /* Same or super-using namespace.  */
710     return true;
711   else
712     {
713       permerror ("specialization of %qD in different namespace", tmpl);
714       permerror ("  from definition of %q+#D", tmpl);
715       return false;
716     }
717 }
718
719 /* SPEC is an explicit instantiation.  Check that it is valid to
720    perform this explicit instantiation in the current namespace.  */
721
722 static void
723 check_explicit_instantiation_namespace (tree spec)
724 {
725   tree ns;
726
727   /* DR 275: An explicit instantiation shall appear in an enclosing
728      namespace of its template.  */
729   ns = decl_namespace_context (spec);
730   if (!is_ancestor (current_namespace, ns))
731     permerror ("explicit instantiation of %qD in namespace %qD "
732                "(which does not enclose namespace %qD)",
733                spec, current_namespace, ns);
734 }
735
736 /* The TYPE is being declared.  If it is a template type, that means it
737    is a partial specialization.  Do appropriate error-checking.  */
738
739 tree
740 maybe_process_partial_specialization (tree type)
741 {
742   tree context;
743
744   if (type == error_mark_node)
745     return error_mark_node;
746
747   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
748     {
749       error ("name of class shadows template template parameter %qD",
750              TYPE_NAME (type));
751       return error_mark_node;
752     }
753
754   context = TYPE_CONTEXT (type);
755
756   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
757     {
758       /* This is for ordinary explicit specialization and partial
759          specialization of a template class such as:
760
761            template <> class C<int>;
762
763          or:
764
765            template <class T> class C<T*>;
766
767          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
768
769       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
770           && !COMPLETE_TYPE_P (type))
771         {
772           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
773           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
774           if (processing_template_decl)
775             {
776               if (push_template_decl (TYPE_MAIN_DECL (type))
777                   == error_mark_node)
778                 return error_mark_node;
779             }
780         }
781       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
782         error ("specialization of %qT after instantiation", type);
783     }
784   else if (CLASS_TYPE_P (type)
785            && !CLASSTYPE_USE_TEMPLATE (type)
786            && CLASSTYPE_TEMPLATE_INFO (type)
787            && context && CLASS_TYPE_P (context)
788            && CLASSTYPE_TEMPLATE_INFO (context))
789     {
790       /* This is for an explicit specialization of member class
791          template according to [temp.expl.spec/18]:
792
793            template <> template <class U> class C<int>::D;
794
795          The context `C<int>' must be an implicit instantiation.
796          Otherwise this is just a member class template declared
797          earlier like:
798
799            template <> class C<int> { template <class U> class D; };
800            template <> template <class U> class C<int>::D;
801
802          In the first case, `C<int>::D' is a specialization of `C<T>::D'
803          while in the second case, `C<int>::D' is a primary template
804          and `C<T>::D' may not exist.  */
805
806       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
807           && !COMPLETE_TYPE_P (type))
808         {
809           tree t;
810
811           if (current_namespace
812               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
813             {
814               permerror ("specializing %q#T in different namespace", type);
815               permerror ("  from definition of %q+#D",
816                          CLASSTYPE_TI_TEMPLATE (type));
817             }
818
819           /* Check for invalid specialization after instantiation:
820
821                template <> template <> class C<int>::D<int>;
822                template <> template <class U> class C<int>::D;  */
823
824           for (t = DECL_TEMPLATE_INSTANTIATIONS
825                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
826                t; t = TREE_CHAIN (t))
827             if (TREE_VALUE (t) != type
828                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
829               error ("specialization %qT after instantiation %qT",
830                      type, TREE_VALUE (t));
831
832           /* Mark TYPE as a specialization.  And as a result, we only
833              have one level of template argument for the innermost
834              class template.  */
835           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
836           CLASSTYPE_TI_ARGS (type)
837             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
838         }
839     }
840   else if (processing_specialization)
841     {
842       error ("explicit specialization of non-template %qT", type);
843       return error_mark_node;
844     }
845
846   return type;
847 }
848
849 /* Returns nonzero if we can optimize the retrieval of specializations
850    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
851    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
852
853 static inline bool
854 optimize_specialization_lookup_p (tree tmpl)
855 {
856   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
857           && DECL_CLASS_SCOPE_P (tmpl)
858           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
859              parameter.  */
860           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
861           /* The optimized lookup depends on the fact that the
862              template arguments for the member function template apply
863              purely to the containing class, which is not true if the
864              containing class is an explicit or partial
865              specialization.  */
866           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
867           && !DECL_MEMBER_TEMPLATE_P (tmpl)
868           && !DECL_CONV_FN_P (tmpl)
869           /* It is possible to have a template that is not a member
870              template and is not a member of a template class:
871
872              template <typename T>
873              struct S { friend A::f(); };
874
875              Here, the friend function is a template, but the context does
876              not have template information.  The optimized lookup relies
877              on having ARGS be the template arguments for both the class
878              and the function template.  */
879           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
880 }
881
882 /* Retrieve the specialization (in the sense of [temp.spec] - a
883    specialization is either an instantiation or an explicit
884    specialization) of TMPL for the given template ARGS.  If there is
885    no such specialization, return NULL_TREE.  The ARGS are a vector of
886    arguments, or a vector of vectors of arguments, in the case of
887    templates with more than one level of parameters.
888
889    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
890    then we search for a partial specialization matching ARGS.  This
891    parameter is ignored if TMPL is not a class template.  */
892
893 static tree
894 retrieve_specialization (tree tmpl, tree args,
895                          bool class_specializations_p)
896 {
897   if (args == error_mark_node)
898     return NULL_TREE;
899
900   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
901
902   /* There should be as many levels of arguments as there are
903      levels of parameters.  */
904   gcc_assert (TMPL_ARGS_DEPTH (args)
905               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
906
907   if (optimize_specialization_lookup_p (tmpl))
908     {
909       tree class_template;
910       tree class_specialization;
911       VEC(tree,gc) *methods;
912       tree fns;
913       int idx;
914
915       /* The template arguments actually apply to the containing
916          class.  Find the class specialization with those
917          arguments.  */
918       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
919       class_specialization
920         = retrieve_specialization (class_template, args,
921                                    /*class_specializations_p=*/false);
922       if (!class_specialization)
923         return NULL_TREE;
924       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
925          for the specialization.  */
926       idx = class_method_index_for_fn (class_specialization, tmpl);
927       if (idx == -1)
928         return NULL_TREE;
929       /* Iterate through the methods with the indicated name, looking
930          for the one that has an instance of TMPL.  */
931       methods = CLASSTYPE_METHOD_VEC (class_specialization);
932       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
933         {
934           tree fn = OVL_CURRENT (fns);
935           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
936             return fn;
937         }
938       return NULL_TREE;
939     }
940   else
941     {
942       tree *sp;
943       tree *head;
944
945       /* Class templates store their instantiations on the
946          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
947          DECL_TEMPLATE_SPECIALIZATIONS list.  */
948       if (!class_specializations_p
949           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
950           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
951         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
952       else
953         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
954       head = sp;
955       /* Iterate through the list until we find a matching template.  */
956       while (*sp != NULL_TREE)
957         {
958           tree spec = *sp;
959
960           if (comp_template_args (TREE_PURPOSE (spec), args))
961             {
962               /* Use the move-to-front heuristic to speed up future
963                  searches.  */
964               if (spec != *head)
965                 {
966                   *sp = TREE_CHAIN (*sp);
967                   TREE_CHAIN (spec) = *head;
968                   *head = spec;
969                 }
970               return TREE_VALUE (spec);
971             }
972           sp = &TREE_CHAIN (spec);
973         }
974     }
975
976   return NULL_TREE;
977 }
978
979 /* Like retrieve_specialization, but for local declarations.  */
980
981 static tree
982 retrieve_local_specialization (tree tmpl)
983 {
984   tree spec;
985
986   if (local_specializations == NULL)
987     return NULL_TREE;
988
989   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
990                                      htab_hash_pointer (tmpl));
991   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
992 }
993
994 /* Returns nonzero iff DECL is a specialization of TMPL.  */
995
996 int
997 is_specialization_of (tree decl, tree tmpl)
998 {
999   tree t;
1000
1001   if (TREE_CODE (decl) == FUNCTION_DECL)
1002     {
1003       for (t = decl;
1004            t != NULL_TREE;
1005            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1006         if (t == tmpl)
1007           return 1;
1008     }
1009   else
1010     {
1011       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1012
1013       for (t = TREE_TYPE (decl);
1014            t != NULL_TREE;
1015            t = CLASSTYPE_USE_TEMPLATE (t)
1016              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1017         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1018           return 1;
1019     }
1020
1021   return 0;
1022 }
1023
1024 /* Returns nonzero iff DECL is a specialization of friend declaration
1025    FRIEND_DECL according to [temp.friend].  */
1026
1027 bool
1028 is_specialization_of_friend (tree decl, tree friend_decl)
1029 {
1030   bool need_template = true;
1031   int template_depth;
1032
1033   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1034               || TREE_CODE (decl) == TYPE_DECL);
1035
1036   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1037      of a template class, we want to check if DECL is a specialization
1038      if this.  */
1039   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1040       && DECL_TEMPLATE_INFO (friend_decl)
1041       && !DECL_USE_TEMPLATE (friend_decl))
1042     {
1043       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1044       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1045       need_template = false;
1046     }
1047   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1048            && !PRIMARY_TEMPLATE_P (friend_decl))
1049     need_template = false;
1050
1051   /* There is nothing to do if this is not a template friend.  */
1052   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1053     return false;
1054
1055   if (is_specialization_of (decl, friend_decl))
1056     return true;
1057
1058   /* [temp.friend/6]
1059      A member of a class template may be declared to be a friend of a
1060      non-template class.  In this case, the corresponding member of
1061      every specialization of the class template is a friend of the
1062      class granting friendship.
1063
1064      For example, given a template friend declaration
1065
1066        template <class T> friend void A<T>::f();
1067
1068      the member function below is considered a friend
1069
1070        template <> struct A<int> {
1071          void f();
1072        };
1073
1074      For this type of template friend, TEMPLATE_DEPTH below will be
1075      nonzero.  To determine if DECL is a friend of FRIEND, we first
1076      check if the enclosing class is a specialization of another.  */
1077
1078   template_depth = template_class_depth (DECL_CONTEXT (friend_decl));
1079   if (template_depth
1080       && DECL_CLASS_SCOPE_P (decl)
1081       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1082                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1083     {
1084       /* Next, we check the members themselves.  In order to handle
1085          a few tricky cases, such as when FRIEND_DECL's are
1086
1087            template <class T> friend void A<T>::g(T t);
1088            template <class T> template <T t> friend void A<T>::h();
1089
1090          and DECL's are
1091
1092            void A<int>::g(int);
1093            template <int> void A<int>::h();
1094
1095          we need to figure out ARGS, the template arguments from
1096          the context of DECL.  This is required for template substitution
1097          of `T' in the function parameter of `g' and template parameter
1098          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1099
1100       tree context = DECL_CONTEXT (decl);
1101       tree args = NULL_TREE;
1102       int current_depth = 0;
1103
1104       while (current_depth < template_depth)
1105         {
1106           if (CLASSTYPE_TEMPLATE_INFO (context))
1107             {
1108               if (current_depth == 0)
1109                 args = TYPE_TI_ARGS (context);
1110               else
1111                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1112               current_depth++;
1113             }
1114           context = TYPE_CONTEXT (context);
1115         }
1116
1117       if (TREE_CODE (decl) == FUNCTION_DECL)
1118         {
1119           bool is_template;
1120           tree friend_type;
1121           tree decl_type;
1122           tree friend_args_type;
1123           tree decl_args_type;
1124
1125           /* Make sure that both DECL and FRIEND_DECL are templates or
1126              non-templates.  */
1127           is_template = DECL_TEMPLATE_INFO (decl)
1128                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1129           if (need_template ^ is_template)
1130             return false;
1131           else if (is_template)
1132             {
1133               /* If both are templates, check template parameter list.  */
1134               tree friend_parms
1135                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1136                                          args, tf_none);
1137               if (!comp_template_parms
1138                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1139                       friend_parms))
1140                 return false;
1141
1142               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1143             }
1144           else
1145             decl_type = TREE_TYPE (decl);
1146
1147           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1148                                               tf_none, NULL_TREE);
1149           if (friend_type == error_mark_node)
1150             return false;
1151
1152           /* Check if return types match.  */
1153           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1154             return false;
1155
1156           /* Check if function parameter types match, ignoring the
1157              `this' parameter.  */
1158           friend_args_type = TYPE_ARG_TYPES (friend_type);
1159           decl_args_type = TYPE_ARG_TYPES (decl_type);
1160           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1161             friend_args_type = TREE_CHAIN (friend_args_type);
1162           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1163             decl_args_type = TREE_CHAIN (decl_args_type);
1164
1165           return compparms (decl_args_type, friend_args_type);
1166         }
1167       else
1168         {
1169           /* DECL is a TYPE_DECL */
1170           bool is_template;
1171           tree decl_type = TREE_TYPE (decl);
1172
1173           /* Make sure that both DECL and FRIEND_DECL are templates or
1174              non-templates.  */
1175           is_template
1176             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1177               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1178
1179           if (need_template ^ is_template)
1180             return false;
1181           else if (is_template)
1182             {
1183               tree friend_parms;
1184               /* If both are templates, check the name of the two
1185                  TEMPLATE_DECL's first because is_friend didn't.  */
1186               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1187                   != DECL_NAME (friend_decl))
1188                 return false;
1189
1190               /* Now check template parameter list.  */
1191               friend_parms
1192                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1193                                          args, tf_none);
1194               return comp_template_parms
1195                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1196                  friend_parms);
1197             }
1198           else
1199             return (DECL_NAME (decl)
1200                     == DECL_NAME (friend_decl));
1201         }
1202     }
1203   return false;
1204 }
1205
1206 /* Register the specialization SPEC as a specialization of TMPL with
1207    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1208    is actually just a friend declaration.  Returns SPEC, or an
1209    equivalent prior declaration, if available.  */
1210
1211 static tree
1212 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1213 {
1214   tree fn;
1215
1216   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1217
1218   if (TREE_CODE (spec) == FUNCTION_DECL
1219       && uses_template_parms (DECL_TI_ARGS (spec)))
1220     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1221        register it; we want the corresponding TEMPLATE_DECL instead.
1222        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1223        the more obvious `uses_template_parms (spec)' to avoid problems
1224        with default function arguments.  In particular, given
1225        something like this:
1226
1227           template <class T> void f(T t1, T t = T())
1228
1229        the default argument expression is not substituted for in an
1230        instantiation unless and until it is actually needed.  */
1231     return spec;
1232
1233   fn = retrieve_specialization (tmpl, args,
1234                                 /*class_specializations_p=*/false);
1235   /* We can sometimes try to re-register a specialization that we've
1236      already got.  In particular, regenerate_decl_from_template calls
1237      duplicate_decls which will update the specialization list.  But,
1238      we'll still get called again here anyhow.  It's more convenient
1239      to simply allow this than to try to prevent it.  */
1240   if (fn == spec)
1241     return spec;
1242   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1243     {
1244       if (DECL_TEMPLATE_INSTANTIATION (fn))
1245         {
1246           if (TREE_USED (fn)
1247               || DECL_EXPLICIT_INSTANTIATION (fn))
1248             {
1249               error ("specialization of %qD after instantiation",
1250                      fn);
1251               return error_mark_node;
1252             }
1253           else
1254             {
1255               tree clone;
1256               /* This situation should occur only if the first
1257                  specialization is an implicit instantiation, the
1258                  second is an explicit specialization, and the
1259                  implicit instantiation has not yet been used.  That
1260                  situation can occur if we have implicitly
1261                  instantiated a member function and then specialized
1262                  it later.
1263
1264                  We can also wind up here if a friend declaration that
1265                  looked like an instantiation turns out to be a
1266                  specialization:
1267
1268                    template <class T> void foo(T);
1269                    class S { friend void foo<>(int) };
1270                    template <> void foo(int);
1271
1272                  We transform the existing DECL in place so that any
1273                  pointers to it become pointers to the updated
1274                  declaration.
1275
1276                  If there was a definition for the template, but not
1277                  for the specialization, we want this to look as if
1278                  there were no definition, and vice versa.  */
1279               DECL_INITIAL (fn) = NULL_TREE;
1280               duplicate_decls (spec, fn, is_friend);
1281               /* The call to duplicate_decls will have applied
1282                  [temp.expl.spec]:
1283
1284                    An explicit specialization of a function template
1285                    is inline only if it is explicitly declared to be,
1286                    and independently of whether its function template
1287                    is.
1288
1289                 to the primary function; now copy the inline bits to
1290                 the various clones.  */
1291               FOR_EACH_CLONE (clone, fn)
1292                 DECL_DECLARED_INLINE_P (clone)
1293                   = DECL_DECLARED_INLINE_P (fn);
1294               check_specialization_namespace (fn);
1295
1296               return fn;
1297             }
1298         }
1299       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1300         {
1301           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1302             /* Dup decl failed, but this is a new definition. Set the
1303                line number so any errors match this new
1304                definition.  */
1305             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1306
1307           return fn;
1308         }
1309     }
1310
1311   /* A specialization must be declared in the same namespace as the
1312      template it is specializing.  */
1313   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1314       && !check_specialization_namespace (tmpl))
1315     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1316
1317   if (!optimize_specialization_lookup_p (tmpl))
1318     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1319       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1320
1321   return spec;
1322 }
1323
1324 /* Unregister the specialization SPEC as a specialization of TMPL.
1325    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1326    if the SPEC was listed as a specialization of TMPL.  */
1327
1328 bool
1329 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1330 {
1331   tree* s;
1332
1333   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1334        *s != NULL_TREE;
1335        s = &TREE_CHAIN (*s))
1336     if (TREE_VALUE (*s) == spec)
1337       {
1338         if (!new_spec)
1339           *s = TREE_CHAIN (*s);
1340         else
1341           TREE_VALUE (*s) = new_spec;
1342         return 1;
1343       }
1344
1345   return 0;
1346 }
1347
1348 /* Compare an entry in the local specializations hash table P1 (which
1349    is really a pointer to a TREE_LIST) with P2 (which is really a
1350    DECL).  */
1351
1352 static int
1353 eq_local_specializations (const void *p1, const void *p2)
1354 {
1355   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1356 }
1357
1358 /* Hash P1, an entry in the local specializations table.  */
1359
1360 static hashval_t
1361 hash_local_specialization (const void* p1)
1362 {
1363   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1364 }
1365
1366 /* Like register_specialization, but for local declarations.  We are
1367    registering SPEC, an instantiation of TMPL.  */
1368
1369 static void
1370 register_local_specialization (tree spec, tree tmpl)
1371 {
1372   void **slot;
1373
1374   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1375                                    htab_hash_pointer (tmpl), INSERT);
1376   *slot = build_tree_list (spec, tmpl);
1377 }
1378
1379 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1380    specialized class.  */
1381
1382 bool
1383 explicit_class_specialization_p (tree type)
1384 {
1385   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1386     return false;
1387   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1388 }
1389
1390 /* Print the list of candidate FNS in an error message.  */
1391
1392 void
1393 print_candidates (tree fns)
1394 {
1395   tree fn;
1396
1397   const char *str = "candidates are:";
1398
1399   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1400     {
1401       tree f;
1402
1403       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1404         error ("%s %+#D", str, OVL_CURRENT (f));
1405       str = "               ";
1406     }
1407 }
1408
1409 /* Returns the template (one of the functions given by TEMPLATE_ID)
1410    which can be specialized to match the indicated DECL with the
1411    explicit template args given in TEMPLATE_ID.  The DECL may be
1412    NULL_TREE if none is available.  In that case, the functions in
1413    TEMPLATE_ID are non-members.
1414
1415    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1416    specialization of a member template.
1417
1418    The TEMPLATE_COUNT is the number of references to qualifying
1419    template classes that appeared in the name of the function. See
1420    check_explicit_specialization for a more accurate description.
1421
1422    TSK indicates what kind of template declaration (if any) is being
1423    declared.  TSK_TEMPLATE indicates that the declaration given by
1424    DECL, though a FUNCTION_DECL, has template parameters, and is
1425    therefore a template function.
1426
1427    The template args (those explicitly specified and those deduced)
1428    are output in a newly created vector *TARGS_OUT.
1429
1430    If it is impossible to determine the result, an error message is
1431    issued.  The error_mark_node is returned to indicate failure.  */
1432
1433 static tree
1434 determine_specialization (tree template_id,
1435                           tree decl,
1436                           tree* targs_out,
1437                           int need_member_template,
1438                           int template_count,
1439                           tmpl_spec_kind tsk)
1440 {
1441   tree fns;
1442   tree targs;
1443   tree explicit_targs;
1444   tree candidates = NULL_TREE;
1445   /* A TREE_LIST of templates of which DECL may be a specialization.
1446      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1447      corresponding TREE_PURPOSE is the set of template arguments that,
1448      when used to instantiate the template, would produce a function
1449      with the signature of DECL.  */
1450   tree templates = NULL_TREE;
1451   int header_count;
1452   struct cp_binding_level *b;
1453
1454   *targs_out = NULL_TREE;
1455
1456   if (template_id == error_mark_node || decl == error_mark_node)
1457     return error_mark_node;
1458
1459   fns = TREE_OPERAND (template_id, 0);
1460   explicit_targs = TREE_OPERAND (template_id, 1);
1461
1462   if (fns == error_mark_node)
1463     return error_mark_node;
1464
1465   /* Check for baselinks.  */
1466   if (BASELINK_P (fns))
1467     fns = BASELINK_FUNCTIONS (fns);
1468
1469   if (!is_overloaded_fn (fns))
1470     {
1471       error ("%qD is not a function template", fns);
1472       return error_mark_node;
1473     }
1474
1475   /* Count the number of template headers specified for this
1476      specialization.  */
1477   header_count = 0;
1478   for (b = current_binding_level;
1479        b->kind == sk_template_parms;
1480        b = b->level_chain)
1481     ++header_count;
1482
1483   for (; fns; fns = OVL_NEXT (fns))
1484     {
1485       tree fn = OVL_CURRENT (fns);
1486
1487       if (TREE_CODE (fn) == TEMPLATE_DECL)
1488         {
1489           tree decl_arg_types;
1490           tree fn_arg_types;
1491
1492           /* In case of explicit specialization, we need to check if
1493              the number of template headers appearing in the specialization
1494              is correct. This is usually done in check_explicit_specialization,
1495              but the check done there cannot be exhaustive when specializing
1496              member functions. Consider the following code:
1497
1498              template <> void A<int>::f(int);
1499              template <> template <> void A<int>::f(int);
1500
1501              Assuming that A<int> is not itself an explicit specialization
1502              already, the first line specializes "f" which is a non-template
1503              member function, whilst the second line specializes "f" which
1504              is a template member function. So both lines are syntactically
1505              correct, and check_explicit_specialization does not reject
1506              them.
1507
1508              Here, we can do better, as we are matching the specialization
1509              against the declarations. We count the number of template
1510              headers, and we check if they match TEMPLATE_COUNT + 1
1511              (TEMPLATE_COUNT is the number of qualifying template classes,
1512              plus there must be another header for the member template
1513              itself).
1514
1515              Notice that if header_count is zero, this is not a
1516              specialization but rather a template instantiation, so there
1517              is no check we can perform here.  */
1518           if (header_count && header_count != template_count + 1)
1519             continue;
1520
1521           /* Check that the number of template arguments at the
1522              innermost level for DECL is the same as for FN.  */
1523           if (current_binding_level->kind == sk_template_parms
1524               && !current_binding_level->explicit_spec_p
1525               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1526                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1527                                       (current_template_parms))))
1528             continue;
1529
1530           /* DECL might be a specialization of FN.  */
1531           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1532           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1533
1534           /* For a non-static member function, we need to make sure
1535              that the const qualification is the same.  Since
1536              get_bindings does not try to merge the "this" parameter,
1537              we must do the comparison explicitly.  */
1538           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1539               && !same_type_p (TREE_VALUE (fn_arg_types),
1540                                TREE_VALUE (decl_arg_types)))
1541             continue;
1542
1543           /* Skip the "this" parameter and, for constructors of
1544              classes with virtual bases, the VTT parameter.  A
1545              full specialization of a constructor will have a VTT
1546              parameter, but a template never will.  */ 
1547           decl_arg_types 
1548             = skip_artificial_parms_for (decl, decl_arg_types);
1549           fn_arg_types 
1550             = skip_artificial_parms_for (fn, fn_arg_types);
1551
1552           /* Check that the number of function parameters matches.
1553              For example,
1554                template <class T> void f(int i = 0);
1555                template <> void f<int>();
1556              The specialization f<int> is invalid but is not caught
1557              by get_bindings below.  */
1558           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1559             continue;
1560
1561           /* Function templates cannot be specializations; there are
1562              no partial specializations of functions.  Therefore, if
1563              the type of DECL does not match FN, there is no
1564              match.  */
1565           if (tsk == tsk_template)
1566             {
1567               if (compparms (fn_arg_types, decl_arg_types))
1568                 candidates = tree_cons (NULL_TREE, fn, candidates);
1569               continue;
1570             }
1571
1572           /* See whether this function might be a specialization of this
1573              template.  */
1574           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1575
1576           if (!targs)
1577             /* We cannot deduce template arguments that when used to
1578                specialize TMPL will produce DECL.  */
1579             continue;
1580
1581           /* Save this template, and the arguments deduced.  */
1582           templates = tree_cons (targs, fn, templates);
1583         }
1584       else if (need_member_template)
1585         /* FN is an ordinary member function, and we need a
1586            specialization of a member template.  */
1587         ;
1588       else if (TREE_CODE (fn) != FUNCTION_DECL)
1589         /* We can get IDENTIFIER_NODEs here in certain erroneous
1590            cases.  */
1591         ;
1592       else if (!DECL_FUNCTION_MEMBER_P (fn))
1593         /* This is just an ordinary non-member function.  Nothing can
1594            be a specialization of that.  */
1595         ;
1596       else if (DECL_ARTIFICIAL (fn))
1597         /* Cannot specialize functions that are created implicitly.  */
1598         ;
1599       else
1600         {
1601           tree decl_arg_types;
1602
1603           /* This is an ordinary member function.  However, since
1604              we're here, we can assume it's enclosing class is a
1605              template class.  For example,
1606
1607                template <typename T> struct S { void f(); };
1608                template <> void S<int>::f() {}
1609
1610              Here, S<int>::f is a non-template, but S<int> is a
1611              template class.  If FN has the same type as DECL, we
1612              might be in business.  */
1613
1614           if (!DECL_TEMPLATE_INFO (fn))
1615             /* Its enclosing class is an explicit specialization
1616                of a template class.  This is not a candidate.  */
1617             continue;
1618
1619           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1620                             TREE_TYPE (TREE_TYPE (fn))))
1621             /* The return types differ.  */
1622             continue;
1623
1624           /* Adjust the type of DECL in case FN is a static member.  */
1625           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1626           if (DECL_STATIC_FUNCTION_P (fn)
1627               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1628             decl_arg_types = TREE_CHAIN (decl_arg_types);
1629
1630           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1631                          decl_arg_types))
1632             /* They match!  */
1633             candidates = tree_cons (NULL_TREE, fn, candidates);
1634         }
1635     }
1636
1637   if (templates && TREE_CHAIN (templates))
1638     {
1639       /* We have:
1640
1641            [temp.expl.spec]
1642
1643            It is possible for a specialization with a given function
1644            signature to be instantiated from more than one function
1645            template.  In such cases, explicit specification of the
1646            template arguments must be used to uniquely identify the
1647            function template specialization being specialized.
1648
1649          Note that here, there's no suggestion that we're supposed to
1650          determine which of the candidate templates is most
1651          specialized.  However, we, also have:
1652
1653            [temp.func.order]
1654
1655            Partial ordering of overloaded function template
1656            declarations is used in the following contexts to select
1657            the function template to which a function template
1658            specialization refers:
1659
1660            -- when an explicit specialization refers to a function
1661               template.
1662
1663          So, we do use the partial ordering rules, at least for now.
1664          This extension can only serve to make invalid programs valid,
1665          so it's safe.  And, there is strong anecdotal evidence that
1666          the committee intended the partial ordering rules to apply;
1667          the EDG front end has that behavior, and John Spicer claims
1668          that the committee simply forgot to delete the wording in
1669          [temp.expl.spec].  */
1670       tree tmpl = most_specialized_instantiation (templates);
1671       if (tmpl != error_mark_node)
1672         {
1673           templates = tmpl;
1674           TREE_CHAIN (templates) = NULL_TREE;
1675         }
1676     }
1677
1678   if (templates == NULL_TREE && candidates == NULL_TREE)
1679     {
1680       error ("template-id %qD for %q+D does not match any template "
1681              "declaration", template_id, decl);
1682       return error_mark_node;
1683     }
1684   else if ((templates && TREE_CHAIN (templates))
1685            || (candidates && TREE_CHAIN (candidates))
1686            || (templates && candidates))
1687     {
1688       error ("ambiguous template specialization %qD for %q+D",
1689              template_id, decl);
1690       chainon (candidates, templates);
1691       print_candidates (candidates);
1692       return error_mark_node;
1693     }
1694
1695   /* We have one, and exactly one, match.  */
1696   if (candidates)
1697     {
1698       tree fn = TREE_VALUE (candidates);
1699       /* DECL is a re-declaration of a template function.  */
1700       if (TREE_CODE (fn) == TEMPLATE_DECL)
1701         return fn;
1702       /* It was a specialization of an ordinary member function in a
1703          template class.  */
1704       *targs_out = copy_node (DECL_TI_ARGS (fn));
1705       return DECL_TI_TEMPLATE (fn);
1706     }
1707
1708   /* It was a specialization of a template.  */
1709   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1710   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1711     {
1712       *targs_out = copy_node (targs);
1713       SET_TMPL_ARGS_LEVEL (*targs_out,
1714                            TMPL_ARGS_DEPTH (*targs_out),
1715                            TREE_PURPOSE (templates));
1716     }
1717   else
1718     *targs_out = TREE_PURPOSE (templates);
1719   return TREE_VALUE (templates);
1720 }
1721
1722 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1723    but with the default argument values filled in from those in the
1724    TMPL_TYPES.  */
1725
1726 static tree
1727 copy_default_args_to_explicit_spec_1 (tree spec_types,
1728                                       tree tmpl_types)
1729 {
1730   tree new_spec_types;
1731
1732   if (!spec_types)
1733     return NULL_TREE;
1734
1735   if (spec_types == void_list_node)
1736     return void_list_node;
1737
1738   /* Substitute into the rest of the list.  */
1739   new_spec_types =
1740     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1741                                           TREE_CHAIN (tmpl_types));
1742
1743   /* Add the default argument for this parameter.  */
1744   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1745                          TREE_VALUE (spec_types),
1746                          new_spec_types);
1747 }
1748
1749 /* DECL is an explicit specialization.  Replicate default arguments
1750    from the template it specializes.  (That way, code like:
1751
1752      template <class T> void f(T = 3);
1753      template <> void f(double);
1754      void g () { f (); }
1755
1756    works, as required.)  An alternative approach would be to look up
1757    the correct default arguments at the call-site, but this approach
1758    is consistent with how implicit instantiations are handled.  */
1759
1760 static void
1761 copy_default_args_to_explicit_spec (tree decl)
1762 {
1763   tree tmpl;
1764   tree spec_types;
1765   tree tmpl_types;
1766   tree new_spec_types;
1767   tree old_type;
1768   tree new_type;
1769   tree t;
1770   tree object_type = NULL_TREE;
1771   tree in_charge = NULL_TREE;
1772   tree vtt = NULL_TREE;
1773
1774   /* See if there's anything we need to do.  */
1775   tmpl = DECL_TI_TEMPLATE (decl);
1776   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1777   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1778     if (TREE_PURPOSE (t))
1779       break;
1780   if (!t)
1781     return;
1782
1783   old_type = TREE_TYPE (decl);
1784   spec_types = TYPE_ARG_TYPES (old_type);
1785
1786   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1787     {
1788       /* Remove the this pointer, but remember the object's type for
1789          CV quals.  */
1790       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1791       spec_types = TREE_CHAIN (spec_types);
1792       tmpl_types = TREE_CHAIN (tmpl_types);
1793
1794       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1795         {
1796           /* DECL may contain more parameters than TMPL due to the extra
1797              in-charge parameter in constructors and destructors.  */
1798           in_charge = spec_types;
1799           spec_types = TREE_CHAIN (spec_types);
1800         }
1801       if (DECL_HAS_VTT_PARM_P (decl))
1802         {
1803           vtt = spec_types;
1804           spec_types = TREE_CHAIN (spec_types);
1805         }
1806     }
1807
1808   /* Compute the merged default arguments.  */
1809   new_spec_types =
1810     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1811
1812   /* Compute the new FUNCTION_TYPE.  */
1813   if (object_type)
1814     {
1815       if (vtt)
1816         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1817                                          TREE_VALUE (vtt),
1818                                          new_spec_types);
1819
1820       if (in_charge)
1821         /* Put the in-charge parameter back.  */
1822         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1823                                          TREE_VALUE (in_charge),
1824                                          new_spec_types);
1825
1826       new_type = build_method_type_directly (object_type,
1827                                              TREE_TYPE (old_type),
1828                                              new_spec_types);
1829     }
1830   else
1831     new_type = build_function_type (TREE_TYPE (old_type),
1832                                     new_spec_types);
1833   new_type = cp_build_type_attribute_variant (new_type,
1834                                               TYPE_ATTRIBUTES (old_type));
1835   new_type = build_exception_variant (new_type,
1836                                       TYPE_RAISES_EXCEPTIONS (old_type));
1837   TREE_TYPE (decl) = new_type;
1838 }
1839
1840 /* Check to see if the function just declared, as indicated in
1841    DECLARATOR, and in DECL, is a specialization of a function
1842    template.  We may also discover that the declaration is an explicit
1843    instantiation at this point.
1844
1845    Returns DECL, or an equivalent declaration that should be used
1846    instead if all goes well.  Issues an error message if something is
1847    amiss.  Returns error_mark_node if the error is not easily
1848    recoverable.
1849
1850    FLAGS is a bitmask consisting of the following flags:
1851
1852    2: The function has a definition.
1853    4: The function is a friend.
1854
1855    The TEMPLATE_COUNT is the number of references to qualifying
1856    template classes that appeared in the name of the function.  For
1857    example, in
1858
1859      template <class T> struct S { void f(); };
1860      void S<int>::f();
1861
1862    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1863    classes are not counted in the TEMPLATE_COUNT, so that in
1864
1865      template <class T> struct S {};
1866      template <> struct S<int> { void f(); }
1867      template <> void S<int>::f();
1868
1869    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1870    invalid; there should be no template <>.)
1871
1872    If the function is a specialization, it is marked as such via
1873    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1874    is set up correctly, and it is added to the list of specializations
1875    for that template.  */
1876
1877 tree
1878 check_explicit_specialization (tree declarator,
1879                                tree decl,
1880                                int template_count,
1881                                int flags)
1882 {
1883   int have_def = flags & 2;
1884   int is_friend = flags & 4;
1885   int specialization = 0;
1886   int explicit_instantiation = 0;
1887   int member_specialization = 0;
1888   tree ctype = DECL_CLASS_CONTEXT (decl);
1889   tree dname = DECL_NAME (decl);
1890   tmpl_spec_kind tsk;
1891
1892   if (is_friend)
1893     {
1894       if (!processing_specialization)
1895         tsk = tsk_none;
1896       else
1897         tsk = tsk_excessive_parms;
1898     }
1899   else
1900     tsk = current_tmpl_spec_kind (template_count);
1901
1902   switch (tsk)
1903     {
1904     case tsk_none:
1905       if (processing_specialization)
1906         {
1907           specialization = 1;
1908           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1909         }
1910       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1911         {
1912           if (is_friend)
1913             /* This could be something like:
1914
1915                template <class T> void f(T);
1916                class S { friend void f<>(int); }  */
1917             specialization = 1;
1918           else
1919             {
1920               /* This case handles bogus declarations like template <>
1921                  template <class T> void f<int>(); */
1922
1923               error ("template-id %qD in declaration of primary template",
1924                      declarator);
1925               return decl;
1926             }
1927         }
1928       break;
1929
1930     case tsk_invalid_member_spec:
1931       /* The error has already been reported in
1932          check_specialization_scope.  */
1933       return error_mark_node;
1934
1935     case tsk_invalid_expl_inst:
1936       error ("template parameter list used in explicit instantiation");
1937
1938       /* Fall through.  */
1939
1940     case tsk_expl_inst:
1941       if (have_def)
1942         error ("definition provided for explicit instantiation");
1943
1944       explicit_instantiation = 1;
1945       break;
1946
1947     case tsk_excessive_parms:
1948     case tsk_insufficient_parms:
1949       if (tsk == tsk_excessive_parms)
1950         error ("too many template parameter lists in declaration of %qD",
1951                decl);
1952       else if (template_header_count)
1953         error("too few template parameter lists in declaration of %qD", decl);
1954       else
1955         error("explicit specialization of %qD must be introduced by "
1956               "%<template <>%>", decl);
1957
1958       /* Fall through.  */
1959     case tsk_expl_spec:
1960       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1961       if (ctype)
1962         member_specialization = 1;
1963       else
1964         specialization = 1;
1965       break;
1966
1967     case tsk_template:
1968       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1969         {
1970           /* This case handles bogus declarations like template <>
1971              template <class T> void f<int>(); */
1972
1973           if (uses_template_parms (declarator))
1974             error ("function template partial specialization %qD "
1975                    "is not allowed", declarator);
1976           else
1977             error ("template-id %qD in declaration of primary template",
1978                    declarator);
1979           return decl;
1980         }
1981
1982       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1983         /* This is a specialization of a member template, without
1984            specialization the containing class.  Something like:
1985
1986              template <class T> struct S {
1987                template <class U> void f (U);
1988              };
1989              template <> template <class U> void S<int>::f(U) {}
1990
1991            That's a specialization -- but of the entire template.  */
1992         specialization = 1;
1993       break;
1994
1995     default:
1996       gcc_unreachable ();
1997     }
1998
1999   if (specialization || member_specialization)
2000     {
2001       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2002       for (; t; t = TREE_CHAIN (t))
2003         if (TREE_PURPOSE (t))
2004           {
2005             permerror
2006               ("default argument specified in explicit specialization");
2007             break;
2008           }
2009     }
2010
2011   if (specialization || member_specialization || explicit_instantiation)
2012     {
2013       tree tmpl = NULL_TREE;
2014       tree targs = NULL_TREE;
2015
2016       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2017       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2018         {
2019           tree fns;
2020
2021           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2022           if (ctype)
2023             fns = dname;
2024           else
2025             {
2026               /* If there is no class context, the explicit instantiation
2027                  must be at namespace scope.  */
2028               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2029
2030               /* Find the namespace binding, using the declaration
2031                  context.  */
2032               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2033                                            false, true);
2034               if (fns == error_mark_node || !is_overloaded_fn (fns))
2035                 {
2036                   error ("%qD is not a template function", dname);
2037                   fns = error_mark_node;
2038                 }
2039               else
2040                 {
2041                   tree fn = OVL_CURRENT (fns);
2042                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2043                                                 CP_DECL_CONTEXT (fn)))
2044                     error ("%qD is not declared in %qD",
2045                            decl, current_namespace);
2046                 }
2047             }
2048
2049           declarator = lookup_template_function (fns, NULL_TREE);
2050         }
2051
2052       if (declarator == error_mark_node)
2053         return error_mark_node;
2054
2055       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2056         {
2057           if (!explicit_instantiation)
2058             /* A specialization in class scope.  This is invalid,
2059                but the error will already have been flagged by
2060                check_specialization_scope.  */
2061             return error_mark_node;
2062           else
2063             {
2064               /* It's not valid to write an explicit instantiation in
2065                  class scope, e.g.:
2066
2067                    class C { template void f(); }
2068
2069                    This case is caught by the parser.  However, on
2070                    something like:
2071
2072                    template class C { void f(); };
2073
2074                    (which is invalid) we can get here.  The error will be
2075                    issued later.  */
2076               ;
2077             }
2078
2079           return decl;
2080         }
2081       else if (ctype != NULL_TREE
2082                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2083                    IDENTIFIER_NODE))
2084         {
2085           /* Find the list of functions in ctype that have the same
2086              name as the declared function.  */
2087           tree name = TREE_OPERAND (declarator, 0);
2088           tree fns = NULL_TREE;
2089           int idx;
2090
2091           if (constructor_name_p (name, ctype))
2092             {
2093               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2094
2095               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2096                   : !CLASSTYPE_DESTRUCTORS (ctype))
2097                 {
2098                   /* From [temp.expl.spec]:
2099
2100                      If such an explicit specialization for the member
2101                      of a class template names an implicitly-declared
2102                      special member function (clause _special_), the
2103                      program is ill-formed.
2104
2105                      Similar language is found in [temp.explicit].  */
2106                   error ("specialization of implicitly-declared special member function");
2107                   return error_mark_node;
2108                 }
2109
2110               name = is_constructor ? ctor_identifier : dtor_identifier;
2111             }
2112
2113           if (!DECL_CONV_FN_P (decl))
2114             {
2115               idx = lookup_fnfields_1 (ctype, name);
2116               if (idx >= 0)
2117                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2118             }
2119           else
2120             {
2121               VEC(tree,gc) *methods;
2122               tree ovl;
2123
2124               /* For a type-conversion operator, we cannot do a
2125                  name-based lookup.  We might be looking for `operator
2126                  int' which will be a specialization of `operator T'.
2127                  So, we find *all* the conversion operators, and then
2128                  select from them.  */
2129               fns = NULL_TREE;
2130
2131               methods = CLASSTYPE_METHOD_VEC (ctype);
2132               if (methods)
2133                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2134                      VEC_iterate (tree, methods, idx, ovl);
2135                      ++idx)
2136                   {
2137                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2138                       /* There are no more conversion functions.  */
2139                       break;
2140
2141                     /* Glue all these conversion functions together
2142                        with those we already have.  */
2143                     for (; ovl; ovl = OVL_NEXT (ovl))
2144                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2145                   }
2146             }
2147
2148           if (fns == NULL_TREE)
2149             {
2150               error ("no member function %qD declared in %qT", name, ctype);
2151               return error_mark_node;
2152             }
2153           else
2154             TREE_OPERAND (declarator, 0) = fns;
2155         }
2156
2157       /* Figure out what exactly is being specialized at this point.
2158          Note that for an explicit instantiation, even one for a
2159          member function, we cannot tell apriori whether the
2160          instantiation is for a member template, or just a member
2161          function of a template class.  Even if a member template is
2162          being instantiated, the member template arguments may be
2163          elided if they can be deduced from the rest of the
2164          declaration.  */
2165       tmpl = determine_specialization (declarator, decl,
2166                                        &targs,
2167                                        member_specialization,
2168                                        template_count,
2169                                        tsk);
2170
2171       if (!tmpl || tmpl == error_mark_node)
2172         /* We couldn't figure out what this declaration was
2173            specializing.  */
2174         return error_mark_node;
2175       else
2176         {
2177           tree gen_tmpl = most_general_template (tmpl);
2178
2179           if (explicit_instantiation)
2180             {
2181               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2182                  is done by do_decl_instantiation later.  */
2183
2184               int arg_depth = TMPL_ARGS_DEPTH (targs);
2185               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2186
2187               if (arg_depth > parm_depth)
2188                 {
2189                   /* If TMPL is not the most general template (for
2190                      example, if TMPL is a friend template that is
2191                      injected into namespace scope), then there will
2192                      be too many levels of TARGS.  Remove some of them
2193                      here.  */
2194                   int i;
2195                   tree new_targs;
2196
2197                   new_targs = make_tree_vec (parm_depth);
2198                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2199                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2200                       = TREE_VEC_ELT (targs, i);
2201                   targs = new_targs;
2202                 }
2203
2204               return instantiate_template (tmpl, targs, tf_error);
2205             }
2206
2207           /* If we thought that the DECL was a member function, but it
2208              turns out to be specializing a static member function,
2209              make DECL a static member function as well.  */
2210           if (DECL_STATIC_FUNCTION_P (tmpl)
2211               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2212             revert_static_member_fn (decl);
2213
2214           /* If this is a specialization of a member template of a
2215              template class, we want to return the TEMPLATE_DECL, not
2216              the specialization of it.  */
2217           if (tsk == tsk_template)
2218             {
2219               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2220               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2221               if (have_def)
2222                 {
2223                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2224                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2225                     = DECL_SOURCE_LOCATION (decl);
2226                   /* We want to use the argument list specified in the
2227                      definition, not in the original declaration.  */
2228                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2229                     = DECL_ARGUMENTS (decl);
2230                 }
2231               return tmpl;
2232             }
2233
2234           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2235           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2236
2237           /* Inherit default function arguments from the template
2238              DECL is specializing.  */
2239           copy_default_args_to_explicit_spec (decl);
2240
2241           /* This specialization has the same protection as the
2242              template it specializes.  */
2243           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2244           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2245
2246           /* 7.1.1-1 [dcl.stc]
2247
2248              A storage-class-specifier shall not be specified in an
2249              explicit specialization...
2250
2251              The parser rejects these, so unless action is taken here,
2252              explicit function specializations will always appear with
2253              global linkage.
2254
2255              The action recommended by the C++ CWG in response to C++
2256              defect report 605 is to make the storage class and linkage
2257              of the explicit specialization match the templated function:
2258
2259              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2260            */
2261           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2262             {
2263               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2264               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2265
2266               /* This specialization has the same linkage and visibility as
2267                  the function template it specializes.  */
2268               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2269               if (! TREE_PUBLIC (decl))
2270                 {
2271                   DECL_INTERFACE_KNOWN (decl) = 1;
2272                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2273                 }
2274               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2275               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2276                 {
2277                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2278                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2279                 }
2280             }
2281
2282           /* If DECL is a friend declaration, declared using an
2283              unqualified name, the namespace associated with DECL may
2284              have been set incorrectly.  For example, in:
2285
2286                template <typename T> void f(T);
2287                namespace N {
2288                  struct S { friend void f<int>(int); }
2289                }
2290
2291              we will have set the DECL_CONTEXT for the friend
2292              declaration to N, rather than to the global namespace.  */
2293           if (DECL_NAMESPACE_SCOPE_P (decl))
2294             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2295
2296           if (is_friend && !have_def)
2297             /* This is not really a declaration of a specialization.
2298                It's just the name of an instantiation.  But, it's not
2299                a request for an instantiation, either.  */
2300             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2301           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2302             /* This is indeed a specialization.  In case of constructors
2303                and destructors, we need in-charge and not-in-charge
2304                versions in V3 ABI.  */
2305             clone_function_decl (decl, /*update_method_vec_p=*/0);
2306
2307           /* Register this specialization so that we can find it
2308              again.  */
2309           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2310         }
2311     }
2312
2313   return decl;
2314 }
2315
2316 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2317    parameters.  These are represented in the same format used for
2318    DECL_TEMPLATE_PARMS.  */
2319
2320 int
2321 comp_template_parms (const_tree parms1, const_tree parms2)
2322 {
2323   const_tree p1;
2324   const_tree p2;
2325
2326   if (parms1 == parms2)
2327     return 1;
2328
2329   for (p1 = parms1, p2 = parms2;
2330        p1 != NULL_TREE && p2 != NULL_TREE;
2331        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2332     {
2333       tree t1 = TREE_VALUE (p1);
2334       tree t2 = TREE_VALUE (p2);
2335       int i;
2336
2337       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2338       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2339
2340       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2341         return 0;
2342
2343       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2344         {
2345           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2346           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2347
2348           /* If either of the template parameters are invalid, assume
2349              they match for the sake of error recovery. */
2350           if (parm1 == error_mark_node || parm2 == error_mark_node)
2351             return 1;
2352
2353           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2354             return 0;
2355
2356           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2357               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2358                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2359             continue;
2360           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2361             return 0;
2362         }
2363     }
2364
2365   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2366     /* One set of parameters has more parameters lists than the
2367        other.  */
2368     return 0;
2369
2370   return 1;
2371 }
2372
2373 /* Determine whether PARM is a parameter pack.  */
2374 bool 
2375 template_parameter_pack_p (const_tree parm)
2376 {
2377   /* Determine if we have a non-type template parameter pack.  */
2378   if (TREE_CODE (parm) == PARM_DECL)
2379     return (DECL_TEMPLATE_PARM_P (parm) 
2380             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2381
2382   /* If this is a list of template parameters, we could get a
2383      TYPE_DECL or a TEMPLATE_DECL.  */ 
2384   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2385     parm = TREE_TYPE (parm);
2386
2387   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2388            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2389           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2390 }
2391
2392 /* Determine whether ARGS describes a variadic template args list,
2393    i.e., one that is terminated by a template argument pack.  */
2394 static bool 
2395 template_args_variadic_p (tree args)
2396 {
2397   int nargs;
2398   tree last_parm;
2399
2400   if (args == NULL_TREE)
2401     return false;
2402
2403   args = INNERMOST_TEMPLATE_ARGS (args);
2404   nargs = TREE_VEC_LENGTH (args);
2405
2406   if (nargs == 0)
2407     return false;
2408
2409   last_parm = TREE_VEC_ELT (args, nargs - 1);
2410
2411   return ARGUMENT_PACK_P (last_parm);
2412 }
2413
2414 /* Generate a new name for the parameter pack name NAME (an
2415    IDENTIFIER_NODE) that incorporates its */
2416 static tree
2417 make_ith_pack_parameter_name (tree name, int i)
2418 {
2419   /* Munge the name to include the parameter index.  */
2420   char numbuf[128];
2421   char* newname;
2422   
2423   sprintf(numbuf, "%i", i);
2424   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2425   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2426   return get_identifier (newname);
2427 }
2428
2429 /* Structure used to track the progress of find_parameter_packs_r.  */
2430 struct find_parameter_pack_data 
2431 {
2432   /* TREE_LIST that will contain all of the parameter packs found by
2433      the traversal.  */
2434   tree* parameter_packs;
2435
2436   /* Set of AST nodes that have been visited by the traversal.  */
2437   struct pointer_set_t *visited;
2438 };
2439
2440 /* Identifies all of the argument packs that occur in a template
2441    argument and appends them to the TREE_LIST inside DATA, which is a
2442    find_parameter_pack_data structure. This is a subroutine of
2443    make_pack_expansion and uses_parameter_packs.  */
2444 static tree
2445 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2446 {
2447   tree t = *tp;
2448   struct find_parameter_pack_data* ppd = 
2449     (struct find_parameter_pack_data*)data;
2450   bool parameter_pack_p = false;
2451
2452   /* Identify whether this is a parameter pack or not.  */
2453   switch (TREE_CODE (t))
2454     {
2455     case TEMPLATE_PARM_INDEX:
2456       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2457         parameter_pack_p = true;
2458       break;
2459
2460     case TEMPLATE_TYPE_PARM:
2461     case TEMPLATE_TEMPLATE_PARM:
2462       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2463         parameter_pack_p = true;
2464       break;
2465
2466     case PARM_DECL:
2467       if (FUNCTION_PARAMETER_PACK_P (t))
2468         {
2469           /* We don't want to walk into the type of a PARM_DECL,
2470              because we don't want to see the type parameter pack.  */
2471           *walk_subtrees = 0;
2472           parameter_pack_p = true;
2473         }
2474       break;
2475
2476     default:
2477       /* Not a parameter pack.  */
2478       break;
2479     }
2480
2481   if (parameter_pack_p)
2482     {
2483       /* Add this parameter pack to the list.  */
2484       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2485     }
2486
2487   if (TYPE_P (t))
2488     cp_walk_tree (&TYPE_CONTEXT (t), 
2489                   &find_parameter_packs_r, ppd, ppd->visited);
2490
2491   /* This switch statement will return immediately if we don't find a
2492      parameter pack.  */
2493   switch (TREE_CODE (t)) 
2494     {
2495     case TEMPLATE_PARM_INDEX:
2496       return NULL_TREE;
2497
2498     case BOUND_TEMPLATE_TEMPLATE_PARM:
2499       /* Check the template itself.  */
2500       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2501                     &find_parameter_packs_r, ppd, ppd->visited);
2502       /* Check the template arguments.  */
2503       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2504                     ppd->visited);
2505       *walk_subtrees = 0;
2506       return NULL_TREE;
2507
2508     case TEMPLATE_TYPE_PARM:
2509     case TEMPLATE_TEMPLATE_PARM:
2510       return NULL_TREE;
2511
2512     case PARM_DECL:
2513       return NULL_TREE;
2514
2515     case RECORD_TYPE:
2516       if (TYPE_PTRMEMFUNC_P (t))
2517         return NULL_TREE;
2518       /* Fall through.  */
2519
2520     case UNION_TYPE:
2521     case ENUMERAL_TYPE:
2522       if (TYPE_TEMPLATE_INFO (t))
2523         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2524                       &find_parameter_packs_r, ppd, ppd->visited);
2525
2526       *walk_subtrees = 0;
2527       return NULL_TREE;
2528
2529     case TEMPLATE_DECL:
2530       cp_walk_tree (&TREE_TYPE (t),
2531                     &find_parameter_packs_r, ppd, ppd->visited);
2532       return NULL_TREE;
2533  
2534     case TYPENAME_TYPE:
2535       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2536                    ppd, ppd->visited);
2537       *walk_subtrees = 0;
2538       return NULL_TREE;
2539       
2540     case TYPE_PACK_EXPANSION:
2541     case EXPR_PACK_EXPANSION:
2542       *walk_subtrees = 0;
2543       return NULL_TREE;
2544
2545     case INTEGER_TYPE:
2546       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2547                     ppd, ppd->visited);
2548       *walk_subtrees = 0;
2549       return NULL_TREE;
2550
2551     case IDENTIFIER_NODE:
2552       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
2553                     ppd->visited);
2554       *walk_subtrees = 0;
2555       return NULL_TREE;
2556
2557     default:
2558       return NULL_TREE;
2559     }
2560
2561   return NULL_TREE;
2562 }
2563
2564 /* Determines if the expression or type T uses any parameter packs.  */
2565 bool
2566 uses_parameter_packs (tree t)
2567 {
2568   tree parameter_packs = NULL_TREE;
2569   struct find_parameter_pack_data ppd;
2570   ppd.parameter_packs = &parameter_packs;
2571   ppd.visited = pointer_set_create ();
2572   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2573   pointer_set_destroy (ppd.visited);
2574   return parameter_packs != NULL_TREE;
2575 }
2576
2577 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2578    representation a base-class initializer into a parameter pack
2579    expansion. If all goes well, the resulting node will be an
2580    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2581    respectively.  */
2582 tree 
2583 make_pack_expansion (tree arg)
2584 {
2585   tree result;
2586   tree parameter_packs = NULL_TREE;
2587   bool for_types = false;
2588   struct find_parameter_pack_data ppd;
2589
2590   if (!arg || arg == error_mark_node)
2591     return arg;
2592
2593   if (TREE_CODE (arg) == TREE_LIST)
2594     {
2595       /* The only time we will see a TREE_LIST here is for a base
2596          class initializer.  In this case, the TREE_PURPOSE will be a
2597          _TYPE node (representing the base class expansion we're
2598          initializing) and the TREE_VALUE will be a TREE_LIST
2599          containing the initialization arguments. 
2600
2601          The resulting expansion looks somewhat different from most
2602          expansions. Rather than returning just one _EXPANSION, we
2603          return a TREE_LIST whose TREE_PURPOSE is a
2604          TYPE_PACK_EXPANSION containing the bases that will be
2605          initialized.  The TREE_VALUE will be identical to the
2606          original TREE_VALUE, which is a list of arguments that will
2607          be passed to each base.  We do not introduce any new pack
2608          expansion nodes into the TREE_VALUE (although it is possible
2609          that some already exist), because the TREE_PURPOSE and
2610          TREE_VALUE all need to be expanded together with the same
2611          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2612          resulting TREE_PURPOSE will mention the parameter packs in
2613          both the bases and the arguments to the bases.  */
2614       tree purpose;
2615       tree value;
2616       tree parameter_packs = NULL_TREE;
2617
2618       /* Determine which parameter packs will be used by the base
2619          class expansion.  */
2620       ppd.visited = pointer_set_create ();
2621       ppd.parameter_packs = &parameter_packs;
2622       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2623                     &ppd, ppd.visited);
2624
2625       if (parameter_packs == NULL_TREE)
2626         {
2627           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2628           pointer_set_destroy (ppd.visited);
2629           return error_mark_node;
2630         }
2631
2632       if (TREE_VALUE (arg) != void_type_node)
2633         {
2634           /* Collect the sets of parameter packs used in each of the
2635              initialization arguments.  */
2636           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2637             {
2638               /* Determine which parameter packs will be expanded in this
2639                  argument.  */
2640               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2641                             &ppd, ppd.visited);
2642             }
2643         }
2644
2645       pointer_set_destroy (ppd.visited);
2646
2647       /* Create the pack expansion type for the base type.  */
2648       purpose = make_node (TYPE_PACK_EXPANSION);
2649       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2650       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2651
2652       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2653          they will rarely be compared to anything.  */
2654       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2655
2656       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2657     }
2658
2659   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2660     for_types = true;
2661
2662   /* Build the PACK_EXPANSION_* node.  */
2663   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2664   SET_PACK_EXPANSION_PATTERN (result, arg);
2665   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2666     {
2667       /* Propagate type and const-expression information.  */
2668       TREE_TYPE (result) = TREE_TYPE (arg);
2669       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2670     }
2671   else
2672     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2673        they will rarely be compared to anything.  */
2674     SET_TYPE_STRUCTURAL_EQUALITY (result);
2675
2676   /* Determine which parameter packs will be expanded.  */
2677   ppd.parameter_packs = &parameter_packs;
2678   ppd.visited = pointer_set_create ();
2679   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2680   pointer_set_destroy (ppd.visited);
2681
2682   /* Make sure we found some parameter packs.  */
2683   if (parameter_packs == NULL_TREE)
2684     {
2685       if (TYPE_P (arg))
2686         error ("expansion pattern %<%T%> contains no argument packs", arg);
2687       else
2688         error ("expansion pattern %<%E%> contains no argument packs", arg);
2689       return error_mark_node;
2690     }
2691   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2692
2693   return result;
2694 }
2695
2696 /* Checks T for any "bare" parameter packs, which have not yet been
2697    expanded, and issues an error if any are found. This operation can
2698    only be done on full expressions or types (e.g., an expression
2699    statement, "if" condition, etc.), because we could have expressions like:
2700
2701      foo(f(g(h(args)))...)
2702
2703    where "args" is a parameter pack. check_for_bare_parameter_packs
2704    should not be called for the subexpressions args, h(args),
2705    g(h(args)), or f(g(h(args))), because we would produce erroneous
2706    error messages. 
2707
2708    Returns TRUE and emits an error if there were bare parameter packs,
2709    returns FALSE otherwise.  */
2710 bool 
2711 check_for_bare_parameter_packs (tree t)
2712 {
2713   tree parameter_packs = NULL_TREE;
2714   struct find_parameter_pack_data ppd;
2715
2716   if (!processing_template_decl || !t || t == error_mark_node)
2717     return false;
2718
2719   if (TREE_CODE (t) == TYPE_DECL)
2720     t = TREE_TYPE (t);
2721
2722   ppd.parameter_packs = &parameter_packs;
2723   ppd.visited = pointer_set_create ();
2724   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2725   pointer_set_destroy (ppd.visited);
2726
2727   if (parameter_packs) 
2728     {
2729       error ("parameter packs not expanded with %<...%>:");
2730       while (parameter_packs)
2731         {
2732           tree pack = TREE_VALUE (parameter_packs);
2733           tree name = NULL_TREE;
2734
2735           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2736               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2737             name = TYPE_NAME (pack);
2738           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2739             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2740           else
2741             name = DECL_NAME (pack);
2742
2743           if (name)
2744             inform ("        %qD", name);
2745           else
2746             inform ("        <anonymous>");
2747
2748           parameter_packs = TREE_CHAIN (parameter_packs);
2749         }
2750
2751       return true;
2752     }
2753
2754   return false;
2755 }
2756
2757 /* Expand any parameter packs that occur in the template arguments in
2758    ARGS.  */
2759 tree
2760 expand_template_argument_pack (tree args)
2761 {
2762   tree result_args = NULL_TREE;
2763   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2764   int num_result_args = -1;
2765
2766   /* First, determine if we need to expand anything, and the number of
2767      slots we'll need.  */
2768   for (in_arg = 0; in_arg < nargs; ++in_arg)
2769     {
2770       tree arg = TREE_VEC_ELT (args, in_arg);
2771       if (ARGUMENT_PACK_P (arg))
2772         {
2773           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2774           if (num_result_args < 0)
2775             num_result_args = in_arg + num_packed;
2776           else
2777             num_result_args += num_packed;
2778         }
2779       else
2780         {
2781           if (num_result_args >= 0)
2782             num_result_args++;
2783         }
2784     }
2785
2786   /* If no expansion is necessary, we're done.  */
2787   if (num_result_args < 0)
2788     return args;
2789
2790   /* Expand arguments.  */
2791   result_args = make_tree_vec (num_result_args);
2792   for (in_arg = 0; in_arg < nargs; ++in_arg)
2793     {
2794       tree arg = TREE_VEC_ELT (args, in_arg);
2795       if (ARGUMENT_PACK_P (arg))
2796         {
2797           tree packed = ARGUMENT_PACK_ARGS (arg);
2798           int i, num_packed = TREE_VEC_LENGTH (packed);
2799           for (i = 0; i < num_packed; ++i, ++out_arg)
2800             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2801         }
2802       else
2803         {
2804           TREE_VEC_ELT (result_args, out_arg) = arg;
2805           ++out_arg;
2806         }
2807     }
2808
2809   return result_args;
2810 }
2811
2812 /* Complain if DECL shadows a template parameter.
2813
2814    [temp.local]: A template-parameter shall not be redeclared within its
2815    scope (including nested scopes).  */
2816
2817 void
2818 check_template_shadow (tree decl)
2819 {
2820   tree olddecl;
2821
2822   /* If we're not in a template, we can't possibly shadow a template
2823      parameter.  */
2824   if (!current_template_parms)
2825     return;
2826
2827   /* Figure out what we're shadowing.  */
2828   if (TREE_CODE (decl) == OVERLOAD)
2829     decl = OVL_CURRENT (decl);
2830   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2831
2832   /* If there's no previous binding for this name, we're not shadowing
2833      anything, let alone a template parameter.  */
2834   if (!olddecl)
2835     return;
2836
2837   /* If we're not shadowing a template parameter, we're done.  Note
2838      that OLDDECL might be an OVERLOAD (or perhaps even an
2839      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2840      node.  */
2841   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2842     return;
2843
2844   /* We check for decl != olddecl to avoid bogus errors for using a
2845      name inside a class.  We check TPFI to avoid duplicate errors for
2846      inline member templates.  */
2847   if (decl == olddecl
2848       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2849     return;
2850
2851   error ("declaration of %q+#D", decl);
2852   error (" shadows template parm %q+#D", olddecl);
2853 }
2854
2855 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2856    ORIG_LEVEL, DECL, and TYPE.  */
2857
2858 static tree
2859 build_template_parm_index (int index,
2860                            int level,
2861                            int orig_level,
2862                            tree decl,
2863                            tree type)
2864 {
2865   tree t = make_node (TEMPLATE_PARM_INDEX);
2866   TEMPLATE_PARM_IDX (t) = index;
2867   TEMPLATE_PARM_LEVEL (t) = level;
2868   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2869   TEMPLATE_PARM_DECL (t) = decl;
2870   TREE_TYPE (t) = type;
2871   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2872   TREE_READONLY (t) = TREE_READONLY (decl);
2873
2874   return t;
2875 }
2876
2877 /* Find the canonical type parameter for the given template type
2878    parameter.  Returns the canonical type parameter, which may be TYPE
2879    if no such parameter existed.  */
2880 static tree
2881 canonical_type_parameter (tree type)
2882 {
2883   tree list;
2884   int idx = TEMPLATE_TYPE_IDX (type);
2885   if (!canonical_template_parms)
2886     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2887
2888   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2889     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2890
2891   list = VEC_index (tree, canonical_template_parms, idx);
2892   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2893     list = TREE_CHAIN (list);
2894
2895   if (list)
2896     return TREE_VALUE (list);
2897   else
2898     {
2899       VEC_replace(tree, canonical_template_parms, idx,
2900                   tree_cons (NULL_TREE, type, 
2901                              VEC_index (tree, canonical_template_parms, idx)));
2902       return type;
2903     }
2904 }
2905
2906 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2907    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2908    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2909    new one is created.  */
2910
2911 static tree
2912 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2913                             tsubst_flags_t complain)
2914 {
2915   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2916       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2917           != TEMPLATE_PARM_LEVEL (index) - levels))
2918     {
2919       tree orig_decl = TEMPLATE_PARM_DECL (index);
2920       tree decl, t;
2921
2922       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2923       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2924       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2925       DECL_ARTIFICIAL (decl) = 1;
2926       SET_DECL_TEMPLATE_PARM_P (decl);
2927
2928       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2929                                      TEMPLATE_PARM_LEVEL (index) - levels,
2930                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2931                                      decl, type);
2932       TEMPLATE_PARM_DESCENDANTS (index) = t;
2933       TEMPLATE_PARM_PARAMETER_PACK (t) 
2934         = TEMPLATE_PARM_PARAMETER_PACK (index);
2935
2936         /* Template template parameters need this.  */
2937       if (TREE_CODE (decl) == TEMPLATE_DECL)
2938         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2939           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2940            args, complain);
2941     }
2942
2943   return TEMPLATE_PARM_DESCENDANTS (index);
2944 }
2945
2946 /* Process information from new template parameter PARM and append it to the
2947    LIST being built.  This new parameter is a non-type parameter iff
2948    IS_NON_TYPE is true. This new parameter is a parameter
2949    pack iff IS_PARAMETER_PACK is true.  */
2950
2951 tree
2952 process_template_parm (tree list, tree parm, bool is_non_type, 
2953                        bool is_parameter_pack)
2954 {
2955   tree decl = 0;
2956   tree defval;
2957   tree err_parm_list;
2958   int idx = 0;
2959
2960   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2961   defval = TREE_PURPOSE (parm);
2962
2963   if (list)
2964     {
2965       tree p = tree_last (list);
2966
2967       if (p && TREE_VALUE (p) != error_mark_node)
2968         {
2969           p = TREE_VALUE (p);
2970           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2971             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2972           else
2973             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2974         }
2975
2976       ++idx;
2977     }
2978   else
2979     idx = 0;
2980
2981   if (is_non_type)
2982     {
2983       parm = TREE_VALUE (parm);
2984
2985       SET_DECL_TEMPLATE_PARM_P (parm);
2986
2987       if (TREE_TYPE (parm) == error_mark_node)
2988         {
2989           err_parm_list = build_tree_list (defval, parm);
2990           TREE_VALUE (err_parm_list) = error_mark_node;
2991            return chainon (list, err_parm_list);
2992         }
2993       else
2994       {
2995         /* [temp.param]
2996
2997            The top-level cv-qualifiers on the template-parameter are
2998            ignored when determining its type.  */
2999         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3000         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3001           {
3002             err_parm_list = build_tree_list (defval, parm);
3003             TREE_VALUE (err_parm_list) = error_mark_node;
3004              return chainon (list, err_parm_list);
3005           }
3006
3007         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3008           {
3009             /* This template parameter is not a parameter pack, but it
3010                should be. Complain about "bare" parameter packs.  */
3011             check_for_bare_parameter_packs (TREE_TYPE (parm));
3012             
3013             /* Recover by calling this a parameter pack.  */
3014             is_parameter_pack = true;
3015           }
3016       }
3017
3018       /* A template parameter is not modifiable.  */
3019       TREE_CONSTANT (parm) = 1;
3020       TREE_READONLY (parm) = 1;
3021       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3022       TREE_CONSTANT (decl) = 1;
3023       TREE_READONLY (decl) = 1;
3024       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3025         = build_template_parm_index (idx, processing_template_decl,
3026                                      processing_template_decl,
3027                                      decl, TREE_TYPE (parm));
3028
3029       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3030         = is_parameter_pack;
3031     }
3032   else
3033     {
3034       tree t;
3035       parm = TREE_VALUE (TREE_VALUE (parm));
3036
3037       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3038         {
3039           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3040           /* This is for distinguishing between real templates and template
3041              template parameters */
3042           TREE_TYPE (parm) = t;
3043           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3044           decl = parm;
3045         }
3046       else
3047         {
3048           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3049           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3050           decl = build_decl (TYPE_DECL, parm, t);
3051         }
3052
3053       TYPE_NAME (t) = decl;
3054       TYPE_STUB_DECL (t) = decl;
3055       parm = decl;
3056       TEMPLATE_TYPE_PARM_INDEX (t)
3057         = build_template_parm_index (idx, processing_template_decl,
3058                                      processing_template_decl,
3059                                      decl, TREE_TYPE (parm));
3060       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3061       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3062     }
3063   DECL_ARTIFICIAL (decl) = 1;
3064   SET_DECL_TEMPLATE_PARM_P (decl);
3065   pushdecl (decl);
3066   parm = build_tree_list (defval, parm);
3067   return chainon (list, parm);
3068 }
3069
3070 /* The end of a template parameter list has been reached.  Process the
3071    tree list into a parameter vector, converting each parameter into a more
3072    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3073    as PARM_DECLs.  */
3074
3075 tree
3076 end_template_parm_list (tree parms)
3077 {
3078   int nparms;
3079   tree parm, next;
3080   tree saved_parmlist = make_tree_vec (list_length (parms));
3081
3082   current_template_parms
3083     = tree_cons (size_int (processing_template_decl),
3084                  saved_parmlist, current_template_parms);
3085
3086   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3087     {
3088       next = TREE_CHAIN (parm);
3089       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3090       TREE_CHAIN (parm) = NULL_TREE;
3091     }
3092
3093   --processing_template_parmlist;
3094
3095   return saved_parmlist;
3096 }
3097
3098 /* end_template_decl is called after a template declaration is seen.  */
3099
3100 void
3101 end_template_decl (void)
3102 {
3103   reset_specialization ();
3104
3105   if (! processing_template_decl)
3106     return;
3107
3108   /* This matches the pushlevel in begin_template_parm_list.  */
3109   finish_scope ();
3110
3111   --processing_template_decl;
3112   current_template_parms = TREE_CHAIN (current_template_parms);
3113 }
3114
3115 /* Within the declaration of a template, return all levels of template
3116    parameters that apply.  The template parameters are represented as
3117    a TREE_VEC, in the form documented in cp-tree.h for template
3118    arguments.  */
3119
3120 static tree
3121 current_template_args (void)
3122 {
3123   tree header;
3124   tree args = NULL_TREE;
3125   int length = TMPL_PARMS_DEPTH (current_template_parms);
3126   int l = length;
3127
3128   /* If there is only one level of template parameters, we do not
3129      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3130      TREE_VEC containing the arguments.  */
3131   if (length > 1)
3132     args = make_tree_vec (length);
3133
3134   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3135     {
3136       tree a = copy_node (TREE_VALUE (header));
3137       int i;
3138
3139       TREE_TYPE (a) = NULL_TREE;
3140       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3141         {
3142           tree t = TREE_VEC_ELT (a, i);
3143
3144           /* T will be a list if we are called from within a
3145              begin/end_template_parm_list pair, but a vector directly
3146              if within a begin/end_member_template_processing pair.  */
3147           if (TREE_CODE (t) == TREE_LIST)
3148             {
3149               t = TREE_VALUE (t);
3150
3151               if (!error_operand_p (t))
3152                 {
3153                   if (TREE_CODE (t) == TYPE_DECL
3154                       || TREE_CODE (t) == TEMPLATE_DECL)
3155                     {
3156                       t = TREE_TYPE (t);
3157                       
3158                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3159                         {
3160                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3161                              with a single element, which expands T.  */
3162                           tree vec = make_tree_vec (1);
3163                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3164                           
3165                           t = make_node (TYPE_ARGUMENT_PACK);
3166                           SET_ARGUMENT_PACK_ARGS (t, vec);
3167                         }
3168                     }
3169                   else
3170                     {
3171                       t = DECL_INITIAL (t);
3172                       
3173                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3174                         {
3175                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3176                              with a single element, which expands T.  */
3177                           tree vec = make_tree_vec (1);
3178                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3179                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3180                           
3181                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3182                           SET_ARGUMENT_PACK_ARGS (t, vec);
3183                           TREE_TYPE (t) = type;
3184                         }
3185                     }
3186                   TREE_VEC_ELT (a, i) = t;
3187                 }
3188             }
3189         }
3190
3191       if (length > 1)
3192         TREE_VEC_ELT (args, --l) = a;
3193       else
3194         args = a;
3195     }
3196
3197   return args;
3198 }
3199
3200 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3201    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3202    a member template.  Used by push_template_decl below.  */
3203
3204 static tree
3205 build_template_decl (tree decl, tree parms, bool member_template_p)
3206 {
3207   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3208   DECL_TEMPLATE_PARMS (tmpl) = parms;
3209   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3210   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3211   if (DECL_LANG_SPECIFIC (decl))
3212     {
3213       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3214       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3215       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3216       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3217       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3218       if (DECL_OVERLOADED_OPERATOR_P (decl))
3219         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3220                                       DECL_OVERLOADED_OPERATOR_P (decl));
3221     }
3222
3223   return tmpl;
3224 }
3225
3226 struct template_parm_data
3227 {
3228   /* The level of the template parameters we are currently
3229      processing.  */
3230   int level;
3231
3232   /* The index of the specialization argument we are currently
3233      processing.  */
3234   int current_arg;
3235
3236   /* An array whose size is the number of template parameters.  The
3237      elements are nonzero if the parameter has been used in any one
3238      of the arguments processed so far.  */
3239   int* parms;
3240
3241   /* An array whose size is the number of template arguments.  The
3242      elements are nonzero if the argument makes use of template
3243      parameters of this level.  */
3244   int* arg_uses_template_parms;
3245 };
3246
3247 /* Subroutine of push_template_decl used to see if each template
3248    parameter in a partial specialization is used in the explicit
3249    argument list.  If T is of the LEVEL given in DATA (which is
3250    treated as a template_parm_data*), then DATA->PARMS is marked
3251    appropriately.  */
3252
3253 static int
3254 mark_template_parm (tree t, void* data)
3255 {
3256   int level;
3257   int idx;
3258   struct template_parm_data* tpd = (struct template_parm_data*) data;
3259
3260   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3261     {
3262       level = TEMPLATE_PARM_LEVEL (t);
3263       idx = TEMPLATE_PARM_IDX (t);
3264     }
3265   else
3266     {
3267       level = TEMPLATE_TYPE_LEVEL (t);
3268       idx = TEMPLATE_TYPE_IDX (t);
3269     }
3270
3271   if (level == tpd->level)
3272     {
3273       tpd->parms[idx] = 1;
3274       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3275     }
3276
3277   /* Return zero so that for_each_template_parm will continue the
3278      traversal of the tree; we want to mark *every* template parm.  */
3279   return 0;
3280 }
3281
3282 /* Process the partial specialization DECL.  */
3283
3284 static tree
3285 process_partial_specialization (tree decl)
3286 {
3287   tree type = TREE_TYPE (decl);
3288   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3289   tree specargs = CLASSTYPE_TI_ARGS (type);
3290   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3291   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3292   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3293   int nargs = TREE_VEC_LENGTH (inner_args);
3294   int ntparms = TREE_VEC_LENGTH (inner_parms);
3295   int  i;
3296   int did_error_intro = 0;
3297   struct template_parm_data tpd;
3298   struct template_parm_data tpd2;
3299
3300   /* We check that each of the template parameters given in the
3301      partial specialization is used in the argument list to the
3302      specialization.  For example:
3303
3304        template <class T> struct S;
3305        template <class T> struct S<T*>;
3306
3307      The second declaration is OK because `T*' uses the template
3308      parameter T, whereas
3309
3310        template <class T> struct S<int>;
3311
3312      is no good.  Even trickier is:
3313
3314        template <class T>
3315        struct S1
3316        {
3317           template <class U>
3318           struct S2;
3319           template <class U>
3320           struct S2<T>;
3321        };
3322
3323      The S2<T> declaration is actually invalid; it is a
3324      full-specialization.  Of course,
3325
3326           template <class U>
3327           struct S2<T (*)(U)>;
3328
3329      or some such would have been OK.  */
3330   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3331   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3332   memset (tpd.parms, 0, sizeof (int) * ntparms);
3333
3334   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3335   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3336   for (i = 0; i < nargs; ++i)
3337     {
3338       tpd.current_arg = i;
3339       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3340                               &mark_template_parm,
3341                               &tpd,
3342                               NULL,
3343                               /*include_nondeduced_p=*/false);
3344     }
3345   for (i = 0; i < ntparms; ++i)
3346     if (tpd.parms[i] == 0)
3347       {
3348         /* One of the template parms was not used in the
3349            specialization.  */
3350         if (!did_error_intro)
3351           {
3352             error ("template parameters not used in partial specialization:");
3353             did_error_intro = 1;
3354           }
3355
3356         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3357       }
3358
3359   /* [temp.class.spec]
3360
3361      The argument list of the specialization shall not be identical to
3362      the implicit argument list of the primary template.  */
3363   if (comp_template_args
3364       (inner_args,
3365        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3366                                                    (maintmpl)))))
3367     error ("partial specialization %qT does not specialize any template arguments", type);
3368
3369   /* [temp.class.spec]
3370
3371      A partially specialized non-type argument expression shall not
3372      involve template parameters of the partial specialization except
3373      when the argument expression is a simple identifier.
3374
3375      The type of a template parameter corresponding to a specialized
3376      non-type argument shall not be dependent on a parameter of the
3377      specialization. 
3378
3379      Also, we verify that pack expansions only occur at the
3380      end of the argument list.  */
3381   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3382   tpd2.parms = 0;
3383   for (i = 0; i < nargs; ++i)
3384     {
3385       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3386       tree arg = TREE_VEC_ELT (inner_args, i);
3387       tree packed_args = NULL_TREE;
3388       int j, len = 1;
3389
3390       if (ARGUMENT_PACK_P (arg))
3391         {
3392           /* Extract the arguments from the argument pack. We'll be
3393              iterating over these in the following loop.  */
3394           packed_args = ARGUMENT_PACK_ARGS (arg);
3395           len = TREE_VEC_LENGTH (packed_args);
3396         }
3397
3398       for (j = 0; j < len; j++)
3399         {
3400           if (packed_args)
3401             /* Get the Jth argument in the parameter pack.  */
3402             arg = TREE_VEC_ELT (packed_args, j);
3403
3404           if (PACK_EXPANSION_P (arg))
3405             {
3406               /* Pack expansions must come at the end of the
3407                  argument list.  */
3408               if ((packed_args && j < len - 1)
3409                   || (!packed_args && i < nargs - 1))
3410                 {
3411                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3412                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3413                   else
3414                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3415
3416                   if (packed_args)
3417                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3418                 }
3419             }
3420
3421           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3422             /* We only care about the pattern.  */
3423             arg = PACK_EXPANSION_PATTERN (arg);
3424
3425           if (/* These first two lines are the `non-type' bit.  */
3426               !TYPE_P (arg)
3427               && TREE_CODE (arg) != TEMPLATE_DECL
3428               /* This next line is the `argument expression is not just a
3429                  simple identifier' condition and also the `specialized
3430                  non-type argument' bit.  */
3431               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3432             {
3433               if ((!packed_args && tpd.arg_uses_template_parms[i])
3434                   || (packed_args && uses_template_parms (arg)))
3435                 error ("template argument %qE involves template parameter(s)",
3436                        arg);
3437               else 
3438                 {
3439                   /* Look at the corresponding template parameter,
3440                      marking which template parameters its type depends
3441                      upon.  */
3442                   tree type = TREE_TYPE (parm);
3443
3444                   if (!tpd2.parms)
3445                     {
3446                       /* We haven't yet initialized TPD2.  Do so now.  */
3447                       tpd2.arg_uses_template_parms 
3448                         = (int *) alloca (sizeof (int) * nargs);
3449                       /* The number of parameters here is the number in the
3450                          main template, which, as checked in the assertion
3451                          above, is NARGS.  */
3452                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3453                       tpd2.level = 
3454                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3455                     }
3456
3457                   /* Mark the template parameters.  But this time, we're
3458                      looking for the template parameters of the main
3459                      template, not in the specialization.  */
3460                   tpd2.current_arg = i;
3461                   tpd2.arg_uses_template_parms[i] = 0;
3462                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3463                   for_each_template_parm (type,
3464                                           &mark_template_parm,
3465                                           &tpd2,
3466                                           NULL,
3467                                           /*include_nondeduced_p=*/false);
3468
3469                   if (tpd2.arg_uses_template_parms [i])
3470                     {
3471                       /* The type depended on some template parameters.
3472                          If they are fully specialized in the
3473                          specialization, that's OK.  */
3474                       int j;
3475                       for (j = 0; j < nargs; ++j)
3476                         if (tpd2.parms[j] != 0
3477                             && tpd.arg_uses_template_parms [j])
3478                           {
3479                             error ("type %qT of template argument %qE depends "
3480                                    "on template parameter(s)", 
3481                                    type,
3482                                    arg);
3483                             break;
3484                           }
3485                     }
3486                 }
3487             }
3488         }
3489     }
3490
3491   if (retrieve_specialization (maintmpl, specargs,
3492                                /*class_specializations_p=*/true))
3493     /* We've already got this specialization.  */
3494     return decl;
3495
3496   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3497     = tree_cons (specargs, inner_parms,
3498                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3499   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3500   return decl;
3501 }
3502
3503 /* Check that a template declaration's use of default arguments and
3504    parameter packs is not invalid.  Here, PARMS are the template
3505    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3506    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3507    specialization.
3508    
3509
3510    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3511    declaration (but not a definition); 1 indicates a declaration, 2
3512    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3513    emitted for extraneous default arguments.
3514
3515    Returns TRUE if there were no errors found, FALSE otherwise. */
3516
3517 bool
3518 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3519                          int is_partial, int is_friend_decl)
3520 {
3521   const char *msg;
3522   int last_level_to_check;
3523   tree parm_level;
3524   bool no_errors = true;
3525
3526   /* [temp.param]
3527
3528      A default template-argument shall not be specified in a
3529      function template declaration or a function template definition, nor
3530      in the template-parameter-list of the definition of a member of a
3531      class template.  */
3532
3533   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3534     /* You can't have a function template declaration in a local
3535        scope, nor you can you define a member of a class template in a
3536        local scope.  */
3537     return true;
3538
3539   if (current_class_type
3540       && !TYPE_BEING_DEFINED (current_class_type)
3541       && DECL_LANG_SPECIFIC (decl)
3542       /* If this is either a friend defined in the scope of the class
3543          or a member function.  */
3544       && (DECL_FUNCTION_MEMBER_P (decl)
3545           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3546           : DECL_FRIEND_CONTEXT (decl)
3547           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3548           : false)
3549       /* And, if it was a member function, it really was defined in
3550          the scope of the class.  */
3551       && (!DECL_FUNCTION_MEMBER_P (decl)
3552           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3553     /* We already checked these parameters when the template was
3554        declared, so there's no need to do it again now.  This function
3555        was defined in class scope, but we're processing it's body now
3556        that the class is complete.  */
3557     return true;
3558
3559   /* Core issue 226 (C++0x only): the following only applies to class
3560      templates.  */
3561   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3562     {
3563       /* [temp.param]
3564
3565          If a template-parameter has a default template-argument, all
3566          subsequent template-parameters shall have a default
3567          template-argument supplied.  */
3568       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3569         {
3570           tree inner_parms = TREE_VALUE (parm_level);
3571           int ntparms = TREE_VEC_LENGTH (inner_parms);
3572           int seen_def_arg_p = 0;
3573           int i;
3574
3575           for (i = 0; i < ntparms; ++i)
3576             {
3577               tree parm = TREE_VEC_ELT (inner_parms, i);
3578
3579               if (parm == error_mark_node)
3580                 continue;
3581
3582               if (TREE_PURPOSE (parm))
3583                 seen_def_arg_p = 1;
3584               else if (seen_def_arg_p)
3585                 {
3586                   error ("no default argument for %qD", TREE_VALUE (parm));
3587                   /* For better subsequent error-recovery, we indicate that
3588                      there should have been a default argument.  */
3589                   TREE_PURPOSE (parm) = error_mark_node;
3590                   no_errors = false;
3591                 }
3592               else if (is_primary
3593                        && !is_partial
3594                        && !is_friend_decl
3595                        && TREE_CODE (decl) == TYPE_DECL
3596                        && i < ntparms - 1
3597                        && template_parameter_pack_p (TREE_VALUE (parm)))
3598                 {
3599                   /* A primary class template can only have one
3600                      parameter pack, at the end of the template
3601                      parameter list.  */
3602
3603                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3604                     error ("parameter pack %qE must be at the end of the"
3605                            " template parameter list", TREE_VALUE (parm));
3606                   else
3607                     error ("parameter pack %qT must be at the end of the"
3608                            " template parameter list", 
3609                            TREE_TYPE (TREE_VALUE (parm)));
3610
3611                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3612                     = error_mark_node;
3613                   no_errors = false;
3614                 }
3615             }
3616         }
3617     }
3618
3619   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3620       || is_partial 
3621       || !is_primary
3622       || is_friend_decl)
3623     /* For an ordinary class template, default template arguments are
3624        allowed at the innermost level, e.g.:
3625          template <class T = int>
3626          struct S {};
3627        but, in a partial specialization, they're not allowed even
3628        there, as we have in [temp.class.spec]:
3629
3630          The template parameter list of a specialization shall not
3631          contain default template argument values.
3632
3633        So, for a partial specialization, or for a function template
3634        (in C++98/C++03), we look at all of them.  */
3635     ;
3636   else
3637     /* But, for a primary class template that is not a partial
3638        specialization we look at all template parameters except the
3639        innermost ones.  */
3640     parms = TREE_CHAIN (parms);
3641
3642   /* Figure out what error message to issue.  */
3643   if (is_friend_decl == 2)
3644     msg = "default template arguments may not be used in function template friend re-declaration";
3645   else if (is_friend_decl)
3646     msg = "default template arguments may not be used in function template friend declarations";
3647   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3648     msg = "default template arguments may not be used in function templates";
3649   else if (is_partial)
3650     msg = "default template arguments may not be used in partial specializations";
3651   else
3652     msg = "default argument for template parameter for class enclosing %qD";
3653
3654   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3655     /* If we're inside a class definition, there's no need to
3656        examine the parameters to the class itself.  On the one
3657        hand, they will be checked when the class is defined, and,
3658        on the other, default arguments are valid in things like:
3659          template <class T = double>
3660          struct S { template <class U> void f(U); };
3661        Here the default argument for `S' has no bearing on the
3662        declaration of `f'.  */
3663     last_level_to_check = template_class_depth (current_class_type) + 1;
3664   else
3665     /* Check everything.  */
3666     last_level_to_check = 0;
3667
3668   for (parm_level = parms;
3669        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3670        parm_level = TREE_CHAIN (parm_level))
3671     {
3672       tree inner_parms = TREE_VALUE (parm_level);
3673       int i;
3674       int ntparms;
3675
3676       ntparms = TREE_VEC_LENGTH (inner_parms);
3677       for (i = 0; i < ntparms; ++i)
3678         {
3679           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3680             continue;
3681
3682           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3683             {
3684               if (msg)
3685                 {
3686                   no_errors = false;
3687                   if (is_friend_decl == 2)
3688                     return no_errors;
3689
3690                   error (msg, decl);
3691                   msg = 0;
3692                 }
3693
3694               /* Clear out the default argument so that we are not
3695                  confused later.  */
3696               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3697             }
3698         }
3699
3700       /* At this point, if we're still interested in issuing messages,
3701          they must apply to classes surrounding the object declared.  */
3702       if (msg)
3703         msg = "default argument for template parameter for class enclosing %qD";
3704     }
3705
3706   return no_errors;
3707 }
3708
3709 /* Worker for push_template_decl_real, called via
3710    for_each_template_parm.  DATA is really an int, indicating the
3711    level of the parameters we are interested in.  If T is a template
3712    parameter of that level, return nonzero.  */
3713
3714 static int
3715 template_parm_this_level_p (tree t, void* data)
3716 {
3717   int this_level = *(int *)data;
3718   int level;
3719
3720   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3721     level = TEMPLATE_PARM_LEVEL (t);
3722   else
3723     level = TEMPLATE_TYPE_LEVEL (t);
3724   return level == this_level;
3725 }
3726
3727 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3728    parameters given by current_template_args, or reuses a
3729    previously existing one, if appropriate.  Returns the DECL, or an
3730    equivalent one, if it is replaced via a call to duplicate_decls.
3731
3732    If IS_FRIEND is true, DECL is a friend declaration.  */
3733
3734 tree
3735 push_template_decl_real (tree decl, bool is_friend)
3736 {
3737   tree tmpl;
3738   tree args;
3739   tree info;
3740   tree ctx;
3741   int primary;
3742   int is_partial;
3743   int new_template_p = 0;
3744   /* True if the template is a member template, in the sense of
3745      [temp.mem].  */
3746   bool member_template_p = false;
3747
3748   if (decl == error_mark_node)
3749     return decl;
3750
3751   /* See if this is a partial specialization.  */
3752   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3753                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3754                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3755
3756   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3757     is_friend = true;
3758
3759   if (is_friend)
3760     /* For a friend, we want the context of the friend function, not
3761        the type of which it is a friend.  */
3762     ctx = DECL_CONTEXT (decl);
3763   else if (CP_DECL_CONTEXT (decl)
3764            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3765     /* In the case of a virtual function, we want the class in which
3766        it is defined.  */
3767     ctx = CP_DECL_CONTEXT (decl);
3768   else
3769     /* Otherwise, if we're currently defining some class, the DECL
3770        is assumed to be a member of the class.  */
3771     ctx = current_scope ();
3772
3773   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3774     ctx = NULL_TREE;
3775
3776   if (!DECL_CONTEXT (decl))
3777     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3778
3779   /* See if this is a primary template.  */
3780   if (is_friend && ctx)
3781     /* A friend template that specifies a class context, i.e.
3782          template <typename T> friend void A<T>::f();
3783        is not primary.  */
3784     primary = 0;
3785   else
3786     primary = template_parm_scope_p ();
3787
3788   if (primary)
3789     {
3790       if (DECL_CLASS_SCOPE_P (decl))
3791         member_template_p = true;
3792       if (TREE_CODE (decl) == TYPE_DECL
3793           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3794         {
3795           error ("template class without a name");
3796           return error_mark_node;
3797         }
3798       else if (TREE_CODE (decl) == FUNCTION_DECL)
3799         {
3800           if (DECL_DESTRUCTOR_P (decl))
3801             {
3802               /* [temp.mem]
3803
3804                  A destructor shall not be a member template.  */
3805               error ("destructor %qD declared as member template", decl);
3806               return error_mark_node;
3807             }
3808           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3809               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3810                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3811                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3812                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3813                       == void_list_node)))
3814             {
3815               /* [basic.stc.dynamic.allocation]
3816
3817                  An allocation function can be a function
3818                  template. ... Template allocation functions shall
3819                  have two or more parameters.  */
3820               error ("invalid template declaration of %qD", decl);
3821               return error_mark_node;
3822             }
3823         }
3824       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3825                && CLASS_TYPE_P (TREE_TYPE (decl)))
3826         /* OK */;
3827       else
3828         {
3829           error ("template declaration of %q#D", decl);
3830           return error_mark_node;
3831         }
3832     }
3833
3834   /* Check to see that the rules regarding the use of default
3835      arguments are not being violated.  */
3836   check_default_tmpl_args (decl, current_template_parms,
3837                            primary, is_partial, /*is_friend_decl=*/0);
3838
3839   /* Ensure that there are no parameter packs in the type of this
3840      declaration that have not been expanded.  */
3841   if (TREE_CODE (decl) == FUNCTION_DECL)
3842     {
3843       /* Check each of the arguments individually to see if there are
3844          any bare parameter packs.  */
3845       tree type = TREE_TYPE (decl);
3846       tree arg = DECL_ARGUMENTS (decl);
3847       tree argtype = TYPE_ARG_TYPES (type);
3848
3849       while (arg && argtype)
3850         {
3851           if (!FUNCTION_PARAMETER_PACK_P (arg)
3852               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3853             {
3854             /* This is a PARM_DECL that contains unexpanded parameter
3855                packs. We have already complained about this in the
3856                check_for_bare_parameter_packs call, so just replace
3857                these types with ERROR_MARK_NODE.  */
3858               TREE_TYPE (arg) = error_mark_node;
3859               TREE_VALUE (argtype) = error_mark_node;
3860             }
3861
3862           arg = TREE_CHAIN (arg);
3863           argtype = TREE_CHAIN (argtype);
3864         }
3865
3866       /* Check for bare parameter packs in the return type and the
3867          exception specifiers.  */
3868       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3869         /* Errors were already issued, set return type to int
3870            as the frontend doesn't expect error_mark_node as
3871            the return type.  */
3872         TREE_TYPE (type) = integer_type_node;
3873       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3874         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3875     }
3876   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3877     {
3878       TREE_TYPE (decl) = error_mark_node;
3879       return error_mark_node;
3880     }
3881
3882   if (is_partial)
3883     return process_partial_specialization (decl);
3884
3885   args = current_template_args ();
3886
3887   if (!ctx
3888       || TREE_CODE (ctx) == FUNCTION_DECL
3889       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3890       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3891     {
3892       if (DECL_LANG_SPECIFIC (decl)
3893           && DECL_TEMPLATE_INFO (decl)
3894           && DECL_TI_TEMPLATE (decl))
3895         tmpl = DECL_TI_TEMPLATE (decl);
3896       /* If DECL is a TYPE_DECL for a class-template, then there won't
3897          be DECL_LANG_SPECIFIC.  The information equivalent to
3898          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3899       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3900                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3901                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3902         {
3903           /* Since a template declaration already existed for this
3904              class-type, we must be redeclaring it here.  Make sure
3905              that the redeclaration is valid.  */
3906           redeclare_class_template (TREE_TYPE (decl),
3907                                     current_template_parms);
3908           /* We don't need to create a new TEMPLATE_DECL; just use the
3909              one we already had.  */
3910           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3911         }
3912       else
3913         {
3914           tmpl = build_template_decl (decl, current_template_parms,
3915                                       member_template_p);
3916           new_template_p = 1;
3917
3918           if (DECL_LANG_SPECIFIC (decl)
3919               && DECL_TEMPLATE_SPECIALIZATION (decl))
3920             {
3921               /* A specialization of a member template of a template
3922                  class.  */
3923               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3924               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3925               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3926             }
3927         }
3928     }
3929   else
3930     {
3931       tree a, t, current, parms;
3932       int i;
3933       tree tinfo = get_template_info (decl);
3934
3935       if (!tinfo)
3936         {
3937           error ("template definition of non-template %q#D", decl);
3938           return error_mark_node;
3939         }
3940
3941       tmpl = TI_TEMPLATE (tinfo);
3942
3943       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3944           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3945           && DECL_TEMPLATE_SPECIALIZATION (decl)
3946           && DECL_MEMBER_TEMPLATE_P (tmpl))
3947         {
3948           tree new_tmpl;
3949
3950           /* The declaration is a specialization of a member
3951              template, declared outside the class.  Therefore, the
3952              innermost template arguments will be NULL, so we
3953              replace them with the arguments determined by the
3954              earlier call to check_explicit_specialization.  */
3955           args = DECL_TI_ARGS (decl);
3956
3957           new_tmpl
3958             = build_template_decl (decl, current_template_parms,
3959                                    member_template_p);
3960           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3961           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3962           DECL_TI_TEMPLATE (decl) = new_tmpl;
3963           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3964           DECL_TEMPLATE_INFO (new_tmpl)
3965             = tree_cons (tmpl, args, NULL_TREE);
3966
3967           register_specialization (new_tmpl,
3968                                    most_general_template (tmpl),
3969                                    args,
3970                                    is_friend);
3971           return decl;
3972         }
3973
3974       /* Make sure the template headers we got make sense.  */
3975
3976       parms = DECL_TEMPLATE_PARMS (tmpl);
3977       i = TMPL_PARMS_DEPTH (parms);
3978       if (TMPL_ARGS_DEPTH (args) != i)
3979         {
3980           error ("expected %d levels of template parms for %q#D, got %d",
3981                  i, decl, TMPL_ARGS_DEPTH (args));
3982         }
3983       else
3984         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3985           {
3986             a = TMPL_ARGS_LEVEL (args, i);
3987             t = INNERMOST_TEMPLATE_PARMS (parms);
3988
3989             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3990               {
3991                 if (current == decl)
3992                   error ("got %d template parameters for %q#D",
3993                          TREE_VEC_LENGTH (a), decl);
3994                 else
3995                   error ("got %d template parameters for %q#T",
3996                          TREE_VEC_LENGTH (a), current);
3997                 error ("  but %d required", TREE_VEC_LENGTH (t));
3998                 return error_mark_node;
3999               }
4000
4001             if (current == decl)
4002               current = ctx;
4003             else
4004               current = (TYPE_P (current)
4005                          ? TYPE_CONTEXT (current)
4006                          : DECL_CONTEXT (current));
4007           }
4008
4009       /* Check that the parms are used in the appropriate qualifying scopes
4010          in the declarator.  */
4011       if (!comp_template_args
4012           (TI_ARGS (tinfo),
4013            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4014         {
4015           error ("\
4016 template arguments to %qD do not match original template %qD",
4017                  decl, DECL_TEMPLATE_RESULT (tmpl));
4018           if (!uses_template_parms (TI_ARGS (tinfo)))
4019             inform ("use template<> for an explicit specialization");
4020           /* Avoid crash in import_export_decl.  */
4021           DECL_INTERFACE_KNOWN (decl) = 1;
4022           return error_mark_node;
4023         }
4024     }
4025
4026   DECL_TEMPLATE_RESULT (tmpl) = decl;
4027   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4028
4029   /* Push template declarations for global functions and types.  Note
4030      that we do not try to push a global template friend declared in a
4031      template class; such a thing may well depend on the template
4032      parameters of the class.  */
4033   if (new_template_p && !ctx
4034       && !(is_friend && template_class_depth (current_class_type) > 0))
4035     {
4036       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4037       if (tmpl == error_mark_node)
4038         return error_mark_node;
4039
4040       /* Hide template friend classes that haven't been declared yet.  */
4041       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4042         {
4043           DECL_ANTICIPATED (tmpl) = 1;
4044           DECL_FRIEND_P (tmpl) = 1;
4045         }
4046     }
4047
4048   if (primary)
4049     {
4050       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4051       int i;
4052
4053       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4054       if (DECL_CONV_FN_P (tmpl))
4055         {
4056           int depth = TMPL_PARMS_DEPTH (parms);
4057
4058           /* It is a conversion operator. See if the type converted to
4059              depends on innermost template operands.  */
4060
4061           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4062                                          depth))
4063             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4064         }
4065
4066       /* Give template template parms a DECL_CONTEXT of the template
4067          for which they are a parameter.  */
4068       parms = INNERMOST_TEMPLATE_PARMS (parms);
4069       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4070         {
4071           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4072           if (TREE_CODE (parm) == TEMPLATE_DECL)
4073             DECL_CONTEXT (parm) = tmpl;
4074         }
4075     }
4076
4077   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4078      back to its most general template.  If TMPL is a specialization,
4079      ARGS may only have the innermost set of arguments.  Add the missing
4080      argument levels if necessary.  */
4081   if (DECL_TEMPLATE_INFO (tmpl))
4082     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4083
4084   info = tree_cons (tmpl, args, NULL_TREE);
4085
4086   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4087     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4088   else if (DECL_LANG_SPECIFIC (decl))
4089     DECL_TEMPLATE_INFO (decl) = info;
4090
4091   return DECL_TEMPLATE_RESULT (tmpl);
4092 }
4093
4094 tree
4095 push_template_decl (tree decl)
4096 {
4097   return push_template_decl_real (decl, false);
4098 }
4099
4100 /* Called when a class template TYPE is redeclared with the indicated
4101    template PARMS, e.g.:
4102
4103      template <class T> struct S;
4104      template <class T> struct S {};  */
4105
4106 bool
4107 redeclare_class_template (tree type, tree parms)
4108 {
4109   tree tmpl;
4110   tree tmpl_parms;
4111   int i;
4112
4113   if (!TYPE_TEMPLATE_INFO (type))
4114     {
4115       error ("%qT is not a template type", type);
4116       return false;
4117     }
4118
4119   tmpl = TYPE_TI_TEMPLATE (type);
4120   if (!PRIMARY_TEMPLATE_P (tmpl))
4121     /* The type is nested in some template class.  Nothing to worry
4122        about here; there are no new template parameters for the nested
4123        type.  */
4124     return true;
4125
4126   if (!parms)
4127     {
4128       error ("template specifiers not specified in declaration of %qD",
4129              tmpl);
4130       return false;
4131     }
4132
4133   parms = INNERMOST_TEMPLATE_PARMS (parms);
4134   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4135
4136   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4137     {
4138       error ("redeclared with %d template parameter(s)", 
4139              TREE_VEC_LENGTH (parms));
4140       inform ("previous declaration %q+D used %d template parameter(s)", 
4141              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4142       return false;
4143     }
4144
4145   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4146     {
4147       tree tmpl_parm;
4148       tree parm;
4149       tree tmpl_default;
4150       tree parm_default;
4151
4152       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4153           || TREE_VEC_ELT (parms, i) == error_mark_node)
4154         continue;
4155
4156       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4157       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4158       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4159       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4160
4161       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4162          TEMPLATE_DECL.  */
4163       if (tmpl_parm != error_mark_node
4164           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4165               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4166                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4167               || (TREE_CODE (tmpl_parm) != PARM_DECL
4168                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4169                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4170               || (TREE_CODE (tmpl_parm) == PARM_DECL
4171                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4172                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4173         {
4174           error ("template parameter %q+#D", tmpl_parm);
4175           error ("redeclared here as %q#D", parm);
4176           return false;
4177         }
4178
4179       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4180         {
4181           /* We have in [temp.param]:
4182
4183              A template-parameter may not be given default arguments
4184              by two different declarations in the same scope.  */
4185           error ("redefinition of default argument for %q#D", parm);
4186           inform ("%Joriginal definition appeared here", tmpl_parm);
4187           return false;
4188         }
4189
4190       if (parm_default != NULL_TREE)
4191         /* Update the previous template parameters (which are the ones
4192            that will really count) with the new default value.  */
4193         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4194       else if (tmpl_default != NULL_TREE)
4195         /* Update the new parameters, too; they'll be used as the
4196            parameters for any members.  */
4197         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4198     }
4199
4200     return true;
4201 }
4202
4203 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4204    (possibly simplified) expression.  */
4205
4206 tree
4207 fold_non_dependent_expr (tree expr)
4208 {
4209   if (expr == NULL_TREE)
4210     return NULL_TREE;
4211
4212   /* If we're in a template, but EXPR isn't value dependent, simplify
4213      it.  We're supposed to treat:
4214
4215        template <typename T> void f(T[1 + 1]);
4216        template <typename T> void f(T[2]);
4217
4218      as two declarations of the same function, for example.  */
4219   if (processing_template_decl
4220       && !type_dependent_expression_p (expr)
4221       && !value_dependent_expression_p (expr))
4222     {
4223       HOST_WIDE_INT saved_processing_template_decl;
4224
4225       saved_processing_template_decl = processing_template_decl;
4226       processing_template_decl = 0;
4227       expr = tsubst_copy_and_build (expr,
4228                                     /*args=*/NULL_TREE,
4229                                     tf_error,
4230                                     /*in_decl=*/NULL_TREE,
4231                                     /*function_p=*/false,
4232                                     /*integral_constant_expression_p=*/true);
4233       processing_template_decl = saved_processing_template_decl;
4234     }
4235   return expr;
4236 }
4237
4238 /* EXPR is an expression which is used in a constant-expression context.
4239    For instance, it could be a VAR_DECL with a constant initializer.
4240    Extract the innermost constant expression.
4241
4242    This is basically a more powerful version of
4243    integral_constant_value, which can be used also in templates where
4244    initializers can maintain a syntactic rather than semantic form
4245    (even if they are non-dependent, for access-checking purposes).  */
4246
4247 static tree
4248 fold_decl_constant_value (tree expr)
4249 {
4250   tree const_expr = expr;
4251   do
4252     {
4253       expr = fold_non_dependent_expr (const_expr);
4254       const_expr = integral_constant_value (expr);
4255     }
4256   while (expr != const_expr);
4257
4258   return expr;
4259 }
4260
4261 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4262    must be a function or a pointer-to-function type, as specified
4263    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4264    and check that the resulting function has external linkage.  */
4265
4266 static tree
4267 convert_nontype_argument_function (tree type, tree expr)
4268 {
4269   tree fns = expr;
4270   tree fn, fn_no_ptr;
4271
4272   fn = instantiate_type (type, fns, tf_none);
4273   if (fn == error_mark_node)
4274     return error_mark_node;
4275
4276   fn_no_ptr = fn;
4277   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4278     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4279   if (TREE_CODE (fn_no_ptr) == BASELINK)
4280     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4281  
4282   /* [temp.arg.nontype]/1
4283
4284      A template-argument for a non-type, non-template template-parameter
4285      shall be one of:
4286      [...]
4287      -- the address of an object or function with external linkage.  */
4288   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4289     {
4290       error ("%qE is not a valid template argument for type %qT "
4291              "because function %qD has not external linkage",
4292              expr, type, fn_no_ptr);
4293       return NULL_TREE;
4294     }
4295
4296   return fn;
4297 }
4298
4299 /* Attempt to convert the non-type template parameter EXPR to the
4300    indicated TYPE.  If the conversion is successful, return the
4301    converted value.  If the conversion is unsuccessful, return
4302    NULL_TREE if we issued an error message, or error_mark_node if we
4303    did not.  We issue error messages for out-and-out bad template
4304    parameters, but not simply because the conversion failed, since we
4305    might be just trying to do argument deduction.  Both TYPE and EXPR
4306    must be non-dependent.
4307
4308    The conversion follows the special rules described in
4309    [temp.arg.nontype], and it is much more strict than an implicit
4310    conversion.
4311
4312    This function is called twice for each template argument (see
4313    lookup_template_class for a more accurate description of this
4314    problem). This means that we need to handle expressions which
4315    are not valid in a C++ source, but can be created from the
4316    first call (for instance, casts to perform conversions). These
4317    hacks can go away after we fix the double coercion problem.  */
4318
4319 static tree
4320 convert_nontype_argument (tree type, tree expr)
4321 {
4322   tree expr_type;
4323
4324   /* Detect immediately string literals as invalid non-type argument.
4325      This special-case is not needed for correctness (we would easily
4326      catch this later), but only to provide better diagnostic for this
4327      common user mistake. As suggested by DR 100, we do not mention
4328      linkage issues in the diagnostic as this is not the point.  */
4329   if (TREE_CODE (expr) == STRING_CST)
4330     {
4331       error ("%qE is not a valid template argument for type %qT "
4332              "because string literals can never be used in this context",
4333              expr, type);
4334       return NULL_TREE;
4335     }
4336
4337   /* If we are in a template, EXPR may be non-dependent, but still
4338      have a syntactic, rather than semantic, form.  For example, EXPR
4339      might be a SCOPE_REF, rather than the VAR_DECL to which the
4340      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4341      so that access checking can be performed when the template is
4342      instantiated -- but here we need the resolved form so that we can
4343      convert the argument.  */
4344   expr = fold_non_dependent_expr (expr);
4345   if (error_operand_p (expr))
4346     return error_mark_node;
4347   expr_type = TREE_TYPE (expr);
4348
4349   /* HACK: Due to double coercion, we can get a
4350      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4351      which is the tree that we built on the first call (see
4352      below when coercing to reference to object or to reference to
4353      function). We just strip everything and get to the arg.
4354      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4355      for examples.  */
4356   if (TREE_CODE (expr) == NOP_EXPR)
4357     {
4358       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4359         {
4360           /* ??? Maybe we could use convert_from_reference here, but we
4361              would need to relax its constraints because the NOP_EXPR
4362              could actually change the type to something more cv-qualified,
4363              and this is not folded by convert_from_reference.  */
4364           tree addr = TREE_OPERAND (expr, 0);
4365           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4366           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4367           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4368           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4369                       (TREE_TYPE (expr_type),
4370                        TREE_TYPE (TREE_TYPE (addr))));
4371
4372           expr = TREE_OPERAND (addr, 0);
4373           expr_type = TREE_TYPE (expr);
4374         }
4375
4376       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4377          parameter is a pointer to object, through decay and
4378          qualification conversion. Let's strip everything.  */
4379       else if (TYPE_PTROBV_P (type))
4380         {
4381           STRIP_NOPS (expr);
4382           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4383           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4384           /* Skip the ADDR_EXPR only if it is part of the decay for
4385              an array. Otherwise, it is part of the original argument
4386              in the source code.  */
4387           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4388             expr = TREE_OPERAND (expr, 0);
4389           expr_type = TREE_TYPE (expr);
4390         }
4391     }
4392
4393   /* [temp.arg.nontype]/5, bullet 1
4394
4395      For a non-type template-parameter of integral or enumeration type,
4396      integral promotions (_conv.prom_) and integral conversions
4397      (_conv.integral_) are applied.  */
4398   if (INTEGRAL_TYPE_P (type))
4399     {
4400       if (!INTEGRAL_TYPE_P (expr_type))
4401         return error_mark_node;
4402
4403       expr = fold_decl_constant_value (expr);
4404       /* Notice that there are constant expressions like '4 % 0' which
4405          do not fold into integer constants.  */
4406       if (TREE_CODE (expr) != INTEGER_CST)
4407         {
4408           error ("%qE is not a valid template argument for type %qT "
4409                  "because it is a non-constant expression", expr, type);
4410           return NULL_TREE;
4411         }
4412
4413       /* At this point, an implicit conversion does what we want,
4414          because we already know that the expression is of integral
4415          type.  */
4416       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4417       if (expr == error_mark_node)
4418         return error_mark_node;
4419
4420       /* Conversion was allowed: fold it to a bare integer constant.  */
4421       expr = fold (expr);
4422     }
4423   /* [temp.arg.nontype]/5, bullet 2
4424
4425      For a non-type template-parameter of type pointer to object,
4426      qualification conversions (_conv.qual_) and the array-to-pointer
4427      conversion (_conv.array_) are applied.  */
4428   else if (TYPE_PTROBV_P (type))
4429     {
4430       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4431
4432          A template-argument for a non-type, non-template template-parameter
4433          shall be one of: [...]
4434
4435          -- the name of a non-type template-parameter;
4436          -- the address of an object or function with external linkage, [...]
4437             expressed as "& id-expression" where the & is optional if the name
4438             refers to a function or array, or if the corresponding
4439             template-parameter is a reference.
4440
4441         Here, we do not care about functions, as they are invalid anyway
4442         for a parameter of type pointer-to-object.  */
4443
4444       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4445         /* Non-type template parameters are OK.  */
4446         ;
4447       else if (TREE_CODE (expr) != ADDR_EXPR
4448                && TREE_CODE (expr_type) != ARRAY_TYPE)
4449         {
4450           if (TREE_CODE (expr) == VAR_DECL)
4451             {
4452               error ("%qD is not a valid template argument "
4453                      "because %qD is a variable, not the address of "
4454                      "a variable",
4455                      expr, expr);
4456               return NULL_TREE;
4457             }
4458           /* Other values, like integer constants, might be valid
4459              non-type arguments of some other type.  */
4460           return error_mark_node;
4461         }
4462       else
4463         {
4464           tree decl;
4465
4466           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4467                   ? TREE_OPERAND (expr, 0) : expr);
4468           if (TREE_CODE (decl) != VAR_DECL)
4469             {
4470               error ("%qE is not a valid template argument of type %qT "
4471                      "because %qE is not a variable",
4472                      expr, type, decl);
4473               return NULL_TREE;
4474             }
4475           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4476             {
4477               error ("%qE is not a valid template argument of type %qT "
4478                      "because %qD does not have external linkage",
4479                      expr, type, decl);
4480               return NULL_TREE;
4481             }
4482         }
4483
4484       expr = decay_conversion (expr);
4485       if (expr == error_mark_node)
4486         return error_mark_node;
4487
4488       expr = perform_qualification_conversions (type, expr);
4489       if (expr == error_mark_node)
4490         return error_mark_node;
4491     }
4492   /* [temp.arg.nontype]/5, bullet 3
4493
4494      For a non-type template-parameter of type reference to object, no
4495      conversions apply. The type referred to by the reference may be more
4496      cv-qualified than the (otherwise identical) type of the
4497      template-argument. The template-parameter is bound directly to the
4498      template-argument, which must be an lvalue.  */
4499   else if (TYPE_REF_OBJ_P (type))
4500     {
4501       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4502                                                       expr_type))
4503         return error_mark_node;
4504
4505       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4506         {
4507           error ("%qE is not a valid template argument for type %qT "
4508                  "because of conflicts in cv-qualification", expr, type);
4509           return NULL_TREE;
4510         }
4511
4512       if (!real_lvalue_p (expr))
4513         {
4514           error ("%qE is not a valid template argument for type %qT "
4515                  "because it is not an lvalue", expr, type);
4516           return NULL_TREE;
4517         }
4518
4519       /* [temp.arg.nontype]/1
4520
4521          A template-argument for a non-type, non-template template-parameter
4522          shall be one of: [...]
4523
4524          -- the address of an object or function with external linkage.  */
4525       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4526         {
4527           error ("%qE is not a valid template argument for type %qT "
4528                  "because object %qD has not external linkage",
4529                  expr, type, expr);
4530           return NULL_TREE;
4531         }
4532
4533       expr = build_nop (type, build_address (expr));
4534     }
4535   /* [temp.arg.nontype]/5, bullet 4
4536
4537      For a non-type template-parameter of type pointer to function, only
4538      the function-to-pointer conversion (_conv.func_) is applied. If the
4539      template-argument represents a set of overloaded functions (or a
4540      pointer to such), the matching function is selected from the set
4541      (_over.over_).  */
4542   else if (TYPE_PTRFN_P (type))
4543     {
4544       /* If the argument is a template-id, we might not have enough
4545          context information to decay the pointer.  */
4546       if (!type_unknown_p (expr_type))
4547         {
4548           expr = decay_conversion (expr);
4549           if (expr == error_mark_node)
4550             return error_mark_node;
4551         }
4552
4553       expr = convert_nontype_argument_function (type, expr);
4554       if (!expr || expr == error_mark_node)
4555         return expr;
4556     }
4557   /* [temp.arg.nontype]/5, bullet 5
4558
4559      For a non-type template-parameter of type reference to function, no
4560      conversions apply. If the template-argument represents a set of
4561      overloaded functions, the matching function is selected from the set
4562      (_over.over_).  */
4563   else if (TYPE_REFFN_P (type))
4564     {
4565       if (TREE_CODE (expr) == ADDR_EXPR)
4566         {
4567           error ("%qE is not a valid template argument for type %qT "
4568                  "because it is a pointer", expr, type);
4569           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4570           return NULL_TREE;
4571         }
4572
4573       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4574       if (!expr || expr == error_mark_node)
4575         return expr;
4576
4577       expr = build_nop (type, build_address (expr));
4578     }
4579   /* [temp.arg.nontype]/5, bullet 6
4580
4581      For a non-type template-parameter of type pointer to member function,
4582      no conversions apply. If the template-argument represents a set of
4583      overloaded member functions, the matching member function is selected
4584      from the set (_over.over_).  */
4585   else if (TYPE_PTRMEMFUNC_P (type))
4586     {
4587       expr = instantiate_type (type, expr, tf_none);
4588       if (expr == error_mark_node)
4589         return error_mark_node;
4590
4591       /* There is no way to disable standard conversions in
4592          resolve_address_of_overloaded_function (called by
4593          instantiate_type). It is possible that the call succeeded by
4594          converting &B::I to &D::I (where B is a base of D), so we need
4595          to reject this conversion here.
4596
4597          Actually, even if there was a way to disable standard conversions,
4598          it would still be better to reject them here so that we can
4599          provide a superior diagnostic.  */
4600       if (!same_type_p (TREE_TYPE (expr), type))
4601         {
4602           /* Make sure we are just one standard conversion off.  */
4603           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4604           error ("%qE is not a valid template argument for type %qT "
4605                  "because it is of type %qT", expr, type,
4606                  TREE_TYPE (expr));
4607           inform ("standard conversions are not allowed in this context");
4608           return NULL_TREE;
4609         }
4610     }
4611   /* [temp.arg.nontype]/5, bullet 7
4612
4613      For a non-type template-parameter of type pointer to data member,
4614      qualification conversions (_conv.qual_) are applied.  */
4615   else if (TYPE_PTRMEM_P (type))
4616     {
4617       expr = perform_qualification_conversions (type, expr);
4618       if (expr == error_mark_node)
4619         return expr;
4620     }
4621   /* A template non-type parameter must be one of the above.  */
4622   else
4623     gcc_unreachable ();
4624
4625   /* Sanity check: did we actually convert the argument to the
4626      right type?  */
4627   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4628   return expr;
4629 }
4630
4631 /* Subroutine of coerce_template_template_parms, which returns 1 if
4632    PARM_PARM and ARG_PARM match using the rule for the template
4633    parameters of template template parameters. Both PARM and ARG are
4634    template parameters; the rest of the arguments are the same as for
4635    coerce_template_template_parms.
4636  */
4637 static int
4638 coerce_template_template_parm (tree parm,
4639                               tree arg,
4640                               tsubst_flags_t complain,
4641                               tree in_decl,
4642                               tree outer_args)
4643 {
4644   if (arg == NULL_TREE || arg == error_mark_node
4645       || parm == NULL_TREE || parm == error_mark_node)
4646     return 0;
4647   
4648   if (TREE_CODE (arg) != TREE_CODE (parm))
4649     return 0;
4650   
4651   switch (TREE_CODE (parm))
4652     {
4653     case TEMPLATE_DECL:
4654       /* We encounter instantiations of templates like
4655          template <template <template <class> class> class TT>
4656          class C;  */
4657       {
4658         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4659         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4660         
4661         if (!coerce_template_template_parms
4662             (parmparm, argparm, complain, in_decl, outer_args))
4663           return 0;
4664       }
4665       /* Fall through.  */
4666       
4667     case TYPE_DECL:
4668       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4669           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4670         /* Argument is a parameter pack but parameter is not.  */
4671         return 0;
4672       break;
4673       
4674     case PARM_DECL:
4675       /* The tsubst call is used to handle cases such as
4676          
4677            template <int> class C {};
4678            template <class T, template <T> class TT> class D {};
4679            D<int, C> d;
4680
4681          i.e. the parameter list of TT depends on earlier parameters.  */
4682       if (!dependent_type_p (TREE_TYPE (arg))
4683           && !same_type_p
4684                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4685                  TREE_TYPE (arg)))
4686         return 0;
4687       
4688       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4689           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4690         /* Argument is a parameter pack but parameter is not.  */
4691         return 0;
4692       
4693       break;
4694
4695     default:
4696       gcc_unreachable ();
4697     }
4698
4699   return 1;
4700 }
4701
4702
4703 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4704    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4705    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4706    or PARM_DECL.
4707
4708    Consider the example:
4709      template <class T> class A;
4710      template<template <class U> class TT> class B;
4711
4712    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4713    the parameters to A, and OUTER_ARGS contains A.  */
4714
4715 static int
4716 coerce_template_template_parms (tree parm_parms,
4717                                 tree arg_parms,
4718                                 tsubst_flags_t complain,
4719                                 tree in_decl,
4720                                 tree outer_args)
4721 {
4722   int nparms, nargs, i;
4723   tree parm, arg;
4724   int variadic_p = 0;
4725
4726   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4727   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4728
4729   nparms = TREE_VEC_LENGTH (parm_parms);
4730   nargs = TREE_VEC_LENGTH (arg_parms);
4731
4732   /* Determine whether we have a parameter pack at the end of the
4733      template template parameter's template parameter list.  */
4734   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4735     {
4736       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4737       
4738       switch (TREE_CODE (parm))
4739         {
4740         case TEMPLATE_DECL:
4741         case TYPE_DECL:
4742           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4743             variadic_p = 1;
4744           break;
4745           
4746         case PARM_DECL:
4747           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4748             variadic_p = 1;
4749           break;
4750           
4751         default:
4752           gcc_unreachable ();
4753         }
4754     }
4755  
4756   if (nargs != nparms
4757       && !(variadic_p && nargs >= nparms - 1))
4758     return 0;
4759
4760   /* Check all of the template parameters except the parameter pack at
4761      the end (if any).  */
4762   for (i = 0; i < nparms - variadic_p; ++i)
4763     {
4764       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4765           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4766         continue;
4767
4768       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4769       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4770
4771       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4772                                           outer_args))
4773         return 0;
4774
4775     }
4776
4777   if (variadic_p)
4778     {
4779       /* Check each of the template parameters in the template
4780          argument against the template parameter pack at the end of
4781          the template template parameter.  */
4782       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4783         return 0;
4784
4785       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4786
4787       for (; i < nargs; ++i)
4788         {
4789           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4790             continue;
4791  
4792           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4793  
4794           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4795                                               outer_args))
4796             return 0;
4797         }
4798     }
4799
4800   return 1;
4801 }
4802
4803 /* Verifies that the deduced template arguments (in TARGS) for the
4804    template template parameters (in TPARMS) represent valid bindings,
4805    by comparing the template parameter list of each template argument
4806    to the template parameter list of its corresponding template
4807    template parameter, in accordance with DR150. This
4808    routine can only be called after all template arguments have been
4809    deduced. It will return TRUE if all of the template template
4810    parameter bindings are okay, FALSE otherwise.  */
4811 bool 
4812 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4813 {
4814   int i, ntparms = TREE_VEC_LENGTH (tparms);
4815   bool ret = true;
4816
4817   /* We're dealing with template parms in this process.  */
4818   ++processing_template_decl;
4819
4820   targs = INNERMOST_TEMPLATE_ARGS (targs);
4821
4822   for (i = 0; i < ntparms; ++i)
4823     {
4824       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4825       tree targ = TREE_VEC_ELT (targs, i);
4826
4827       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4828         {
4829           tree packed_args = NULL_TREE;
4830           int idx, len = 1;
4831
4832           if (ARGUMENT_PACK_P (targ))
4833             {
4834               /* Look inside the argument pack.  */
4835               packed_args = ARGUMENT_PACK_ARGS (targ);
4836               len = TREE_VEC_LENGTH (packed_args);
4837             }
4838
4839           for (idx = 0; idx < len; ++idx)
4840             {
4841               tree targ_parms = NULL_TREE;
4842
4843               if (packed_args)
4844                 /* Extract the next argument from the argument
4845                    pack.  */
4846                 targ = TREE_VEC_ELT (packed_args, idx);
4847
4848               if (PACK_EXPANSION_P (targ))
4849                 /* Look at the pattern of the pack expansion.  */
4850                 targ = PACK_EXPANSION_PATTERN (targ);
4851
4852               /* Extract the template parameters from the template
4853                  argument.  */
4854               if (TREE_CODE (targ) == TEMPLATE_DECL)
4855                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4856               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4857                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4858
4859               /* Verify that we can coerce the template template
4860                  parameters from the template argument to the template
4861                  parameter.  This requires an exact match.  */
4862               if (targ_parms
4863                   && !coerce_template_template_parms
4864                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4865                         targ_parms,
4866                         tf_none,
4867                         tparm,
4868                         targs))
4869                 {
4870                   ret = false;
4871                   goto out;
4872                 }
4873             }
4874         }
4875     }
4876
4877  out:
4878
4879   --processing_template_decl;
4880   return ret;
4881 }
4882
4883 /* Convert the indicated template ARG as necessary to match the
4884    indicated template PARM.  Returns the converted ARG, or
4885    error_mark_node if the conversion was unsuccessful.  Error and
4886    warning messages are issued under control of COMPLAIN.  This
4887    conversion is for the Ith parameter in the parameter list.  ARGS is
4888    the full set of template arguments deduced so far.  */
4889
4890 static tree
4891 convert_template_argument (tree parm,
4892                            tree arg,
4893                            tree args,
4894                            tsubst_flags_t complain,
4895                            int i,
4896                            tree in_decl)
4897 {
4898   tree orig_arg;
4899   tree val;
4900   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4901
4902   if (TREE_CODE (arg) == TREE_LIST
4903       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4904     {
4905       /* The template argument was the name of some
4906          member function.  That's usually
4907          invalid, but static members are OK.  In any
4908          case, grab the underlying fields/functions
4909          and issue an error later if required.  */
4910       orig_arg = TREE_VALUE (arg);
4911       TREE_TYPE (arg) = unknown_type_node;
4912     }
4913
4914   orig_arg = arg;
4915
4916   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4917   requires_type = (TREE_CODE (parm) == TYPE_DECL
4918                    || requires_tmpl_type);
4919
4920   /* When determining whether an argument pack expansion is a template,
4921      look at the pattern.  */
4922   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4923     arg = PACK_EXPANSION_PATTERN (arg);
4924
4925   is_tmpl_type = 
4926     ((TREE_CODE (arg) == TEMPLATE_DECL
4927       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4928      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4929      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4930
4931   if (is_tmpl_type
4932       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4933           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4934     arg = TYPE_STUB_DECL (arg);
4935
4936   is_type = TYPE_P (arg) || is_tmpl_type;
4937
4938   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4939       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4940     {
4941       permerror ("to refer to a type member of a template parameter, "
4942                  "use %<typename %E%>", orig_arg);
4943
4944       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4945                                      TREE_OPERAND (arg, 1),
4946                                      typename_type,
4947                                      complain & tf_error);
4948       arg = orig_arg;
4949       is_type = 1;
4950     }
4951   if (is_type != requires_type)
4952     {
4953       if (in_decl)
4954         {
4955           if (complain & tf_error)
4956             {
4957               error ("type/value mismatch at argument %d in template "
4958                      "parameter list for %qD",
4959                      i + 1, in_decl);
4960               if (is_type)
4961                 error ("  expected a constant of type %qT, got %qT",
4962                        TREE_TYPE (parm),
4963                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4964               else if (requires_tmpl_type)
4965                 error ("  expected a class template, got %qE", orig_arg);
4966               else
4967                 error ("  expected a type, got %qE", orig_arg);
4968             }
4969         }
4970       return error_mark_node;
4971     }
4972   if (is_tmpl_type ^ requires_tmpl_type)
4973     {
4974       if (in_decl && (complain & tf_error))
4975         {
4976           error ("type/value mismatch at argument %d in template "
4977                  "parameter list for %qD",
4978                  i + 1, in_decl);
4979           if (is_tmpl_type)
4980             error ("  expected a type, got %qT", DECL_NAME (arg));
4981           else
4982             error ("  expected a class template, got %qT", orig_arg);
4983         }
4984       return error_mark_node;
4985     }
4986
4987   if (is_type)
4988     {
4989       if (requires_tmpl_type)
4990         {
4991           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4992             /* The number of argument required is not known yet.
4993                Just accept it for now.  */
4994             val = TREE_TYPE (arg);
4995           else
4996             {
4997               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4998               tree argparm;
4999
5000               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5001
5002               if (coerce_template_template_parms (parmparm, argparm,
5003                                                   complain, in_decl,
5004                                                   args))
5005                 {
5006                   val = orig_arg;
5007
5008                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5009                      TEMPLATE_DECL.  */
5010                   if (val != error_mark_node)
5011                     {
5012                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5013                         val = TREE_TYPE (val);
5014                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5015                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5016                         {
5017                           val = TREE_TYPE (arg);
5018                           val = make_pack_expansion (val);
5019                         }
5020                     }
5021                 }
5022               else
5023                 {
5024                   if (in_decl && (complain & tf_error))
5025                     {
5026                       error ("type/value mismatch at argument %d in "
5027                              "template parameter list for %qD",
5028                              i + 1, in_decl);
5029                       error ("  expected a template of type %qD, got %qD",
5030                              parm, orig_arg);
5031                     }
5032
5033                   val = error_mark_node;
5034                 }
5035             }
5036         }
5037       else
5038         val = orig_arg;
5039       /* We only form one instance of each template specialization.
5040          Therefore, if we use a non-canonical variant (i.e., a
5041          typedef), any future messages referring to the type will use
5042          the typedef, which is confusing if those future uses do not
5043          themselves also use the typedef.  */
5044       if (TYPE_P (val))
5045         val = canonical_type_variant (val);
5046     }
5047   else
5048     {
5049       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5050
5051       if (invalid_nontype_parm_type_p (t, complain))
5052         return error_mark_node;
5053
5054       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5055         /* We used to call digest_init here.  However, digest_init
5056            will report errors, which we don't want when complain
5057            is zero.  More importantly, digest_init will try too
5058            hard to convert things: for example, `0' should not be
5059            converted to pointer type at this point according to
5060            the standard.  Accepting this is not merely an
5061            extension, since deciding whether or not these
5062            conversions can occur is part of determining which
5063            function template to call, or whether a given explicit
5064            argument specification is valid.  */
5065         val = convert_nontype_argument (t, orig_arg);
5066       else
5067         val = orig_arg;
5068
5069       if (val == NULL_TREE)
5070         val = error_mark_node;
5071       else if (val == error_mark_node && (complain & tf_error))
5072         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5073     }
5074
5075   return val;
5076 }
5077
5078 /* Coerces the remaining template arguments in INNER_ARGS (from
5079    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5080    Returns the coerced argument pack. PARM_IDX is the position of this
5081    parameter in the template parameter list. ARGS is the original
5082    template argument list.  */
5083 static tree
5084 coerce_template_parameter_pack (tree parms,
5085                                 int parm_idx,
5086                                 tree args,
5087                                 tree inner_args,
5088                                 int arg_idx,
5089                                 tree new_args,
5090                                 int* lost,
5091                                 tree in_decl,
5092                                 tsubst_flags_t complain)
5093 {
5094   tree parm = TREE_VEC_ELT (parms, parm_idx);
5095   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5096   tree packed_args;
5097   tree argument_pack;
5098   tree packed_types = NULL_TREE;
5099
5100   if (arg_idx > nargs)
5101     arg_idx = nargs;
5102
5103   packed_args = make_tree_vec (nargs - arg_idx);
5104
5105   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5106       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5107     {
5108       /* When the template parameter is a non-type template
5109          parameter pack whose type uses parameter packs, we need
5110          to look at each of the template arguments
5111          separately. Build a vector of the types for these
5112          non-type template parameters in PACKED_TYPES.  */
5113       tree expansion 
5114         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5115       packed_types = tsubst_pack_expansion (expansion, args,
5116                                             complain, in_decl);
5117
5118       if (packed_types == error_mark_node)
5119         return error_mark_node;
5120
5121       /* Check that we have the right number of arguments.  */
5122       if (arg_idx < nargs
5123           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5124           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5125         {
5126           int needed_parms 
5127             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5128           error ("wrong number of template arguments (%d, should be %d)",
5129                  nargs, needed_parms);
5130           return error_mark_node;
5131         }
5132
5133       /* If we aren't able to check the actual arguments now
5134          (because they haven't been expanded yet), we can at least
5135          verify that all of the types used for the non-type
5136          template parameter pack are, in fact, valid for non-type
5137          template parameters.  */
5138       if (arg_idx < nargs 
5139           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5140         {
5141           int j, len = TREE_VEC_LENGTH (packed_types);
5142           for (j = 0; j < len; ++j)
5143             {
5144               tree t = TREE_VEC_ELT (packed_types, j);
5145               if (invalid_nontype_parm_type_p (t, complain))
5146                 return error_mark_node;
5147             }
5148         }
5149     }
5150
5151   /* Convert the remaining arguments, which will be a part of the
5152      parameter pack "parm".  */
5153   for (; arg_idx < nargs; ++arg_idx)
5154     {
5155       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5156       tree actual_parm = TREE_VALUE (parm);
5157
5158       if (packed_types && !PACK_EXPANSION_P (arg))
5159         {
5160           /* When we have a vector of types (corresponding to the
5161              non-type template parameter pack that uses parameter
5162              packs in its type, as mention above), and the
5163              argument is not an expansion (which expands to a
5164              currently unknown number of arguments), clone the
5165              parm and give it the next type in PACKED_TYPES.  */
5166           actual_parm = copy_node (actual_parm);
5167           TREE_TYPE (actual_parm) = 
5168             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5169         }
5170
5171       if (arg != error_mark_node)
5172         arg = convert_template_argument (actual_parm, 
5173                                          arg, new_args, complain, parm_idx,
5174                                          in_decl);
5175       if (arg == error_mark_node)
5176         (*lost)++;
5177       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5178     }
5179
5180   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5181       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5182     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5183   else
5184     {
5185       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5186       TREE_TYPE (argument_pack) 
5187         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5188       TREE_CONSTANT (argument_pack) = 1;
5189     }
5190
5191   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5192   return argument_pack;
5193 }
5194
5195 /* Convert all template arguments to their appropriate types, and
5196    return a vector containing the innermost resulting template
5197    arguments.  If any error occurs, return error_mark_node. Error and
5198    warning messages are issued under control of COMPLAIN.
5199
5200    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5201    for arguments not specified in ARGS.  Otherwise, if
5202    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5203    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5204    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5205    ARGS.  */
5206
5207 static tree
5208 coerce_template_parms (tree parms,
5209                        tree args,
5210                        tree in_decl,
5211                        tsubst_flags_t complain,
5212                        bool require_all_args,
5213                        bool use_default_args)
5214 {
5215   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5216   tree inner_args;
5217   tree new_args;
5218   tree new_inner_args;
5219   bool saved_skip_evaluation;
5220
5221   /* When used as a boolean value, indicates whether this is a
5222      variadic template parameter list. Since it's an int, we can also
5223      subtract it from nparms to get the number of non-variadic
5224      parameters.  */
5225   int variadic_p = 0;
5226
5227   inner_args 
5228     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5229
5230   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5231   nparms = TREE_VEC_LENGTH (parms);
5232
5233   /* Determine if there are any parameter packs.  */
5234   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5235     {
5236       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5237       if (template_parameter_pack_p (tparm))
5238         {
5239           variadic_p = 1;
5240           break;
5241         }
5242     }
5243
5244   if ((nargs > nparms - variadic_p && !variadic_p)
5245       || (nargs < nparms - variadic_p
5246           && require_all_args
5247           && (!use_default_args
5248               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5249                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5250     {
5251       if (complain & tf_error)
5252         {
5253           const char *or_more = "";
5254           if (variadic_p)
5255             {
5256               or_more = " or more";
5257               --nparms;
5258             }
5259
5260           error ("wrong number of template arguments (%d, should be %d%s)",
5261                  nargs, nparms, or_more);
5262
5263           if (in_decl)
5264             error ("provided for %q+D", in_decl);
5265         }
5266
5267       return error_mark_node;
5268     }
5269
5270   /* We need to evaluate the template arguments, even though this
5271      template-id may be nested within a "sizeof".  */
5272   saved_skip_evaluation = skip_evaluation;
5273   skip_evaluation = false;
5274   new_inner_args = make_tree_vec (nparms);
5275   new_args = add_outermost_template_args (args, new_inner_args);
5276   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5277     {
5278       tree arg;
5279       tree parm;
5280
5281       /* Get the Ith template parameter.  */
5282       parm = TREE_VEC_ELT (parms, parm_idx);
5283  
5284       if (parm == error_mark_node)
5285       {
5286         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5287         continue;
5288       }
5289
5290       /* Calculate the next argument.  */
5291       if (template_parameter_pack_p (TREE_VALUE (parm)))
5292         {
5293           /* All remaining arguments will be placed in the
5294              template parameter pack PARM.  */
5295           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5296                                                 inner_args, arg_idx,
5297                                                 new_args, &lost,
5298                                                 in_decl, complain);
5299           
5300           /* Store this argument.  */
5301           if (arg == error_mark_node)
5302             lost++;
5303           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5304
5305           /* We are done with all of the arguments.  */
5306           arg_idx = nargs;
5307
5308           continue;
5309         }
5310       else if (arg_idx < nargs)
5311         {
5312           arg = TREE_VEC_ELT (inner_args, arg_idx);
5313
5314           if (arg && PACK_EXPANSION_P (arg))
5315             {
5316               if (complain & tf_error)
5317                 {
5318                   /* If ARG is a pack expansion, but PARM is not a
5319                      template parameter pack (if it were, we would have
5320                      handled it above), we're trying to expand into a
5321                      fixed-length argument list.  */
5322                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5323                     error ("cannot expand %<%E%> into a fixed-length "
5324                            "argument list", arg);
5325                   else
5326                     error ("cannot expand %<%T%> into a fixed-length "
5327                            "argument list", arg);
5328                 }
5329               return error_mark_node;
5330             }
5331         }
5332       else if (require_all_args)
5333         /* There must be a default arg in this case.  */
5334         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5335                                    complain, in_decl);
5336       else
5337         break;
5338
5339       if (arg == error_mark_node)
5340         {
5341           if (complain & tf_error)
5342             error ("template argument %d is invalid", arg_idx + 1);
5343         }
5344       else if (!arg)
5345         /* This only occurs if there was an error in the template
5346            parameter list itself (which we would already have
5347            reported) that we are trying to recover from, e.g., a class
5348            template with a parameter list such as
5349            template<typename..., typename>.  */
5350         return error_mark_node;
5351       else
5352         arg = convert_template_argument (TREE_VALUE (parm),
5353                                          arg, new_args, complain, 
5354                                          parm_idx, in_decl);
5355
5356       if (arg == error_mark_node)
5357         lost++;
5358       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5359     }
5360   skip_evaluation = saved_skip_evaluation;
5361
5362   if (lost)
5363     return error_mark_node;
5364
5365   return new_inner_args;
5366 }
5367
5368 /* Returns 1 if template args OT and NT are equivalent.  */
5369
5370 static int
5371 template_args_equal (tree ot, tree nt)
5372 {
5373   if (nt == ot)
5374     return 1;
5375
5376   if (TREE_CODE (nt) == TREE_VEC)
5377     /* For member templates */
5378     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5379   else if (PACK_EXPANSION_P (ot))
5380     return PACK_EXPANSION_P (nt) 
5381       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5382                               PACK_EXPANSION_PATTERN (nt));
5383   else if (TYPE_P (nt))
5384     return TYPE_P (ot) && same_type_p (ot, nt);
5385   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5386     return 0;
5387   else
5388     return cp_tree_equal (ot, nt);
5389 }
5390
5391 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5392    of template arguments.  Returns 0 otherwise.  */
5393
5394 int
5395 comp_template_args (tree oldargs, tree newargs)
5396 {
5397   int i;
5398
5399   oldargs = expand_template_argument_pack (oldargs);
5400   newargs = expand_template_argument_pack (newargs);
5401
5402   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5403     return 0;
5404
5405   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5406     {
5407       tree nt = TREE_VEC_ELT (newargs, i);
5408       tree ot = TREE_VEC_ELT (oldargs, i);
5409
5410       if (! template_args_equal (ot, nt))
5411         return 0;
5412     }
5413   return 1;
5414 }
5415
5416 static void
5417 add_pending_template (tree d)
5418 {
5419   tree ti = (TYPE_P (d)
5420              ? CLASSTYPE_TEMPLATE_INFO (d)
5421              : DECL_TEMPLATE_INFO (d));
5422   struct pending_template *pt;
5423   int level;
5424
5425   if (TI_PENDING_TEMPLATE_FLAG (ti))
5426     return;
5427
5428   /* We are called both from instantiate_decl, where we've already had a
5429      tinst_level pushed, and instantiate_template, where we haven't.
5430      Compensate.  */
5431   level = !current_tinst_level || current_tinst_level->decl != d;
5432
5433   if (level)
5434     push_tinst_level (d);
5435
5436   pt = GGC_NEW (struct pending_template);
5437   pt->next = NULL;
5438   pt->tinst = current_tinst_level;
5439   if (last_pending_template)
5440     last_pending_template->next = pt;
5441   else
5442     pending_templates = pt;
5443
5444   last_pending_template = pt;
5445
5446   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5447
5448   if (level)
5449     pop_tinst_level ();
5450 }
5451
5452
5453 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5454    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5455    documentation for TEMPLATE_ID_EXPR.  */
5456
5457 tree
5458 lookup_template_function (tree fns, tree arglist)
5459 {
5460   tree type;
5461
5462   if (fns == error_mark_node || arglist == error_mark_node)
5463     return error_mark_node;
5464
5465   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5466   gcc_assert (fns && (is_overloaded_fn (fns)
5467                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5468
5469   if (BASELINK_P (fns))
5470     {
5471       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5472                                          unknown_type_node,
5473                                          BASELINK_FUNCTIONS (fns),
5474                                          arglist);
5475       return fns;
5476     }
5477
5478   type = TREE_TYPE (fns);
5479   if (TREE_CODE (fns) == OVERLOAD || !type)
5480     type = unknown_type_node;
5481
5482   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5483 }
5484
5485 /* Within the scope of a template class S<T>, the name S gets bound
5486    (in build_self_reference) to a TYPE_DECL for the class, not a
5487    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5488    or one of its enclosing classes, and that type is a template,
5489    return the associated TEMPLATE_DECL.  Otherwise, the original
5490    DECL is returned.  */
5491
5492 tree
5493 maybe_get_template_decl_from_type_decl (tree decl)
5494 {
5495   return (decl != NULL_TREE
5496           && TREE_CODE (decl) == TYPE_DECL
5497           && DECL_ARTIFICIAL (decl)
5498           && CLASS_TYPE_P (TREE_TYPE (decl))
5499           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5500     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5501 }
5502
5503 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5504    parameters, find the desired type.
5505
5506    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5507
5508    IN_DECL, if non-NULL, is the template declaration we are trying to
5509    instantiate.
5510
5511    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5512    the class we are looking up.
5513
5514    Issue error and warning messages under control of COMPLAIN.
5515
5516    If the template class is really a local class in a template
5517    function, then the FUNCTION_CONTEXT is the function in which it is
5518    being instantiated.
5519
5520    ??? Note that this function is currently called *twice* for each
5521    template-id: the first time from the parser, while creating the
5522    incomplete type (finish_template_type), and the second type during the
5523    real instantiation (instantiate_template_class). This is surely something
5524    that we want to avoid. It also causes some problems with argument
5525    coercion (see convert_nontype_argument for more information on this).  */
5526
5527 tree
5528 lookup_template_class (tree d1,
5529                        tree arglist,
5530                        tree in_decl,
5531                        tree context,
5532                        int entering_scope,
5533                        tsubst_flags_t complain)
5534 {
5535   tree templ = NULL_TREE, parmlist;
5536   tree t;
5537
5538   timevar_push (TV_NAME_LOOKUP);
5539
5540   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5541     {
5542       tree value = innermost_non_namespace_value (d1);
5543       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5544         templ = value;
5545       else
5546         {
5547           if (context)
5548             push_decl_namespace (context);
5549           templ = lookup_name (d1);
5550           templ = maybe_get_template_decl_from_type_decl (templ);
5551           if (context)
5552             pop_decl_namespace ();
5553         }
5554       if (templ)
5555         context = DECL_CONTEXT (templ);
5556     }
5557   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5558     {
5559       tree type = TREE_TYPE (d1);
5560
5561       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5562          an implicit typename for the second A.  Deal with it.  */
5563       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5564         type = TREE_TYPE (type);
5565
5566       if (CLASSTYPE_TEMPLATE_INFO (type))
5567         {
5568           templ = CLASSTYPE_TI_TEMPLATE (type);
5569           d1 = DECL_NAME (templ);
5570         }
5571     }
5572   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5573            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5574     {
5575       templ = TYPE_TI_TEMPLATE (d1);
5576       d1 = DECL_NAME (templ);
5577     }
5578   else if (TREE_CODE (d1) == TEMPLATE_DECL
5579            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5580     {
5581       templ = d1;
5582       d1 = DECL_NAME (templ);
5583       context = DECL_CONTEXT (templ);
5584     }
5585
5586   /* Issue an error message if we didn't find a template.  */
5587   if (! templ)
5588     {
5589       if (complain & tf_error)
5590         error ("%qT is not a template", d1);
5591       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5592     }
5593
5594   if (TREE_CODE (templ) != TEMPLATE_DECL
5595          /* Make sure it's a user visible template, if it was named by
5596             the user.  */
5597       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
5598           && !PRIMARY_TEMPLATE_P (templ)))
5599     {
5600       if (complain & tf_error)
5601         {
5602           error ("non-template type %qT used as a template", d1);
5603           if (in_decl)
5604             error ("for template declaration %q+D", in_decl);
5605         }
5606       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5607     }
5608
5609   complain &= ~tf_user;
5610
5611   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
5612     {
5613       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5614          template arguments */
5615
5616       tree parm;
5617       tree arglist2;
5618       tree outer;
5619
5620       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
5621
5622       /* Consider an example where a template template parameter declared as
5623
5624            template <class T, class U = std::allocator<T> > class TT
5625
5626          The template parameter level of T and U are one level larger than
5627          of TT.  To proper process the default argument of U, say when an
5628          instantiation `TT<int>' is seen, we need to build the full
5629          arguments containing {int} as the innermost level.  Outer levels,
5630          available when not appearing as default template argument, can be
5631          obtained from the arguments of the enclosing template.
5632
5633          Suppose that TT is later substituted with std::vector.  The above
5634          instantiation is `TT<int, std::allocator<T> >' with TT at
5635          level 1, and T at level 2, while the template arguments at level 1
5636          becomes {std::vector} and the inner level 2 is {int}.  */
5637
5638       outer = DECL_CONTEXT (templ);
5639       if (outer)
5640         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5641       else if (current_template_parms)
5642         /* This is an argument of the current template, so we haven't set
5643            DECL_CONTEXT yet.  */
5644         outer = current_template_args ();
5645
5646       if (outer)
5647         arglist = add_to_template_args (outer, arglist);
5648
5649       arglist2 = coerce_template_parms (parmlist, arglist, templ,
5650                                         complain,
5651                                         /*require_all_args=*/true,
5652                                         /*use_default_args=*/true);
5653       if (arglist2 == error_mark_node
5654           || (!uses_template_parms (arglist2)
5655               && check_instantiated_args (templ, arglist2, complain)))
5656         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5657
5658       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
5659       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5660     }
5661   else
5662     {
5663       tree template_type = TREE_TYPE (templ);
5664       tree gen_tmpl;
5665       tree type_decl;
5666       tree found = NULL_TREE;
5667       int arg_depth;
5668       int parm_depth;
5669       int is_partial_instantiation;
5670
5671       gen_tmpl = most_general_template (templ);
5672       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5673       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5674       arg_depth = TMPL_ARGS_DEPTH (arglist);
5675
5676       if (arg_depth == 1 && parm_depth > 1)
5677         {
5678           /* We've been given an incomplete set of template arguments.
5679              For example, given:
5680
5681                template <class T> struct S1 {
5682                  template <class U> struct S2 {};
5683                  template <class U> struct S2<U*> {};
5684                 };
5685
5686              we will be called with an ARGLIST of `U*', but the
5687              TEMPLATE will be `template <class T> template
5688              <class U> struct S1<T>::S2'.  We must fill in the missing
5689              arguments.  */
5690           arglist
5691             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
5692                                            arglist);
5693           arg_depth = TMPL_ARGS_DEPTH (arglist);
5694         }
5695
5696       /* Now we should have enough arguments.  */
5697       gcc_assert (parm_depth == arg_depth);
5698
5699       /* From here on, we're only interested in the most general
5700          template.  */
5701       templ = gen_tmpl;
5702
5703       /* Calculate the BOUND_ARGS.  These will be the args that are
5704          actually tsubst'd into the definition to create the
5705          instantiation.  */
5706       if (parm_depth > 1)
5707         {
5708           /* We have multiple levels of arguments to coerce, at once.  */
5709           int i;
5710           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5711
5712           tree bound_args = make_tree_vec (parm_depth);
5713
5714           for (i = saved_depth,
5715                  t = DECL_TEMPLATE_PARMS (templ);
5716                i > 0 && t != NULL_TREE;
5717                --i, t = TREE_CHAIN (t))
5718             {
5719               tree a = coerce_template_parms (TREE_VALUE (t),
5720                                               arglist, templ,
5721                                               complain,
5722                                               /*require_all_args=*/true,
5723                                               /*use_default_args=*/true);
5724
5725               /* Don't process further if one of the levels fails.  */
5726               if (a == error_mark_node)
5727                 {
5728                   /* Restore the ARGLIST to its full size.  */
5729                   TREE_VEC_LENGTH (arglist) = saved_depth;
5730                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5731                 }
5732
5733               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5734
5735               /* We temporarily reduce the length of the ARGLIST so
5736                  that coerce_template_parms will see only the arguments
5737                  corresponding to the template parameters it is
5738                  examining.  */
5739               TREE_VEC_LENGTH (arglist)--;
5740             }
5741
5742           /* Restore the ARGLIST to its full size.  */
5743           TREE_VEC_LENGTH (arglist) = saved_depth;
5744
5745           arglist = bound_args;
5746         }
5747       else
5748         arglist
5749           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5750                                    INNERMOST_TEMPLATE_ARGS (arglist),
5751                                    templ,
5752                                    complain,
5753                                    /*require_all_args=*/true,
5754                                    /*use_default_args=*/true);
5755
5756       if (arglist == error_mark_node)
5757         /* We were unable to bind the arguments.  */
5758         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5759
5760       /* In the scope of a template class, explicit references to the
5761          template class refer to the type of the template, not any
5762          instantiation of it.  For example, in:
5763
5764            template <class T> class C { void f(C<T>); }
5765
5766          the `C<T>' is just the same as `C'.  Outside of the
5767          class, however, such a reference is an instantiation.  */
5768       if (comp_template_args (TYPE_TI_ARGS (template_type),
5769                               arglist))
5770         {
5771           found = template_type;
5772
5773           if (!entering_scope && PRIMARY_TEMPLATE_P (templ))
5774             {
5775               tree ctx;
5776
5777               for (ctx = current_class_type;
5778                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5779                    ctx = (TYPE_P (ctx)
5780                           ? TYPE_CONTEXT (ctx)
5781                           : DECL_CONTEXT (ctx)))
5782                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5783                   goto found_ctx;
5784
5785               /* We're not in the scope of the class, so the
5786                  TEMPLATE_TYPE is not the type we want after all.  */
5787               found = NULL_TREE;
5788             found_ctx:;
5789             }
5790         }
5791       if (found)
5792         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5793
5794       /* If we already have this specialization, return it.  */
5795       found = retrieve_specialization (templ, arglist,
5796                                        /*class_specializations_p=*/false);
5797       if (found)
5798         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5799
5800       /* This type is a "partial instantiation" if any of the template
5801          arguments still involve template parameters.  Note that we set
5802          IS_PARTIAL_INSTANTIATION for partial specializations as
5803          well.  */
5804       is_partial_instantiation = uses_template_parms (arglist);
5805
5806       /* If the deduced arguments are invalid, then the binding
5807          failed.  */
5808       if (!is_partial_instantiation
5809           && check_instantiated_args (templ,
5810                                       INNERMOST_TEMPLATE_ARGS (arglist),
5811                                       complain))
5812         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5813
5814       if (!is_partial_instantiation
5815           && !PRIMARY_TEMPLATE_P (templ)
5816           && TREE_CODE (CP_DECL_CONTEXT (templ)) == NAMESPACE_DECL)
5817         {
5818           found = xref_tag_from_type (TREE_TYPE (templ),
5819                                       DECL_NAME (templ),
5820                                       /*tag_scope=*/ts_global);
5821           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5822         }
5823
5824       context = tsubst (DECL_CONTEXT (templ), arglist,
5825                         complain, in_decl);
5826       if (!context)
5827         context = global_namespace;
5828
5829       /* Create the type.  */
5830       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5831         {
5832           if (!is_partial_instantiation)
5833             {
5834               set_current_access_from_decl (TYPE_NAME (template_type));
5835               t = start_enum (TYPE_IDENTIFIER (template_type));
5836             }
5837           else
5838             /* We don't want to call start_enum for this type, since
5839                the values for the enumeration constants may involve
5840                template parameters.  And, no one should be interested
5841                in the enumeration constants for such a type.  */
5842             t = make_node (ENUMERAL_TYPE);
5843         }
5844       else
5845         {
5846           t = make_class_type (TREE_CODE (template_type));
5847           CLASSTYPE_DECLARED_CLASS (t)
5848             = CLASSTYPE_DECLARED_CLASS (template_type);
5849           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5850           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5851
5852           /* A local class.  Make sure the decl gets registered properly.  */
5853           if (context == current_function_decl)
5854             pushtag (DECL_NAME (templ), t, /*tag_scope=*/ts_current);
5855
5856           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5857             /* This instantiation is another name for the primary
5858                template type. Set the TYPE_CANONICAL field
5859                appropriately. */
5860             TYPE_CANONICAL (t) = template_type;
5861           else if (any_template_arguments_need_structural_equality_p (arglist))
5862             /* Some of the template arguments require structural
5863                equality testing, so this template class requires
5864                structural equality testing. */
5865             SET_TYPE_STRUCTURAL_EQUALITY (t);
5866         }
5867
5868       /* If we called start_enum or pushtag above, this information
5869          will already be set up.  */
5870       if (!TYPE_NAME (t))
5871         {
5872           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5873
5874           type_decl = create_implicit_typedef (DECL_NAME (templ), t);
5875           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5876           TYPE_STUB_DECL (t) = type_decl;
5877           DECL_SOURCE_LOCATION (type_decl)
5878             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5879         }
5880       else
5881         type_decl = TYPE_NAME (t);
5882
5883       TREE_PRIVATE (type_decl)
5884         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5885       TREE_PROTECTED (type_decl)
5886         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5887       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5888         {
5889           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5890           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5891         }
5892
5893       /* Set up the template information.  We have to figure out which
5894          template is the immediate parent if this is a full
5895          instantiation.  */
5896       if (parm_depth == 1 || is_partial_instantiation
5897           || !PRIMARY_TEMPLATE_P (templ))
5898         /* This case is easy; there are no member templates involved.  */
5899         found = templ;
5900       else
5901         {
5902           /* This is a full instantiation of a member template.  Look
5903              for a partial instantiation of which this is an instance.  */
5904
5905           for (found = DECL_TEMPLATE_INSTANTIATIONS (templ);
5906                found; found = TREE_CHAIN (found))
5907             {
5908               int success;
5909               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5910
5911               /* We only want partial instantiations, here, not
5912                  specializations or full instantiations.  */
5913               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5914                   || !uses_template_parms (TREE_VALUE (found)))
5915                 continue;
5916
5917               /* Temporarily reduce by one the number of levels in the
5918                  ARGLIST and in FOUND so as to avoid comparing the
5919                  last set of arguments.  */
5920               TREE_VEC_LENGTH (arglist)--;
5921               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5922
5923               /* See if the arguments match.  If they do, then TMPL is
5924                  the partial instantiation we want.  */
5925               success = comp_template_args (TREE_PURPOSE (found), arglist);
5926
5927               /* Restore the argument vectors to their full size.  */
5928               TREE_VEC_LENGTH (arglist)++;
5929               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5930
5931               if (success)
5932                 {
5933                   found = tmpl;
5934                   break;
5935                 }
5936             }
5937
5938           if (!found)
5939             {
5940               /* There was no partial instantiation. This happens
5941                  where C<T> is a member template of A<T> and it's used
5942                  in something like
5943
5944                   template <typename T> struct B { A<T>::C<int> m; };
5945                   B<float>;
5946
5947                  Create the partial instantiation.
5948                */
5949               TREE_VEC_LENGTH (arglist)--;
5950               found = tsubst (templ, arglist, complain, NULL_TREE);
5951               TREE_VEC_LENGTH (arglist)++;
5952             }
5953         }
5954
5955       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5956       DECL_TEMPLATE_INSTANTIATIONS (templ)
5957         = tree_cons (arglist, t,
5958                      DECL_TEMPLATE_INSTANTIATIONS (templ));
5959
5960       if (TREE_CODE (t) == ENUMERAL_TYPE
5961           && !is_partial_instantiation)
5962         /* Now that the type has been registered on the instantiations
5963            list, we set up the enumerators.  Because the enumeration
5964            constants may involve the enumeration type itself, we make
5965            sure to register the type first, and then create the
5966            constants.  That way, doing tsubst_expr for the enumeration
5967            constants won't result in recursive calls here; we'll find
5968            the instantiation and exit above.  */
5969         tsubst_enum (template_type, t, arglist);
5970
5971       if (is_partial_instantiation)
5972         /* If the type makes use of template parameters, the
5973            code that generates debugging information will crash.  */
5974         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5975
5976       /* Possibly limit visibility based on template args.  */
5977       TREE_PUBLIC (type_decl) = 1;
5978       determine_visibility (type_decl);
5979
5980       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5981     }
5982   timevar_pop (TV_NAME_LOOKUP);
5983 }
5984 \f
5985 struct pair_fn_data
5986 {
5987   tree_fn_t fn;
5988   void *data;
5989   /* True when we should also visit template parameters that occur in
5990      non-deduced contexts.  */
5991   bool include_nondeduced_p;
5992   struct pointer_set_t *visited;
5993 };
5994
5995 /* Called from for_each_template_parm via walk_tree.  */
5996
5997 static tree
5998 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5999 {
6000   tree t = *tp;
6001   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6002   tree_fn_t fn = pfd->fn;
6003   void *data = pfd->data;
6004
6005   if (TYPE_P (t)
6006       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6007       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6008                                  pfd->include_nondeduced_p))
6009     return error_mark_node;
6010
6011   switch (TREE_CODE (t))
6012     {
6013     case RECORD_TYPE:
6014       if (TYPE_PTRMEMFUNC_P (t))
6015         break;
6016       /* Fall through.  */
6017
6018     case UNION_TYPE:
6019     case ENUMERAL_TYPE:
6020       if (!TYPE_TEMPLATE_INFO (t))
6021         *walk_subtrees = 0;
6022       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6023                                        fn, data, pfd->visited, 
6024                                        pfd->include_nondeduced_p))
6025         return error_mark_node;
6026       break;
6027
6028     case INTEGER_TYPE:
6029       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6030                                   fn, data, pfd->visited, 
6031                                   pfd->include_nondeduced_p)
6032           || for_each_template_parm (TYPE_MAX_VALUE (t),
6033                                      fn, data, pfd->visited,
6034                                      pfd->include_nondeduced_p))
6035         return error_mark_node;
6036       break;
6037
6038     case METHOD_TYPE:
6039       /* Since we're not going to walk subtrees, we have to do this
6040          explicitly here.  */
6041       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6042                                   pfd->visited, pfd->include_nondeduced_p))
6043         return error_mark_node;
6044       /* Fall through.  */
6045
6046     case FUNCTION_TYPE:
6047       /* Check the return type.  */
6048       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6049                                   pfd->include_nondeduced_p))
6050         return error_mark_node;
6051
6052       /* Check the parameter types.  Since default arguments are not
6053          instantiated until they are needed, the TYPE_ARG_TYPES may
6054          contain expressions that involve template parameters.  But,
6055          no-one should be looking at them yet.  And, once they're
6056          instantiated, they don't contain template parameters, so
6057          there's no point in looking at them then, either.  */
6058       {
6059         tree parm;
6060
6061         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6062           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6063                                       pfd->visited, pfd->include_nondeduced_p))
6064             return error_mark_node;
6065
6066         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6067            want walk_tree walking into them itself.  */
6068         *walk_subtrees = 0;
6069       }
6070       break;
6071
6072     case TYPEOF_TYPE:
6073       if (pfd->include_nondeduced_p
6074           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6075                                      pfd->visited, 
6076                                      pfd->include_nondeduced_p))
6077         return error_mark_node;
6078       break;
6079
6080     case FUNCTION_DECL:
6081     case VAR_DECL:
6082       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6083           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6084                                      pfd->visited, pfd->include_nondeduced_p))
6085         return error_mark_node;
6086       /* Fall through.  */
6087
6088     case PARM_DECL:
6089     case CONST_DECL:
6090       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6091           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6092                                      pfd->visited, pfd->include_nondeduced_p))
6093         return error_mark_node;
6094       if (DECL_CONTEXT (t)
6095           && pfd->include_nondeduced_p
6096           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6097                                      pfd->visited, pfd->include_nondeduced_p))
6098         return error_mark_node;
6099       break;
6100
6101     case BOUND_TEMPLATE_TEMPLATE_PARM:
6102       /* Record template parameters such as `T' inside `TT<T>'.  */
6103       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6104                                   pfd->include_nondeduced_p))
6105         return error_mark_node;
6106       /* Fall through.  */
6107
6108     case TEMPLATE_TEMPLATE_PARM:
6109     case TEMPLATE_TYPE_PARM:
6110     case TEMPLATE_PARM_INDEX:
6111       if (fn && (*fn)(t, data))
6112         return error_mark_node;
6113       else if (!fn)
6114         return error_mark_node;
6115       break;
6116
6117     case TEMPLATE_DECL:
6118       /* A template template parameter is encountered.  */
6119       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6120           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6121                                      pfd->include_nondeduced_p))
6122         return error_mark_node;
6123
6124       /* Already substituted template template parameter */
6125       *walk_subtrees = 0;
6126       break;
6127
6128     case TYPENAME_TYPE:
6129       if (!fn
6130           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6131                                      data, pfd->visited, 
6132                                      pfd->include_nondeduced_p))
6133         return error_mark_node;
6134       break;
6135
6136     case CONSTRUCTOR:
6137       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6138           && pfd->include_nondeduced_p
6139           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6140                                      (TREE_TYPE (t)), fn, data,
6141                                      pfd->visited, pfd->include_nondeduced_p))
6142         return error_mark_node;
6143       break;
6144
6145     case INDIRECT_REF:
6146     case COMPONENT_REF:
6147       /* If there's no type, then this thing must be some expression
6148          involving template parameters.  */
6149       if (!fn && !TREE_TYPE (t))
6150         return error_mark_node;
6151       break;
6152
6153     case MODOP_EXPR:
6154     case CAST_EXPR:
6155     case REINTERPRET_CAST_EXPR:
6156     case CONST_CAST_EXPR:
6157     case STATIC_CAST_EXPR:
6158     case DYNAMIC_CAST_EXPR:
6159     case ARROW_EXPR:
6160     case DOTSTAR_EXPR:
6161     case TYPEID_EXPR:
6162     case PSEUDO_DTOR_EXPR:
6163       if (!fn)
6164         return error_mark_node;
6165       break;
6166
6167     default:
6168       break;
6169     }
6170
6171   /* We didn't find any template parameters we liked.  */
6172   return NULL_TREE;
6173 }
6174
6175 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6176    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6177    call FN with the parameter and the DATA.
6178    If FN returns nonzero, the iteration is terminated, and
6179    for_each_template_parm returns 1.  Otherwise, the iteration
6180    continues.  If FN never returns a nonzero value, the value
6181    returned by for_each_template_parm is 0.  If FN is NULL, it is
6182    considered to be the function which always returns 1.
6183
6184    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6185    parameters that occur in non-deduced contexts.  When false, only
6186    visits those template parameters that can be deduced.  */
6187
6188 static int
6189 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6190                         struct pointer_set_t *visited,
6191                         bool include_nondeduced_p)
6192 {
6193   struct pair_fn_data pfd;
6194   int result;
6195
6196   /* Set up.  */
6197   pfd.fn = fn;
6198   pfd.data = data;
6199   pfd.include_nondeduced_p = include_nondeduced_p;
6200
6201   /* Walk the tree.  (Conceptually, we would like to walk without
6202      duplicates, but for_each_template_parm_r recursively calls
6203      for_each_template_parm, so we would need to reorganize a fair
6204      bit to use walk_tree_without_duplicates, so we keep our own
6205      visited list.)  */
6206   if (visited)
6207     pfd.visited = visited;
6208   else
6209     pfd.visited = pointer_set_create ();
6210   result = cp_walk_tree (&t,
6211                          for_each_template_parm_r,
6212                          &pfd,
6213                          pfd.visited) != NULL_TREE;
6214
6215   /* Clean up.  */
6216   if (!visited)
6217     {
6218       pointer_set_destroy (pfd.visited);
6219       pfd.visited = 0;
6220     }
6221
6222   return result;
6223 }
6224
6225 /* Returns true if T depends on any template parameter.  */
6226
6227 int
6228 uses_template_parms (tree t)
6229 {
6230   bool dependent_p;
6231   int saved_processing_template_decl;
6232
6233   saved_processing_template_decl = processing_template_decl;
6234   if (!saved_processing_template_decl)
6235     processing_template_decl = 1;
6236   if (TYPE_P (t))
6237     dependent_p = dependent_type_p (t);
6238   else if (TREE_CODE (t) == TREE_VEC)
6239     dependent_p = any_dependent_template_arguments_p (t);
6240   else if (TREE_CODE (t) == TREE_LIST)
6241     dependent_p = (uses_template_parms (TREE_VALUE (t))
6242                    || uses_template_parms (TREE_CHAIN (t)));
6243   else if (TREE_CODE (t) == TYPE_DECL)
6244     dependent_p = dependent_type_p (TREE_TYPE (t));
6245   else if (DECL_P (t)
6246            || EXPR_P (t)
6247            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6248            || TREE_CODE (t) == OVERLOAD
6249            || TREE_CODE (t) == BASELINK
6250            || TREE_CODE (t) == IDENTIFIER_NODE
6251            || TREE_CODE (t) == TRAIT_EXPR
6252            || CONSTANT_CLASS_P (t))
6253     dependent_p = (type_dependent_expression_p (t)
6254                    || value_dependent_expression_p (t));
6255   else
6256     {
6257       gcc_assert (t == error_mark_node);
6258       dependent_p = false;
6259     }
6260
6261   processing_template_decl = saved_processing_template_decl;
6262
6263   return dependent_p;
6264 }
6265
6266 /* Returns true if T depends on any template parameter with level LEVEL.  */
6267
6268 int
6269 uses_template_parms_level (tree t, int level)
6270 {
6271   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6272                                  /*include_nondeduced_p=*/true);
6273 }
6274
6275 static int tinst_depth;
6276 extern int max_tinst_depth;
6277 #ifdef GATHER_STATISTICS
6278 int depth_reached;
6279 #endif
6280 static int tinst_level_tick;
6281 static int last_template_error_tick;
6282
6283 /* We're starting to instantiate D; record the template instantiation context
6284    for diagnostics and to restore it later.  */
6285
6286 static int
6287 push_tinst_level (tree d)
6288 {
6289   struct tinst_level *new_level;
6290
6291   if (tinst_depth >= max_tinst_depth)
6292     {
6293       /* If the instantiation in question still has unbound template parms,
6294          we don't really care if we can't instantiate it, so just return.
6295          This happens with base instantiation for implicit `typename'.  */
6296       if (uses_template_parms (d))
6297         return 0;
6298
6299       last_template_error_tick = tinst_level_tick;
6300       error ("template instantiation depth exceeds maximum of %d (use "
6301              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6302              max_tinst_depth, d);
6303
6304       print_instantiation_context ();
6305
6306       return 0;
6307     }
6308
6309   new_level = GGC_NEW (struct tinst_level);
6310   new_level->decl = d;
6311   new_level->locus = input_location;
6312   new_level->in_system_header_p = in_system_header;
6313   new_level->next = current_tinst_level;
6314   current_tinst_level = new_level;
6315
6316   ++tinst_depth;
6317 #ifdef GATHER_STATISTICS
6318   if (tinst_depth > depth_reached)
6319     depth_reached = tinst_depth;
6320 #endif
6321
6322   ++tinst_level_tick;
6323   return 1;
6324 }
6325
6326 /* We're done instantiating this template; return to the instantiation
6327    context.  */
6328
6329 static void
6330 pop_tinst_level (void)
6331 {
6332   /* Restore the filename and line number stashed away when we started
6333      this instantiation.  */
6334   input_location = current_tinst_level->locus;
6335   current_tinst_level = current_tinst_level->next;
6336   --tinst_depth;
6337   ++tinst_level_tick;
6338 }
6339
6340 /* We're instantiating a deferred template; restore the template
6341    instantiation context in which the instantiation was requested, which
6342    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6343
6344 static tree
6345 reopen_tinst_level (struct tinst_level *level)
6346 {
6347   struct tinst_level *t;
6348
6349   tinst_depth = 0;
6350   for (t = level; t; t = t->next)
6351     ++tinst_depth;
6352
6353   current_tinst_level = level;
6354   pop_tinst_level ();
6355   return level->decl;
6356 }
6357
6358 /* Returns the TINST_LEVEL which gives the original instantiation
6359    context.  */
6360
6361 struct tinst_level *
6362 outermost_tinst_level (void)
6363 {
6364   struct tinst_level *level = current_tinst_level;
6365   if (level)
6366     while (level->next)
6367       level = level->next;
6368   return level;
6369 }
6370
6371 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6372    vector of template arguments, as for tsubst.
6373
6374    Returns an appropriate tsubst'd friend declaration.  */
6375
6376 static tree
6377 tsubst_friend_function (tree decl, tree args)
6378 {
6379   tree new_friend;
6380
6381   if (TREE_CODE (decl) == FUNCTION_DECL
6382       && DECL_TEMPLATE_INSTANTIATION (decl)
6383       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6384     /* This was a friend declared with an explicit template
6385        argument list, e.g.:
6386
6387        friend void f<>(T);
6388
6389        to indicate that f was a template instantiation, not a new
6390        function declaration.  Now, we have to figure out what
6391        instantiation of what template.  */
6392     {
6393       tree template_id, arglist, fns;
6394       tree new_args;
6395       tree tmpl;
6396       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6397
6398       /* Friend functions are looked up in the containing namespace scope.
6399          We must enter that scope, to avoid finding member functions of the
6400          current class with same name.  */
6401       push_nested_namespace (ns);
6402       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6403                          tf_warning_or_error, NULL_TREE,
6404                          /*integral_constant_expression_p=*/false);
6405       pop_nested_namespace (ns);
6406       arglist = tsubst (DECL_TI_ARGS (decl), args,
6407                         tf_warning_or_error, NULL_TREE);
6408       template_id = lookup_template_function (fns, arglist);
6409
6410       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6411       tmpl = determine_specialization (template_id, new_friend,
6412                                        &new_args,
6413                                        /*need_member_template=*/0,
6414                                        TREE_VEC_LENGTH (args),
6415                                        tsk_none);
6416       return instantiate_template (tmpl, new_args, tf_error);
6417     }
6418
6419   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6420
6421   /* The NEW_FRIEND will look like an instantiation, to the
6422      compiler, but is not an instantiation from the point of view of
6423      the language.  For example, we might have had:
6424
6425      template <class T> struct S {
6426        template <class U> friend void f(T, U);
6427      };
6428
6429      Then, in S<int>, template <class U> void f(int, U) is not an
6430      instantiation of anything.  */
6431   if (new_friend == error_mark_node)
6432     return error_mark_node;
6433
6434   DECL_USE_TEMPLATE (new_friend) = 0;
6435   if (TREE_CODE (decl) == TEMPLATE_DECL)
6436     {
6437       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6438       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6439         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6440     }
6441
6442   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6443      is not a template instantiation and should not be mangled like
6444      one.  Therefore, we forget the mangling here; we'll recompute it
6445      later if we need it.  */
6446   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6447     {
6448       SET_DECL_RTL (new_friend, NULL_RTX);
6449       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6450     }
6451
6452   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6453     {
6454       tree old_decl;
6455       tree new_friend_template_info;
6456       tree new_friend_result_template_info;
6457       tree ns;
6458       int  new_friend_is_defn;
6459
6460       /* We must save some information from NEW_FRIEND before calling
6461          duplicate decls since that function will free NEW_FRIEND if
6462          possible.  */
6463       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6464       new_friend_is_defn =
6465             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6466                            (template_for_substitution (new_friend)))
6467              != NULL_TREE);
6468       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6469         {
6470           /* This declaration is a `primary' template.  */
6471           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6472
6473           new_friend_result_template_info
6474             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6475         }
6476       else
6477         new_friend_result_template_info = NULL_TREE;
6478
6479       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6480       if (new_friend_is_defn)
6481         DECL_INITIAL (new_friend) = error_mark_node;
6482
6483       /* Inside pushdecl_namespace_level, we will push into the
6484          current namespace. However, the friend function should go
6485          into the namespace of the template.  */
6486       ns = decl_namespace_context (new_friend);
6487       push_nested_namespace (ns);
6488       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6489       pop_nested_namespace (ns);
6490
6491       if (old_decl == error_mark_node)
6492         return error_mark_node;
6493
6494       if (old_decl != new_friend)
6495         {
6496           /* This new friend declaration matched an existing
6497              declaration.  For example, given:
6498
6499                template <class T> void f(T);
6500                template <class U> class C {
6501                  template <class T> friend void f(T) {}
6502                };
6503
6504              the friend declaration actually provides the definition
6505              of `f', once C has been instantiated for some type.  So,
6506              old_decl will be the out-of-class template declaration,
6507              while new_friend is the in-class definition.
6508
6509              But, if `f' was called before this point, the
6510              instantiation of `f' will have DECL_TI_ARGS corresponding
6511              to `T' but not to `U', references to which might appear
6512              in the definition of `f'.  Previously, the most general
6513              template for an instantiation of `f' was the out-of-class
6514              version; now it is the in-class version.  Therefore, we
6515              run through all specialization of `f', adding to their
6516              DECL_TI_ARGS appropriately.  In particular, they need a
6517              new set of outer arguments, corresponding to the
6518              arguments for this class instantiation.
6519
6520              The same situation can arise with something like this:
6521
6522                friend void f(int);
6523                template <class T> class C {
6524                  friend void f(T) {}
6525                };
6526
6527              when `C<int>' is instantiated.  Now, `f(int)' is defined
6528              in the class.  */
6529
6530           if (!new_friend_is_defn)
6531             /* On the other hand, if the in-class declaration does
6532                *not* provide a definition, then we don't want to alter
6533                existing definitions.  We can just leave everything
6534                alone.  */
6535             ;
6536           else
6537             {
6538               /* Overwrite whatever template info was there before, if
6539                  any, with the new template information pertaining to
6540                  the declaration.  */
6541               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6542
6543               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6544                 reregister_specialization (new_friend,
6545                                            most_general_template (old_decl),
6546                                            old_decl);
6547               else
6548                 {
6549                   tree t;
6550                   tree new_friend_args;
6551
6552                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6553                     = new_friend_result_template_info;
6554
6555                   new_friend_args = TI_ARGS (new_friend_template_info);
6556                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6557                        t != NULL_TREE;
6558                        t = TREE_CHAIN (t))
6559                     {
6560                       tree spec = TREE_VALUE (t);
6561
6562                       DECL_TI_ARGS (spec)
6563                         = add_outermost_template_args (new_friend_args,
6564                                                        DECL_TI_ARGS (spec));
6565                     }
6566
6567                   /* Now, since specializations are always supposed to
6568                      hang off of the most general template, we must move
6569                      them.  */
6570                   t = most_general_template (old_decl);
6571                   if (t != old_decl)
6572                     {
6573                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6574                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6575                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6576                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6577                     }
6578                 }
6579             }
6580
6581           /* The information from NEW_FRIEND has been merged into OLD_DECL
6582              by duplicate_decls.  */
6583           new_friend = old_decl;
6584         }
6585     }
6586   else
6587     {
6588       tree context = DECL_CONTEXT (new_friend);
6589       bool dependent_p;
6590
6591       /* In the code
6592            template <class T> class C {
6593              template <class U> friend void C1<U>::f (); // case 1
6594              friend void C2<T>::f ();                    // case 2
6595            };
6596          we only need to make sure CONTEXT is a complete type for
6597          case 2.  To distinguish between the two cases, we note that
6598          CONTEXT of case 1 remains dependent type after tsubst while
6599          this isn't true for case 2.  */
6600       ++processing_template_decl;
6601       dependent_p = dependent_type_p (context);
6602       --processing_template_decl;
6603
6604       if (!dependent_p
6605           && !complete_type_or_else (context, NULL_TREE))
6606         return error_mark_node;
6607
6608       if (COMPLETE_TYPE_P (context))
6609         {
6610           /* Check to see that the declaration is really present, and,
6611              possibly obtain an improved declaration.  */
6612           tree fn = check_classfn (context,
6613                                    new_friend, NULL_TREE);
6614
6615           if (fn)
6616             new_friend = fn;
6617         }
6618     }
6619
6620   return new_friend;
6621 }
6622
6623 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6624    template arguments, as for tsubst.
6625
6626    Returns an appropriate tsubst'd friend type or error_mark_node on
6627    failure.  */
6628
6629 static tree
6630 tsubst_friend_class (tree friend_tmpl, tree args)
6631 {
6632   tree friend_type;
6633   tree tmpl;
6634   tree context;
6635
6636   context = DECL_CONTEXT (friend_tmpl);
6637
6638   if (context)
6639     {
6640       if (TREE_CODE (context) == NAMESPACE_DECL)
6641         push_nested_namespace (context);
6642       else
6643         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6644     }
6645
6646   /* Look for a class template declaration.  We look for hidden names
6647      because two friend declarations of the same template are the
6648      same.  For example, in:
6649
6650        struct A { 
6651          template <typename> friend class F;
6652        };
6653        template <typename> struct B { 
6654          template <typename> friend class F;
6655        };
6656
6657      both F templates are the same.  */
6658   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6659                            /*block_p=*/true, 0, 
6660                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6661
6662   /* But, if we don't find one, it might be because we're in a
6663      situation like this:
6664
6665        template <class T>
6666        struct S {
6667          template <class U>
6668          friend struct S;
6669        };
6670
6671      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6672      for `S<int>', not the TEMPLATE_DECL.  */
6673   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6674     {
6675       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6676       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6677     }
6678
6679   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6680     {
6681       /* The friend template has already been declared.  Just
6682          check to see that the declarations match, and install any new
6683          default parameters.  We must tsubst the default parameters,
6684          of course.  We only need the innermost template parameters
6685          because that is all that redeclare_class_template will look
6686          at.  */
6687       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6688           > TMPL_ARGS_DEPTH (args))
6689         {
6690           tree parms;
6691           location_t saved_input_location;
6692           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6693                                          args, tf_warning_or_error);
6694
6695           saved_input_location = input_location;
6696           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6697           redeclare_class_template (TREE_TYPE (tmpl), parms);
6698           input_location = saved_input_location;
6699           
6700         }
6701
6702       friend_type = TREE_TYPE (tmpl);
6703     }
6704   else
6705     {
6706       /* The friend template has not already been declared.  In this
6707          case, the instantiation of the template class will cause the
6708          injection of this template into the global scope.  */
6709       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6710       if (tmpl == error_mark_node)
6711         return error_mark_node;
6712
6713       /* The new TMPL is not an instantiation of anything, so we
6714          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6715          the new type because that is supposed to be the corresponding
6716          template decl, i.e., TMPL.  */
6717       DECL_USE_TEMPLATE (tmpl) = 0;
6718       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6719       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6720       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6721         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6722
6723       /* Inject this template into the global scope.  */
6724       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6725     }
6726
6727   if (context)
6728     {
6729       if (TREE_CODE (context) == NAMESPACE_DECL)
6730         pop_nested_namespace (context);
6731       else
6732         pop_nested_class ();
6733     }
6734
6735   return friend_type;
6736 }
6737
6738 /* Returns zero if TYPE cannot be completed later due to circularity.
6739    Otherwise returns one.  */
6740
6741 static int
6742 can_complete_type_without_circularity (tree type)
6743 {
6744   if (type == NULL_TREE || type == error_mark_node)
6745     return 0;
6746   else if (COMPLETE_TYPE_P (type))
6747     return 1;
6748   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6749     return can_complete_type_without_circularity (TREE_TYPE (type));
6750   else if (CLASS_TYPE_P (type)
6751            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6752     return 0;
6753   else
6754     return 1;
6755 }
6756
6757 /* Apply any attributes which had to be deferred until instantiation
6758    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6759    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6760
6761 static void
6762 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6763                                 tree args, tsubst_flags_t complain, tree in_decl)
6764 {
6765   tree last_dep = NULL_TREE;
6766   tree t;
6767   tree *p;
6768
6769   for (t = attributes; t; t = TREE_CHAIN (t))
6770     if (ATTR_IS_DEPENDENT (t))
6771       {
6772         last_dep = t;
6773         attributes = copy_list (attributes);
6774         break;
6775       }
6776
6777   if (DECL_P (*decl_p))
6778     {
6779       if (TREE_TYPE (*decl_p) == error_mark_node)
6780         return;
6781       p = &DECL_ATTRIBUTES (*decl_p);
6782     }
6783   else
6784     p = &TYPE_ATTRIBUTES (*decl_p);
6785
6786   if (last_dep)
6787     {
6788       tree late_attrs = NULL_TREE;
6789       tree *q = &late_attrs;
6790
6791       for (*p = attributes; *p; )
6792         {
6793           t = *p;
6794           if (ATTR_IS_DEPENDENT (t))
6795             {
6796               *p = TREE_CHAIN (t);
6797               TREE_CHAIN (t) = NULL_TREE;
6798               /* If the first attribute argument is an identifier, don't
6799                  pass it through tsubst.  Attributes like mode, format,
6800                  cleanup and several target specific attributes expect it
6801                  unmodified.  */
6802               if (TREE_VALUE (t)
6803                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6804                   && TREE_VALUE (TREE_VALUE (t))
6805                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6806                       == IDENTIFIER_NODE))
6807                 {
6808                   tree chain
6809                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6810                                    in_decl,
6811                                    /*integral_constant_expression_p=*/false);
6812                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6813                     TREE_VALUE (t)
6814                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6815                                    chain);
6816                 }
6817               else
6818                 TREE_VALUE (t)
6819                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6820                                  /*integral_constant_expression_p=*/false);
6821               *q = t;
6822               q = &TREE_CHAIN (t);
6823             }
6824           else
6825             p = &TREE_CHAIN (t);
6826         }
6827
6828       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6829     }
6830 }
6831
6832 tree
6833 instantiate_class_template (tree type)
6834 {
6835   tree templ, args, pattern, t, member;
6836   tree typedecl;
6837   tree pbinfo;
6838   tree base_list;
6839
6840   if (type == error_mark_node)
6841     return error_mark_node;
6842
6843   if (TYPE_BEING_DEFINED (type)
6844       || COMPLETE_TYPE_P (type)
6845       || dependent_type_p (type))
6846     return type;
6847
6848   /* Figure out which template is being instantiated.  */
6849   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6850   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6851
6852   /* Determine what specialization of the original template to
6853      instantiate.  */
6854   t = most_specialized_class (type, templ);
6855   if (t == error_mark_node)
6856     {
6857       TYPE_BEING_DEFINED (type) = 1;
6858       return error_mark_node;
6859     }
6860   else if (t)
6861     {
6862       /* This TYPE is actually an instantiation of a partial
6863          specialization.  We replace the innermost set of ARGS with
6864          the arguments appropriate for substitution.  For example,
6865          given:
6866
6867            template <class T> struct S {};
6868            template <class T> struct S<T*> {};
6869
6870          and supposing that we are instantiating S<int*>, ARGS will
6871          presently be {int*} -- but we need {int}.  */
6872       pattern = TREE_TYPE (t);
6873       args = TREE_PURPOSE (t);
6874     }
6875   else
6876     {
6877       pattern = TREE_TYPE (templ);
6878       args = CLASSTYPE_TI_ARGS (type);
6879     }
6880
6881   /* If the template we're instantiating is incomplete, then clearly
6882      there's nothing we can do.  */
6883   if (!COMPLETE_TYPE_P (pattern))
6884     return type;
6885
6886   /* If we've recursively instantiated too many templates, stop.  */
6887   if (! push_tinst_level (type))
6888     return type;
6889
6890   /* Now we're really doing the instantiation.  Mark the type as in
6891      the process of being defined.  */
6892   TYPE_BEING_DEFINED (type) = 1;
6893
6894   /* We may be in the middle of deferred access check.  Disable
6895      it now.  */
6896   push_deferring_access_checks (dk_no_deferred);
6897
6898   push_to_top_level ();
6899
6900   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6901
6902   /* Set the input location to the template definition. This is needed
6903      if tsubsting causes an error.  */
6904   typedecl = TYPE_MAIN_DECL (type);
6905   input_location = DECL_SOURCE_LOCATION (typedecl);
6906
6907   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6908   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6909   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6910   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6911   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6912   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6913   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6914   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6915   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6916   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6917   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6918   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6919   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6920   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6921   if (ANON_AGGR_TYPE_P (pattern))
6922     SET_ANON_AGGR_TYPE_P (type);
6923   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6924     {
6925       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6926       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6927     }
6928
6929   pbinfo = TYPE_BINFO (pattern);
6930
6931   /* We should never instantiate a nested class before its enclosing
6932      class; we need to look up the nested class by name before we can
6933      instantiate it, and that lookup should instantiate the enclosing
6934      class.  */
6935   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6936               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6937               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6938
6939   base_list = NULL_TREE;
6940   if (BINFO_N_BASE_BINFOS (pbinfo))
6941     {
6942       tree pbase_binfo;
6943       tree context = TYPE_CONTEXT (type);
6944       tree pushed_scope;
6945       int i;
6946
6947       /* We must enter the scope containing the type, as that is where
6948          the accessibility of types named in dependent bases are
6949          looked up from.  */
6950       pushed_scope = push_scope (context ? context : global_namespace);
6951
6952       /* Substitute into each of the bases to determine the actual
6953          basetypes.  */
6954       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6955         {
6956           tree base;
6957           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6958           tree expanded_bases = NULL_TREE;
6959           int idx, len = 1;
6960
6961           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6962             {
6963               expanded_bases = 
6964                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6965                                        args, tf_error, NULL_TREE);
6966               if (expanded_bases == error_mark_node)
6967                 continue;
6968
6969               len = TREE_VEC_LENGTH (expanded_bases);
6970             }
6971
6972           for (idx = 0; idx < len; idx++)
6973             {
6974               if (expanded_bases)
6975                 /* Extract the already-expanded base class.  */
6976                 base = TREE_VEC_ELT (expanded_bases, idx);
6977               else
6978                 /* Substitute to figure out the base class.  */
6979                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6980                                NULL_TREE);
6981
6982               if (base == error_mark_node)
6983                 continue;
6984
6985               base_list = tree_cons (access, base, base_list);
6986               if (BINFO_VIRTUAL_P (pbase_binfo))
6987                 TREE_TYPE (base_list) = integer_type_node;
6988             }
6989         }
6990
6991       /* The list is now in reverse order; correct that.  */
6992       base_list = nreverse (base_list);
6993
6994       if (pushed_scope)
6995         pop_scope (pushed_scope);
6996     }
6997   /* Now call xref_basetypes to set up all the base-class
6998      information.  */
6999   xref_basetypes (type, base_list);
7000
7001   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7002                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7003                                   args, tf_error, NULL_TREE);
7004
7005   /* Now that our base classes are set up, enter the scope of the
7006      class, so that name lookups into base classes, etc. will work
7007      correctly.  This is precisely analogous to what we do in
7008      begin_class_definition when defining an ordinary non-template
7009      class, except we also need to push the enclosing classes.  */
7010   push_nested_class (type);
7011
7012   /* Now members are processed in the order of declaration.  */
7013   for (member = CLASSTYPE_DECL_LIST (pattern);
7014        member; member = TREE_CHAIN (member))
7015     {
7016       tree t = TREE_VALUE (member);
7017
7018       if (TREE_PURPOSE (member))
7019         {
7020           if (TYPE_P (t))
7021             {
7022               /* Build new CLASSTYPE_NESTED_UTDS.  */
7023
7024               tree newtag;
7025               bool class_template_p;
7026
7027               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7028                                   && TYPE_LANG_SPECIFIC (t)
7029                                   && CLASSTYPE_IS_TEMPLATE (t));
7030               /* If the member is a class template, then -- even after
7031                  substitution -- there may be dependent types in the
7032                  template argument list for the class.  We increment
7033                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7034                  that function will assume that no types are dependent
7035                  when outside of a template.  */
7036               if (class_template_p)
7037                 ++processing_template_decl;
7038               newtag = tsubst (t, args, tf_error, NULL_TREE);
7039               if (class_template_p)
7040                 --processing_template_decl;
7041               if (newtag == error_mark_node)
7042                 continue;
7043
7044               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7045                 {
7046                   tree name = TYPE_IDENTIFIER (t);
7047
7048                   if (class_template_p)
7049                     /* Unfortunately, lookup_template_class sets
7050                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7051                        instantiation (i.e., for the type of a member
7052                        template class nested within a template class.)
7053                        This behavior is required for
7054                        maybe_process_partial_specialization to work
7055                        correctly, but is not accurate in this case;
7056                        the TAG is not an instantiation of anything.
7057                        (The corresponding TEMPLATE_DECL is an
7058                        instantiation, but the TYPE is not.) */
7059                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7060
7061                   /* Now, we call pushtag to put this NEWTAG into the scope of
7062                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7063                      pushtag calling push_template_decl.  We don't have to do
7064                      this for enums because it will already have been done in
7065                      tsubst_enum.  */
7066                   if (name)
7067                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7068                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7069                 }
7070             }
7071           else if (TREE_CODE (t) == FUNCTION_DECL
7072                    || DECL_FUNCTION_TEMPLATE_P (t))
7073             {
7074               /* Build new TYPE_METHODS.  */
7075               tree r;
7076
7077               if (TREE_CODE (t) == TEMPLATE_DECL)
7078                 ++processing_template_decl;
7079               r = tsubst (t, args, tf_error, NULL_TREE);
7080               if (TREE_CODE (t) == TEMPLATE_DECL)
7081                 --processing_template_decl;
7082               set_current_access_from_decl (r);
7083               finish_member_declaration (r);
7084             }
7085           else
7086             {
7087               /* Build new TYPE_FIELDS.  */
7088               if (TREE_CODE (t) == STATIC_ASSERT)
7089                 {
7090                   tree condition = 
7091                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7092                                  tf_warning_or_error, NULL_TREE,
7093                                  /*integral_constant_expression_p=*/true);
7094                   finish_static_assert (condition,
7095                                         STATIC_ASSERT_MESSAGE (t), 
7096                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7097                                         /*member_p=*/true);
7098                 }
7099               else if (TREE_CODE (t) != CONST_DECL)
7100                 {
7101                   tree r;
7102
7103                   /* The file and line for this declaration, to
7104                      assist in error message reporting.  Since we
7105                      called push_tinst_level above, we don't need to
7106                      restore these.  */
7107                   input_location = DECL_SOURCE_LOCATION (t);
7108
7109                   if (TREE_CODE (t) == TEMPLATE_DECL)
7110                     ++processing_template_decl;
7111                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7112                   if (TREE_CODE (t) == TEMPLATE_DECL)
7113                     --processing_template_decl;
7114                   if (TREE_CODE (r) == VAR_DECL)
7115                     {
7116                       /* In [temp.inst]:
7117
7118                            [t]he initialization (and any associated
7119                            side-effects) of a static data member does
7120                            not occur unless the static data member is
7121                            itself used in a way that requires the
7122                            definition of the static data member to
7123                            exist.
7124
7125                          Therefore, we do not substitute into the
7126                          initialized for the static data member here.  */
7127                       finish_static_data_member_decl
7128                         (r,
7129                          /*init=*/NULL_TREE,
7130                          /*init_const_expr_p=*/false,
7131                          /*asmspec_tree=*/NULL_TREE,
7132                          /*flags=*/0);
7133                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7134                         check_static_variable_definition (r, TREE_TYPE (r));
7135                     }
7136                   else if (TREE_CODE (r) == FIELD_DECL)
7137                     {
7138                       /* Determine whether R has a valid type and can be
7139                          completed later.  If R is invalid, then it is
7140                          replaced by error_mark_node so that it will not be
7141                          added to TYPE_FIELDS.  */
7142                       tree rtype = TREE_TYPE (r);
7143                       if (can_complete_type_without_circularity (rtype))
7144                         complete_type (rtype);
7145
7146                       if (!COMPLETE_TYPE_P (rtype))
7147                         {
7148                           cxx_incomplete_type_error (r, rtype);
7149                           r = error_mark_node;
7150                         }
7151                     }
7152
7153                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7154                      such a thing will already have been added to the field
7155                      list by tsubst_enum in finish_member_declaration in the
7156                      CLASSTYPE_NESTED_UTDS case above.  */
7157                   if (!(TREE_CODE (r) == TYPE_DECL
7158                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7159                         && DECL_ARTIFICIAL (r)))
7160                     {
7161                       set_current_access_from_decl (r);
7162                       finish_member_declaration (r);
7163                     }
7164                 }
7165             }
7166         }
7167       else
7168         {
7169           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7170             {
7171               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7172
7173               tree friend_type = t;
7174               bool adjust_processing_template_decl = false;
7175
7176               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7177                 {
7178                   /* template <class T> friend class C;  */
7179                   friend_type = tsubst_friend_class (friend_type, args);
7180                   adjust_processing_template_decl = true;
7181                 }
7182               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7183                 {
7184                   /* template <class T> friend class C::D;  */
7185                   friend_type = tsubst (friend_type, args,
7186                                         tf_warning_or_error, NULL_TREE);
7187                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7188                     friend_type = TREE_TYPE (friend_type);
7189                   adjust_processing_template_decl = true;
7190                 }
7191               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7192                 {
7193                   /* This could be either
7194
7195                        friend class T::C;
7196
7197                      when dependent_type_p is false or
7198
7199                        template <class U> friend class T::C;
7200
7201                      otherwise.  */
7202                   friend_type = tsubst (friend_type, args,
7203                                         tf_warning_or_error, NULL_TREE);
7204                   /* Bump processing_template_decl for correct
7205                      dependent_type_p calculation.  */
7206                   ++processing_template_decl;
7207                   if (dependent_type_p (friend_type))
7208                     adjust_processing_template_decl = true;
7209                   --processing_template_decl;
7210                 }
7211               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7212                        && hidden_name_p (TYPE_NAME (friend_type)))
7213                 {
7214                   /* friend class C;
7215
7216                      where C hasn't been declared yet.  Let's lookup name
7217                      from namespace scope directly, bypassing any name that
7218                      come from dependent base class.  */
7219                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7220
7221                   /* The call to xref_tag_from_type does injection for friend
7222                      classes.  */
7223                   push_nested_namespace (ns);
7224                   friend_type =
7225                     xref_tag_from_type (friend_type, NULL_TREE,
7226                                         /*tag_scope=*/ts_current);
7227                   pop_nested_namespace (ns);
7228                 }
7229               else if (uses_template_parms (friend_type))
7230                 /* friend class C<T>;  */
7231                 friend_type = tsubst (friend_type, args,
7232                                       tf_warning_or_error, NULL_TREE);
7233               /* Otherwise it's
7234
7235                    friend class C;
7236
7237                  where C is already declared or
7238
7239                    friend class C<int>;
7240
7241                  We don't have to do anything in these cases.  */
7242
7243               if (adjust_processing_template_decl)
7244                 /* Trick make_friend_class into realizing that the friend
7245                    we're adding is a template, not an ordinary class.  It's
7246                    important that we use make_friend_class since it will
7247                    perform some error-checking and output cross-reference
7248                    information.  */
7249                 ++processing_template_decl;
7250
7251               if (friend_type != error_mark_node)
7252                 make_friend_class (type, friend_type, /*complain=*/false);
7253
7254               if (adjust_processing_template_decl)
7255                 --processing_template_decl;
7256             }
7257           else
7258             {
7259               /* Build new DECL_FRIENDLIST.  */
7260               tree r;
7261
7262               /* The file and line for this declaration, to
7263                  assist in error message reporting.  Since we
7264                  called push_tinst_level above, we don't need to
7265                  restore these.  */
7266               input_location = DECL_SOURCE_LOCATION (t);
7267
7268               if (TREE_CODE (t) == TEMPLATE_DECL)
7269                 {
7270                   ++processing_template_decl;
7271                   push_deferring_access_checks (dk_no_check);
7272                 }
7273
7274               r = tsubst_friend_function (t, args);
7275               add_friend (type, r, /*complain=*/false);
7276               if (TREE_CODE (t) == TEMPLATE_DECL)
7277                 {
7278                   pop_deferring_access_checks ();
7279                   --processing_template_decl;
7280                 }
7281             }
7282         }
7283     }
7284
7285   /* Set the file and line number information to whatever is given for
7286      the class itself.  This puts error messages involving generated
7287      implicit functions at a predictable point, and the same point
7288      that would be used for non-template classes.  */
7289   input_location = DECL_SOURCE_LOCATION (typedecl);
7290
7291   unreverse_member_declarations (type);
7292   finish_struct_1 (type);
7293   TYPE_BEING_DEFINED (type) = 0;
7294
7295   /* Now that the class is complete, instantiate default arguments for
7296      any member functions.  We don't do this earlier because the
7297      default arguments may reference members of the class.  */
7298   if (!PRIMARY_TEMPLATE_P (templ))
7299     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7300       if (TREE_CODE (t) == FUNCTION_DECL
7301           /* Implicitly generated member functions will not have template
7302              information; they are not instantiations, but instead are
7303              created "fresh" for each instantiation.  */
7304           && DECL_TEMPLATE_INFO (t))
7305         tsubst_default_arguments (t);
7306
7307   pop_nested_class ();
7308   pop_from_top_level ();
7309   pop_deferring_access_checks ();
7310   pop_tinst_level ();
7311
7312   /* The vtable for a template class can be emitted in any translation
7313      unit in which the class is instantiated.  When there is no key
7314      method, however, finish_struct_1 will already have added TYPE to
7315      the keyed_classes list.  */
7316   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7317     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7318
7319   return type;
7320 }
7321
7322 static tree
7323 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7324 {
7325   tree r;
7326
7327   if (!t)
7328     r = t;
7329   else if (TYPE_P (t))
7330     r = tsubst (t, args, complain, in_decl);
7331   else
7332     {
7333       r = tsubst_expr (t, args, complain, in_decl,
7334                        /*integral_constant_expression_p=*/true);
7335       r = fold_non_dependent_expr (r);
7336     }
7337   return r;
7338 }
7339
7340 /* Substitute ARGS into T, which is an pack expansion
7341    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7342    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7343    (if only a partial substitution could be performed) or
7344    ERROR_MARK_NODE if there was an error.  */
7345 tree
7346 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7347                        tree in_decl)
7348 {
7349   tree pattern;
7350   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7351   tree first_arg_pack; int i, len = -1;
7352   tree result;
7353   int incomplete = 0;
7354
7355   gcc_assert (PACK_EXPANSION_P (t));
7356   pattern = PACK_EXPANSION_PATTERN (t);
7357
7358   /* Determine the argument packs that will instantiate the parameter
7359      packs used in the expansion expression. While we're at it,
7360      compute the number of arguments to be expanded and make sure it
7361      is consistent.  */
7362   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7363        pack = TREE_CHAIN (pack))
7364     {
7365       tree parm_pack = TREE_VALUE (pack);
7366       tree arg_pack = NULL_TREE;
7367       tree orig_arg = NULL_TREE;
7368
7369       if (TREE_CODE (parm_pack) == PARM_DECL)
7370         arg_pack = retrieve_local_specialization (parm_pack);
7371       else
7372         {
7373           int level, idx, levels;
7374           template_parm_level_and_index (parm_pack, &level, &idx);
7375
7376           levels = TMPL_ARGS_DEPTH (args);
7377           if (level <= levels)
7378             arg_pack = TMPL_ARG (args, level, idx);
7379         }
7380
7381       orig_arg = arg_pack;
7382       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7383         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7384       
7385       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7386         /* This can only happen if we forget to expand an argument
7387            pack somewhere else. Just return an error, silently.  */
7388         {
7389           result = make_tree_vec (1);
7390           TREE_VEC_ELT (result, 0) = error_mark_node;
7391           return result;
7392         }
7393
7394       if (arg_pack
7395           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7396           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7397         {
7398           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7399           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7400           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7401               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7402             /* The argument pack that the parameter maps to is just an
7403                expansion of the parameter itself, such as one would
7404                find in the implicit typedef of a class inside the
7405                class itself.  Consider this parameter "unsubstituted",
7406                so that we will maintain the outer pack expansion.  */
7407             arg_pack = NULL_TREE;
7408         }
7409           
7410       if (arg_pack)
7411         {
7412           int my_len = 
7413             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7414
7415           /* It's all-or-nothing with incomplete argument packs.  */
7416           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7417             return error_mark_node;
7418           
7419           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7420             incomplete = 1;
7421
7422           if (len < 0)
7423             {
7424               len = my_len;
7425               first_arg_pack = arg_pack;
7426             }
7427           else if (len != my_len)
7428             {
7429               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7430                 error ("mismatched argument pack lengths while expanding "
7431                        "%<%T%>",
7432                        pattern);
7433               else
7434                 error ("mismatched argument pack lengths while expanding "
7435                        "%<%E%>",
7436                        pattern);
7437               return error_mark_node;
7438             }
7439
7440           /* Keep track of the parameter packs and their corresponding
7441              argument packs.  */
7442           packs = tree_cons (parm_pack, arg_pack, packs);
7443           TREE_TYPE (packs) = orig_arg;
7444         }
7445       else
7446         /* We can't substitute for this parameter pack.  */
7447         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7448                                          TREE_VALUE (pack),
7449                                          unsubstituted_packs);
7450     }
7451
7452   /* We cannot expand this expansion expression, because we don't have
7453      all of the argument packs we need. Substitute into the pattern
7454      and return a PACK_EXPANSION_*. The caller will need to deal with
7455      that.  */
7456   if (unsubstituted_packs)
7457     return make_pack_expansion (tsubst (pattern, args, complain, 
7458                                         in_decl));
7459
7460   /* We could not find any argument packs that work.  */
7461   if (len < 0)
7462     return error_mark_node;
7463
7464   /* For each argument in each argument pack, substitute into the
7465      pattern.  */
7466   result = make_tree_vec (len + incomplete);
7467   for (i = 0; i < len + incomplete; ++i)
7468     {
7469       /* For parameter pack, change the substitution of the parameter
7470          pack to the ith argument in its argument pack, then expand
7471          the pattern.  */
7472       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7473         {
7474           tree parm = TREE_PURPOSE (pack);
7475
7476           if (TREE_CODE (parm) == PARM_DECL)
7477             {
7478               /* Select the Ith argument from the pack.  */
7479               tree arg = make_node (ARGUMENT_PACK_SELECT);
7480               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7481               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7482               mark_used (parm);
7483               register_local_specialization (arg, parm);
7484             }
7485           else
7486             {
7487               tree value = parm;
7488               int idx, level;
7489               template_parm_level_and_index (parm, &level, &idx);
7490               
7491               if (i < len) 
7492                 {
7493                   /* Select the Ith argument from the pack. */
7494                   value = make_node (ARGUMENT_PACK_SELECT);
7495                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7496                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7497                 }
7498
7499               /* Update the corresponding argument.  */
7500               TMPL_ARG (args, level, idx) = value;
7501             }
7502         }
7503
7504       /* Substitute into the PATTERN with the altered arguments.  */
7505       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7506         TREE_VEC_ELT (result, i) = 
7507           tsubst_expr (pattern, args, complain, in_decl,
7508                        /*integral_constant_expression_p=*/false);
7509       else
7510         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7511
7512       if (i == len)
7513         /* When we have incomplete argument packs, the last "expanded"
7514            result is itself a pack expansion, which allows us
7515            to deduce more arguments.  */
7516         TREE_VEC_ELT (result, i) = 
7517           make_pack_expansion (TREE_VEC_ELT (result, i));
7518
7519       if (TREE_VEC_ELT (result, i) == error_mark_node)
7520         {
7521           result = error_mark_node;
7522           break;
7523         }
7524     }
7525   
7526   /* Update ARGS to restore the substitution from parameter packs to
7527      their argument packs.  */
7528   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7529     {
7530       tree parm = TREE_PURPOSE (pack);
7531
7532       if (TREE_CODE (parm) == PARM_DECL)
7533         register_local_specialization (TREE_TYPE (pack), parm);
7534       else
7535         {
7536           int idx, level;
7537           template_parm_level_and_index (parm, &level, &idx);
7538           
7539           /* Update the corresponding argument.  */
7540           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7541             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7542               TREE_TYPE (pack);
7543           else
7544             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7545         }
7546     }
7547
7548   return result;
7549 }
7550
7551 /* Substitute ARGS into the vector or list of template arguments T.  */
7552
7553 static tree
7554 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7555 {
7556   tree orig_t = t;
7557   int len = TREE_VEC_LENGTH (t);
7558   int need_new = 0, i, expanded_len_adjust = 0, out;
7559   tree *elts = (tree *) alloca (len * sizeof (tree));
7560
7561   for (i = 0; i < len; i++)
7562     {
7563       tree orig_arg = TREE_VEC_ELT (t, i);
7564       tree new_arg;
7565
7566       if (TREE_CODE (orig_arg) == TREE_VEC)
7567         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7568       else if (PACK_EXPANSION_P (orig_arg))
7569         {
7570           /* Substitute into an expansion expression.  */
7571           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7572
7573           if (TREE_CODE (new_arg) == TREE_VEC)
7574             /* Add to the expanded length adjustment the number of
7575                expanded arguments. We subtract one from this
7576                measurement, because the argument pack expression
7577                itself is already counted as 1 in
7578                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7579                the argument pack is empty.  */
7580             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7581         }
7582       else if (ARGUMENT_PACK_P (orig_arg))
7583         {
7584           /* Substitute into each of the arguments.  */
7585           new_arg = make_node (TREE_CODE (orig_arg));
7586           
7587           SET_ARGUMENT_PACK_ARGS (
7588             new_arg,
7589             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7590                                   args, complain, in_decl));
7591
7592           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7593             new_arg = error_mark_node;
7594
7595           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7596             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7597                                           complain, in_decl);
7598             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7599
7600             if (TREE_TYPE (new_arg) == error_mark_node)
7601               new_arg = error_mark_node;
7602           }
7603         }
7604       else
7605         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7606
7607       if (new_arg == error_mark_node)
7608         return error_mark_node;
7609
7610       elts[i] = new_arg;
7611       if (new_arg != orig_arg)
7612         need_new = 1;
7613     }
7614
7615   if (!need_new)
7616     return t;
7617
7618   /* Make space for the expanded arguments coming from template
7619      argument packs.  */
7620   t = make_tree_vec (len + expanded_len_adjust);
7621   for (i = 0, out = 0; i < len; i++)
7622     {
7623       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7624            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7625           && TREE_CODE (elts[i]) == TREE_VEC)
7626         {
7627           int idx;
7628
7629           /* Now expand the template argument pack "in place".  */
7630           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7631             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7632         }
7633       else
7634         {
7635           TREE_VEC_ELT (t, out) = elts[i];
7636           out++;
7637         }
7638     }
7639
7640   return t;
7641 }
7642
7643 /* Return the result of substituting ARGS into the template parameters
7644    given by PARMS.  If there are m levels of ARGS and m + n levels of
7645    PARMS, then the result will contain n levels of PARMS.  For
7646    example, if PARMS is `template <class T> template <class U>
7647    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7648    result will be `template <int*, double, class V>'.  */
7649
7650 static tree
7651 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7652 {
7653   tree r = NULL_TREE;
7654   tree* new_parms;
7655
7656   /* When substituting into a template, we must set
7657      PROCESSING_TEMPLATE_DECL as the template parameters may be
7658      dependent if they are based on one-another, and the dependency
7659      predicates are short-circuit outside of templates.  */
7660   ++processing_template_decl;
7661
7662   for (new_parms = &r;
7663        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7664        new_parms = &(TREE_CHAIN (*new_parms)),
7665          parms = TREE_CHAIN (parms))
7666     {
7667       tree new_vec =
7668         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7669       int i;
7670
7671       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7672         {
7673           tree tuple;
7674           tree default_value;
7675           tree parm_decl;
7676
7677           if (parms == error_mark_node)
7678             continue;
7679
7680           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7681
7682           if (tuple == error_mark_node)
7683             continue;
7684
7685           default_value = TREE_PURPOSE (tuple);
7686           parm_decl = TREE_VALUE (tuple);
7687
7688           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7689           if (TREE_CODE (parm_decl) == PARM_DECL
7690               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7691             parm_decl = error_mark_node;
7692           default_value = tsubst_template_arg (default_value, args,
7693                                                complain, NULL_TREE);
7694
7695           tuple = build_tree_list (default_value, parm_decl);
7696           TREE_VEC_ELT (new_vec, i) = tuple;
7697         }
7698
7699       *new_parms =
7700         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7701                              - TMPL_ARGS_DEPTH (args)),
7702                    new_vec, NULL_TREE);
7703     }
7704
7705   --processing_template_decl;
7706
7707   return r;
7708 }
7709
7710 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7711    type T.  If T is not an aggregate or enumeration type, it is
7712    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7713    ENTERING_SCOPE is nonzero, T is the context for a template which
7714    we are presently tsubst'ing.  Return the substituted value.  */
7715
7716 static tree
7717 tsubst_aggr_type (tree t,
7718                   tree args,
7719                   tsubst_flags_t complain,
7720                   tree in_decl,
7721                   int entering_scope)
7722 {
7723   if (t == NULL_TREE)
7724     return NULL_TREE;
7725
7726   switch (TREE_CODE (t))
7727     {
7728     case RECORD_TYPE:
7729       if (TYPE_PTRMEMFUNC_P (t))
7730         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7731
7732       /* Else fall through.  */
7733     case ENUMERAL_TYPE:
7734     case UNION_TYPE:
7735       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7736         {
7737           tree argvec;
7738           tree context;
7739           tree r;
7740           bool saved_skip_evaluation;
7741
7742           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7743           saved_skip_evaluation = skip_evaluation;
7744           skip_evaluation = false;
7745
7746           /* First, determine the context for the type we are looking
7747              up.  */
7748           context = TYPE_CONTEXT (t);
7749           if (context)
7750             {
7751               context = tsubst_aggr_type (context, args, complain,
7752                                           in_decl, /*entering_scope=*/1);
7753               /* If context is a nested class inside a class template,
7754                  it may still need to be instantiated (c++/33959).  */
7755               if (TYPE_P (context))
7756                 context = complete_type (context);
7757             }
7758
7759           /* Then, figure out what arguments are appropriate for the
7760              type we are trying to find.  For example, given:
7761
7762                template <class T> struct S;
7763                template <class T, class U> void f(T, U) { S<U> su; }
7764
7765              and supposing that we are instantiating f<int, double>,
7766              then our ARGS will be {int, double}, but, when looking up
7767              S we only want {double}.  */
7768           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7769                                          complain, in_decl);
7770           if (argvec == error_mark_node)
7771             r = error_mark_node;
7772           else
7773             {
7774               r = lookup_template_class (t, argvec, in_decl, context,
7775                                          entering_scope, complain);
7776               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7777             }
7778
7779           skip_evaluation = saved_skip_evaluation;
7780
7781           return r;
7782         }
7783       else
7784         /* This is not a template type, so there's nothing to do.  */
7785         return t;
7786
7787     default:
7788       return tsubst (t, args, complain, in_decl);
7789     }
7790 }
7791
7792 /* Substitute into the default argument ARG (a default argument for
7793    FN), which has the indicated TYPE.  */
7794
7795 tree
7796 tsubst_default_argument (tree fn, tree type, tree arg)
7797 {
7798   tree saved_class_ptr = NULL_TREE;
7799   tree saved_class_ref = NULL_TREE;
7800
7801   /* This default argument came from a template.  Instantiate the
7802      default argument here, not in tsubst.  In the case of
7803      something like:
7804
7805        template <class T>
7806        struct S {
7807          static T t();
7808          void f(T = t());
7809        };
7810
7811      we must be careful to do name lookup in the scope of S<T>,
7812      rather than in the current class.  */
7813   push_access_scope (fn);
7814   /* The "this" pointer is not valid in a default argument.  */
7815   if (cfun)
7816     {
7817       saved_class_ptr = current_class_ptr;
7818       cp_function_chain->x_current_class_ptr = NULL_TREE;
7819       saved_class_ref = current_class_ref;
7820       cp_function_chain->x_current_class_ref = NULL_TREE;
7821     }
7822
7823   push_deferring_access_checks(dk_no_deferred);
7824   /* The default argument expression may cause implicitly defined
7825      member functions to be synthesized, which will result in garbage
7826      collection.  We must treat this situation as if we were within
7827      the body of function so as to avoid collecting live data on the
7828      stack.  */
7829   ++function_depth;
7830   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7831                      tf_warning_or_error, NULL_TREE,
7832                      /*integral_constant_expression_p=*/false);
7833   --function_depth;
7834   pop_deferring_access_checks();
7835
7836   /* Restore the "this" pointer.  */
7837   if (cfun)
7838     {
7839       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7840       cp_function_chain->x_current_class_ref = saved_class_ref;
7841     }
7842
7843   pop_access_scope (fn);
7844
7845   /* Make sure the default argument is reasonable.  */
7846   arg = check_default_argument (type, arg);
7847
7848   return arg;
7849 }
7850
7851 /* Substitute into all the default arguments for FN.  */
7852
7853 static void
7854 tsubst_default_arguments (tree fn)
7855 {
7856   tree arg;
7857   tree tmpl_args;
7858
7859   tmpl_args = DECL_TI_ARGS (fn);
7860
7861   /* If this function is not yet instantiated, we certainly don't need
7862      its default arguments.  */
7863   if (uses_template_parms (tmpl_args))
7864     return;
7865
7866   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7867        arg;
7868        arg = TREE_CHAIN (arg))
7869     if (TREE_PURPOSE (arg))
7870       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7871                                                     TREE_VALUE (arg),
7872                                                     TREE_PURPOSE (arg));
7873 }
7874
7875 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7876    result of the substitution.  Issue error and warning messages under
7877    control of COMPLAIN.  */
7878
7879 static tree
7880 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7881 {
7882   location_t saved_loc;
7883   tree r = NULL_TREE;
7884   tree in_decl = t;
7885
7886   /* Set the filename and linenumber to improve error-reporting.  */
7887   saved_loc = input_location;
7888   input_location = DECL_SOURCE_LOCATION (t);
7889
7890   switch (TREE_CODE (t))
7891     {
7892     case TEMPLATE_DECL:
7893       {
7894         /* We can get here when processing a member function template,
7895            member class template, and template template parameter of
7896            a template class.  */
7897         tree decl = DECL_TEMPLATE_RESULT (t);
7898         tree spec;
7899         tree tmpl_args;
7900         tree full_args;
7901
7902         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7903           {
7904             /* Template template parameter is treated here.  */
7905             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7906             if (new_type == error_mark_node)
7907               return error_mark_node;
7908
7909             r = copy_decl (t);
7910             TREE_CHAIN (r) = NULL_TREE;
7911             TREE_TYPE (r) = new_type;
7912             DECL_TEMPLATE_RESULT (r)
7913               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7914             DECL_TEMPLATE_PARMS (r)
7915               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7916                                        complain);
7917             TYPE_NAME (new_type) = r;
7918             break;
7919           }
7920
7921         /* We might already have an instance of this template.
7922            The ARGS are for the surrounding class type, so the
7923            full args contain the tsubst'd args for the context,
7924            plus the innermost args from the template decl.  */
7925         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7926           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7927           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7928         /* Because this is a template, the arguments will still be
7929            dependent, even after substitution.  If
7930            PROCESSING_TEMPLATE_DECL is not set, the dependency
7931            predicates will short-circuit.  */
7932         ++processing_template_decl;
7933         full_args = tsubst_template_args (tmpl_args, args,
7934                                           complain, in_decl);
7935         --processing_template_decl;
7936         if (full_args == error_mark_node)
7937           return error_mark_node;
7938
7939         /* tsubst_template_args doesn't copy the vector if
7940            nothing changed.  But, *something* should have
7941            changed.  */
7942         gcc_assert (full_args != tmpl_args);
7943
7944         spec = retrieve_specialization (t, full_args,
7945                                         /*class_specializations_p=*/true);
7946         if (spec != NULL_TREE)
7947           {
7948             r = spec;
7949             break;
7950           }
7951
7952         /* Make a new template decl.  It will be similar to the
7953            original, but will record the current template arguments.
7954            We also create a new function declaration, which is just
7955            like the old one, but points to this new template, rather
7956            than the old one.  */
7957         r = copy_decl (t);
7958         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7959         TREE_CHAIN (r) = NULL_TREE;
7960
7961         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7962
7963         if (TREE_CODE (decl) == TYPE_DECL)
7964           {
7965             tree new_type;
7966             ++processing_template_decl;
7967             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7968             --processing_template_decl;
7969             if (new_type == error_mark_node)
7970               return error_mark_node;
7971
7972             TREE_TYPE (r) = new_type;
7973             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7974             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7975             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7976             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7977           }
7978         else
7979           {
7980             tree new_decl;
7981             ++processing_template_decl;
7982             new_decl = tsubst (decl, args, complain, in_decl);
7983             --processing_template_decl;
7984             if (new_decl == error_mark_node)
7985               return error_mark_node;
7986
7987             DECL_TEMPLATE_RESULT (r) = new_decl;
7988             DECL_TI_TEMPLATE (new_decl) = r;
7989             TREE_TYPE (r) = TREE_TYPE (new_decl);
7990             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7991             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7992           }
7993
7994         SET_DECL_IMPLICIT_INSTANTIATION (r);
7995         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7996         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7997
7998         /* The template parameters for this new template are all the
7999            template parameters for the old template, except the
8000            outermost level of parameters.  */
8001         DECL_TEMPLATE_PARMS (r)
8002           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8003                                    complain);
8004
8005         if (PRIMARY_TEMPLATE_P (t))
8006           DECL_PRIMARY_TEMPLATE (r) = r;
8007
8008         if (TREE_CODE (decl) != TYPE_DECL)
8009           /* Record this non-type partial instantiation.  */
8010           register_specialization (r, t,
8011                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8012                                    false);
8013       }
8014       break;
8015
8016     case FUNCTION_DECL:
8017       {
8018         tree ctx;
8019         tree argvec = NULL_TREE;
8020         tree *friends;
8021         tree gen_tmpl;
8022         tree type;
8023         int member;
8024         int args_depth;
8025         int parms_depth;
8026
8027         /* Nobody should be tsubst'ing into non-template functions.  */
8028         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8029
8030         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8031           {
8032             tree spec;
8033             bool dependent_p;
8034
8035             /* If T is not dependent, just return it.  We have to
8036                increment PROCESSING_TEMPLATE_DECL because
8037                value_dependent_expression_p assumes that nothing is
8038                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8039             ++processing_template_decl;
8040             dependent_p = value_dependent_expression_p (t);
8041             --processing_template_decl;
8042             if (!dependent_p)
8043               return t;
8044
8045             /* Calculate the most general template of which R is a
8046                specialization, and the complete set of arguments used to
8047                specialize R.  */
8048             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8049             argvec = tsubst_template_args (DECL_TI_ARGS
8050                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8051                                            args, complain, in_decl);
8052
8053             /* Check to see if we already have this specialization.  */
8054             spec = retrieve_specialization (gen_tmpl, argvec,
8055                                             /*class_specializations_p=*/false);
8056
8057             if (spec)
8058               {
8059                 r = spec;
8060                 break;
8061               }
8062
8063             /* We can see more levels of arguments than parameters if
8064                there was a specialization of a member template, like
8065                this:
8066
8067                  template <class T> struct S { template <class U> void f(); }
8068                  template <> template <class U> void S<int>::f(U);
8069
8070                Here, we'll be substituting into the specialization,
8071                because that's where we can find the code we actually
8072                want to generate, but we'll have enough arguments for
8073                the most general template.
8074
8075                We also deal with the peculiar case:
8076
8077                  template <class T> struct S {
8078                    template <class U> friend void f();
8079                  };
8080                  template <class U> void f() {}
8081                  template S<int>;
8082                  template void f<double>();
8083
8084                Here, the ARGS for the instantiation of will be {int,
8085                double}.  But, we only need as many ARGS as there are
8086                levels of template parameters in CODE_PATTERN.  We are
8087                careful not to get fooled into reducing the ARGS in
8088                situations like:
8089
8090                  template <class T> struct S { template <class U> void f(U); }
8091                  template <class T> template <> void S<T>::f(int) {}
8092
8093                which we can spot because the pattern will be a
8094                specialization in this case.  */
8095             args_depth = TMPL_ARGS_DEPTH (args);
8096             parms_depth =
8097               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8098             if (args_depth > parms_depth
8099                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8100               args = get_innermost_template_args (args, parms_depth);
8101           }
8102         else
8103           {
8104             /* This special case arises when we have something like this:
8105
8106                  template <class T> struct S {
8107                    friend void f<int>(int, double);
8108                  };
8109
8110                Here, the DECL_TI_TEMPLATE for the friend declaration
8111                will be an IDENTIFIER_NODE.  We are being called from
8112                tsubst_friend_function, and we want only to create a
8113                new decl (R) with appropriate types so that we can call
8114                determine_specialization.  */
8115             gen_tmpl = NULL_TREE;
8116           }
8117
8118         if (DECL_CLASS_SCOPE_P (t))
8119           {
8120             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8121               member = 2;
8122             else
8123               member = 1;
8124             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8125                                     complain, t, /*entering_scope=*/1);
8126           }
8127         else
8128           {
8129             member = 0;
8130             ctx = DECL_CONTEXT (t);
8131           }
8132         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8133         if (type == error_mark_node)
8134           return error_mark_node;
8135
8136         /* We do NOT check for matching decls pushed separately at this
8137            point, as they may not represent instantiations of this
8138            template, and in any case are considered separate under the
8139            discrete model.  */
8140         r = copy_decl (t);
8141         DECL_USE_TEMPLATE (r) = 0;
8142         TREE_TYPE (r) = type;
8143         /* Clear out the mangled name and RTL for the instantiation.  */
8144         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8145         SET_DECL_RTL (r, NULL_RTX);
8146         /* Leave DECL_INITIAL set on deleted instantiations.  */
8147         if (!DECL_DELETED_FN (r))
8148           DECL_INITIAL (r) = NULL_TREE;
8149         DECL_CONTEXT (r) = ctx;
8150
8151         if (member && DECL_CONV_FN_P (r))
8152           /* Type-conversion operator.  Reconstruct the name, in
8153              case it's the name of one of the template's parameters.  */
8154           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8155
8156         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8157                                      complain, t);
8158         DECL_RESULT (r) = NULL_TREE;
8159
8160         TREE_STATIC (r) = 0;
8161         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8162         DECL_EXTERNAL (r) = 1;
8163         /* If this is an instantiation of a function with internal
8164            linkage, we already know what object file linkage will be
8165            assigned to the instantiation.  */
8166         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8167         DECL_DEFER_OUTPUT (r) = 0;
8168         TREE_CHAIN (r) = NULL_TREE;
8169         DECL_PENDING_INLINE_INFO (r) = 0;
8170         DECL_PENDING_INLINE_P (r) = 0;
8171         DECL_SAVED_TREE (r) = NULL_TREE;
8172         TREE_USED (r) = 0;
8173         if (DECL_CLONED_FUNCTION (r))
8174           {
8175             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8176                                                args, complain, t);
8177             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8178             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8179           }
8180
8181         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8182            this in the special friend case mentioned above where
8183            GEN_TMPL is NULL.  */
8184         if (gen_tmpl)
8185           {
8186             DECL_TEMPLATE_INFO (r)
8187               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8188             SET_DECL_IMPLICIT_INSTANTIATION (r);
8189             register_specialization (r, gen_tmpl, argvec, false);
8190
8191             /* We're not supposed to instantiate default arguments
8192                until they are called, for a template.  But, for a
8193                declaration like:
8194
8195                  template <class T> void f ()
8196                  { extern void g(int i = T()); }
8197
8198                we should do the substitution when the template is
8199                instantiated.  We handle the member function case in
8200                instantiate_class_template since the default arguments
8201                might refer to other members of the class.  */
8202             if (!member
8203                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8204                 && !uses_template_parms (argvec))
8205               tsubst_default_arguments (r);
8206           }
8207         else
8208           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8209
8210         /* Copy the list of befriending classes.  */
8211         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8212              *friends;
8213              friends = &TREE_CHAIN (*friends))
8214           {
8215             *friends = copy_node (*friends);
8216             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8217                                             args, complain,
8218                                             in_decl);
8219           }
8220
8221         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8222           {
8223             maybe_retrofit_in_chrg (r);
8224             if (DECL_CONSTRUCTOR_P (r))
8225               grok_ctor_properties (ctx, r);
8226             /* If this is an instantiation of a member template, clone it.
8227                If it isn't, that'll be handled by
8228                clone_constructors_and_destructors.  */
8229             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8230               clone_function_decl (r, /*update_method_vec_p=*/0);
8231           }
8232         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8233                  && !grok_op_properties (r, (complain & tf_error) != 0))
8234           return error_mark_node;
8235
8236         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8237           SET_DECL_FRIEND_CONTEXT (r,
8238                                    tsubst (DECL_FRIEND_CONTEXT (t),
8239                                             args, complain, in_decl));
8240
8241         /* Possibly limit visibility based on template args.  */
8242         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8243         if (DECL_VISIBILITY_SPECIFIED (t))
8244           {
8245             DECL_VISIBILITY_SPECIFIED (r) = 0;
8246             DECL_ATTRIBUTES (r)
8247               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8248           }
8249         determine_visibility (r);
8250
8251         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8252                                         args, complain, in_decl);
8253       }
8254       break;
8255
8256     case PARM_DECL:
8257       {
8258         tree type = NULL_TREE;
8259         int i, len = 1;
8260         tree expanded_types = NULL_TREE;
8261         tree prev_r = NULL_TREE;
8262         tree first_r = NULL_TREE;
8263
8264         if (FUNCTION_PARAMETER_PACK_P (t))
8265           {
8266             /* If there is a local specialization that isn't a
8267                parameter pack, it means that we're doing a "simple"
8268                substitution from inside tsubst_pack_expansion. Just
8269                return the local specialization (which will be a single
8270                parm).  */
8271             tree spec = retrieve_local_specialization (t);
8272             if (spec 
8273                 && TREE_CODE (spec) == PARM_DECL
8274                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8275               return spec;
8276
8277             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8278                the parameters in this function parameter pack.  */
8279             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8280                                                     complain, in_decl);
8281             if (TREE_CODE (expanded_types) == TREE_VEC)
8282               {
8283                 len = TREE_VEC_LENGTH (expanded_types);
8284
8285                 /* Zero-length parameter packs are boring. Just substitute
8286                    into the chain.  */
8287                 if (len == 0)
8288                   return tsubst (TREE_CHAIN (t), args, complain, 
8289                                  TREE_CHAIN (t));
8290               }
8291             else
8292               {
8293                 /* All we did was update the type. Make a note of that.  */
8294                 type = expanded_types;
8295                 expanded_types = NULL_TREE;
8296               }
8297           }
8298
8299         /* Loop through all of the parameter's we'll build. When T is
8300            a function parameter pack, LEN is the number of expanded
8301            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8302         r = NULL_TREE;
8303         for (i = 0; i < len; ++i)
8304           {
8305             prev_r = r;
8306             r = copy_node (t);
8307             if (DECL_TEMPLATE_PARM_P (t))
8308               SET_DECL_TEMPLATE_PARM_P (r);
8309
8310             if (expanded_types)
8311               /* We're on the Ith parameter of the function parameter
8312                  pack.  */
8313               {
8314                 /* Get the Ith type.  */
8315                 type = TREE_VEC_ELT (expanded_types, i);
8316
8317                 if (DECL_NAME (r))
8318                   /* Rename the parameter to include the index.  */
8319                   DECL_NAME (r) =
8320                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8321               }
8322             else if (!type)
8323               /* We're dealing with a normal parameter.  */
8324               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8325
8326             type = type_decays_to (type);
8327             TREE_TYPE (r) = type;
8328             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8329
8330             if (DECL_INITIAL (r))
8331               {
8332                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8333                   DECL_INITIAL (r) = TREE_TYPE (r);
8334                 else
8335                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8336                                              complain, in_decl);
8337               }
8338
8339             DECL_CONTEXT (r) = NULL_TREE;
8340
8341             if (!DECL_TEMPLATE_PARM_P (r))
8342               DECL_ARG_TYPE (r) = type_passed_as (type);
8343
8344             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8345                                             args, complain, in_decl);
8346
8347             /* Keep track of the first new parameter we
8348                generate. That's what will be returned to the
8349                caller.  */
8350             if (!first_r)
8351               first_r = r;
8352
8353             /* Build a proper chain of parameters when substituting
8354                into a function parameter pack.  */
8355             if (prev_r)
8356               TREE_CHAIN (prev_r) = r;
8357           }
8358
8359         if (TREE_CHAIN (t))
8360           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8361                                    complain, TREE_CHAIN (t));
8362
8363         /* FIRST_R contains the start of the chain we've built.  */
8364         r = first_r;
8365       }
8366       break;
8367
8368     case FIELD_DECL:
8369       {
8370         tree type;
8371
8372         r = copy_decl (t);
8373         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8374         if (type == error_mark_node)
8375           return error_mark_node;
8376         TREE_TYPE (r) = type;
8377         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8378
8379         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8380         DECL_INITIAL (r)
8381           = tsubst_expr (DECL_INITIAL (t), args,
8382                          complain, in_decl,
8383                          /*integral_constant_expression_p=*/true);
8384         /* We don't have to set DECL_CONTEXT here; it is set by
8385            finish_member_declaration.  */
8386         TREE_CHAIN (r) = NULL_TREE;
8387         if (VOID_TYPE_P (type))
8388           error ("instantiation of %q+D as type %qT", r, type);
8389
8390         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8391                                         args, complain, in_decl);
8392       }
8393       break;
8394
8395     case USING_DECL:
8396       /* We reach here only for member using decls.  */
8397       if (DECL_DEPENDENT_P (t))
8398         {
8399           r = do_class_using_decl
8400             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8401              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8402           if (!r)
8403             r = error_mark_node;
8404         }
8405       else
8406         {
8407           r = copy_node (t);
8408           TREE_CHAIN (r) = NULL_TREE;
8409         }
8410       break;
8411
8412     case TYPE_DECL:
8413     case VAR_DECL:
8414       {
8415         tree argvec = NULL_TREE;
8416         tree gen_tmpl = NULL_TREE;
8417         tree spec;
8418         tree tmpl = NULL_TREE;
8419         tree ctx;
8420         tree type = NULL_TREE;
8421         bool local_p;
8422
8423         if (TREE_CODE (t) == TYPE_DECL
8424             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8425           {
8426             /* If this is the canonical decl, we don't have to
8427                mess with instantiations, and often we can't (for
8428                typename, template type parms and such).  Note that
8429                TYPE_NAME is not correct for the above test if
8430                we've copied the type for a typedef.  */
8431             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8432             if (type == error_mark_node)
8433               return error_mark_node;
8434             r = TYPE_NAME (type);
8435             break;
8436           }
8437
8438         /* Check to see if we already have the specialization we
8439            need.  */
8440         spec = NULL_TREE;
8441         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8442           {
8443             /* T is a static data member or namespace-scope entity.
8444                We have to substitute into namespace-scope variables
8445                (even though such entities are never templates) because
8446                of cases like:
8447                
8448                  template <class T> void f() { extern T t; }
8449
8450                where the entity referenced is not known until
8451                instantiation time.  */
8452             local_p = false;
8453             ctx = DECL_CONTEXT (t);
8454             if (DECL_CLASS_SCOPE_P (t))
8455               {
8456                 ctx = tsubst_aggr_type (ctx, args,
8457                                         complain,
8458                                         in_decl, /*entering_scope=*/1);
8459                 /* If CTX is unchanged, then T is in fact the
8460                    specialization we want.  That situation occurs when
8461                    referencing a static data member within in its own
8462                    class.  We can use pointer equality, rather than
8463                    same_type_p, because DECL_CONTEXT is always
8464                    canonical.  */
8465                 if (ctx == DECL_CONTEXT (t))
8466                   spec = t;
8467               }
8468
8469             if (!spec)
8470               {
8471                 tmpl = DECL_TI_TEMPLATE (t);
8472                 gen_tmpl = most_general_template (tmpl);
8473                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8474                 spec = (retrieve_specialization 
8475                         (gen_tmpl, argvec,
8476                          /*class_specializations_p=*/false));
8477               }
8478           }
8479         else
8480           {
8481             /* A local variable.  */
8482             local_p = true;
8483             /* Subsequent calls to pushdecl will fill this in.  */
8484             ctx = NULL_TREE;
8485             spec = retrieve_local_specialization (t);
8486           }
8487         /* If we already have the specialization we need, there is
8488            nothing more to do.  */ 
8489         if (spec)
8490           {
8491             r = spec;
8492             break;
8493           }
8494
8495         /* Create a new node for the specialization we need.  */
8496         r = copy_decl (t);
8497         if (type == NULL_TREE)
8498           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8499         if (TREE_CODE (r) == VAR_DECL)
8500           {
8501             /* Even if the original location is out of scope, the
8502                newly substituted one is not.  */
8503             DECL_DEAD_FOR_LOCAL (r) = 0;
8504             DECL_INITIALIZED_P (r) = 0;
8505             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8506             if (type == error_mark_node)
8507               return error_mark_node;
8508             if (TREE_CODE (type) == FUNCTION_TYPE)
8509               {
8510                 /* It may seem that this case cannot occur, since:
8511
8512                      typedef void f();
8513                      void g() { f x; }
8514
8515                    declares a function, not a variable.  However:
8516       
8517                      typedef void f();
8518                      template <typename T> void g() { T t; }
8519                      template void g<f>();
8520
8521                    is an attempt to declare a variable with function
8522                    type.  */
8523                 error ("variable %qD has function type",
8524                        /* R is not yet sufficiently initialized, so we
8525                           just use its name.  */
8526                        DECL_NAME (r));
8527                 return error_mark_node;
8528               }
8529             type = complete_type (type);
8530             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8531               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8532             type = check_var_type (DECL_NAME (r), type);
8533
8534             if (DECL_HAS_VALUE_EXPR_P (t))
8535               {
8536                 tree ve = DECL_VALUE_EXPR (t);
8537                 ve = tsubst_expr (ve, args, complain, in_decl,
8538                                   /*constant_expression_p=*/false);
8539                 SET_DECL_VALUE_EXPR (r, ve);
8540               }
8541           }
8542         else if (DECL_SELF_REFERENCE_P (t))
8543           SET_DECL_SELF_REFERENCE_P (r);
8544         TREE_TYPE (r) = type;
8545         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8546         DECL_CONTEXT (r) = ctx;
8547         /* Clear out the mangled name and RTL for the instantiation.  */
8548         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8549         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8550           SET_DECL_RTL (r, NULL_RTX);
8551         /* The initializer must not be expanded until it is required;
8552            see [temp.inst].  */
8553         DECL_INITIAL (r) = NULL_TREE;
8554         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8555           SET_DECL_RTL (r, NULL_RTX);
8556         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8557         if (TREE_CODE (r) == VAR_DECL)
8558           {
8559             /* Possibly limit visibility based on template args.  */
8560             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8561             if (DECL_VISIBILITY_SPECIFIED (t))
8562               {
8563                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8564                 DECL_ATTRIBUTES (r)
8565                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8566               }
8567             determine_visibility (r);
8568           }
8569         /* Preserve a typedef that names a type.  */
8570         else if (TREE_CODE (r) == TYPE_DECL
8571                  && DECL_ORIGINAL_TYPE (t)
8572                  && type != error_mark_node)
8573           {
8574             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8575                                              args, complain, in_decl);
8576             TREE_TYPE (r) = type = build_variant_type_copy (type);
8577             TYPE_NAME (type) = r;
8578           }
8579
8580         if (!local_p)
8581           {
8582             /* A static data member declaration is always marked
8583                external when it is declared in-class, even if an
8584                initializer is present.  We mimic the non-template
8585                processing here.  */
8586             DECL_EXTERNAL (r) = 1;
8587
8588             register_specialization (r, gen_tmpl, argvec, false);
8589             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8590             SET_DECL_IMPLICIT_INSTANTIATION (r);
8591           }
8592         else
8593           register_local_specialization (r, t);
8594
8595         TREE_CHAIN (r) = NULL_TREE;
8596
8597         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8598                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8599                                         args, complain, in_decl);
8600         layout_decl (r, 0);
8601       }
8602       break;
8603
8604     default:
8605       gcc_unreachable ();
8606     }
8607
8608   /* Restore the file and line information.  */
8609   input_location = saved_loc;
8610
8611   return r;
8612 }
8613
8614 /* Substitute into the ARG_TYPES of a function type.  */
8615
8616 static tree
8617 tsubst_arg_types (tree arg_types,
8618                   tree args,
8619                   tsubst_flags_t complain,
8620                   tree in_decl)
8621 {
8622   tree remaining_arg_types;
8623   tree type = NULL_TREE;
8624   int i = 1;
8625   tree expanded_args = NULL_TREE;
8626   tree default_arg;
8627
8628   if (!arg_types || arg_types == void_list_node)
8629     return arg_types;
8630
8631   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8632                                           args, complain, in_decl);
8633   if (remaining_arg_types == error_mark_node)
8634     return error_mark_node;
8635
8636   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8637     {
8638       /* For a pack expansion, perform substitution on the
8639          entire expression. Later on, we'll handle the arguments
8640          one-by-one.  */
8641       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8642                                             args, complain, in_decl);
8643
8644       if (TREE_CODE (expanded_args) == TREE_VEC)
8645         /* So that we'll spin through the parameters, one by one.  */
8646         i = TREE_VEC_LENGTH (expanded_args);
8647       else
8648         {
8649           /* We only partially substituted into the parameter
8650              pack. Our type is TYPE_PACK_EXPANSION.  */
8651           type = expanded_args;
8652           expanded_args = NULL_TREE;
8653         }
8654     }
8655
8656   while (i > 0) {
8657     --i;
8658     
8659     if (expanded_args)
8660       type = TREE_VEC_ELT (expanded_args, i);
8661     else if (!type)
8662       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8663
8664     if (type == error_mark_node)
8665       return error_mark_node;
8666     if (VOID_TYPE_P (type))
8667       {
8668         if (complain & tf_error)
8669           {
8670             error ("invalid parameter type %qT", type);
8671             if (in_decl)
8672               error ("in declaration %q+D", in_decl);
8673           }
8674         return error_mark_node;
8675     }
8676     
8677     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8678        top-level qualifiers as required.  */
8679     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8680
8681     /* We do not substitute into default arguments here.  The standard
8682        mandates that they be instantiated only when needed, which is
8683        done in build_over_call.  */
8684     default_arg = TREE_PURPOSE (arg_types);
8685
8686     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8687       {
8688         /* We've instantiated a template before its default arguments
8689            have been parsed.  This can happen for a nested template
8690            class, and is not an error unless we require the default
8691            argument in a call of this function.  */
8692         remaining_arg_types = 
8693           tree_cons (default_arg, type, remaining_arg_types);
8694         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8695                        remaining_arg_types);
8696       }
8697     else
8698       remaining_arg_types = 
8699         hash_tree_cons (default_arg, type, remaining_arg_types);
8700   }
8701         
8702   return remaining_arg_types;
8703 }
8704
8705 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8706    *not* handle the exception-specification for FNTYPE, because the
8707    initial substitution of explicitly provided template parameters
8708    during argument deduction forbids substitution into the
8709    exception-specification:
8710
8711      [temp.deduct]
8712
8713      All references in the function type of the function template to  the
8714      corresponding template parameters are replaced by the specified tem-
8715      plate argument values.  If a substitution in a template parameter or
8716      in  the function type of the function template results in an invalid
8717      type, type deduction fails.  [Note: The equivalent  substitution  in
8718      exception specifications is done only when the function is instanti-
8719      ated, at which point a program is  ill-formed  if  the  substitution
8720      results in an invalid type.]  */
8721
8722 static tree
8723 tsubst_function_type (tree t,
8724                       tree args,
8725                       tsubst_flags_t complain,
8726                       tree in_decl)
8727 {
8728   tree return_type;
8729   tree arg_types;
8730   tree fntype;
8731
8732   /* The TYPE_CONTEXT is not used for function/method types.  */
8733   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8734
8735   /* Substitute the return type.  */
8736   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8737   if (return_type == error_mark_node)
8738     return error_mark_node;
8739   /* The standard does not presently indicate that creation of a
8740      function type with an invalid return type is a deduction failure.
8741      However, that is clearly analogous to creating an array of "void"
8742      or a reference to a reference.  This is core issue #486.  */
8743   if (TREE_CODE (return_type) == ARRAY_TYPE
8744       || TREE_CODE (return_type) == FUNCTION_TYPE)
8745     {
8746       if (complain & tf_error)
8747         {
8748           if (TREE_CODE (return_type) == ARRAY_TYPE)
8749             error ("function returning an array");
8750           else
8751             error ("function returning a function");
8752         }
8753       return error_mark_node;
8754     }
8755
8756   /* Substitute the argument types.  */
8757   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8758                                 complain, in_decl);
8759   if (arg_types == error_mark_node)
8760     return error_mark_node;
8761
8762   /* Construct a new type node and return it.  */
8763   if (TREE_CODE (t) == FUNCTION_TYPE)
8764     fntype = build_function_type (return_type, arg_types);
8765   else
8766     {
8767       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8768       if (! MAYBE_CLASS_TYPE_P (r))
8769         {
8770           /* [temp.deduct]
8771
8772              Type deduction may fail for any of the following
8773              reasons:
8774
8775              -- Attempting to create "pointer to member of T" when T
8776              is not a class type.  */
8777           if (complain & tf_error)
8778             error ("creating pointer to member function of non-class type %qT",
8779                       r);
8780           return error_mark_node;
8781         }
8782
8783       fntype = build_method_type_directly (r, return_type,
8784                                            TREE_CHAIN (arg_types));
8785     }
8786   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8787   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8788
8789   return fntype;
8790 }
8791
8792 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8793    ARGS into that specification, and return the substituted
8794    specification.  If there is no specification, return NULL_TREE.  */
8795
8796 static tree
8797 tsubst_exception_specification (tree fntype,
8798                                 tree args,
8799                                 tsubst_flags_t complain,
8800                                 tree in_decl)
8801 {
8802   tree specs;
8803   tree new_specs;
8804
8805   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8806   new_specs = NULL_TREE;
8807   if (specs)
8808     {
8809       if (! TREE_VALUE (specs))
8810         new_specs = specs;
8811       else
8812         while (specs)
8813           {
8814             tree spec;
8815             int i, len = 1;
8816             tree expanded_specs = NULL_TREE;
8817
8818             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8819               {
8820                 /* Expand the pack expansion type.  */
8821                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8822                                                        args, complain,
8823                                                        in_decl);
8824
8825                 if (expanded_specs == error_mark_node)
8826                   return error_mark_node;
8827                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8828                   len = TREE_VEC_LENGTH (expanded_specs);
8829                 else
8830                   {
8831                     /* We're substituting into a member template, so
8832                        we got a TYPE_PACK_EXPANSION back.  Add that
8833                        expansion and move on.  */
8834                     gcc_assert (TREE_CODE (expanded_specs) 
8835                                 == TYPE_PACK_EXPANSION);
8836                     new_specs = add_exception_specifier (new_specs,
8837                                                          expanded_specs,
8838                                                          complain);
8839                     specs = TREE_CHAIN (specs);
8840                     continue;
8841                   }
8842               }
8843
8844             for (i = 0; i < len; ++i)
8845               {
8846                 if (expanded_specs)
8847                   spec = TREE_VEC_ELT (expanded_specs, i);
8848                 else
8849                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8850                 if (spec == error_mark_node)
8851                   return spec;
8852                 new_specs = add_exception_specifier (new_specs, spec, 
8853                                                      complain);
8854               }
8855
8856             specs = TREE_CHAIN (specs);
8857           }
8858     }
8859   return new_specs;
8860 }
8861
8862 /* Take the tree structure T and replace template parameters used
8863    therein with the argument vector ARGS.  IN_DECL is an associated
8864    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8865    Issue error and warning messages under control of COMPLAIN.  Note
8866    that we must be relatively non-tolerant of extensions here, in
8867    order to preserve conformance; if we allow substitutions that
8868    should not be allowed, we may allow argument deductions that should
8869    not succeed, and therefore report ambiguous overload situations
8870    where there are none.  In theory, we could allow the substitution,
8871    but indicate that it should have failed, and allow our caller to
8872    make sure that the right thing happens, but we don't try to do this
8873    yet.
8874
8875    This function is used for dealing with types, decls and the like;
8876    for expressions, use tsubst_expr or tsubst_copy.  */
8877
8878 static tree
8879 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8880 {
8881   tree type, r;
8882
8883   if (t == NULL_TREE || t == error_mark_node
8884       || t == integer_type_node
8885       || t == void_type_node
8886       || t == char_type_node
8887       || t == unknown_type_node
8888       || TREE_CODE (t) == NAMESPACE_DECL)
8889     return t;
8890
8891   if (DECL_P (t))
8892     return tsubst_decl (t, args, complain);
8893
8894   if (TREE_CODE (t) == IDENTIFIER_NODE)
8895     type = IDENTIFIER_TYPE_VALUE (t);
8896   else
8897     type = TREE_TYPE (t);
8898
8899   gcc_assert (type != unknown_type_node);
8900
8901   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8902      such as attribute aligned.  */
8903   if (TYPE_P (t)
8904       && TYPE_NAME (t)
8905       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8906     {
8907       tree decl = TYPE_NAME (t);
8908       
8909       if (DECL_CLASS_SCOPE_P (decl)
8910           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8911           && uses_template_parms (DECL_CONTEXT (decl)))
8912         {
8913           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8914           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8915           r = retrieve_specialization (tmpl, gen_args, false);
8916         }
8917       else if (DECL_FUNCTION_SCOPE_P (decl)
8918                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8919                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8920         r = retrieve_local_specialization (decl);
8921       else
8922         /* The typedef is from a non-template context.  */
8923         return t;
8924
8925       if (r)
8926         {
8927           r = TREE_TYPE (r);
8928           r = cp_build_qualified_type_real
8929             (r, cp_type_quals (t) | cp_type_quals (r),
8930              complain | tf_ignore_bad_quals);
8931           return r;
8932         }
8933       /* Else we must be instantiating the typedef, so fall through.  */
8934     }
8935
8936   if (type
8937       && TREE_CODE (t) != TYPENAME_TYPE
8938       && TREE_CODE (t) != IDENTIFIER_NODE
8939       && TREE_CODE (t) != FUNCTION_TYPE
8940       && TREE_CODE (t) != METHOD_TYPE)
8941     type = tsubst (type, args, complain, in_decl);
8942   if (type == error_mark_node)
8943     return error_mark_node;
8944
8945   switch (TREE_CODE (t))
8946     {
8947     case RECORD_TYPE:
8948     case UNION_TYPE:
8949     case ENUMERAL_TYPE:
8950       return tsubst_aggr_type (t, args, complain, in_decl,
8951                                /*entering_scope=*/0);
8952
8953     case ERROR_MARK:
8954     case IDENTIFIER_NODE:
8955     case VOID_TYPE:
8956     case REAL_TYPE:
8957     case COMPLEX_TYPE:
8958     case VECTOR_TYPE:
8959     case BOOLEAN_TYPE:
8960     case INTEGER_CST:
8961     case REAL_CST:
8962     case STRING_CST:
8963       return t;
8964
8965     case INTEGER_TYPE:
8966       if (t == integer_type_node)
8967         return t;
8968
8969       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8970           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8971         return t;
8972
8973       {
8974         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8975
8976         max = tsubst_expr (omax, args, complain, in_decl,
8977                            /*integral_constant_expression_p=*/false);
8978         max = fold_decl_constant_value (max);
8979
8980         if (TREE_CODE (max) != INTEGER_CST
8981             && !at_function_scope_p ()
8982             && !value_dependent_expression_p (max))
8983           {
8984             if (complain & tf_error)
8985               error ("array bound is not an integer constant");
8986             return error_mark_node;
8987           }
8988
8989         /* [temp.deduct]
8990
8991            Type deduction may fail for any of the following
8992            reasons:
8993
8994              Attempting to create an array with a size that is
8995              zero or negative.  */
8996         if (integer_zerop (max) && !(complain & tf_error))
8997           /* We must fail if performing argument deduction (as
8998              indicated by the state of complain), so that
8999              another substitution can be found.  */
9000           return error_mark_node;
9001         else if (TREE_CODE (max) == INTEGER_CST
9002                  && INT_CST_LT (max, integer_zero_node))
9003           {
9004             if (complain & tf_error)
9005               error ("creating array with negative size (%qE)", max);
9006
9007             return error_mark_node;
9008           }
9009
9010         return compute_array_index_type (NULL_TREE, max);
9011       }
9012
9013     case TEMPLATE_TYPE_PARM:
9014     case TEMPLATE_TEMPLATE_PARM:
9015     case BOUND_TEMPLATE_TEMPLATE_PARM:
9016     case TEMPLATE_PARM_INDEX:
9017       {
9018         int idx;
9019         int level;
9020         int levels;
9021         tree arg = NULL_TREE;
9022
9023         r = NULL_TREE;
9024
9025         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9026         template_parm_level_and_index (t, &level, &idx); 
9027
9028         levels = TMPL_ARGS_DEPTH (args);
9029         if (level <= levels)
9030           {
9031             arg = TMPL_ARG (args, level, idx);
9032
9033             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9034               /* See through ARGUMENT_PACK_SELECT arguments. */
9035               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9036           }
9037
9038         if (arg == error_mark_node)
9039           return error_mark_node;
9040         else if (arg != NULL_TREE)
9041           {
9042             if (ARGUMENT_PACK_P (arg))
9043               /* If ARG is an argument pack, we don't actually want to
9044                  perform a substitution here, because substitutions
9045                  for argument packs are only done
9046                  element-by-element. We can get to this point when
9047                  substituting the type of a non-type template
9048                  parameter pack, when that type actually contains
9049                  template parameter packs from an outer template, e.g.,
9050
9051                  template<typename... Types> struct A {
9052                    template<Types... Values> struct B { };
9053                  };  */
9054               return t;
9055
9056             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9057               {
9058                 int quals;
9059                 gcc_assert (TYPE_P (arg));
9060
9061                 /* cv-quals from the template are discarded when
9062                    substituting in a function or reference type.  */
9063                 if (TREE_CODE (arg) == FUNCTION_TYPE
9064                     || TREE_CODE (arg) == METHOD_TYPE
9065                     || TREE_CODE (arg) == REFERENCE_TYPE)
9066                   quals = cp_type_quals (arg);
9067                 else
9068                   quals = cp_type_quals (arg) | cp_type_quals (t);
9069                   
9070                 return cp_build_qualified_type_real
9071                   (arg, quals, complain | tf_ignore_bad_quals);
9072               }
9073             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9074               {
9075                 /* We are processing a type constructed from a
9076                    template template parameter.  */
9077                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9078                                       args, complain, in_decl);
9079                 if (argvec == error_mark_node)
9080                   return error_mark_node;
9081
9082                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9083                    are resolving nested-types in the signature of a
9084                    member function templates.  Otherwise ARG is a
9085                    TEMPLATE_DECL and is the real template to be
9086                    instantiated.  */
9087                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9088                   arg = TYPE_NAME (arg);
9089
9090                 r = lookup_template_class (arg,
9091                                            argvec, in_decl,
9092                                            DECL_CONTEXT (arg),
9093                                             /*entering_scope=*/0,
9094                                            complain);
9095                 return cp_build_qualified_type_real
9096                   (r, TYPE_QUALS (t), complain);
9097               }
9098             else
9099               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9100               return arg;
9101           }
9102
9103         if (level == 1)
9104           /* This can happen during the attempted tsubst'ing in
9105              unify.  This means that we don't yet have any information
9106              about the template parameter in question.  */
9107           return t;
9108
9109         /* If we get here, we must have been looking at a parm for a
9110            more deeply nested template.  Make a new version of this
9111            template parameter, but with a lower level.  */
9112         switch (TREE_CODE (t))
9113           {
9114           case TEMPLATE_TYPE_PARM:
9115           case TEMPLATE_TEMPLATE_PARM:
9116           case BOUND_TEMPLATE_TEMPLATE_PARM:
9117             if (cp_type_quals (t))
9118               {
9119                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9120                 r = cp_build_qualified_type_real
9121                   (r, cp_type_quals (t),
9122                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9123                                ? tf_ignore_bad_quals : 0));
9124               }
9125             else
9126               {
9127                 r = copy_type (t);
9128                 TEMPLATE_TYPE_PARM_INDEX (r)
9129                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9130                                                 r, levels, args, complain);
9131                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9132                 TYPE_MAIN_VARIANT (r) = r;
9133                 TYPE_POINTER_TO (r) = NULL_TREE;
9134                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9135
9136                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9137                   /* We have reduced the level of the template
9138                      template parameter, but not the levels of its
9139                      template parameters, so canonical_type_parameter
9140                      will not be able to find the canonical template
9141                      template parameter for this level. Thus, we
9142                      require structural equality checking to compare
9143                      TEMPLATE_TEMPLATE_PARMs. */
9144                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9145                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9146                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9147                 else
9148                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9149
9150                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9151                   {
9152                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9153                                           complain, in_decl);
9154                     if (argvec == error_mark_node)
9155                       return error_mark_node;
9156
9157                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9158                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9159                   }
9160               }
9161             break;
9162
9163           case TEMPLATE_PARM_INDEX:
9164             r = reduce_template_parm_level (t, type, levels, args, complain);
9165             break;
9166
9167           default:
9168             gcc_unreachable ();
9169           }
9170
9171         return r;
9172       }
9173
9174     case TREE_LIST:
9175       {
9176         tree purpose, value, chain;
9177
9178         if (t == void_list_node)
9179           return t;
9180
9181         purpose = TREE_PURPOSE (t);
9182         if (purpose)
9183           {
9184             purpose = tsubst (purpose, args, complain, in_decl);
9185             if (purpose == error_mark_node)
9186               return error_mark_node;
9187           }
9188         value = TREE_VALUE (t);
9189         if (value)
9190           {
9191             value = tsubst (value, args, complain, in_decl);
9192             if (value == error_mark_node)
9193               return error_mark_node;
9194           }
9195         chain = TREE_CHAIN (t);
9196         if (chain && chain != void_type_node)
9197           {
9198             chain = tsubst (chain, args, complain, in_decl);
9199             if (chain == error_mark_node)
9200               return error_mark_node;
9201           }
9202         if (purpose == TREE_PURPOSE (t)
9203             && value == TREE_VALUE (t)
9204             && chain == TREE_CHAIN (t))
9205           return t;
9206         return hash_tree_cons (purpose, value, chain);
9207       }
9208
9209     case TREE_BINFO:
9210       /* We should never be tsubsting a binfo.  */
9211       gcc_unreachable ();
9212
9213     case TREE_VEC:
9214       /* A vector of template arguments.  */
9215       gcc_assert (!type);
9216       return tsubst_template_args (t, args, complain, in_decl);
9217
9218     case POINTER_TYPE:
9219     case REFERENCE_TYPE:
9220       {
9221         enum tree_code code;
9222
9223         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9224           return t;
9225
9226         code = TREE_CODE (t);
9227
9228
9229         /* [temp.deduct]
9230
9231            Type deduction may fail for any of the following
9232            reasons:
9233
9234            -- Attempting to create a pointer to reference type.
9235            -- Attempting to create a reference to a reference type or
9236               a reference to void.
9237
9238           Core issue 106 says that creating a reference to a reference
9239           during instantiation is no longer a cause for failure. We
9240           only enforce this check in strict C++98 mode.  */
9241         if ((TREE_CODE (type) == REFERENCE_TYPE
9242              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9243             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9244           {
9245             static location_t last_loc;
9246
9247             /* We keep track of the last time we issued this error
9248                message to avoid spewing a ton of messages during a
9249                single bad template instantiation.  */
9250             if (complain & tf_error
9251                 && last_loc != input_location)
9252               {
9253                 if (TREE_CODE (type) == VOID_TYPE)
9254                   error ("forming reference to void");
9255                 else
9256                   error ("forming %s to reference type %qT",
9257                          (code == POINTER_TYPE) ? "pointer" : "reference",
9258                          type);
9259                 last_loc = input_location;
9260               }
9261
9262             return error_mark_node;
9263           }
9264         else if (code == POINTER_TYPE)
9265           {
9266             r = build_pointer_type (type);
9267             if (TREE_CODE (type) == METHOD_TYPE)
9268               r = build_ptrmemfunc_type (r);
9269           }
9270         else if (TREE_CODE (type) == REFERENCE_TYPE)
9271           /* In C++0x, during template argument substitution, when there is an
9272              attempt to create a reference to a reference type, reference
9273              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9274
9275              "If a template-argument for a template-parameter T names a type
9276              that is a reference to a type A, an attempt to create the type
9277              'lvalue reference to cv T' creates the type 'lvalue reference to
9278              A,' while an attempt to create the type type rvalue reference to
9279              cv T' creates the type T"
9280           */
9281           r = cp_build_reference_type
9282               (TREE_TYPE (type),
9283                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9284         else
9285           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9286         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9287
9288         if (r != error_mark_node)
9289           /* Will this ever be needed for TYPE_..._TO values?  */
9290           layout_type (r);
9291
9292         return r;
9293       }
9294     case OFFSET_TYPE:
9295       {
9296         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9297         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9298           {
9299             /* [temp.deduct]
9300
9301                Type deduction may fail for any of the following
9302                reasons:
9303
9304                -- Attempting to create "pointer to member of T" when T
9305                   is not a class type.  */
9306             if (complain & tf_error)
9307               error ("creating pointer to member of non-class type %qT", r);
9308             return error_mark_node;
9309           }
9310         if (TREE_CODE (type) == REFERENCE_TYPE)
9311           {
9312             if (complain & tf_error)
9313               error ("creating pointer to member reference type %qT", type);
9314             return error_mark_node;
9315           }
9316         if (TREE_CODE (type) == VOID_TYPE)
9317           {
9318             if (complain & tf_error)
9319               error ("creating pointer to member of type void");
9320             return error_mark_node;
9321           }
9322         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9323         if (TREE_CODE (type) == FUNCTION_TYPE)
9324           {
9325             /* The type of the implicit object parameter gets its
9326                cv-qualifiers from the FUNCTION_TYPE. */
9327             tree method_type;
9328             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9329                                                       cp_type_quals (type));
9330             tree memptr;
9331             method_type = build_method_type_directly (this_type,
9332                                                       TREE_TYPE (type),
9333                                                       TYPE_ARG_TYPES (type));
9334             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9335             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9336                                                  complain);
9337           }
9338         else
9339           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9340                                                TYPE_QUALS (t),
9341                                                complain);
9342       }
9343     case FUNCTION_TYPE:
9344     case METHOD_TYPE:
9345       {
9346         tree fntype;
9347         tree specs;
9348         fntype = tsubst_function_type (t, args, complain, in_decl);
9349         if (fntype == error_mark_node)
9350           return error_mark_node;
9351
9352         /* Substitute the exception specification.  */
9353         specs = tsubst_exception_specification (t, args, complain,
9354                                                 in_decl);
9355         if (specs == error_mark_node)
9356           return error_mark_node;
9357         if (specs)
9358           fntype = build_exception_variant (fntype, specs);
9359         return fntype;
9360       }
9361     case ARRAY_TYPE:
9362       {
9363         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9364         if (domain == error_mark_node)
9365           return error_mark_node;
9366
9367         /* As an optimization, we avoid regenerating the array type if
9368            it will obviously be the same as T.  */
9369         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9370           return t;
9371
9372         /* These checks should match the ones in grokdeclarator.
9373
9374            [temp.deduct]
9375
9376            The deduction may fail for any of the following reasons:
9377
9378            -- Attempting to create an array with an element type that
9379               is void, a function type, or a reference type, or [DR337]
9380               an abstract class type.  */
9381         if (TREE_CODE (type) == VOID_TYPE
9382             || TREE_CODE (type) == FUNCTION_TYPE
9383             || TREE_CODE (type) == REFERENCE_TYPE)
9384           {
9385             if (complain & tf_error)
9386               error ("creating array of %qT", type);
9387             return error_mark_node;
9388           }
9389         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9390           {
9391             if (complain & tf_error)
9392               error ("creating array of %qT, which is an abstract class type",
9393                      type);
9394             return error_mark_node;
9395           }
9396
9397         r = build_cplus_array_type (type, domain);
9398
9399         if (TYPE_USER_ALIGN (t))
9400           {
9401             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9402             TYPE_USER_ALIGN (r) = 1;
9403           }
9404
9405         return r;
9406       }
9407
9408     case PLUS_EXPR:
9409     case MINUS_EXPR:
9410       {
9411         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9412         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9413
9414         if (e1 == error_mark_node || e2 == error_mark_node)
9415           return error_mark_node;
9416
9417         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9418       }
9419
9420     case NEGATE_EXPR:
9421     case NOP_EXPR:
9422       {
9423         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9424         if (e == error_mark_node)
9425           return error_mark_node;
9426
9427         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9428       }
9429
9430     case TYPENAME_TYPE:
9431       {
9432         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9433                                      in_decl, /*entering_scope=*/1);
9434         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9435                               complain, in_decl);
9436
9437         if (ctx == error_mark_node || f == error_mark_node)
9438           return error_mark_node;
9439
9440         if (!MAYBE_CLASS_TYPE_P (ctx))
9441           {
9442             if (complain & tf_error)
9443               error ("%qT is not a class, struct, or union type", ctx);
9444             return error_mark_node;
9445           }
9446         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9447           {
9448             /* Normally, make_typename_type does not require that the CTX
9449                have complete type in order to allow things like:
9450
9451                  template <class T> struct S { typename S<T>::X Y; };
9452
9453                But, such constructs have already been resolved by this
9454                point, so here CTX really should have complete type, unless
9455                it's a partial instantiation.  */
9456             ctx = complete_type (ctx);
9457             if (!COMPLETE_TYPE_P (ctx))
9458               {
9459                 if (complain & tf_error)
9460                   cxx_incomplete_type_error (NULL_TREE, ctx);
9461                 return error_mark_node;
9462               }
9463           }
9464
9465         f = make_typename_type (ctx, f, typename_type,
9466                                 (complain & tf_error) | tf_keep_type_decl);
9467         if (f == error_mark_node)
9468           return f;
9469         if (TREE_CODE (f) == TYPE_DECL)
9470           {
9471             complain |= tf_ignore_bad_quals;
9472             f = TREE_TYPE (f);
9473           }
9474
9475         if (TREE_CODE (f) != TYPENAME_TYPE)
9476           {
9477             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9478               error ("%qT resolves to %qT, which is not an enumeration type",
9479                      t, f);
9480             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9481               error ("%qT resolves to %qT, which is is not a class type",
9482                      t, f);
9483           }
9484
9485         return cp_build_qualified_type_real
9486           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9487       }
9488
9489     case UNBOUND_CLASS_TEMPLATE:
9490       {
9491         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9492                                      in_decl, /*entering_scope=*/1);
9493         tree name = TYPE_IDENTIFIER (t);
9494         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9495
9496         if (ctx == error_mark_node || name == error_mark_node)
9497           return error_mark_node;
9498
9499         if (parm_list)
9500           parm_list = tsubst_template_parms (parm_list, args, complain);
9501         return make_unbound_class_template (ctx, name, parm_list, complain);
9502       }
9503
9504     case INDIRECT_REF:
9505     case ADDR_EXPR:
9506     case CALL_EXPR:
9507       gcc_unreachable ();
9508
9509     case ARRAY_REF:
9510       {
9511         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9512         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9513                                /*integral_constant_expression_p=*/false);
9514         if (e1 == error_mark_node || e2 == error_mark_node)
9515           return error_mark_node;
9516
9517         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9518       }
9519
9520     case SCOPE_REF:
9521       {
9522         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9523         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9524         if (e1 == error_mark_node || e2 == error_mark_node)
9525           return error_mark_node;
9526
9527         return build_qualified_name (/*type=*/NULL_TREE,
9528                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9529       }
9530
9531     case TYPEOF_TYPE:
9532       {
9533         tree type;
9534
9535         type = finish_typeof (tsubst_expr 
9536                               (TYPEOF_TYPE_EXPR (t), args,
9537                                complain, in_decl,
9538                                /*integral_constant_expression_p=*/false));
9539         return cp_build_qualified_type_real (type,
9540                                              cp_type_quals (t)
9541                                              | cp_type_quals (type),
9542                                              complain);
9543       }
9544
9545     case DECLTYPE_TYPE:
9546       {
9547         tree type;
9548
9549         type = 
9550           finish_decltype_type (tsubst_expr 
9551                                 (DECLTYPE_TYPE_EXPR (t), args,
9552                                  complain, in_decl,
9553                                  /*integral_constant_expression_p=*/false),
9554                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9555         return cp_build_qualified_type_real (type,
9556                                              cp_type_quals (t)
9557                                              | cp_type_quals (type),
9558                                              complain);
9559       }
9560
9561     case TYPE_ARGUMENT_PACK:
9562     case NONTYPE_ARGUMENT_PACK:
9563       {
9564         tree r = make_node (TREE_CODE (t));
9565         tree packed_out = 
9566           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9567                                 args,
9568                                 complain,
9569                                 in_decl);
9570         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9571
9572         /* For template nontype argument packs, also substitute into
9573            the type.  */
9574         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9575           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9576
9577         return r;
9578       }
9579       break;
9580
9581     default:
9582       sorry ("use of %qs in template",
9583              tree_code_name [(int) TREE_CODE (t)]);
9584       return error_mark_node;
9585     }
9586 }
9587
9588 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9589    type of the expression on the left-hand side of the "." or "->"
9590    operator.  */
9591
9592 static tree
9593 tsubst_baselink (tree baselink, tree object_type,
9594                  tree args, tsubst_flags_t complain, tree in_decl)
9595 {
9596     tree name;
9597     tree qualifying_scope;
9598     tree fns;
9599     tree optype;
9600     tree template_args = 0;
9601     bool template_id_p = false;
9602
9603     /* A baselink indicates a function from a base class.  Both the
9604        BASELINK_ACCESS_BINFO and the base class referenced may
9605        indicate bases of the template class, rather than the
9606        instantiated class.  In addition, lookups that were not
9607        ambiguous before may be ambiguous now.  Therefore, we perform
9608        the lookup again.  */
9609     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9610     qualifying_scope = tsubst (qualifying_scope, args,
9611                                complain, in_decl);
9612     fns = BASELINK_FUNCTIONS (baselink);
9613     optype = BASELINK_OPTYPE (baselink);
9614     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9615       {
9616         template_id_p = true;
9617         template_args = TREE_OPERAND (fns, 1);
9618         fns = TREE_OPERAND (fns, 0);
9619         if (template_args)
9620           template_args = tsubst_template_args (template_args, args,
9621                                                 complain, in_decl);
9622       }
9623     name = DECL_NAME (get_first_fn (fns));
9624     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9625
9626     /* If lookup found a single function, mark it as used at this
9627        point.  (If it lookup found multiple functions the one selected
9628        later by overload resolution will be marked as used at that
9629        point.)  */
9630     if (BASELINK_P (baselink))
9631       fns = BASELINK_FUNCTIONS (baselink);
9632     if (!template_id_p && !really_overloaded_fn (fns))
9633       mark_used (OVL_CURRENT (fns));
9634
9635     /* Add back the template arguments, if present.  */
9636     if (BASELINK_P (baselink) && template_id_p)
9637       BASELINK_FUNCTIONS (baselink)
9638         = build_nt (TEMPLATE_ID_EXPR,
9639                     BASELINK_FUNCTIONS (baselink),
9640                     template_args);
9641     /* Update the conversion operator type.  */
9642     BASELINK_OPTYPE (baselink) 
9643       = tsubst (optype, args, complain, in_decl);
9644
9645     if (!object_type)
9646       object_type = current_class_type;
9647     return adjust_result_of_qualified_name_lookup (baselink,
9648                                                    qualifying_scope,
9649                                                    object_type);
9650 }
9651
9652 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9653    true if the qualified-id will be a postfix-expression in-and-of
9654    itself; false if more of the postfix-expression follows the
9655    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9656    of "&".  */
9657
9658 static tree
9659 tsubst_qualified_id (tree qualified_id, tree args,
9660                      tsubst_flags_t complain, tree in_decl,
9661                      bool done, bool address_p)
9662 {
9663   tree expr;
9664   tree scope;
9665   tree name;
9666   bool is_template;
9667   tree template_args;
9668
9669   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9670
9671   /* Figure out what name to look up.  */
9672   name = TREE_OPERAND (qualified_id, 1);
9673   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9674     {
9675       is_template = true;
9676       template_args = TREE_OPERAND (name, 1);
9677       if (template_args)
9678         template_args = tsubst_template_args (template_args, args,
9679                                               complain, in_decl);
9680       name = TREE_OPERAND (name, 0);
9681     }
9682   else
9683     {
9684       is_template = false;
9685       template_args = NULL_TREE;
9686     }
9687
9688   /* Substitute into the qualifying scope.  When there are no ARGS, we
9689      are just trying to simplify a non-dependent expression.  In that
9690      case the qualifying scope may be dependent, and, in any case,
9691      substituting will not help.  */
9692   scope = TREE_OPERAND (qualified_id, 0);
9693   if (args)
9694     {
9695       scope = tsubst (scope, args, complain, in_decl);
9696       expr = tsubst_copy (name, args, complain, in_decl);
9697     }
9698   else
9699     expr = name;
9700
9701   if (dependent_type_p (scope))
9702     return build_qualified_name (/*type=*/NULL_TREE,
9703                                  scope, expr,
9704                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9705
9706   if (!BASELINK_P (name) && !DECL_P (expr))
9707     {
9708       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9709         /* If this were actually a destructor call, it would have been
9710            parsed as such by the parser.  */
9711         expr = error_mark_node;
9712       else
9713         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9714       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9715                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9716         {
9717           if (complain & tf_error)
9718             {
9719               error ("dependent-name %qE is parsed as a non-type, but "
9720                      "instantiation yields a type", qualified_id);
9721               inform ("say %<typename %E%> if a type is meant", qualified_id);
9722             }
9723           return error_mark_node;
9724         }
9725     }
9726
9727   if (DECL_P (expr))
9728     {
9729       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9730                                            scope);
9731       /* Remember that there was a reference to this entity.  */
9732       mark_used (expr);
9733     }
9734
9735   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9736     {
9737       if (complain & tf_error)
9738         qualified_name_lookup_error (scope,
9739                                      TREE_OPERAND (qualified_id, 1),
9740                                      expr, input_location);
9741       return error_mark_node;
9742     }
9743
9744   if (is_template)
9745     expr = lookup_template_function (expr, template_args);
9746
9747   if (expr == error_mark_node && complain & tf_error)
9748     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9749                                  expr, input_location);
9750   else if (TYPE_P (scope))
9751     {
9752       expr = (adjust_result_of_qualified_name_lookup
9753               (expr, scope, current_class_type));
9754       expr = (finish_qualified_id_expr
9755               (scope, expr, done, address_p,
9756                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9757                /*template_arg_p=*/false));
9758     }
9759
9760   /* Expressions do not generally have reference type.  */
9761   if (TREE_CODE (expr) != SCOPE_REF
9762       /* However, if we're about to form a pointer-to-member, we just
9763          want the referenced member referenced.  */
9764       && TREE_CODE (expr) != OFFSET_REF)
9765     expr = convert_from_reference (expr);
9766
9767   return expr;
9768 }
9769
9770 /* Like tsubst, but deals with expressions.  This function just replaces
9771    template parms; to finish processing the resultant expression, use
9772    tsubst_expr.  */
9773
9774 static tree
9775 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9776 {
9777   enum tree_code code;
9778   tree r;
9779
9780   if (t == NULL_TREE || t == error_mark_node)
9781     return t;
9782
9783   code = TREE_CODE (t);
9784
9785   switch (code)
9786     {
9787     case PARM_DECL:
9788       r = retrieve_local_specialization (t);
9789       gcc_assert (r != NULL);
9790       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9791         r = ARGUMENT_PACK_SELECT_ARG (r);
9792       mark_used (r);
9793       return r;
9794
9795     case CONST_DECL:
9796       {
9797         tree enum_type;
9798         tree v;
9799
9800         if (DECL_TEMPLATE_PARM_P (t))
9801           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9802         /* There is no need to substitute into namespace-scope
9803            enumerators.  */
9804         if (DECL_NAMESPACE_SCOPE_P (t))
9805           return t;
9806         /* If ARGS is NULL, then T is known to be non-dependent.  */
9807         if (args == NULL_TREE)
9808           return integral_constant_value (t);
9809
9810         /* Unfortunately, we cannot just call lookup_name here.
9811            Consider:
9812
9813              template <int I> int f() {
9814              enum E { a = I };
9815              struct S { void g() { E e = a; } };
9816              };
9817
9818            When we instantiate f<7>::S::g(), say, lookup_name is not
9819            clever enough to find f<7>::a.  */
9820         enum_type
9821           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9822                               /*entering_scope=*/0);
9823
9824         for (v = TYPE_VALUES (enum_type);
9825              v != NULL_TREE;
9826              v = TREE_CHAIN (v))
9827           if (TREE_PURPOSE (v) == DECL_NAME (t))
9828             return TREE_VALUE (v);
9829
9830           /* We didn't find the name.  That should never happen; if
9831              name-lookup found it during preliminary parsing, we
9832              should find it again here during instantiation.  */
9833         gcc_unreachable ();
9834       }
9835       return t;
9836
9837     case FIELD_DECL:
9838       if (DECL_CONTEXT (t))
9839         {
9840           tree ctx;
9841
9842           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9843                                   /*entering_scope=*/1);
9844           if (ctx != DECL_CONTEXT (t))
9845             {
9846               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9847               if (!r)
9848                 {
9849                   if (complain & tf_error)
9850                     error ("using invalid field %qD", t);
9851                   return error_mark_node;
9852                 }
9853               return r;
9854             }
9855         }
9856
9857       return t;
9858
9859     case VAR_DECL:
9860     case FUNCTION_DECL:
9861       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9862           || local_variable_p (t))
9863         t = tsubst (t, args, complain, in_decl);
9864       mark_used (t);
9865       return t;
9866
9867     case BASELINK:
9868       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9869
9870     case TEMPLATE_DECL:
9871       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9872         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9873                        args, complain, in_decl);
9874       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9875         return tsubst (t, args, complain, in_decl);
9876       else if (DECL_CLASS_SCOPE_P (t)
9877                && uses_template_parms (DECL_CONTEXT (t)))
9878         {
9879           /* Template template argument like the following example need
9880              special treatment:
9881
9882                template <template <class> class TT> struct C {};
9883                template <class T> struct D {
9884                  template <class U> struct E {};
9885                  C<E> c;                                // #1
9886                };
9887                D<int> d;                                // #2
9888
9889              We are processing the template argument `E' in #1 for
9890              the template instantiation #2.  Originally, `E' is a
9891              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9892              have to substitute this with one having context `D<int>'.  */
9893
9894           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9895           return lookup_field (context, DECL_NAME(t), 0, false);
9896         }
9897       else
9898         /* Ordinary template template argument.  */
9899         return t;
9900
9901     case CAST_EXPR:
9902     case REINTERPRET_CAST_EXPR:
9903     case CONST_CAST_EXPR:
9904     case STATIC_CAST_EXPR:
9905     case DYNAMIC_CAST_EXPR:
9906     case NOP_EXPR:
9907       return build1
9908         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9909          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9910
9911     case SIZEOF_EXPR:
9912       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9913         {
9914           /* We only want to compute the number of arguments.  */
9915           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9916                                                 complain, in_decl);
9917           int len = 0;
9918
9919           if (TREE_CODE (expanded) == TREE_VEC)
9920             len = TREE_VEC_LENGTH (expanded);
9921
9922           if (expanded == error_mark_node)
9923             return error_mark_node;
9924           else if (PACK_EXPANSION_P (expanded)
9925                    || (TREE_CODE (expanded) == TREE_VEC
9926                        && len > 0
9927                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9928             {
9929               if (TREE_CODE (expanded) == TREE_VEC)
9930                 expanded = TREE_VEC_ELT (expanded, len - 1);
9931
9932               if (TYPE_P (expanded))
9933                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9934                                                    complain & tf_error);
9935               else
9936                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9937                                                    complain & tf_error);
9938             }
9939           else
9940             return build_int_cst (size_type_node, len);
9941         }
9942       /* Fall through */
9943
9944     case INDIRECT_REF:
9945     case NEGATE_EXPR:
9946     case TRUTH_NOT_EXPR:
9947     case BIT_NOT_EXPR:
9948     case ADDR_EXPR:
9949     case UNARY_PLUS_EXPR:      /* Unary + */
9950     case ALIGNOF_EXPR:
9951     case ARROW_EXPR:
9952     case THROW_EXPR:
9953     case TYPEID_EXPR:
9954     case REALPART_EXPR:
9955     case IMAGPART_EXPR:
9956       return build1
9957         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9958          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9959
9960     case COMPONENT_REF:
9961       {
9962         tree object;
9963         tree name;
9964
9965         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9966         name = TREE_OPERAND (t, 1);
9967         if (TREE_CODE (name) == BIT_NOT_EXPR)
9968           {
9969             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9970                                 complain, in_decl);
9971             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9972           }
9973         else if (TREE_CODE (name) == SCOPE_REF
9974                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9975           {
9976             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9977                                      complain, in_decl);
9978             name = TREE_OPERAND (name, 1);
9979             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9980                                 complain, in_decl);
9981             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9982             name = build_qualified_name (/*type=*/NULL_TREE,
9983                                          base, name,
9984                                          /*template_p=*/false);
9985           }
9986         else if (TREE_CODE (name) == BASELINK)
9987           name = tsubst_baselink (name,
9988                                   non_reference (TREE_TYPE (object)),
9989                                   args, complain,
9990                                   in_decl);
9991         else
9992           name = tsubst_copy (name, args, complain, in_decl);
9993         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9994       }
9995
9996     case PLUS_EXPR:
9997     case MINUS_EXPR:
9998     case MULT_EXPR:
9999     case TRUNC_DIV_EXPR:
10000     case CEIL_DIV_EXPR:
10001     case FLOOR_DIV_EXPR:
10002     case ROUND_DIV_EXPR:
10003     case EXACT_DIV_EXPR:
10004     case BIT_AND_EXPR:
10005     case BIT_IOR_EXPR:
10006     case BIT_XOR_EXPR:
10007     case TRUNC_MOD_EXPR:
10008     case FLOOR_MOD_EXPR:
10009     case TRUTH_ANDIF_EXPR:
10010     case TRUTH_ORIF_EXPR:
10011     case TRUTH_AND_EXPR:
10012     case TRUTH_OR_EXPR:
10013     case RSHIFT_EXPR:
10014     case LSHIFT_EXPR:
10015     case RROTATE_EXPR:
10016     case LROTATE_EXPR:
10017     case EQ_EXPR:
10018     case NE_EXPR:
10019     case MAX_EXPR:
10020     case MIN_EXPR:
10021     case LE_EXPR:
10022     case GE_EXPR:
10023     case LT_EXPR:
10024     case GT_EXPR:
10025     case COMPOUND_EXPR:
10026     case DOTSTAR_EXPR:
10027     case MEMBER_REF:
10028     case PREDECREMENT_EXPR:
10029     case PREINCREMENT_EXPR:
10030     case POSTDECREMENT_EXPR:
10031     case POSTINCREMENT_EXPR:
10032       return build_nt
10033         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10034          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10035
10036     case SCOPE_REF:
10037       return build_qualified_name (/*type=*/NULL_TREE,
10038                                    tsubst_copy (TREE_OPERAND (t, 0),
10039                                                 args, complain, in_decl),
10040                                    tsubst_copy (TREE_OPERAND (t, 1),
10041                                                 args, complain, in_decl),
10042                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10043
10044     case ARRAY_REF:
10045       return build_nt
10046         (ARRAY_REF,
10047          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10048          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10049          NULL_TREE, NULL_TREE);
10050
10051     case CALL_EXPR:
10052       {
10053         int n = VL_EXP_OPERAND_LENGTH (t);
10054         tree result = build_vl_exp (CALL_EXPR, n);
10055         int i;
10056         for (i = 0; i < n; i++)
10057           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10058                                              complain, in_decl);
10059         return result;
10060       }
10061
10062     case COND_EXPR:
10063     case MODOP_EXPR:
10064     case PSEUDO_DTOR_EXPR:
10065       {
10066         r = build_nt
10067           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10068            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10069            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10070         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10071         return r;
10072       }
10073
10074     case NEW_EXPR:
10075       {
10076         r = build_nt
10077         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10078          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10079          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10080         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10081         return r;
10082       }
10083
10084     case DELETE_EXPR:
10085       {
10086         r = build_nt
10087         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10088          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10089         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10090         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10091         return r;
10092       }
10093
10094     case TEMPLATE_ID_EXPR:
10095       {
10096         /* Substituted template arguments */
10097         tree fn = TREE_OPERAND (t, 0);
10098         tree targs = TREE_OPERAND (t, 1);
10099
10100         fn = tsubst_copy (fn, args, complain, in_decl);
10101         if (targs)
10102           targs = tsubst_template_args (targs, args, complain, in_decl);
10103
10104         return lookup_template_function (fn, targs);
10105       }
10106
10107     case TREE_LIST:
10108       {
10109         tree purpose, value, chain;
10110
10111         if (t == void_list_node)
10112           return t;
10113
10114         purpose = TREE_PURPOSE (t);
10115         if (purpose)
10116           purpose = tsubst_copy (purpose, args, complain, in_decl);
10117         value = TREE_VALUE (t);
10118         if (value)
10119           value = tsubst_copy (value, args, complain, in_decl);
10120         chain = TREE_CHAIN (t);
10121         if (chain && chain != void_type_node)
10122           chain = tsubst_copy (chain, args, complain, in_decl);
10123         if (purpose == TREE_PURPOSE (t)
10124             && value == TREE_VALUE (t)
10125             && chain == TREE_CHAIN (t))
10126           return t;
10127         return tree_cons (purpose, value, chain);
10128       }
10129
10130     case RECORD_TYPE:
10131     case UNION_TYPE:
10132     case ENUMERAL_TYPE:
10133     case INTEGER_TYPE:
10134     case TEMPLATE_TYPE_PARM:
10135     case TEMPLATE_TEMPLATE_PARM:
10136     case BOUND_TEMPLATE_TEMPLATE_PARM:
10137     case TEMPLATE_PARM_INDEX:
10138     case POINTER_TYPE:
10139     case REFERENCE_TYPE:
10140     case OFFSET_TYPE:
10141     case FUNCTION_TYPE:
10142     case METHOD_TYPE:
10143     case ARRAY_TYPE:
10144     case TYPENAME_TYPE:
10145     case UNBOUND_CLASS_TEMPLATE:
10146     case TYPEOF_TYPE:
10147     case DECLTYPE_TYPE:
10148     case TYPE_DECL:
10149       return tsubst (t, args, complain, in_decl);
10150
10151     case IDENTIFIER_NODE:
10152       if (IDENTIFIER_TYPENAME_P (t))
10153         {
10154           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10155           return mangle_conv_op_name_for_type (new_type);
10156         }
10157       else
10158         return t;
10159
10160     case CONSTRUCTOR:
10161       /* This is handled by tsubst_copy_and_build.  */
10162       gcc_unreachable ();
10163
10164     case VA_ARG_EXPR:
10165       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10166                                           in_decl),
10167                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10168
10169     case CLEANUP_POINT_EXPR:
10170       /* We shouldn't have built any of these during initial template
10171          generation.  Instead, they should be built during instantiation
10172          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10173       gcc_unreachable ();
10174
10175     case OFFSET_REF:
10176       mark_used (TREE_OPERAND (t, 1));
10177       return t;
10178
10179     case EXPR_PACK_EXPANSION:
10180       error ("invalid use of pack expansion expression");
10181       return error_mark_node;
10182
10183     case NONTYPE_ARGUMENT_PACK:
10184       error ("use %<...%> to expand argument pack");
10185       return error_mark_node;
10186
10187     default:
10188       return t;
10189     }
10190 }
10191
10192 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10193
10194 static tree
10195 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10196                     tree in_decl)
10197 {
10198   tree new_clauses = NULL, nc, oc;
10199
10200   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10201     {
10202       nc = copy_node (oc);
10203       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10204       new_clauses = nc;
10205
10206       switch (OMP_CLAUSE_CODE (nc))
10207         {
10208         case OMP_CLAUSE_LASTPRIVATE:
10209           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10210             {
10211               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10212               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10213                            in_decl, /*integral_constant_expression_p=*/false);
10214               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10215                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10216             }
10217           /* FALLTHRU */
10218         case OMP_CLAUSE_PRIVATE:
10219         case OMP_CLAUSE_SHARED:
10220         case OMP_CLAUSE_FIRSTPRIVATE:
10221         case OMP_CLAUSE_REDUCTION:
10222         case OMP_CLAUSE_COPYIN:
10223         case OMP_CLAUSE_COPYPRIVATE:
10224         case OMP_CLAUSE_IF:
10225         case OMP_CLAUSE_NUM_THREADS:
10226         case OMP_CLAUSE_SCHEDULE:
10227         case OMP_CLAUSE_COLLAPSE:
10228           OMP_CLAUSE_OPERAND (nc, 0)
10229             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10230                            in_decl, /*integral_constant_expression_p=*/false);
10231           break;
10232         case OMP_CLAUSE_NOWAIT:
10233         case OMP_CLAUSE_ORDERED:
10234         case OMP_CLAUSE_DEFAULT:
10235         case OMP_CLAUSE_UNTIED:
10236           break;
10237         default:
10238           gcc_unreachable ();
10239         }
10240     }
10241
10242   return finish_omp_clauses (nreverse (new_clauses));
10243 }
10244
10245 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10246
10247 static tree
10248 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10249                           tree in_decl)
10250 {
10251 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10252
10253   tree purpose, value, chain;
10254
10255   if (t == NULL)
10256     return t;
10257
10258   if (TREE_CODE (t) != TREE_LIST)
10259     return tsubst_copy_and_build (t, args, complain, in_decl,
10260                                   /*function_p=*/false,
10261                                   /*integral_constant_expression_p=*/false);
10262
10263   if (t == void_list_node)
10264     return t;
10265
10266   purpose = TREE_PURPOSE (t);
10267   if (purpose)
10268     purpose = RECUR (purpose);
10269   value = TREE_VALUE (t);
10270   if (value)
10271     value = RECUR (value);
10272   chain = TREE_CHAIN (t);
10273   if (chain && chain != void_type_node)
10274     chain = RECUR (chain);
10275   return tree_cons (purpose, value, chain);
10276 #undef RECUR
10277 }
10278
10279 /* Substitute one OMP_FOR iterator.  */
10280
10281 static void
10282 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10283                          tree condv, tree incrv, tree *clauses,
10284                          tree args, tsubst_flags_t complain, tree in_decl,
10285                          bool integral_constant_expression_p)
10286 {
10287 #define RECUR(NODE)                             \
10288   tsubst_expr ((NODE), args, complain, in_decl, \
10289                integral_constant_expression_p)
10290   tree decl, init, cond, incr;
10291
10292   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10293   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10294   decl = RECUR (TREE_OPERAND (init, 0));
10295   init = TREE_OPERAND (init, 1);
10296   gcc_assert (!type_dependent_expression_p (decl));
10297
10298   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10299     {
10300       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10301       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10302       if (TREE_CODE (incr) == MODIFY_EXPR)
10303         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10304                                     RECUR (TREE_OPERAND (incr, 1)),
10305                                     complain);
10306       else
10307         incr = RECUR (incr);
10308       TREE_VEC_ELT (declv, i) = decl;
10309       TREE_VEC_ELT (initv, i) = init;
10310       TREE_VEC_ELT (condv, i) = cond;
10311       TREE_VEC_ELT (incrv, i) = incr;
10312       return;
10313     }
10314
10315   if (init && TREE_CODE (init) != DECL_EXPR)
10316     {
10317       tree c;
10318       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10319         {
10320           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10321                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10322               && OMP_CLAUSE_DECL (c) == decl)
10323             break;
10324           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10325                    && OMP_CLAUSE_DECL (c) == decl)
10326             error ("iteration variable %qD should not be firstprivate", decl);
10327           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10328                    && OMP_CLAUSE_DECL (c) == decl)
10329             error ("iteration variable %qD should not be reduction", decl);
10330         }
10331       if (c == NULL)
10332         {
10333           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10334           OMP_CLAUSE_DECL (c) = decl;
10335           c = finish_omp_clauses (c);
10336           if (c)
10337             {
10338               OMP_CLAUSE_CHAIN (c) = *clauses;
10339               *clauses = c;
10340             }
10341         }
10342     }
10343   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10344   if (COMPARISON_CLASS_P (cond))
10345     cond = build2 (TREE_CODE (cond), boolean_type_node,
10346                    RECUR (TREE_OPERAND (cond, 0)),
10347                    RECUR (TREE_OPERAND (cond, 1)));
10348   else
10349     cond = RECUR (cond);
10350   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10351   switch (TREE_CODE (incr))
10352     {
10353     case PREINCREMENT_EXPR:
10354     case PREDECREMENT_EXPR:
10355     case POSTINCREMENT_EXPR:
10356     case POSTDECREMENT_EXPR:
10357       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10358                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10359       break;
10360     case MODIFY_EXPR:
10361       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10362           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10363         {
10364           tree rhs = TREE_OPERAND (incr, 1);
10365           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10366                          RECUR (TREE_OPERAND (incr, 0)),
10367                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10368                                  RECUR (TREE_OPERAND (rhs, 0)),
10369                                  RECUR (TREE_OPERAND (rhs, 1))));
10370         }
10371       else
10372         incr = RECUR (incr);
10373       break;
10374     case MODOP_EXPR:
10375       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10376           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10377         {
10378           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10379           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10380                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10381                                  TREE_TYPE (decl), lhs,
10382                                  RECUR (TREE_OPERAND (incr, 2))));
10383         }
10384       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10385                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10386                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10387         {
10388           tree rhs = TREE_OPERAND (incr, 2);
10389           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10390                          RECUR (TREE_OPERAND (incr, 0)),
10391                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10392                                  RECUR (TREE_OPERAND (rhs, 0)),
10393                                  RECUR (TREE_OPERAND (rhs, 1))));
10394         }
10395       else
10396         incr = RECUR (incr);
10397       break;
10398     default:
10399       incr = RECUR (incr);
10400       break;
10401     }
10402
10403   TREE_VEC_ELT (declv, i) = decl;
10404   TREE_VEC_ELT (initv, i) = init;
10405   TREE_VEC_ELT (condv, i) = cond;
10406   TREE_VEC_ELT (incrv, i) = incr;
10407 #undef RECUR
10408 }
10409
10410 /* Like tsubst_copy for expressions, etc. but also does semantic
10411    processing.  */
10412
10413 static tree
10414 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10415              bool integral_constant_expression_p)
10416 {
10417 #define RECUR(NODE)                             \
10418   tsubst_expr ((NODE), args, complain, in_decl, \
10419                integral_constant_expression_p)
10420
10421   tree stmt, tmp;
10422
10423   if (t == NULL_TREE || t == error_mark_node)
10424     return t;
10425
10426   if (EXPR_HAS_LOCATION (t))
10427     input_location = EXPR_LOCATION (t);
10428   if (STATEMENT_CODE_P (TREE_CODE (t)))
10429     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10430
10431   switch (TREE_CODE (t))
10432     {
10433     case STATEMENT_LIST:
10434       {
10435         tree_stmt_iterator i;
10436         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10437           RECUR (tsi_stmt (i));
10438         break;
10439       }
10440
10441     case CTOR_INITIALIZER:
10442       finish_mem_initializers (tsubst_initializer_list
10443                                (TREE_OPERAND (t, 0), args));
10444       break;
10445
10446     case RETURN_EXPR:
10447       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10448       break;
10449
10450     case EXPR_STMT:
10451       tmp = RECUR (EXPR_STMT_EXPR (t));
10452       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10453         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10454       else
10455         finish_expr_stmt (tmp);
10456       break;
10457
10458     case USING_STMT:
10459       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10460       break;
10461
10462     case DECL_EXPR:
10463       {
10464         tree decl;
10465         tree init;
10466
10467         decl = DECL_EXPR_DECL (t);
10468         if (TREE_CODE (decl) == LABEL_DECL)
10469           finish_label_decl (DECL_NAME (decl));
10470         else if (TREE_CODE (decl) == USING_DECL)
10471           {
10472             tree scope = USING_DECL_SCOPE (decl);
10473             tree name = DECL_NAME (decl);
10474             tree decl;
10475
10476             scope = RECUR (scope);
10477             decl = lookup_qualified_name (scope, name,
10478                                           /*is_type_p=*/false,
10479                                           /*complain=*/false);
10480             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10481               qualified_name_lookup_error (scope, name, decl, input_location);
10482             else
10483               do_local_using_decl (decl, scope, name);
10484           }
10485         else
10486           {
10487             init = DECL_INITIAL (decl);
10488             decl = tsubst (decl, args, complain, in_decl);
10489             if (decl != error_mark_node)
10490               {
10491                 /* By marking the declaration as instantiated, we avoid
10492                    trying to instantiate it.  Since instantiate_decl can't
10493                    handle local variables, and since we've already done
10494                    all that needs to be done, that's the right thing to
10495                    do.  */
10496                 if (TREE_CODE (decl) == VAR_DECL)
10497                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10498                 if (TREE_CODE (decl) == VAR_DECL
10499                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10500                   /* Anonymous aggregates are a special case.  */
10501                   finish_anon_union (decl);
10502                 else
10503                   {
10504                     maybe_push_decl (decl);
10505                     if (TREE_CODE (decl) == VAR_DECL
10506                         && DECL_PRETTY_FUNCTION_P (decl))
10507                       {
10508                         /* For __PRETTY_FUNCTION__ we have to adjust the
10509                            initializer.  */
10510                         const char *const name
10511                           = cxx_printable_name (current_function_decl, 2);
10512                         init = cp_fname_init (name, &TREE_TYPE (decl));
10513                       }
10514                     else
10515                       {
10516                         tree t = RECUR (init);
10517
10518                         if (init && !t)
10519                           /* If we had an initializer but it
10520                              instantiated to nothing,
10521                              value-initialize the object.  This will
10522                              only occur when the initializer was a
10523                              pack expansion where the parameter packs
10524                              used in that expansion were of length
10525                              zero.  */
10526                           init = build_default_init (TREE_TYPE (decl),
10527                                                      NULL_TREE);
10528                         else
10529                           init = t;
10530                       }
10531
10532                     finish_decl (decl, init, NULL_TREE);
10533                   }
10534               }
10535           }
10536
10537         /* A DECL_EXPR can also be used as an expression, in the condition
10538            clause of an if/for/while construct.  */
10539         return decl;
10540       }
10541
10542     case FOR_STMT:
10543       stmt = begin_for_stmt ();
10544                           RECUR (FOR_INIT_STMT (t));
10545       finish_for_init_stmt (stmt);
10546       tmp = RECUR (FOR_COND (t));
10547       finish_for_cond (tmp, stmt);
10548       tmp = RECUR (FOR_EXPR (t));
10549       finish_for_expr (tmp, stmt);
10550       RECUR (FOR_BODY (t));
10551       finish_for_stmt (stmt);
10552       break;
10553
10554     case WHILE_STMT:
10555       stmt = begin_while_stmt ();
10556       tmp = RECUR (WHILE_COND (t));
10557       finish_while_stmt_cond (tmp, stmt);
10558       RECUR (WHILE_BODY (t));
10559       finish_while_stmt (stmt);
10560       break;
10561
10562     case DO_STMT:
10563       stmt = begin_do_stmt ();
10564       RECUR (DO_BODY (t));
10565       finish_do_body (stmt);
10566       tmp = RECUR (DO_COND (t));
10567       finish_do_stmt (tmp, stmt);
10568       break;
10569
10570     case IF_STMT:
10571       stmt = begin_if_stmt ();
10572       tmp = RECUR (IF_COND (t));
10573       finish_if_stmt_cond (tmp, stmt);
10574       RECUR (THEN_CLAUSE (t));
10575       finish_then_clause (stmt);
10576
10577       if (ELSE_CLAUSE (t))
10578         {
10579           begin_else_clause (stmt);
10580           RECUR (ELSE_CLAUSE (t));
10581           finish_else_clause (stmt);
10582         }
10583
10584       finish_if_stmt (stmt);
10585       break;
10586
10587     case BIND_EXPR:
10588       if (BIND_EXPR_BODY_BLOCK (t))
10589         stmt = begin_function_body ();
10590       else
10591         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10592                                     ? BCS_TRY_BLOCK : 0);
10593
10594       RECUR (BIND_EXPR_BODY (t));
10595
10596       if (BIND_EXPR_BODY_BLOCK (t))
10597         finish_function_body (stmt);
10598       else
10599         finish_compound_stmt (stmt);
10600       break;
10601
10602     case BREAK_STMT:
10603       finish_break_stmt ();
10604       break;
10605
10606     case CONTINUE_STMT:
10607       finish_continue_stmt ();
10608       break;
10609
10610     case SWITCH_STMT:
10611       stmt = begin_switch_stmt ();
10612       tmp = RECUR (SWITCH_STMT_COND (t));
10613       finish_switch_cond (tmp, stmt);
10614       RECUR (SWITCH_STMT_BODY (t));
10615       finish_switch_stmt (stmt);
10616       break;
10617
10618     case CASE_LABEL_EXPR:
10619       finish_case_label (RECUR (CASE_LOW (t)),
10620                          RECUR (CASE_HIGH (t)));
10621       break;
10622
10623     case LABEL_EXPR:
10624       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10625       break;
10626
10627     case GOTO_EXPR:
10628       tmp = GOTO_DESTINATION (t);
10629       if (TREE_CODE (tmp) != LABEL_DECL)
10630         /* Computed goto's must be tsubst'd into.  On the other hand,
10631            non-computed gotos must not be; the identifier in question
10632            will have no binding.  */
10633         tmp = RECUR (tmp);
10634       else
10635         tmp = DECL_NAME (tmp);
10636       finish_goto_stmt (tmp);
10637       break;
10638
10639     case ASM_EXPR:
10640       tmp = finish_asm_stmt
10641         (ASM_VOLATILE_P (t),
10642          RECUR (ASM_STRING (t)),
10643          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10644          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10645          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10646       {
10647         tree asm_expr = tmp;
10648         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10649           asm_expr = TREE_OPERAND (asm_expr, 0);
10650         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10651       }
10652       break;
10653
10654     case TRY_BLOCK:
10655       if (CLEANUP_P (t))
10656         {
10657           stmt = begin_try_block ();
10658           RECUR (TRY_STMTS (t));
10659           finish_cleanup_try_block (stmt);
10660           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10661         }
10662       else
10663         {
10664           tree compound_stmt = NULL_TREE;
10665
10666           if (FN_TRY_BLOCK_P (t))
10667             stmt = begin_function_try_block (&compound_stmt);
10668           else
10669             stmt = begin_try_block ();
10670
10671           RECUR (TRY_STMTS (t));
10672
10673           if (FN_TRY_BLOCK_P (t))
10674             finish_function_try_block (stmt);
10675           else
10676             finish_try_block (stmt);
10677
10678           RECUR (TRY_HANDLERS (t));
10679           if (FN_TRY_BLOCK_P (t))
10680             finish_function_handler_sequence (stmt, compound_stmt);
10681           else
10682             finish_handler_sequence (stmt);
10683         }
10684       break;
10685
10686     case HANDLER:
10687       {
10688         tree decl = HANDLER_PARMS (t);
10689
10690         if (decl)
10691           {
10692             decl = tsubst (decl, args, complain, in_decl);
10693             /* Prevent instantiate_decl from trying to instantiate
10694                this variable.  We've already done all that needs to be
10695                done.  */
10696             if (decl != error_mark_node)
10697               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10698           }
10699         stmt = begin_handler ();
10700         finish_handler_parms (decl, stmt);
10701         RECUR (HANDLER_BODY (t));
10702         finish_handler (stmt);
10703       }
10704       break;
10705
10706     case TAG_DEFN:
10707       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10708       break;
10709
10710     case STATIC_ASSERT:
10711       {
10712         tree condition = 
10713           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10714                        args,
10715                        complain, in_decl,
10716                        /*integral_constant_expression_p=*/true);
10717         finish_static_assert (condition,
10718                               STATIC_ASSERT_MESSAGE (t),
10719                               STATIC_ASSERT_SOURCE_LOCATION (t),
10720                               /*member_p=*/false);
10721       }
10722       break;
10723
10724     case OMP_PARALLEL:
10725       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10726                                 args, complain, in_decl);
10727       stmt = begin_omp_parallel ();
10728       RECUR (OMP_PARALLEL_BODY (t));
10729       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10730         = OMP_PARALLEL_COMBINED (t);
10731       break;
10732
10733     case OMP_TASK:
10734       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10735                                 args, complain, in_decl);
10736       stmt = begin_omp_task ();
10737       RECUR (OMP_TASK_BODY (t));
10738       finish_omp_task (tmp, stmt);
10739       break;
10740
10741     case OMP_FOR:
10742       {
10743         tree clauses, body, pre_body;
10744         tree declv, initv, condv, incrv;
10745         int i;
10746
10747         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10748                                       args, complain, in_decl);
10749         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10750         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10751         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10752         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10753
10754         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10755           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10756                                    &clauses, args, complain, in_decl,
10757                                    integral_constant_expression_p);
10758
10759         stmt = begin_omp_structured_block ();
10760
10761         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10762           if (TREE_VEC_ELT (initv, i) == NULL
10763               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10764             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10765           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10766             {
10767               tree init = RECUR (TREE_VEC_ELT (initv, i));
10768               gcc_assert (init == TREE_VEC_ELT (declv, i));
10769               TREE_VEC_ELT (initv, i) = NULL_TREE;
10770             }
10771           else
10772             {
10773               tree decl_expr = TREE_VEC_ELT (initv, i);
10774               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10775               gcc_assert (init != NULL);
10776               TREE_VEC_ELT (initv, i) = RECUR (init);
10777               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10778               RECUR (decl_expr);
10779               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10780             }
10781
10782         pre_body = push_stmt_list ();
10783         RECUR (OMP_FOR_PRE_BODY (t));
10784         pre_body = pop_stmt_list (pre_body);
10785
10786         body = push_stmt_list ();
10787         RECUR (OMP_FOR_BODY (t));
10788         body = pop_stmt_list (body);
10789
10790         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10791                             body, pre_body, clauses);
10792
10793         add_stmt (finish_omp_structured_block (stmt));
10794       }
10795       break;
10796
10797     case OMP_SECTIONS:
10798     case OMP_SINGLE:
10799       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10800       stmt = push_stmt_list ();
10801       RECUR (OMP_BODY (t));
10802       stmt = pop_stmt_list (stmt);
10803
10804       t = copy_node (t);
10805       OMP_BODY (t) = stmt;
10806       OMP_CLAUSES (t) = tmp;
10807       add_stmt (t);
10808       break;
10809
10810     case OMP_SECTION:
10811     case OMP_CRITICAL:
10812     case OMP_MASTER:
10813     case OMP_ORDERED:
10814       stmt = push_stmt_list ();
10815       RECUR (OMP_BODY (t));
10816       stmt = pop_stmt_list (stmt);
10817
10818       t = copy_node (t);
10819       OMP_BODY (t) = stmt;
10820       add_stmt (t);
10821       break;
10822
10823     case OMP_ATOMIC:
10824       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10825       {
10826         tree op1 = TREE_OPERAND (t, 1);
10827         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10828         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10829         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10830       }
10831       break;
10832
10833     case EXPR_PACK_EXPANSION:
10834       error ("invalid use of pack expansion expression");
10835       return error_mark_node;
10836
10837     case NONTYPE_ARGUMENT_PACK:
10838       error ("use %<...%> to expand argument pack");
10839       return error_mark_node;
10840
10841     default:
10842       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10843
10844       return tsubst_copy_and_build (t, args, complain, in_decl,
10845                                     /*function_p=*/false,
10846                                     integral_constant_expression_p);
10847     }
10848
10849   return NULL_TREE;
10850 #undef RECUR
10851 }
10852
10853 /* T is a postfix-expression that is not being used in a function
10854    call.  Return the substituted version of T.  */
10855
10856 static tree
10857 tsubst_non_call_postfix_expression (tree t, tree args,
10858                                     tsubst_flags_t complain,
10859                                     tree in_decl)
10860 {
10861   if (TREE_CODE (t) == SCOPE_REF)
10862     t = tsubst_qualified_id (t, args, complain, in_decl,
10863                              /*done=*/false, /*address_p=*/false);
10864   else
10865     t = tsubst_copy_and_build (t, args, complain, in_decl,
10866                                /*function_p=*/false,
10867                                /*integral_constant_expression_p=*/false);
10868
10869   return t;
10870 }
10871
10872 /* Like tsubst but deals with expressions and performs semantic
10873    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10874
10875 tree
10876 tsubst_copy_and_build (tree t,
10877                        tree args,
10878                        tsubst_flags_t complain,
10879                        tree in_decl,
10880                        bool function_p,
10881                        bool integral_constant_expression_p)
10882 {
10883 #define RECUR(NODE)                                             \
10884   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10885                          /*function_p=*/false,                  \
10886                          integral_constant_expression_p)
10887
10888   tree op1;
10889
10890   if (t == NULL_TREE || t == error_mark_node)
10891     return t;
10892
10893   switch (TREE_CODE (t))
10894     {
10895     case USING_DECL:
10896       t = DECL_NAME (t);
10897       /* Fall through.  */
10898     case IDENTIFIER_NODE:
10899       {
10900         tree decl;
10901         cp_id_kind idk;
10902         bool non_integral_constant_expression_p;
10903         const char *error_msg;
10904
10905         if (IDENTIFIER_TYPENAME_P (t))
10906           {
10907             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10908             t = mangle_conv_op_name_for_type (new_type);
10909           }
10910
10911         /* Look up the name.  */
10912         decl = lookup_name (t);
10913
10914         /* By convention, expressions use ERROR_MARK_NODE to indicate
10915            failure, not NULL_TREE.  */
10916         if (decl == NULL_TREE)
10917           decl = error_mark_node;
10918
10919         decl = finish_id_expression (t, decl, NULL_TREE,
10920                                      &idk,
10921                                      integral_constant_expression_p,
10922                                      /*allow_non_integral_constant_expression_p=*/false,
10923                                      &non_integral_constant_expression_p,
10924                                      /*template_p=*/false,
10925                                      /*done=*/true,
10926                                      /*address_p=*/false,
10927                                      /*template_arg_p=*/false,
10928                                      &error_msg,
10929                                      input_location);
10930         if (error_msg)
10931           error (error_msg);
10932         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10933           decl = unqualified_name_lookup_error (decl);
10934         return decl;
10935       }
10936
10937     case TEMPLATE_ID_EXPR:
10938       {
10939         tree object;
10940         tree templ = RECUR (TREE_OPERAND (t, 0));
10941         tree targs = TREE_OPERAND (t, 1);
10942
10943         if (targs)
10944           targs = tsubst_template_args (targs, args, complain, in_decl);
10945
10946         if (TREE_CODE (templ) == COMPONENT_REF)
10947           {
10948             object = TREE_OPERAND (templ, 0);
10949             templ = TREE_OPERAND (templ, 1);
10950           }
10951         else
10952           object = NULL_TREE;
10953         templ = lookup_template_function (templ, targs);
10954
10955         if (object)
10956           return build3 (COMPONENT_REF, TREE_TYPE (templ),
10957                          object, templ, NULL_TREE);
10958         else
10959           return baselink_for_fns (templ);
10960       }
10961
10962     case INDIRECT_REF:
10963       {
10964         tree r = RECUR (TREE_OPERAND (t, 0));
10965
10966         if (REFERENCE_REF_P (t))
10967           {
10968             /* A type conversion to reference type will be enclosed in
10969                such an indirect ref, but the substitution of the cast
10970                will have also added such an indirect ref.  */
10971             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10972               r = convert_from_reference (r);
10973           }
10974         else
10975           r = build_x_indirect_ref (r, "unary *", complain);
10976         return r;
10977       }
10978
10979     case NOP_EXPR:
10980       return build_nop
10981         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10982          RECUR (TREE_OPERAND (t, 0)));
10983
10984     case CAST_EXPR:
10985     case REINTERPRET_CAST_EXPR:
10986     case CONST_CAST_EXPR:
10987     case DYNAMIC_CAST_EXPR:
10988     case STATIC_CAST_EXPR:
10989       {
10990         tree type;
10991         tree op;
10992
10993         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10994         if (integral_constant_expression_p
10995             && !cast_valid_in_integral_constant_expression_p (type))
10996           {
10997             if (complain & tf_error)
10998               error ("a cast to a type other than an integral or "
10999                      "enumeration type cannot appear in a constant-expression");
11000             return error_mark_node; 
11001           }
11002
11003         op = RECUR (TREE_OPERAND (t, 0));
11004
11005         switch (TREE_CODE (t))
11006           {
11007           case CAST_EXPR:
11008             return build_functional_cast (type, op, complain);
11009           case REINTERPRET_CAST_EXPR:
11010             return build_reinterpret_cast (type, op, complain);
11011           case CONST_CAST_EXPR:
11012             return build_const_cast (type, op, complain);
11013           case DYNAMIC_CAST_EXPR:
11014             return build_dynamic_cast (type, op, complain);
11015           case STATIC_CAST_EXPR:
11016             return build_static_cast (type, op, complain);
11017           default:
11018             gcc_unreachable ();
11019           }
11020       }
11021
11022     case POSTDECREMENT_EXPR:
11023     case POSTINCREMENT_EXPR:
11024       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11025                                                 args, complain, in_decl);
11026       return build_x_unary_op (TREE_CODE (t), op1, complain);
11027
11028     case PREDECREMENT_EXPR:
11029     case PREINCREMENT_EXPR:
11030     case NEGATE_EXPR:
11031     case BIT_NOT_EXPR:
11032     case ABS_EXPR:
11033     case TRUTH_NOT_EXPR:
11034     case UNARY_PLUS_EXPR:  /* Unary + */
11035     case REALPART_EXPR:
11036     case IMAGPART_EXPR:
11037       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11038                                complain);
11039
11040     case ADDR_EXPR:
11041       op1 = TREE_OPERAND (t, 0);
11042       if (TREE_CODE (op1) == SCOPE_REF)
11043         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11044                                    /*done=*/true, /*address_p=*/true);
11045       else
11046         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11047                                                   in_decl);
11048       if (TREE_CODE (op1) == LABEL_DECL)
11049         return finish_label_address_expr (DECL_NAME (op1));
11050       return build_x_unary_op (ADDR_EXPR, op1, complain);
11051
11052     case PLUS_EXPR:
11053     case MINUS_EXPR:
11054     case MULT_EXPR:
11055     case TRUNC_DIV_EXPR:
11056     case CEIL_DIV_EXPR:
11057     case FLOOR_DIV_EXPR:
11058     case ROUND_DIV_EXPR:
11059     case EXACT_DIV_EXPR:
11060     case BIT_AND_EXPR:
11061     case BIT_IOR_EXPR:
11062     case BIT_XOR_EXPR:
11063     case TRUNC_MOD_EXPR:
11064     case FLOOR_MOD_EXPR:
11065     case TRUTH_ANDIF_EXPR:
11066     case TRUTH_ORIF_EXPR:
11067     case TRUTH_AND_EXPR:
11068     case TRUTH_OR_EXPR:
11069     case RSHIFT_EXPR:
11070     case LSHIFT_EXPR:
11071     case RROTATE_EXPR:
11072     case LROTATE_EXPR:
11073     case EQ_EXPR:
11074     case NE_EXPR:
11075     case MAX_EXPR:
11076     case MIN_EXPR:
11077     case LE_EXPR:
11078     case GE_EXPR:
11079     case LT_EXPR:
11080     case GT_EXPR:
11081     case MEMBER_REF:
11082     case DOTSTAR_EXPR:
11083       return build_x_binary_op
11084         (TREE_CODE (t),
11085          RECUR (TREE_OPERAND (t, 0)),
11086          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11087           ? ERROR_MARK
11088           : TREE_CODE (TREE_OPERAND (t, 0))),
11089          RECUR (TREE_OPERAND (t, 1)),
11090          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11091           ? ERROR_MARK
11092           : TREE_CODE (TREE_OPERAND (t, 1))),
11093          /*overloaded_p=*/NULL,
11094          complain);
11095
11096     case SCOPE_REF:
11097       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11098                                   /*address_p=*/false);
11099     case ARRAY_REF:
11100       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11101                                                 args, complain, in_decl);
11102       return build_x_binary_op (ARRAY_REF, op1,
11103                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11104                                  ? ERROR_MARK
11105                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11106                                 RECUR (TREE_OPERAND (t, 1)),
11107                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11108                                  ? ERROR_MARK
11109                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11110                                 /*overloaded_p=*/NULL,
11111                                 complain);
11112
11113     case SIZEOF_EXPR:
11114       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11115         return tsubst_copy (t, args, complain, in_decl);
11116       /* Fall through */
11117       
11118     case ALIGNOF_EXPR:
11119       op1 = TREE_OPERAND (t, 0);
11120       if (!args)
11121         {
11122           /* When there are no ARGS, we are trying to evaluate a
11123              non-dependent expression from the parser.  Trying to do
11124              the substitutions may not work.  */
11125           if (!TYPE_P (op1))
11126             op1 = TREE_TYPE (op1);
11127         }
11128       else
11129         {
11130           ++skip_evaluation;
11131           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11132                                        /*function_p=*/false,
11133                                        /*integral_constant_expression_p=*/false);
11134           --skip_evaluation;
11135         }
11136       if (TYPE_P (op1))
11137         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11138                                            complain & tf_error);
11139       else
11140         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11141                                            complain & tf_error);
11142
11143     case MODOP_EXPR:
11144       {
11145         tree r = build_x_modify_expr
11146           (RECUR (TREE_OPERAND (t, 0)),
11147            TREE_CODE (TREE_OPERAND (t, 1)),
11148            RECUR (TREE_OPERAND (t, 2)),
11149            complain);
11150         /* TREE_NO_WARNING must be set if either the expression was
11151            parenthesized or it uses an operator such as >>= rather
11152            than plain assignment.  In the former case, it was already
11153            set and must be copied.  In the latter case,
11154            build_x_modify_expr sets it and it must not be reset
11155            here.  */
11156         if (TREE_NO_WARNING (t))
11157           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11158         return r;
11159       }
11160
11161     case ARROW_EXPR:
11162       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11163                                                 args, complain, in_decl);
11164       /* Remember that there was a reference to this entity.  */
11165       if (DECL_P (op1))
11166         mark_used (op1);
11167       return build_x_arrow (op1);
11168
11169     case NEW_EXPR:
11170       {
11171         tree init = RECUR (TREE_OPERAND (t, 3));
11172
11173         if (TREE_OPERAND (t, 3) && !init)
11174           /* If there was an initializer in the original tree, but
11175              it instantiated to an empty list, then we should pass on
11176              VOID_ZERO_NODE to tell build_new that it was an empty
11177              initializer () rather than no initializer.  This can only
11178              happen when the initializer is a pack expansion whose
11179              parameter packs are of length zero.  */
11180           init = void_zero_node;
11181
11182         return build_new
11183           (RECUR (TREE_OPERAND (t, 0)),
11184            RECUR (TREE_OPERAND (t, 1)),
11185            RECUR (TREE_OPERAND (t, 2)),
11186            init,
11187            NEW_EXPR_USE_GLOBAL (t),
11188            complain);
11189       }
11190
11191     case DELETE_EXPR:
11192      return delete_sanity
11193        (RECUR (TREE_OPERAND (t, 0)),
11194         RECUR (TREE_OPERAND (t, 1)),
11195         DELETE_EXPR_USE_VEC (t),
11196         DELETE_EXPR_USE_GLOBAL (t));
11197
11198     case COMPOUND_EXPR:
11199       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11200                                     RECUR (TREE_OPERAND (t, 1)),
11201                                     complain);
11202
11203     case CALL_EXPR:
11204       {
11205         tree function;
11206         tree call_args;
11207         bool qualified_p;
11208         bool koenig_p;
11209
11210         function = CALL_EXPR_FN (t);
11211         /* When we parsed the expression,  we determined whether or
11212            not Koenig lookup should be performed.  */
11213         koenig_p = KOENIG_LOOKUP_P (t);
11214         if (TREE_CODE (function) == SCOPE_REF)
11215           {
11216             qualified_p = true;
11217             function = tsubst_qualified_id (function, args, complain, in_decl,
11218                                             /*done=*/false,
11219                                             /*address_p=*/false);
11220           }
11221         else
11222           {
11223             if (TREE_CODE (function) == COMPONENT_REF)
11224               {
11225                 tree op = TREE_OPERAND (function, 1);
11226
11227                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11228                                || (BASELINK_P (op)
11229                                    && BASELINK_QUALIFIED_P (op)));
11230               }
11231             else
11232               qualified_p = false;
11233
11234             function = tsubst_copy_and_build (function, args, complain,
11235                                               in_decl,
11236                                               !qualified_p,
11237                                               integral_constant_expression_p);
11238
11239             if (BASELINK_P (function))
11240               qualified_p = true;
11241           }
11242
11243         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11244         call_args = RECUR (CALL_EXPR_ARGS (t));
11245
11246         /* We do not perform argument-dependent lookup if normal
11247            lookup finds a non-function, in accordance with the
11248            expected resolution of DR 218.  */
11249         if (koenig_p
11250             && ((is_overloaded_fn (function)
11251                  /* If lookup found a member function, the Koenig lookup is
11252                     not appropriate, even if an unqualified-name was used
11253                     to denote the function.  */
11254                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11255                 || TREE_CODE (function) == IDENTIFIER_NODE))
11256           function = perform_koenig_lookup (function, call_args);
11257
11258         if (TREE_CODE (function) == IDENTIFIER_NODE)
11259           {
11260             unqualified_name_lookup_error (function);
11261             return error_mark_node;
11262           }
11263
11264         /* Remember that there was a reference to this entity.  */
11265         if (DECL_P (function))
11266           mark_used (function);
11267
11268         if (TREE_CODE (function) == OFFSET_REF)
11269           return build_offset_ref_call_from_tree (function, call_args);
11270         if (TREE_CODE (function) == COMPONENT_REF)
11271           {
11272             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11273               return finish_call_expr (function, call_args,
11274                                        /*disallow_virtual=*/false,
11275                                        /*koenig_p=*/false,
11276                                        complain);
11277             else
11278               return (build_new_method_call
11279                       (TREE_OPERAND (function, 0),
11280                        TREE_OPERAND (function, 1),
11281                        call_args, NULL_TREE,
11282                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11283                        /*fn_p=*/NULL,
11284                        complain));
11285           }
11286         return finish_call_expr (function, call_args,
11287                                  /*disallow_virtual=*/qualified_p,
11288                                  koenig_p,
11289                                  complain);
11290       }
11291
11292     case COND_EXPR:
11293       return build_x_conditional_expr
11294         (RECUR (TREE_OPERAND (t, 0)),
11295          RECUR (TREE_OPERAND (t, 1)),
11296          RECUR (TREE_OPERAND (t, 2)),
11297          complain);
11298
11299     case PSEUDO_DTOR_EXPR:
11300       return finish_pseudo_destructor_expr
11301         (RECUR (TREE_OPERAND (t, 0)),
11302          RECUR (TREE_OPERAND (t, 1)),
11303          RECUR (TREE_OPERAND (t, 2)));
11304
11305     case TREE_LIST:
11306       {
11307         tree purpose, value, chain;
11308
11309         if (t == void_list_node)
11310           return t;
11311
11312         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11313             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11314           {
11315             /* We have pack expansions, so expand those and
11316                create a new list out of it.  */
11317             tree purposevec = NULL_TREE;
11318             tree valuevec = NULL_TREE;
11319             tree chain;
11320             int i, len = -1;
11321
11322             /* Expand the argument expressions.  */
11323             if (TREE_PURPOSE (t))
11324               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11325                                                  complain, in_decl);
11326             if (TREE_VALUE (t))
11327               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11328                                                complain, in_decl);
11329
11330             /* Build the rest of the list.  */
11331             chain = TREE_CHAIN (t);
11332             if (chain && chain != void_type_node)
11333               chain = RECUR (chain);
11334
11335             /* Determine the number of arguments.  */
11336             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11337               {
11338                 len = TREE_VEC_LENGTH (purposevec);
11339                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11340               }
11341             else if (TREE_CODE (valuevec) == TREE_VEC)
11342               len = TREE_VEC_LENGTH (valuevec);
11343             else
11344               {
11345                 /* Since we only performed a partial substitution into
11346                    the argument pack, we only return a single list
11347                    node.  */
11348                 if (purposevec == TREE_PURPOSE (t)
11349                     && valuevec == TREE_VALUE (t)
11350                     && chain == TREE_CHAIN (t))
11351                   return t;
11352
11353                 return tree_cons (purposevec, valuevec, chain);
11354               }
11355             
11356             /* Convert the argument vectors into a TREE_LIST */
11357             i = len;
11358             while (i > 0)
11359               {
11360                 /* Grab the Ith values.  */
11361                 i--;
11362                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11363                                      : NULL_TREE;
11364                 value 
11365                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11366                              : NULL_TREE;
11367
11368                 /* Build the list (backwards).  */
11369                 chain = tree_cons (purpose, value, chain);
11370               }
11371
11372             return chain;
11373           }
11374
11375         purpose = TREE_PURPOSE (t);
11376         if (purpose)
11377           purpose = RECUR (purpose);
11378         value = TREE_VALUE (t);
11379         if (value)
11380           value = RECUR (value);
11381         chain = TREE_CHAIN (t);
11382         if (chain && chain != void_type_node)
11383           chain = RECUR (chain);
11384         if (purpose == TREE_PURPOSE (t)
11385             && value == TREE_VALUE (t)
11386             && chain == TREE_CHAIN (t))
11387           return t;
11388         return tree_cons (purpose, value, chain);
11389       }
11390
11391     case COMPONENT_REF:
11392       {
11393         tree object;
11394         tree object_type;
11395         tree member;
11396
11397         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11398                                                      args, complain, in_decl);
11399         /* Remember that there was a reference to this entity.  */
11400         if (DECL_P (object))
11401           mark_used (object);
11402         object_type = TREE_TYPE (object);
11403
11404         member = TREE_OPERAND (t, 1);
11405         if (BASELINK_P (member))
11406           member = tsubst_baselink (member,
11407                                     non_reference (TREE_TYPE (object)),
11408                                     args, complain, in_decl);
11409         else
11410           member = tsubst_copy (member, args, complain, in_decl);
11411         if (member == error_mark_node)
11412           return error_mark_node;
11413
11414         if (object_type && !CLASS_TYPE_P (object_type))
11415           {
11416             if (SCALAR_TYPE_P (object_type))
11417               {
11418                 tree s = NULL_TREE;
11419                 tree dtor = member;
11420
11421                 if (TREE_CODE (dtor) == SCOPE_REF)
11422                   {
11423                     s = TREE_OPERAND (dtor, 0);
11424                     dtor = TREE_OPERAND (dtor, 1);
11425                   }
11426                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11427                   {
11428                     dtor = TREE_OPERAND (dtor, 0);
11429                     if (TYPE_P (dtor))
11430                       return finish_pseudo_destructor_expr (object, s, dtor);
11431                   }
11432               }
11433           }
11434         else if (TREE_CODE (member) == SCOPE_REF
11435                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11436           {
11437             tree tmpl;
11438             tree args;
11439
11440             /* Lookup the template functions now that we know what the
11441                scope is.  */
11442             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11443             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11444             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11445                                             /*is_type_p=*/false,
11446                                             /*complain=*/false);
11447             if (BASELINK_P (member))
11448               {
11449                 BASELINK_FUNCTIONS (member)
11450                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11451                               args);
11452                 member = (adjust_result_of_qualified_name_lookup
11453                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11454                            object_type));
11455               }
11456             else
11457               {
11458                 qualified_name_lookup_error (object_type, tmpl, member,
11459                                              input_location);
11460                 return error_mark_node;
11461               }
11462           }
11463         else if (TREE_CODE (member) == SCOPE_REF
11464                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11465                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11466           {
11467             if (complain & tf_error)
11468               {
11469                 if (TYPE_P (TREE_OPERAND (member, 0)))
11470                   error ("%qT is not a class or namespace",
11471                          TREE_OPERAND (member, 0));
11472                 else
11473                   error ("%qD is not a class or namespace",
11474                          TREE_OPERAND (member, 0));
11475               }
11476             return error_mark_node;
11477           }
11478         else if (TREE_CODE (member) == FIELD_DECL)
11479           return finish_non_static_data_member (member, object, NULL_TREE);
11480
11481         return finish_class_member_access_expr (object, member,
11482                                                 /*template_p=*/false,
11483                                                 complain);
11484       }
11485
11486     case THROW_EXPR:
11487       return build_throw
11488         (RECUR (TREE_OPERAND (t, 0)));
11489
11490     case CONSTRUCTOR:
11491       {
11492         VEC(constructor_elt,gc) *n;
11493         constructor_elt *ce;
11494         unsigned HOST_WIDE_INT idx;
11495         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11496         bool process_index_p;
11497         int newlen;
11498         bool need_copy_p = false;
11499         tree r;
11500
11501         if (type == error_mark_node)
11502           return error_mark_node;
11503
11504         /* digest_init will do the wrong thing if we let it.  */
11505         if (type && TYPE_PTRMEMFUNC_P (type))
11506           return t;
11507
11508         /* We do not want to process the index of aggregate
11509            initializers as they are identifier nodes which will be
11510            looked up by digest_init.  */
11511         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11512
11513         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11514         newlen = VEC_length (constructor_elt, n);
11515         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11516           {
11517             if (ce->index && process_index_p)
11518               ce->index = RECUR (ce->index);
11519
11520             if (PACK_EXPANSION_P (ce->value))
11521               {
11522                 /* Substitute into the pack expansion.  */
11523                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11524                                                   in_decl);
11525
11526                 if (ce->value == error_mark_node)
11527                   ;
11528                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11529                   /* Just move the argument into place.  */
11530                   ce->value = TREE_VEC_ELT (ce->value, 0);
11531                 else
11532                   {
11533                     /* Update the length of the final CONSTRUCTOR
11534                        arguments vector, and note that we will need to
11535                        copy.*/
11536                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11537                     need_copy_p = true;
11538                   }
11539               }
11540             else
11541               ce->value = RECUR (ce->value);
11542           }
11543
11544         if (need_copy_p)
11545           {
11546             VEC(constructor_elt,gc) *old_n = n;
11547
11548             n = VEC_alloc (constructor_elt, gc, newlen);
11549             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11550                  idx++)
11551               {
11552                 if (TREE_CODE (ce->value) == TREE_VEC)
11553                   {
11554                     int i, len = TREE_VEC_LENGTH (ce->value);
11555                     for (i = 0; i < len; ++i)
11556                       CONSTRUCTOR_APPEND_ELT (n, 0,
11557                                               TREE_VEC_ELT (ce->value, i));
11558                   }
11559                 else
11560                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11561               }
11562           }
11563
11564         r = build_constructor (init_list_type_node, n);
11565
11566         if (TREE_HAS_CONSTRUCTOR (t))
11567           return finish_compound_literal (type, r);
11568
11569         return r;
11570       }
11571
11572     case TYPEID_EXPR:
11573       {
11574         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11575         if (TYPE_P (operand_0))
11576           return get_typeid (operand_0);
11577         return build_typeid (operand_0);
11578       }
11579
11580     case VAR_DECL:
11581       if (!args)
11582         return t;
11583       /* Fall through */
11584
11585     case PARM_DECL:
11586       {
11587         tree r = tsubst_copy (t, args, complain, in_decl);
11588
11589         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11590           /* If the original type was a reference, we'll be wrapped in
11591              the appropriate INDIRECT_REF.  */
11592           r = convert_from_reference (r);
11593         return r;
11594       }
11595
11596     case VA_ARG_EXPR:
11597       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11598                              tsubst_copy (TREE_TYPE (t), args, complain,
11599                                           in_decl));
11600
11601     case OFFSETOF_EXPR:
11602       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11603
11604     case TRAIT_EXPR:
11605       {
11606         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11607                                   complain, in_decl);
11608
11609         tree type2 = TRAIT_EXPR_TYPE2 (t);
11610         if (type2)
11611           type2 = tsubst_copy (type2, args, complain, in_decl);
11612         
11613         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11614       }
11615
11616     case STMT_EXPR:
11617       {
11618         tree old_stmt_expr = cur_stmt_expr;
11619         tree stmt_expr = begin_stmt_expr ();
11620
11621         cur_stmt_expr = stmt_expr;
11622         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11623                      integral_constant_expression_p);
11624         stmt_expr = finish_stmt_expr (stmt_expr, false);
11625         cur_stmt_expr = old_stmt_expr;
11626
11627         return stmt_expr;
11628       }
11629
11630     case CONST_DECL:
11631       t = tsubst_copy (t, args, complain, in_decl);
11632       /* As in finish_id_expression, we resolve enumeration constants
11633          to their underlying values.  */
11634       if (TREE_CODE (t) == CONST_DECL)
11635         {
11636           used_types_insert (TREE_TYPE (t));
11637           return DECL_INITIAL (t);
11638         }
11639       return t;
11640
11641     default:
11642       /* Handle Objective-C++ constructs, if appropriate.  */
11643       {
11644         tree subst
11645           = objcp_tsubst_copy_and_build (t, args, complain,
11646                                          in_decl, /*function_p=*/false);
11647         if (subst)
11648           return subst;
11649       }
11650       return tsubst_copy (t, args, complain, in_decl);
11651     }
11652
11653 #undef RECUR
11654 }
11655
11656 /* Verify that the instantiated ARGS are valid. For type arguments,
11657    make sure that the type's linkage is ok. For non-type arguments,
11658    make sure they are constants if they are integral or enumerations.
11659    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11660
11661 static bool
11662 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11663 {
11664   int ix, len = DECL_NTPARMS (tmpl);
11665   bool result = false;
11666
11667   for (ix = 0; ix != len; ix++)
11668     {
11669       tree t = TREE_VEC_ELT (args, ix);
11670
11671       if (TYPE_P (t))
11672         {
11673           /* [basic.link]: A name with no linkage (notably, the name
11674              of a class or enumeration declared in a local scope)
11675              shall not be used to declare an entity with linkage.
11676              This implies that names with no linkage cannot be used as
11677              template arguments.  */
11678           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11679
11680           if (nt)
11681             {
11682               /* DR 488 makes use of a type with no linkage cause
11683                  type deduction to fail.  */
11684               if (complain & tf_error)
11685                 {
11686                   if (TYPE_ANONYMOUS_P (nt))
11687                     error ("%qT is/uses anonymous type", t);
11688                   else
11689                     error ("template argument for %qD uses local type %qT",
11690                            tmpl, t);
11691                 }
11692               result = true;
11693             }
11694           /* In order to avoid all sorts of complications, we do not
11695              allow variably-modified types as template arguments.  */
11696           else if (variably_modified_type_p (t, NULL_TREE))
11697             {
11698               if (complain & tf_error)
11699                 error ("%qT is a variably modified type", t);
11700               result = true;
11701             }
11702         }
11703       /* A non-type argument of integral or enumerated type must be a
11704          constant.  */
11705       else if (TREE_TYPE (t)
11706                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11707                && !TREE_CONSTANT (t))
11708         {
11709           if (complain & tf_error)
11710             error ("integral expression %qE is not constant", t);
11711           result = true;
11712         }
11713     }
11714   if (result && (complain & tf_error))
11715     error ("  trying to instantiate %qD", tmpl);
11716   return result;
11717 }
11718
11719 /* Instantiate the indicated variable or function template TMPL with
11720    the template arguments in TARG_PTR.  */
11721
11722 tree
11723 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11724 {
11725   tree fndecl;
11726   tree gen_tmpl;
11727   tree spec;
11728   HOST_WIDE_INT saved_processing_template_decl;
11729
11730   if (tmpl == error_mark_node)
11731     return error_mark_node;
11732
11733   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11734
11735   /* If this function is a clone, handle it specially.  */
11736   if (DECL_CLONED_FUNCTION_P (tmpl))
11737     {
11738       tree spec;
11739       tree clone;
11740
11741       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11742                                    complain);
11743       if (spec == error_mark_node)
11744         return error_mark_node;
11745
11746       /* Look for the clone.  */
11747       FOR_EACH_CLONE (clone, spec)
11748         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11749           return clone;
11750       /* We should always have found the clone by now.  */
11751       gcc_unreachable ();
11752       return NULL_TREE;
11753     }
11754
11755   /* Check to see if we already have this specialization.  */
11756   spec = retrieve_specialization (tmpl, targ_ptr,
11757                                   /*class_specializations_p=*/false);
11758   if (spec != NULL_TREE)
11759     return spec;
11760
11761   gen_tmpl = most_general_template (tmpl);
11762   if (tmpl != gen_tmpl)
11763     {
11764       /* The TMPL is a partial instantiation.  To get a full set of
11765          arguments we must add the arguments used to perform the
11766          partial instantiation.  */
11767       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11768                                               targ_ptr);
11769
11770       /* Check to see if we already have this specialization.  */
11771       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11772                                       /*class_specializations_p=*/false);
11773       if (spec != NULL_TREE)
11774         return spec;
11775     }
11776
11777   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11778                                complain))
11779     return error_mark_node;
11780
11781   /* We are building a FUNCTION_DECL, during which the access of its
11782      parameters and return types have to be checked.  However this
11783      FUNCTION_DECL which is the desired context for access checking
11784      is not built yet.  We solve this chicken-and-egg problem by
11785      deferring all checks until we have the FUNCTION_DECL.  */
11786   push_deferring_access_checks (dk_deferred);
11787
11788   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11789      (because, for example, we have encountered a non-dependent
11790      function call in the body of a template function and must now
11791      determine which of several overloaded functions will be called),
11792      within the instantiation itself we are not processing a
11793      template.  */  
11794   saved_processing_template_decl = processing_template_decl;
11795   processing_template_decl = 0;
11796   /* Substitute template parameters to obtain the specialization.  */
11797   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11798                    targ_ptr, complain, gen_tmpl);
11799   processing_template_decl = saved_processing_template_decl;
11800   if (fndecl == error_mark_node)
11801     return error_mark_node;
11802
11803   /* Now we know the specialization, compute access previously
11804      deferred.  */
11805   push_access_scope (fndecl);
11806   perform_deferred_access_checks ();
11807   pop_access_scope (fndecl);
11808   pop_deferring_access_checks ();
11809
11810   /* The DECL_TI_TEMPLATE should always be the immediate parent
11811      template, not the most general template.  */
11812   DECL_TI_TEMPLATE (fndecl) = tmpl;
11813
11814   /* If we've just instantiated the main entry point for a function,
11815      instantiate all the alternate entry points as well.  We do this
11816      by cloning the instantiation of the main entry point, not by
11817      instantiating the template clones.  */
11818   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11819     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11820
11821   return fndecl;
11822 }
11823
11824 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11825    arguments that are being used when calling it.  TARGS is a vector
11826    into which the deduced template arguments are placed.
11827
11828    Return zero for success, 2 for an incomplete match that doesn't resolve
11829    all the types, and 1 for complete failure.  An error message will be
11830    printed only for an incomplete match.
11831
11832    If FN is a conversion operator, or we are trying to produce a specific
11833    specialization, RETURN_TYPE is the return type desired.
11834
11835    The EXPLICIT_TARGS are explicit template arguments provided via a
11836    template-id.
11837
11838    The parameter STRICT is one of:
11839
11840    DEDUCE_CALL:
11841      We are deducing arguments for a function call, as in
11842      [temp.deduct.call].
11843
11844    DEDUCE_CONV:
11845      We are deducing arguments for a conversion function, as in
11846      [temp.deduct.conv].
11847
11848    DEDUCE_EXACT:
11849      We are deducing arguments when doing an explicit instantiation
11850      as in [temp.explicit], when determining an explicit specialization
11851      as in [temp.expl.spec], or when taking the address of a function
11852      template, as in [temp.deduct.funcaddr].  */
11853
11854 int
11855 fn_type_unification (tree fn,
11856                      tree explicit_targs,
11857                      tree targs,
11858                      tree args,
11859                      tree return_type,
11860                      unification_kind_t strict,
11861                      int flags)
11862 {
11863   tree parms;
11864   tree fntype;
11865   int result;
11866   bool incomplete_argument_packs_p = false;
11867
11868   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11869
11870   fntype = TREE_TYPE (fn);
11871   if (explicit_targs)
11872     {
11873       /* [temp.deduct]
11874
11875          The specified template arguments must match the template
11876          parameters in kind (i.e., type, nontype, template), and there
11877          must not be more arguments than there are parameters;
11878          otherwise type deduction fails.
11879
11880          Nontype arguments must match the types of the corresponding
11881          nontype template parameters, or must be convertible to the
11882          types of the corresponding nontype parameters as specified in
11883          _temp.arg.nontype_, otherwise type deduction fails.
11884
11885          All references in the function type of the function template
11886          to the corresponding template parameters are replaced by the
11887          specified template argument values.  If a substitution in a
11888          template parameter or in the function type of the function
11889          template results in an invalid type, type deduction fails.  */
11890       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11891       int i, len = TREE_VEC_LENGTH (tparms);
11892       tree converted_args;
11893       bool incomplete = false;
11894
11895       if (explicit_targs == error_mark_node)
11896         return 1;
11897
11898       converted_args
11899         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11900                                   /*require_all_args=*/false,
11901                                   /*use_default_args=*/false));
11902       if (converted_args == error_mark_node)
11903         return 1;
11904
11905       /* Substitute the explicit args into the function type.  This is
11906          necessary so that, for instance, explicitly declared function
11907          arguments can match null pointed constants.  If we were given
11908          an incomplete set of explicit args, we must not do semantic
11909          processing during substitution as we could create partial
11910          instantiations.  */
11911       for (i = 0; i < len; i++)
11912         {
11913           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11914           bool parameter_pack = false;
11915
11916           /* Dig out the actual parm.  */
11917           if (TREE_CODE (parm) == TYPE_DECL
11918               || TREE_CODE (parm) == TEMPLATE_DECL)
11919             {
11920               parm = TREE_TYPE (parm);
11921               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11922             }
11923           else if (TREE_CODE (parm) == PARM_DECL)
11924             {
11925               parm = DECL_INITIAL (parm);
11926               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11927             }
11928
11929           if (parameter_pack)
11930             {
11931               int level, idx;
11932               tree targ;
11933               template_parm_level_and_index (parm, &level, &idx);
11934
11935               /* Mark the argument pack as "incomplete". We could
11936                  still deduce more arguments during unification.  */
11937               targ = TMPL_ARG (converted_args, level, idx);
11938               if (targ)
11939                 {
11940                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11941                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11942                     = ARGUMENT_PACK_ARGS (targ);
11943                 }
11944
11945               /* We have some incomplete argument packs.  */
11946               incomplete_argument_packs_p = true;
11947             }
11948         }
11949
11950       if (incomplete_argument_packs_p)
11951         /* Any substitution is guaranteed to be incomplete if there
11952            are incomplete argument packs, because we can still deduce
11953            more arguments.  */
11954         incomplete = 1;
11955       else
11956         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11957
11958       processing_template_decl += incomplete;
11959       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11960       processing_template_decl -= incomplete;
11961
11962       if (fntype == error_mark_node)
11963         return 1;
11964
11965       /* Place the explicitly specified arguments in TARGS.  */
11966       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11967         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11968     }
11969
11970   /* Never do unification on the 'this' parameter.  */
11971   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11972
11973   if (return_type)
11974     {
11975       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11976       args = tree_cons (NULL_TREE, return_type, args);
11977     }
11978
11979   /* We allow incomplete unification without an error message here
11980      because the standard doesn't seem to explicitly prohibit it.  Our
11981      callers must be ready to deal with unification failures in any
11982      event.  */
11983   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11984                                   targs, parms, args, /*subr=*/0,
11985                                   strict, flags);
11986
11987   if (result == 0 && incomplete_argument_packs_p)
11988     {
11989       int i, len = NUM_TMPL_ARGS (targs);
11990
11991       /* Clear the "incomplete" flags on all argument packs.  */
11992       for (i = 0; i < len; i++)
11993         {
11994           tree arg = TREE_VEC_ELT (targs, i);
11995           if (ARGUMENT_PACK_P (arg))
11996             {
11997               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11998               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11999             }
12000         }
12001     }
12002
12003   /* Now that we have bindings for all of the template arguments,
12004      ensure that the arguments deduced for the template template
12005      parameters have compatible template parameter lists.  We cannot
12006      check this property before we have deduced all template
12007      arguments, because the template parameter types of a template
12008      template parameter might depend on prior template parameters
12009      deduced after the template template parameter.  The following
12010      ill-formed example illustrates this issue:
12011
12012        template<typename T, template<T> class C> void f(C<5>, T);
12013
12014        template<int N> struct X {};
12015
12016        void g() {
12017          f(X<5>(), 5l); // error: template argument deduction fails
12018        }
12019
12020      The template parameter list of 'C' depends on the template type
12021      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12022      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12023      time that we deduce 'C'.  */
12024   if (result == 0
12025       && !template_template_parm_bindings_ok_p 
12026            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12027     return 1;
12028
12029   if (result == 0)
12030     /* All is well so far.  Now, check:
12031
12032        [temp.deduct]
12033
12034        When all template arguments have been deduced, all uses of
12035        template parameters in nondeduced contexts are replaced with
12036        the corresponding deduced argument values.  If the
12037        substitution results in an invalid type, as described above,
12038        type deduction fails.  */
12039     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12040         == error_mark_node)
12041       return 1;
12042
12043   return result;
12044 }
12045
12046 /* Adjust types before performing type deduction, as described in
12047    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12048    sections are symmetric.  PARM is the type of a function parameter
12049    or the return type of the conversion function.  ARG is the type of
12050    the argument passed to the call, or the type of the value
12051    initialized with the result of the conversion function.
12052    ARG_EXPR is the original argument expression, which may be null.  */
12053
12054 static int
12055 maybe_adjust_types_for_deduction (unification_kind_t strict,
12056                                   tree* parm,
12057                                   tree* arg,
12058                                   tree arg_expr)
12059 {
12060   int result = 0;
12061
12062   switch (strict)
12063     {
12064     case DEDUCE_CALL:
12065       break;
12066
12067     case DEDUCE_CONV:
12068       {
12069         /* Swap PARM and ARG throughout the remainder of this
12070            function; the handling is precisely symmetric since PARM
12071            will initialize ARG rather than vice versa.  */
12072         tree* temp = parm;
12073         parm = arg;
12074         arg = temp;
12075         break;
12076       }
12077
12078     case DEDUCE_EXACT:
12079       /* There is nothing to do in this case.  */
12080       return 0;
12081
12082     default:
12083       gcc_unreachable ();
12084     }
12085
12086   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12087     {
12088       /* [temp.deduct.call]
12089
12090          If P is not a reference type:
12091
12092          --If A is an array type, the pointer type produced by the
12093          array-to-pointer standard conversion (_conv.array_) is
12094          used in place of A for type deduction; otherwise,
12095
12096          --If A is a function type, the pointer type produced by
12097          the function-to-pointer standard conversion
12098          (_conv.func_) is used in place of A for type deduction;
12099          otherwise,
12100
12101          --If A is a cv-qualified type, the top level
12102          cv-qualifiers of A's type are ignored for type
12103          deduction.  */
12104       if (TREE_CODE (*arg) == ARRAY_TYPE)
12105         *arg = build_pointer_type (TREE_TYPE (*arg));
12106       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12107         *arg = build_pointer_type (*arg);
12108       else
12109         *arg = TYPE_MAIN_VARIANT (*arg);
12110     }
12111
12112   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12113      of the form T&&, where T is a template parameter, and the argument
12114      is an lvalue, T is deduced as A& */
12115   if (TREE_CODE (*parm) == REFERENCE_TYPE
12116       && TYPE_REF_IS_RVALUE (*parm)
12117       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12118       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12119       && arg_expr && real_lvalue_p (arg_expr))
12120     *arg = build_reference_type (*arg);
12121
12122   /* [temp.deduct.call]
12123
12124      If P is a cv-qualified type, the top level cv-qualifiers
12125      of P's type are ignored for type deduction.  If P is a
12126      reference type, the type referred to by P is used for
12127      type deduction.  */
12128   *parm = TYPE_MAIN_VARIANT (*parm);
12129   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12130     {
12131       *parm = TREE_TYPE (*parm);
12132       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12133     }
12134
12135   /* DR 322. For conversion deduction, remove a reference type on parm
12136      too (which has been swapped into ARG).  */
12137   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12138     *arg = TREE_TYPE (*arg);
12139
12140   return result;
12141 }
12142
12143 /* Most parms like fn_type_unification.
12144
12145    If SUBR is 1, we're being called recursively (to unify the
12146    arguments of a function or method parameter of a function
12147    template). */
12148
12149 static int
12150 type_unification_real (tree tparms,
12151                        tree targs,
12152                        tree xparms,
12153                        tree xargs,
12154                        int subr,
12155                        unification_kind_t strict,
12156                        int flags)
12157 {
12158   tree parm, arg, arg_expr;
12159   int i;
12160   int ntparms = TREE_VEC_LENGTH (tparms);
12161   int sub_strict;
12162   int saw_undeduced = 0;
12163   tree parms, args;
12164
12165   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12166   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12167   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12168   gcc_assert (ntparms > 0);
12169
12170   switch (strict)
12171     {
12172     case DEDUCE_CALL:
12173       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12174                     | UNIFY_ALLOW_DERIVED);
12175       break;
12176
12177     case DEDUCE_CONV:
12178       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12179       break;
12180
12181     case DEDUCE_EXACT:
12182       sub_strict = UNIFY_ALLOW_NONE;
12183       break;
12184
12185     default:
12186       gcc_unreachable ();
12187     }
12188
12189  again:
12190   parms = xparms;
12191   args = xargs;
12192
12193   while (parms && parms != void_list_node
12194          && args && args != void_list_node)
12195     {
12196       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12197         break;
12198
12199       parm = TREE_VALUE (parms);
12200       parms = TREE_CHAIN (parms);
12201       arg = TREE_VALUE (args);
12202       args = TREE_CHAIN (args);
12203       arg_expr = NULL;
12204
12205       if (arg == error_mark_node)
12206         return 1;
12207       if (arg == unknown_type_node)
12208         /* We can't deduce anything from this, but we might get all the
12209            template args from other function args.  */
12210         continue;
12211
12212       /* Conversions will be performed on a function argument that
12213          corresponds with a function parameter that contains only
12214          non-deducible template parameters and explicitly specified
12215          template parameters.  */
12216       if (!uses_template_parms (parm))
12217         {
12218           tree type;
12219
12220           if (!TYPE_P (arg))
12221             type = TREE_TYPE (arg);
12222           else
12223             type = arg;
12224
12225           if (same_type_p (parm, type))
12226             continue;
12227           if (strict != DEDUCE_EXACT
12228               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12229                                   flags))
12230             continue;
12231
12232           return 1;
12233         }
12234
12235       if (!TYPE_P (arg))
12236         {
12237           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12238           if (type_unknown_p (arg))
12239             {
12240               /* [temp.deduct.type] 
12241
12242                  A template-argument can be deduced from a pointer to
12243                  function or pointer to member function argument if
12244                  the set of overloaded functions does not contain
12245                  function templates and at most one of a set of
12246                  overloaded functions provides a unique match.  */
12247               if (resolve_overloaded_unification
12248                   (tparms, targs, parm, arg, strict, sub_strict))
12249                 continue;
12250
12251               return 1;
12252             }
12253           arg_expr = arg;
12254           arg = unlowered_expr_type (arg);
12255           if (arg == error_mark_node)
12256             return 1;
12257         }
12258
12259       {
12260         int arg_strict = sub_strict;
12261
12262         if (!subr)
12263           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12264                                                           arg_expr);
12265
12266         if (arg == init_list_type_node && arg_expr)
12267           arg = arg_expr;
12268         if (unify (tparms, targs, parm, arg, arg_strict))
12269           return 1;
12270       }
12271     }
12272
12273
12274   if (parms 
12275       && parms != void_list_node
12276       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12277     {
12278       /* Unify the remaining arguments with the pack expansion type.  */
12279       tree argvec;
12280       tree parmvec = make_tree_vec (1);
12281       int len = 0;
12282       tree t;
12283
12284       /* Count the number of arguments that remain.  */
12285       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12286         len++;
12287         
12288       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12289       argvec = make_tree_vec (len);
12290       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12291         {
12292           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12293           ++i;
12294         }
12295
12296       /* Copy the parameter into parmvec.  */
12297       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12298       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12299                                 /*call_args_p=*/true, /*subr=*/subr))
12300         return 1;
12301
12302       /* Advance to the end of the list of parameters.  */
12303       parms = TREE_CHAIN (parms);
12304     }
12305
12306   /* Fail if we've reached the end of the parm list, and more args
12307      are present, and the parm list isn't variadic.  */
12308   if (args && args != void_list_node && parms == void_list_node)
12309     return 1;
12310   /* Fail if parms are left and they don't have default values.  */
12311   if (parms && parms != void_list_node
12312       && TREE_PURPOSE (parms) == NULL_TREE)
12313     return 1;
12314
12315   if (!subr)
12316     for (i = 0; i < ntparms; i++)
12317       if (!TREE_VEC_ELT (targs, i))
12318         {
12319           tree tparm;
12320
12321           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12322             continue;
12323
12324           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12325
12326           /* If this is an undeduced nontype parameter that depends on
12327              a type parameter, try another pass; its type may have been
12328              deduced from a later argument than the one from which
12329              this parameter can be deduced.  */
12330           if (TREE_CODE (tparm) == PARM_DECL
12331               && uses_template_parms (TREE_TYPE (tparm))
12332               && !saw_undeduced++)
12333             goto again;
12334
12335           /* Core issue #226 (C++0x) [temp.deduct]:
12336
12337                If a template argument has not been deduced, its
12338                default template argument, if any, is used. 
12339
12340              When we are in C++98 mode, TREE_PURPOSE will either
12341              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12342              to explicitly check cxx_dialect here.  */
12343           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12344             {
12345               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12346                                  targs, tf_none, NULL_TREE);
12347               if (arg == error_mark_node)
12348                 return 1;
12349               else
12350                 {
12351                   TREE_VEC_ELT (targs, i) = arg;
12352                   continue;
12353                 }
12354             }
12355
12356           /* If the type parameter is a parameter pack, then it will
12357              be deduced to an empty parameter pack.  */
12358           if (template_parameter_pack_p (tparm))
12359             {
12360               tree arg;
12361
12362               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12363                 {
12364                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12365                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12366                   TREE_CONSTANT (arg) = 1;
12367                 }
12368               else
12369                 arg = make_node (TYPE_ARGUMENT_PACK);
12370
12371               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12372
12373               TREE_VEC_ELT (targs, i) = arg;
12374               continue;
12375             }
12376
12377           return 2;
12378         }
12379
12380   return 0;
12381 }
12382
12383 /* Subroutine of type_unification_real.  Args are like the variables
12384    at the call site.  ARG is an overloaded function (or template-id);
12385    we try deducing template args from each of the overloads, and if
12386    only one succeeds, we go with that.  Modifies TARGS and returns
12387    true on success.  */
12388
12389 static bool
12390 resolve_overloaded_unification (tree tparms,
12391                                 tree targs,
12392                                 tree parm,
12393                                 tree arg,
12394                                 unification_kind_t strict,
12395                                 int sub_strict)
12396 {
12397   tree tempargs = copy_node (targs);
12398   int good = 0;
12399   bool addr_p;
12400
12401   if (TREE_CODE (arg) == ADDR_EXPR)
12402     {
12403       arg = TREE_OPERAND (arg, 0);
12404       addr_p = true;
12405     }
12406   else
12407     addr_p = false;
12408
12409   if (TREE_CODE (arg) == COMPONENT_REF)
12410     /* Handle `&x' where `x' is some static or non-static member
12411        function name.  */
12412     arg = TREE_OPERAND (arg, 1);
12413
12414   if (TREE_CODE (arg) == OFFSET_REF)
12415     arg = TREE_OPERAND (arg, 1);
12416
12417   /* Strip baselink information.  */
12418   if (BASELINK_P (arg))
12419     arg = BASELINK_FUNCTIONS (arg);
12420
12421   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12422     {
12423       /* If we got some explicit template args, we need to plug them into
12424          the affected templates before we try to unify, in case the
12425          explicit args will completely resolve the templates in question.  */
12426
12427       tree expl_subargs = TREE_OPERAND (arg, 1);
12428       arg = TREE_OPERAND (arg, 0);
12429
12430       for (; arg; arg = OVL_NEXT (arg))
12431         {
12432           tree fn = OVL_CURRENT (arg);
12433           tree subargs, elem;
12434
12435           if (TREE_CODE (fn) != TEMPLATE_DECL)
12436             continue;
12437
12438           ++processing_template_decl;
12439           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12440                                   expl_subargs, /*check_ret=*/false);
12441           if (subargs)
12442             {
12443               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12444               good += try_one_overload (tparms, targs, tempargs, parm,
12445                                         elem, strict, sub_strict, addr_p);
12446             }
12447           --processing_template_decl;
12448         }
12449     }
12450   else if (TREE_CODE (arg) != OVERLOAD
12451            && TREE_CODE (arg) != FUNCTION_DECL)
12452     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12453        -- but the deduction does not succeed because the expression is
12454        not just the function on its own.  */
12455     return false;
12456   else
12457     for (; arg; arg = OVL_NEXT (arg))
12458       good += try_one_overload (tparms, targs, tempargs, parm,
12459                                 TREE_TYPE (OVL_CURRENT (arg)),
12460                                 strict, sub_strict, addr_p);
12461
12462   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12463      to function or pointer to member function argument if the set of
12464      overloaded functions does not contain function templates and at most
12465      one of a set of overloaded functions provides a unique match.
12466
12467      So if we found multiple possibilities, we return success but don't
12468      deduce anything.  */
12469
12470   if (good == 1)
12471     {
12472       int i = TREE_VEC_LENGTH (targs);
12473       for (; i--; )
12474         if (TREE_VEC_ELT (tempargs, i))
12475           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12476     }
12477   if (good)
12478     return true;
12479
12480   return false;
12481 }
12482
12483 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12484    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12485    different overloads deduce different arguments for a given parm.
12486    ADDR_P is true if the expression for which deduction is being
12487    performed was of the form "& fn" rather than simply "fn".
12488
12489    Returns 1 on success.  */
12490
12491 static int
12492 try_one_overload (tree tparms,
12493                   tree orig_targs,
12494                   tree targs,
12495                   tree parm,
12496                   tree arg,
12497                   unification_kind_t strict,
12498                   int sub_strict,
12499                   bool addr_p)
12500 {
12501   int nargs;
12502   tree tempargs;
12503   int i;
12504
12505   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12506      to function or pointer to member function argument if the set of
12507      overloaded functions does not contain function templates and at most
12508      one of a set of overloaded functions provides a unique match.
12509
12510      So if this is a template, just return success.  */
12511
12512   if (uses_template_parms (arg))
12513     return 1;
12514
12515   if (TREE_CODE (arg) == METHOD_TYPE)
12516     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12517   else if (addr_p)
12518     arg = build_pointer_type (arg);
12519
12520   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12521
12522   /* We don't copy orig_targs for this because if we have already deduced
12523      some template args from previous args, unify would complain when we
12524      try to deduce a template parameter for the same argument, even though
12525      there isn't really a conflict.  */
12526   nargs = TREE_VEC_LENGTH (targs);
12527   tempargs = make_tree_vec (nargs);
12528
12529   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12530     return 0;
12531
12532   /* First make sure we didn't deduce anything that conflicts with
12533      explicitly specified args.  */
12534   for (i = nargs; i--; )
12535     {
12536       tree elt = TREE_VEC_ELT (tempargs, i);
12537       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12538
12539       if (!elt)
12540         /*NOP*/;
12541       else if (uses_template_parms (elt))
12542         /* Since we're unifying against ourselves, we will fill in
12543            template args used in the function parm list with our own
12544            template parms.  Discard them.  */
12545         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12546       else if (oldelt && !template_args_equal (oldelt, elt))
12547         return 0;
12548     }
12549
12550   for (i = nargs; i--; )
12551     {
12552       tree elt = TREE_VEC_ELT (tempargs, i);
12553
12554       if (elt)
12555         TREE_VEC_ELT (targs, i) = elt;
12556     }
12557
12558   return 1;
12559 }
12560
12561 /* PARM is a template class (perhaps with unbound template
12562    parameters).  ARG is a fully instantiated type.  If ARG can be
12563    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12564    TARGS are as for unify.  */
12565
12566 static tree
12567 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12568 {
12569   tree copy_of_targs;
12570
12571   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12572       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12573           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12574     return NULL_TREE;
12575
12576   /* We need to make a new template argument vector for the call to
12577      unify.  If we used TARGS, we'd clutter it up with the result of
12578      the attempted unification, even if this class didn't work out.
12579      We also don't want to commit ourselves to all the unifications
12580      we've already done, since unification is supposed to be done on
12581      an argument-by-argument basis.  In other words, consider the
12582      following pathological case:
12583
12584        template <int I, int J, int K>
12585        struct S {};
12586
12587        template <int I, int J>
12588        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12589
12590        template <int I, int J, int K>
12591        void f(S<I, J, K>, S<I, I, I>);
12592
12593        void g() {
12594          S<0, 0, 0> s0;
12595          S<0, 1, 2> s2;
12596
12597          f(s0, s2);
12598        }
12599
12600      Now, by the time we consider the unification involving `s2', we
12601      already know that we must have `f<0, 0, 0>'.  But, even though
12602      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12603      because there are two ways to unify base classes of S<0, 1, 2>
12604      with S<I, I, I>.  If we kept the already deduced knowledge, we
12605      would reject the possibility I=1.  */
12606   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12607
12608   /* If unification failed, we're done.  */
12609   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12610              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12611     return NULL_TREE;
12612
12613   return arg;
12614 }
12615
12616 /* Given a template type PARM and a class type ARG, find the unique
12617    base type in ARG that is an instance of PARM.  We do not examine
12618    ARG itself; only its base-classes.  If there is not exactly one
12619    appropriate base class, return NULL_TREE.  PARM may be the type of
12620    a partial specialization, as well as a plain template type.  Used
12621    by unify.  */
12622
12623 static tree
12624 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12625 {
12626   tree rval = NULL_TREE;
12627   tree binfo;
12628
12629   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12630
12631   binfo = TYPE_BINFO (complete_type (arg));
12632   if (!binfo)
12633     /* The type could not be completed.  */
12634     return NULL_TREE;
12635
12636   /* Walk in inheritance graph order.  The search order is not
12637      important, and this avoids multiple walks of virtual bases.  */
12638   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12639     {
12640       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12641
12642       if (r)
12643         {
12644           /* If there is more than one satisfactory baseclass, then:
12645
12646                [temp.deduct.call]
12647
12648               If they yield more than one possible deduced A, the type
12649               deduction fails.
12650
12651              applies.  */
12652           if (rval && !same_type_p (r, rval))
12653             return NULL_TREE;
12654
12655           rval = r;
12656         }
12657     }
12658
12659   return rval;
12660 }
12661
12662 /* Returns the level of DECL, which declares a template parameter.  */
12663
12664 static int
12665 template_decl_level (tree decl)
12666 {
12667   switch (TREE_CODE (decl))
12668     {
12669     case TYPE_DECL:
12670     case TEMPLATE_DECL:
12671       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12672
12673     case PARM_DECL:
12674       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12675
12676     default:
12677       gcc_unreachable ();
12678     }
12679   return 0;
12680 }
12681
12682 /* Decide whether ARG can be unified with PARM, considering only the
12683    cv-qualifiers of each type, given STRICT as documented for unify.
12684    Returns nonzero iff the unification is OK on that basis.  */
12685
12686 static int
12687 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12688 {
12689   int arg_quals = cp_type_quals (arg);
12690   int parm_quals = cp_type_quals (parm);
12691
12692   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12693       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12694     {
12695       /*  Although a CVR qualifier is ignored when being applied to a
12696           substituted template parameter ([8.3.2]/1 for example), that
12697           does not apply during deduction [14.8.2.4]/1, (even though
12698           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12699           this).  Except when we're allowing additional CV qualifiers
12700           at the outer level [14.8.2.1]/3,1st bullet.  */
12701       if ((TREE_CODE (arg) == REFERENCE_TYPE
12702            || TREE_CODE (arg) == FUNCTION_TYPE
12703            || TREE_CODE (arg) == METHOD_TYPE)
12704           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12705         return 0;
12706
12707       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12708           && (parm_quals & TYPE_QUAL_RESTRICT))
12709         return 0;
12710     }
12711
12712   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12713       && (arg_quals & parm_quals) != parm_quals)
12714     return 0;
12715
12716   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12717       && (parm_quals & arg_quals) != arg_quals)
12718     return 0;
12719
12720   return 1;
12721 }
12722
12723 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12724 void 
12725 template_parm_level_and_index (tree parm, int* level, int* index)
12726 {
12727   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12728       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12729       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12730     {
12731       *index = TEMPLATE_TYPE_IDX (parm);
12732       *level = TEMPLATE_TYPE_LEVEL (parm);
12733     }
12734   else
12735     {
12736       *index = TEMPLATE_PARM_IDX (parm);
12737       *level = TEMPLATE_PARM_LEVEL (parm);
12738     }
12739 }
12740
12741 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12742    expansion at the end of PACKED_PARMS. Returns 0 if the type
12743    deduction succeeds, 1 otherwise. STRICT is the same as in
12744    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12745    call argument list. We'll need to adjust the arguments to make them
12746    types. SUBR tells us if this is from a recursive call to
12747    type_unification_real.  */
12748 int
12749 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12750                       tree packed_args, int strict, bool call_args_p,
12751                       bool subr)
12752 {
12753   tree parm 
12754     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12755   tree pattern = PACK_EXPANSION_PATTERN (parm);
12756   tree pack, packs = NULL_TREE;
12757   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12758   int len = TREE_VEC_LENGTH (packed_args);
12759
12760   /* Determine the parameter packs we will be deducing from the
12761      pattern, and record their current deductions.  */
12762   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12763        pack; pack = TREE_CHAIN (pack))
12764     {
12765       tree parm_pack = TREE_VALUE (pack);
12766       int idx, level;
12767
12768       /* Determine the index and level of this parameter pack.  */
12769       template_parm_level_and_index (parm_pack, &level, &idx);
12770
12771       /* Keep track of the parameter packs and their corresponding
12772          argument packs.  */
12773       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12774       TREE_TYPE (packs) = make_tree_vec (len - start);
12775     }
12776   
12777   /* Loop through all of the arguments that have not yet been
12778      unified and unify each with the pattern.  */
12779   for (i = start; i < len; i++)
12780     {
12781       tree parm = pattern;
12782
12783       /* For each parameter pack, clear out the deduced value so that
12784          we can deduce it again.  */
12785       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12786         {
12787           int idx, level;
12788           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12789
12790           TMPL_ARG (targs, level, idx) = NULL_TREE;
12791         }
12792
12793       /* Unify the pattern with the current argument.  */
12794       {
12795         tree arg = TREE_VEC_ELT (packed_args, i);
12796         tree arg_expr = NULL_TREE;
12797         int arg_strict = strict;
12798         bool skip_arg_p = false;
12799
12800         if (call_args_p)
12801           {
12802             int sub_strict;
12803
12804             /* This mirrors what we do in type_unification_real.  */
12805             switch (strict)
12806               {
12807               case DEDUCE_CALL:
12808                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12809                               | UNIFY_ALLOW_MORE_CV_QUAL
12810                               | UNIFY_ALLOW_DERIVED);
12811                 break;
12812                 
12813               case DEDUCE_CONV:
12814                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12815                 break;
12816                 
12817               case DEDUCE_EXACT:
12818                 sub_strict = UNIFY_ALLOW_NONE;
12819                 break;
12820                 
12821               default:
12822                 gcc_unreachable ();
12823               }
12824
12825             if (!TYPE_P (arg))
12826               {
12827                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12828                 if (type_unknown_p (arg))
12829                   {
12830                     /* [temp.deduct.type] A template-argument can be
12831                        deduced from a pointer to function or pointer
12832                        to member function argument if the set of
12833                        overloaded functions does not contain function
12834                        templates and at most one of a set of
12835                        overloaded functions provides a unique
12836                        match.  */
12837
12838                     if (resolve_overloaded_unification
12839                         (tparms, targs, parm, arg, strict, sub_strict)
12840                         != 0)
12841                       return 1;
12842                     skip_arg_p = true;
12843                   }
12844
12845                 if (!skip_arg_p)
12846                   {
12847                     arg_expr = arg;
12848                     arg = unlowered_expr_type (arg);
12849                     if (arg == error_mark_node)
12850                       return 1;
12851                   }
12852               }
12853       
12854             arg_strict = sub_strict;
12855
12856             if (!subr)
12857               arg_strict |= 
12858                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12859                                                   arg_expr);
12860           }
12861
12862         if (!skip_arg_p)
12863           {
12864             if (unify (tparms, targs, parm, arg, arg_strict))
12865               return 1;
12866           }
12867       }
12868
12869       /* For each parameter pack, collect the deduced value.  */
12870       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12871         {
12872           int idx, level;
12873           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12874
12875           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12876             TMPL_ARG (targs, level, idx);
12877         }
12878     }
12879
12880   /* Verify that the results of unification with the parameter packs
12881      produce results consistent with what we've seen before, and make
12882      the deduced argument packs available.  */
12883   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12884     {
12885       tree old_pack = TREE_VALUE (pack);
12886       tree new_args = TREE_TYPE (pack);
12887       int i, len = TREE_VEC_LENGTH (new_args);
12888       bool nondeduced_p = false;
12889
12890       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12891          actually deduce anything.  */
12892       for (i = 0; i < len && !nondeduced_p; ++i)
12893         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12894           nondeduced_p = true;
12895       if (nondeduced_p)
12896         continue;
12897
12898       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12899         {
12900           /* Prepend the explicit arguments onto NEW_ARGS.  */
12901           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12902           tree old_args = new_args;
12903           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12904           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12905
12906           /* Copy the explicit arguments.  */
12907           new_args = make_tree_vec (len);
12908           for (i = 0; i < explicit_len; i++)
12909             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12910
12911           /* Copy the deduced arguments.  */
12912           for (; i < len; i++)
12913             TREE_VEC_ELT (new_args, i) =
12914               TREE_VEC_ELT (old_args, i - explicit_len);
12915         }
12916
12917       if (!old_pack)
12918         {
12919           tree result;
12920           int idx, level;
12921           
12922           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12923
12924           /* Build the deduced *_ARGUMENT_PACK.  */
12925           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12926             {
12927               result = make_node (NONTYPE_ARGUMENT_PACK);
12928               TREE_TYPE (result) = 
12929                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12930               TREE_CONSTANT (result) = 1;
12931             }
12932           else
12933             result = make_node (TYPE_ARGUMENT_PACK);
12934
12935           SET_ARGUMENT_PACK_ARGS (result, new_args);
12936
12937           /* Note the deduced argument packs for this parameter
12938              pack.  */
12939           TMPL_ARG (targs, level, idx) = result;
12940         }
12941       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12942                && (ARGUMENT_PACK_ARGS (old_pack) 
12943                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12944         {
12945           /* We only had the explicitly-provided arguments before, but
12946              now we have a complete set of arguments.  */
12947           int idx, level;
12948           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12949           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12950
12951           /* Keep the original deduced argument pack.  */
12952           TMPL_ARG (targs, level, idx) = old_pack;
12953
12954           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12955           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12956           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12957         }
12958       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12959                                     new_args))
12960         /* Inconsistent unification of this parameter pack.  */
12961         return 1;
12962       else
12963         {
12964           int idx, level;
12965           
12966           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12967
12968           /* Keep the original deduced argument pack.  */
12969           TMPL_ARG (targs, level, idx) = old_pack;
12970         }
12971     }
12972
12973   return 0;
12974 }
12975
12976 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12977    set of template parameters to a template.  TARGS is the bindings
12978    for those template parameters, as determined thus far; TARGS may
12979    include template arguments for outer levels of template parameters
12980    as well.  PARM is a parameter to a template function, or a
12981    subcomponent of that parameter; ARG is the corresponding argument.
12982    This function attempts to match PARM with ARG in a manner
12983    consistent with the existing assignments in TARGS.  If more values
12984    are deduced, then TARGS is updated.
12985
12986    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12987    parameter STRICT is a bitwise or of the following flags:
12988
12989      UNIFY_ALLOW_NONE:
12990        Require an exact match between PARM and ARG.
12991      UNIFY_ALLOW_MORE_CV_QUAL:
12992        Allow the deduced ARG to be more cv-qualified (by qualification
12993        conversion) than ARG.
12994      UNIFY_ALLOW_LESS_CV_QUAL:
12995        Allow the deduced ARG to be less cv-qualified than ARG.
12996      UNIFY_ALLOW_DERIVED:
12997        Allow the deduced ARG to be a template base class of ARG,
12998        or a pointer to a template base class of the type pointed to by
12999        ARG.
13000      UNIFY_ALLOW_INTEGER:
13001        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13002        case for more information.
13003      UNIFY_ALLOW_OUTER_LEVEL:
13004        This is the outermost level of a deduction. Used to determine validity
13005        of qualification conversions. A valid qualification conversion must
13006        have const qualified pointers leading up to the inner type which
13007        requires additional CV quals, except at the outer level, where const
13008        is not required [conv.qual]. It would be normal to set this flag in
13009        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13010      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13011        This is the outermost level of a deduction, and PARM can be more CV
13012        qualified at this point.
13013      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13014        This is the outermost level of a deduction, and PARM can be less CV
13015        qualified at this point.  */
13016
13017 static int
13018 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13019 {
13020   int idx;
13021   tree targ;
13022   tree tparm;
13023   int strict_in = strict;
13024
13025   /* I don't think this will do the right thing with respect to types.
13026      But the only case I've seen it in so far has been array bounds, where
13027      signedness is the only information lost, and I think that will be
13028      okay.  */
13029   while (TREE_CODE (parm) == NOP_EXPR)
13030     parm = TREE_OPERAND (parm, 0);
13031
13032   if (arg == error_mark_node)
13033     return 1;
13034   if (arg == unknown_type_node
13035       || arg == init_list_type_node)
13036     /* We can't deduce anything from this, but we might get all the
13037        template args from other function args.  */
13038     return 0;
13039
13040   /* If PARM uses template parameters, then we can't bail out here,
13041      even if ARG == PARM, since we won't record unifications for the
13042      template parameters.  We might need them if we're trying to
13043      figure out which of two things is more specialized.  */
13044   if (arg == parm && !uses_template_parms (parm))
13045     return 0;
13046
13047   /* Handle init lists early, so the rest of the function can assume
13048      we're dealing with a type. */
13049   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13050     {
13051       tree elt, elttype;
13052       unsigned i;
13053
13054       if (!is_std_init_list (parm))
13055         /* We can only deduce from an initializer list argument if the
13056            parameter is std::initializer_list; otherwise this is a
13057            non-deduced context. */
13058         return 0;
13059
13060       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13061
13062       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13063         {
13064           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13065             elt = TREE_TYPE (elt);
13066           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13067             return 1;
13068         }
13069       return 0;
13070     }
13071
13072   /* Immediately reject some pairs that won't unify because of
13073      cv-qualification mismatches.  */
13074   if (TREE_CODE (arg) == TREE_CODE (parm)
13075       && TYPE_P (arg)
13076       /* It is the elements of the array which hold the cv quals of an array
13077          type, and the elements might be template type parms. We'll check
13078          when we recurse.  */
13079       && TREE_CODE (arg) != ARRAY_TYPE
13080       /* We check the cv-qualifiers when unifying with template type
13081          parameters below.  We want to allow ARG `const T' to unify with
13082          PARM `T' for example, when computing which of two templates
13083          is more specialized, for example.  */
13084       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13085       && !check_cv_quals_for_unify (strict_in, arg, parm))
13086     return 1;
13087
13088   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13089       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13090     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13091   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13092   strict &= ~UNIFY_ALLOW_DERIVED;
13093   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13094   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13095
13096   switch (TREE_CODE (parm))
13097     {
13098     case TYPENAME_TYPE:
13099     case SCOPE_REF:
13100     case UNBOUND_CLASS_TEMPLATE:
13101       /* In a type which contains a nested-name-specifier, template
13102          argument values cannot be deduced for template parameters used
13103          within the nested-name-specifier.  */
13104       return 0;
13105
13106     case TEMPLATE_TYPE_PARM:
13107     case TEMPLATE_TEMPLATE_PARM:
13108     case BOUND_TEMPLATE_TEMPLATE_PARM:
13109       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13110       if (tparm == error_mark_node)
13111         return 1;
13112
13113       if (TEMPLATE_TYPE_LEVEL (parm)
13114           != template_decl_level (tparm))
13115         /* The PARM is not one we're trying to unify.  Just check
13116            to see if it matches ARG.  */
13117         return (TREE_CODE (arg) == TREE_CODE (parm)
13118                 && same_type_p (parm, arg)) ? 0 : 1;
13119       idx = TEMPLATE_TYPE_IDX (parm);
13120       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13121       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13122
13123       /* Check for mixed types and values.  */
13124       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13125            && TREE_CODE (tparm) != TYPE_DECL)
13126           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13127               && TREE_CODE (tparm) != TEMPLATE_DECL))
13128         return 1;
13129
13130       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13131         {
13132           /* ARG must be constructed from a template class or a template
13133              template parameter.  */
13134           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13135               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13136             return 1;
13137
13138           {
13139             tree parmvec = TYPE_TI_ARGS (parm);
13140             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13141             tree parm_parms 
13142               = DECL_INNERMOST_TEMPLATE_PARMS
13143                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13144             int i, len;
13145             int parm_variadic_p = 0;
13146
13147             /* The resolution to DR150 makes clear that default
13148                arguments for an N-argument may not be used to bind T
13149                to a template template parameter with fewer than N
13150                parameters.  It is not safe to permit the binding of
13151                default arguments as an extension, as that may change
13152                the meaning of a conforming program.  Consider:
13153
13154                   struct Dense { static const unsigned int dim = 1; };
13155
13156                   template <template <typename> class View,
13157                             typename Block>
13158                   void operator+(float, View<Block> const&);
13159
13160                   template <typename Block,
13161                             unsigned int Dim = Block::dim>
13162                   struct Lvalue_proxy { operator float() const; };
13163
13164                   void
13165                   test_1d (void) {
13166                     Lvalue_proxy<Dense> p;
13167                     float b;
13168                     b + p;
13169                   }
13170
13171               Here, if Lvalue_proxy is permitted to bind to View, then
13172               the global operator+ will be used; if they are not, the
13173               Lvalue_proxy will be converted to float.  */
13174             if (coerce_template_parms (parm_parms,
13175                                        argvec,
13176                                        TYPE_TI_TEMPLATE (parm),
13177                                        tf_none,
13178                                        /*require_all_args=*/true,
13179                                        /*use_default_args=*/false)
13180                 == error_mark_node)
13181               return 1;
13182
13183             /* Deduce arguments T, i from TT<T> or TT<i>.
13184                We check each element of PARMVEC and ARGVEC individually
13185                rather than the whole TREE_VEC since they can have
13186                different number of elements.  */
13187
13188             parmvec = expand_template_argument_pack (parmvec);
13189             argvec = expand_template_argument_pack (argvec);
13190
13191             len = TREE_VEC_LENGTH (parmvec);
13192
13193             /* Check if the parameters end in a pack, making them
13194                variadic.  */
13195             if (len > 0
13196                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13197               parm_variadic_p = 1;
13198             
13199             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13200               return 1;
13201
13202              for (i = 0; i < len - parm_variadic_p; ++i)
13203               {
13204                 if (unify (tparms, targs,
13205                            TREE_VEC_ELT (parmvec, i),
13206                            TREE_VEC_ELT (argvec, i),
13207                            UNIFY_ALLOW_NONE))
13208                   return 1;
13209               }
13210
13211             if (parm_variadic_p
13212                 && unify_pack_expansion (tparms, targs,
13213                                          parmvec, argvec,
13214                                          UNIFY_ALLOW_NONE,
13215                                          /*call_args_p=*/false,
13216                                          /*subr=*/false))
13217               return 1;
13218           }
13219           arg = TYPE_TI_TEMPLATE (arg);
13220
13221           /* Fall through to deduce template name.  */
13222         }
13223
13224       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13225           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13226         {
13227           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13228
13229           /* Simple cases: Value already set, does match or doesn't.  */
13230           if (targ != NULL_TREE && template_args_equal (targ, arg))
13231             return 0;
13232           else if (targ)
13233             return 1;
13234         }
13235       else
13236         {
13237           /* If PARM is `const T' and ARG is only `int', we don't have
13238              a match unless we are allowing additional qualification.
13239              If ARG is `const int' and PARM is just `T' that's OK;
13240              that binds `const int' to `T'.  */
13241           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13242                                          arg, parm))
13243             return 1;
13244
13245           /* Consider the case where ARG is `const volatile int' and
13246              PARM is `const T'.  Then, T should be `volatile int'.  */
13247           arg = cp_build_qualified_type_real
13248             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13249           if (arg == error_mark_node)
13250             return 1;
13251
13252           /* Simple cases: Value already set, does match or doesn't.  */
13253           if (targ != NULL_TREE && same_type_p (targ, arg))
13254             return 0;
13255           else if (targ)
13256             return 1;
13257
13258           /* Make sure that ARG is not a variable-sized array.  (Note
13259              that were talking about variable-sized arrays (like
13260              `int[n]'), rather than arrays of unknown size (like
13261              `int[]').)  We'll get very confused by such a type since
13262              the bound of the array will not be computable in an
13263              instantiation.  Besides, such types are not allowed in
13264              ISO C++, so we can do as we please here.  */
13265           if (variably_modified_type_p (arg, NULL_TREE))
13266             return 1;
13267         }
13268
13269       /* If ARG is a parameter pack or an expansion, we cannot unify
13270          against it unless PARM is also a parameter pack.  */
13271       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13272           && !template_parameter_pack_p (parm))
13273         return 1;
13274
13275       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13276       return 0;
13277
13278     case TEMPLATE_PARM_INDEX:
13279       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13280       if (tparm == error_mark_node)
13281         return 1;
13282
13283       if (TEMPLATE_PARM_LEVEL (parm)
13284           != template_decl_level (tparm))
13285         /* The PARM is not one we're trying to unify.  Just check
13286            to see if it matches ARG.  */
13287         return !(TREE_CODE (arg) == TREE_CODE (parm)
13288                  && cp_tree_equal (parm, arg));
13289
13290       idx = TEMPLATE_PARM_IDX (parm);
13291       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13292
13293       if (targ)
13294         return !cp_tree_equal (targ, arg);
13295
13296       /* [temp.deduct.type] If, in the declaration of a function template
13297          with a non-type template-parameter, the non-type
13298          template-parameter is used in an expression in the function
13299          parameter-list and, if the corresponding template-argument is
13300          deduced, the template-argument type shall match the type of the
13301          template-parameter exactly, except that a template-argument
13302          deduced from an array bound may be of any integral type.
13303          The non-type parameter might use already deduced type parameters.  */
13304       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13305       if (!TREE_TYPE (arg))
13306         /* Template-parameter dependent expression.  Just accept it for now.
13307            It will later be processed in convert_template_argument.  */
13308         ;
13309       else if (same_type_p (TREE_TYPE (arg), tparm))
13310         /* OK */;
13311       else if ((strict & UNIFY_ALLOW_INTEGER)
13312                && (TREE_CODE (tparm) == INTEGER_TYPE
13313                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13314         /* Convert the ARG to the type of PARM; the deduced non-type
13315            template argument must exactly match the types of the
13316            corresponding parameter.  */
13317         arg = fold (build_nop (TREE_TYPE (parm), arg));
13318       else if (uses_template_parms (tparm))
13319         /* We haven't deduced the type of this parameter yet.  Try again
13320            later.  */
13321         return 0;
13322       else
13323         return 1;
13324
13325       /* If ARG is a parameter pack or an expansion, we cannot unify
13326          against it unless PARM is also a parameter pack.  */
13327       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13328           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13329         return 1;
13330
13331       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13332       return 0;
13333
13334     case PTRMEM_CST:
13335      {
13336         /* A pointer-to-member constant can be unified only with
13337          another constant.  */
13338       if (TREE_CODE (arg) != PTRMEM_CST)
13339         return 1;
13340
13341       /* Just unify the class member. It would be useless (and possibly
13342          wrong, depending on the strict flags) to unify also
13343          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13344          arg refer to the same variable, even if through different
13345          classes. For instance:
13346
13347          struct A { int x; };
13348          struct B : A { };
13349
13350          Unification of &A::x and &B::x must succeed.  */
13351       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13352                     PTRMEM_CST_MEMBER (arg), strict);
13353      }
13354
13355     case POINTER_TYPE:
13356       {
13357         if (TREE_CODE (arg) != POINTER_TYPE)
13358           return 1;
13359
13360         /* [temp.deduct.call]
13361
13362            A can be another pointer or pointer to member type that can
13363            be converted to the deduced A via a qualification
13364            conversion (_conv.qual_).
13365
13366            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13367            This will allow for additional cv-qualification of the
13368            pointed-to types if appropriate.  */
13369
13370         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13371           /* The derived-to-base conversion only persists through one
13372              level of pointers.  */
13373           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13374
13375         return unify (tparms, targs, TREE_TYPE (parm),
13376                       TREE_TYPE (arg), strict);
13377       }
13378
13379     case REFERENCE_TYPE:
13380       if (TREE_CODE (arg) != REFERENCE_TYPE)
13381         return 1;
13382       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13383                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13384
13385     case ARRAY_TYPE:
13386       if (TREE_CODE (arg) != ARRAY_TYPE)
13387         return 1;
13388       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13389           != (TYPE_DOMAIN (arg) == NULL_TREE))
13390         return 1;
13391       if (TYPE_DOMAIN (parm) != NULL_TREE)
13392         {
13393           tree parm_max;
13394           tree arg_max;
13395           bool parm_cst;
13396           bool arg_cst;
13397
13398           /* Our representation of array types uses "N - 1" as the
13399              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13400              not an integer constant.  We cannot unify arbitrarily
13401              complex expressions, so we eliminate the MINUS_EXPRs
13402              here.  */
13403           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13404           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13405           if (!parm_cst)
13406             {
13407               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13408               parm_max = TREE_OPERAND (parm_max, 0);
13409             }
13410           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13411           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13412           if (!arg_cst)
13413             {
13414               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13415                  trying to unify the type of a variable with the type
13416                  of a template parameter.  For example:
13417
13418                    template <unsigned int N>
13419                    void f (char (&) [N]);
13420                    int g(); 
13421                    void h(int i) {
13422                      char a[g(i)];
13423                      f(a); 
13424                    }
13425
13426                 Here, the type of the ARG will be "int [g(i)]", and
13427                 may be a SAVE_EXPR, etc.  */
13428               if (TREE_CODE (arg_max) != MINUS_EXPR)
13429                 return 1;
13430               arg_max = TREE_OPERAND (arg_max, 0);
13431             }
13432
13433           /* If only one of the bounds used a MINUS_EXPR, compensate
13434              by adding one to the other bound.  */
13435           if (parm_cst && !arg_cst)
13436             parm_max = fold_build2 (PLUS_EXPR,
13437                                     integer_type_node,
13438                                     parm_max,
13439                                     integer_one_node);
13440           else if (arg_cst && !parm_cst)
13441             arg_max = fold_build2 (PLUS_EXPR,
13442                                    integer_type_node,
13443                                    arg_max,
13444                                    integer_one_node);
13445
13446           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13447             return 1;
13448         }
13449       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13450                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13451
13452     case REAL_TYPE:
13453     case COMPLEX_TYPE:
13454     case VECTOR_TYPE:
13455     case INTEGER_TYPE:
13456     case BOOLEAN_TYPE:
13457     case ENUMERAL_TYPE:
13458     case VOID_TYPE:
13459       if (TREE_CODE (arg) != TREE_CODE (parm))
13460         return 1;
13461
13462       /* We have already checked cv-qualification at the top of the
13463          function.  */
13464       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13465         return 1;
13466
13467       /* As far as unification is concerned, this wins.  Later checks
13468          will invalidate it if necessary.  */
13469       return 0;
13470
13471       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13472       /* Type INTEGER_CST can come from ordinary constant template args.  */
13473     case INTEGER_CST:
13474       while (TREE_CODE (arg) == NOP_EXPR)
13475         arg = TREE_OPERAND (arg, 0);
13476
13477       if (TREE_CODE (arg) != INTEGER_CST)
13478         return 1;
13479       return !tree_int_cst_equal (parm, arg);
13480
13481     case TREE_VEC:
13482       {
13483         int i;
13484         if (TREE_CODE (arg) != TREE_VEC)
13485           return 1;
13486         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13487           return 1;
13488         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13489           if (unify (tparms, targs,
13490                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13491                      UNIFY_ALLOW_NONE))
13492             return 1;
13493         return 0;
13494       }
13495
13496     case RECORD_TYPE:
13497     case UNION_TYPE:
13498       if (TREE_CODE (arg) != TREE_CODE (parm))
13499         return 1;
13500
13501       if (TYPE_PTRMEMFUNC_P (parm))
13502         {
13503           if (!TYPE_PTRMEMFUNC_P (arg))
13504             return 1;
13505
13506           return unify (tparms, targs,
13507                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13508                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13509                         strict);
13510         }
13511
13512       if (CLASSTYPE_TEMPLATE_INFO (parm))
13513         {
13514           tree t = NULL_TREE;
13515
13516           if (strict_in & UNIFY_ALLOW_DERIVED)
13517             {
13518               /* First, we try to unify the PARM and ARG directly.  */
13519               t = try_class_unification (tparms, targs,
13520                                          parm, arg);
13521
13522               if (!t)
13523                 {
13524                   /* Fallback to the special case allowed in
13525                      [temp.deduct.call]:
13526
13527                        If P is a class, and P has the form
13528                        template-id, then A can be a derived class of
13529                        the deduced A.  Likewise, if P is a pointer to
13530                        a class of the form template-id, A can be a
13531                        pointer to a derived class pointed to by the
13532                        deduced A.  */
13533                   t = get_template_base (tparms, targs, parm, arg);
13534
13535                   if (!t)
13536                     return 1;
13537                 }
13538             }
13539           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13540                    && (CLASSTYPE_TI_TEMPLATE (parm)
13541                        == CLASSTYPE_TI_TEMPLATE (arg)))
13542             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13543                Then, we should unify `int' and `U'.  */
13544             t = arg;
13545           else
13546             /* There's no chance of unification succeeding.  */
13547             return 1;
13548
13549           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13550                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13551         }
13552       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13553         return 1;
13554       return 0;
13555
13556     case METHOD_TYPE:
13557     case FUNCTION_TYPE:
13558       if (TREE_CODE (arg) != TREE_CODE (parm))
13559         return 1;
13560
13561       /* CV qualifications for methods can never be deduced, they must
13562          match exactly.  We need to check them explicitly here,
13563          because type_unification_real treats them as any other
13564          cv-qualified parameter.  */
13565       if (TREE_CODE (parm) == METHOD_TYPE
13566           && (!check_cv_quals_for_unify
13567               (UNIFY_ALLOW_NONE,
13568                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13569                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13570         return 1;
13571
13572       if (unify (tparms, targs, TREE_TYPE (parm),
13573                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13574         return 1;
13575       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13576                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13577                                     LOOKUP_NORMAL);
13578
13579     case OFFSET_TYPE:
13580       /* Unify a pointer to member with a pointer to member function, which
13581          deduces the type of the member as a function type. */
13582       if (TYPE_PTRMEMFUNC_P (arg))
13583         {
13584           tree method_type;
13585           tree fntype;
13586           cp_cv_quals cv_quals;
13587
13588           /* Check top-level cv qualifiers */
13589           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13590             return 1;
13591
13592           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13593                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13594             return 1;
13595
13596           /* Determine the type of the function we are unifying against. */
13597           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13598           fntype =
13599             build_function_type (TREE_TYPE (method_type),
13600                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13601
13602           /* Extract the cv-qualifiers of the member function from the
13603              implicit object parameter and place them on the function
13604              type to be restored later. */
13605           cv_quals =
13606             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13607           fntype = build_qualified_type (fntype, cv_quals);
13608           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13609         }
13610
13611       if (TREE_CODE (arg) != OFFSET_TYPE)
13612         return 1;
13613       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13614                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13615         return 1;
13616       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13617                     strict);
13618
13619     case CONST_DECL:
13620       if (DECL_TEMPLATE_PARM_P (parm))
13621         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13622       if (arg != integral_constant_value (parm))
13623         return 1;
13624       return 0;
13625
13626     case FIELD_DECL:
13627     case TEMPLATE_DECL:
13628       /* Matched cases are handled by the ARG == PARM test above.  */
13629       return 1;
13630
13631     case TYPE_ARGUMENT_PACK:
13632     case NONTYPE_ARGUMENT_PACK:
13633       {
13634         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13635         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13636         int i, len = TREE_VEC_LENGTH (packed_parms);
13637         int argslen = TREE_VEC_LENGTH (packed_args);
13638         int parm_variadic_p = 0;
13639
13640         for (i = 0; i < len; ++i)
13641           {
13642             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13643               {
13644                 if (i == len - 1)
13645                   /* We can unify against something with a trailing
13646                      parameter pack.  */
13647                   parm_variadic_p = 1;
13648                 else
13649                   /* Since there is something following the pack
13650                      expansion, we cannot unify this template argument
13651                      list.  */
13652                   return 0;
13653               }
13654           }
13655           
13656
13657         /* If we don't have enough arguments to satisfy the parameters
13658            (not counting the pack expression at the end), or we have
13659            too many arguments for a parameter list that doesn't end in
13660            a pack expression, we can't unify.  */
13661         if (argslen < (len - parm_variadic_p)
13662             || (argslen > len && !parm_variadic_p))
13663           return 1;
13664
13665         /* Unify all of the parameters that precede the (optional)
13666            pack expression.  */
13667         for (i = 0; i < len - parm_variadic_p; ++i)
13668           {
13669             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13670                        TREE_VEC_ELT (packed_args, i), strict))
13671               return 1;
13672           }
13673
13674         if (parm_variadic_p)
13675           return unify_pack_expansion (tparms, targs, 
13676                                        packed_parms, packed_args,
13677                                        strict, /*call_args_p=*/false,
13678                                        /*subr=*/false);
13679         return 0;
13680       }
13681
13682       break;
13683
13684     case TYPEOF_TYPE:
13685     case DECLTYPE_TYPE:
13686       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13687          nodes.  */
13688       return 0;
13689
13690     case ERROR_MARK:
13691       /* Unification fails if we hit an error node.  */
13692       return 1;
13693
13694     default:
13695       gcc_assert (EXPR_P (parm));
13696
13697       /* We must be looking at an expression.  This can happen with
13698          something like:
13699
13700            template <int I>
13701            void foo(S<I>, S<I + 2>);
13702
13703          This is a "nondeduced context":
13704
13705            [deduct.type]
13706
13707            The nondeduced contexts are:
13708
13709            --A type that is a template-id in which one or more of
13710              the template-arguments is an expression that references
13711              a template-parameter.
13712
13713          In these cases, we assume deduction succeeded, but don't
13714          actually infer any unifications.  */
13715
13716       if (!uses_template_parms (parm)
13717           && !template_args_equal (parm, arg))
13718         return 1;
13719       else
13720         return 0;
13721     }
13722 }
13723 \f
13724 /* Note that DECL can be defined in this translation unit, if
13725    required.  */
13726
13727 static void
13728 mark_definable (tree decl)
13729 {
13730   tree clone;
13731   DECL_NOT_REALLY_EXTERN (decl) = 1;
13732   FOR_EACH_CLONE (clone, decl)
13733     DECL_NOT_REALLY_EXTERN (clone) = 1;
13734 }
13735
13736 /* Called if RESULT is explicitly instantiated, or is a member of an
13737    explicitly instantiated class.  */
13738
13739 void
13740 mark_decl_instantiated (tree result, int extern_p)
13741 {
13742   SET_DECL_EXPLICIT_INSTANTIATION (result);
13743
13744   /* If this entity has already been written out, it's too late to
13745      make any modifications.  */
13746   if (TREE_ASM_WRITTEN (result))
13747     return;
13748
13749   if (TREE_CODE (result) != FUNCTION_DECL)
13750     /* The TREE_PUBLIC flag for function declarations will have been
13751        set correctly by tsubst.  */
13752     TREE_PUBLIC (result) = 1;
13753
13754   /* This might have been set by an earlier implicit instantiation.  */
13755   DECL_COMDAT (result) = 0;
13756
13757   if (extern_p)
13758     DECL_NOT_REALLY_EXTERN (result) = 0;
13759   else
13760     {
13761       mark_definable (result);
13762       /* Always make artificials weak.  */
13763       if (DECL_ARTIFICIAL (result) && flag_weak)
13764         comdat_linkage (result);
13765       /* For WIN32 we also want to put explicit instantiations in
13766          linkonce sections.  */
13767       else if (TREE_PUBLIC (result))
13768         maybe_make_one_only (result);
13769     }
13770
13771   /* If EXTERN_P, then this function will not be emitted -- unless
13772      followed by an explicit instantiation, at which point its linkage
13773      will be adjusted.  If !EXTERN_P, then this function will be
13774      emitted here.  In neither circumstance do we want
13775      import_export_decl to adjust the linkage.  */
13776   DECL_INTERFACE_KNOWN (result) = 1;
13777 }
13778
13779 /* Given two function templates PAT1 and PAT2, return:
13780
13781    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13782    -1 if PAT2 is more specialized than PAT1.
13783    0 if neither is more specialized.
13784
13785    LEN indicates the number of parameters we should consider
13786    (defaulted parameters should not be considered).
13787
13788    The 1998 std underspecified function template partial ordering, and
13789    DR214 addresses the issue.  We take pairs of arguments, one from
13790    each of the templates, and deduce them against each other.  One of
13791    the templates will be more specialized if all the *other*
13792    template's arguments deduce against its arguments and at least one
13793    of its arguments *does* *not* deduce against the other template's
13794    corresponding argument.  Deduction is done as for class templates.
13795    The arguments used in deduction have reference and top level cv
13796    qualifiers removed.  Iff both arguments were originally reference
13797    types *and* deduction succeeds in both directions, the template
13798    with the more cv-qualified argument wins for that pairing (if
13799    neither is more cv-qualified, they both are equal).  Unlike regular
13800    deduction, after all the arguments have been deduced in this way,
13801    we do *not* verify the deduced template argument values can be
13802    substituted into non-deduced contexts, nor do we have to verify
13803    that all template arguments have been deduced.  */
13804
13805 int
13806 more_specialized_fn (tree pat1, tree pat2, int len)
13807 {
13808   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13809   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13810   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13811   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13812   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13813   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13814   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13815   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13816   int better1 = 0;
13817   int better2 = 0;
13818
13819   /* Remove the this parameter from non-static member functions.  If
13820      one is a non-static member function and the other is not a static
13821      member function, remove the first parameter from that function
13822      also.  This situation occurs for operator functions where we
13823      locate both a member function (with this pointer) and non-member
13824      operator (with explicit first operand).  */
13825   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13826     {
13827       len--; /* LEN is the number of significant arguments for DECL1 */
13828       args1 = TREE_CHAIN (args1);
13829       if (!DECL_STATIC_FUNCTION_P (decl2))
13830         args2 = TREE_CHAIN (args2);
13831     }
13832   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13833     {
13834       args2 = TREE_CHAIN (args2);
13835       if (!DECL_STATIC_FUNCTION_P (decl1))
13836         {
13837           len--;
13838           args1 = TREE_CHAIN (args1);
13839         }
13840     }
13841
13842   /* If only one is a conversion operator, they are unordered.  */
13843   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13844     return 0;
13845
13846   /* Consider the return type for a conversion function */
13847   if (DECL_CONV_FN_P (decl1))
13848     {
13849       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13850       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13851       len++;
13852     }
13853
13854   processing_template_decl++;
13855
13856   while (len--
13857          /* Stop when an ellipsis is seen.  */
13858          && args1 != NULL_TREE && args2 != NULL_TREE)
13859     {
13860       tree arg1 = TREE_VALUE (args1);
13861       tree arg2 = TREE_VALUE (args2);
13862       int deduce1, deduce2;
13863       int quals1 = -1;
13864       int quals2 = -1;
13865
13866       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13867           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13868         {
13869           /* When both arguments are pack expansions, we need only
13870              unify the patterns themselves.  */
13871           arg1 = PACK_EXPANSION_PATTERN (arg1);
13872           arg2 = PACK_EXPANSION_PATTERN (arg2);
13873
13874           /* This is the last comparison we need to do.  */
13875           len = 0;
13876         }
13877
13878       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13879         {
13880           arg1 = TREE_TYPE (arg1);
13881           quals1 = cp_type_quals (arg1);
13882         }
13883
13884       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13885         {
13886           arg2 = TREE_TYPE (arg2);
13887           quals2 = cp_type_quals (arg2);
13888         }
13889
13890       if ((quals1 < 0) != (quals2 < 0))
13891         {
13892           /* Only of the args is a reference, see if we should apply
13893              array/function pointer decay to it.  This is not part of
13894              DR214, but is, IMHO, consistent with the deduction rules
13895              for the function call itself, and with our earlier
13896              implementation of the underspecified partial ordering
13897              rules.  (nathan).  */
13898           if (quals1 >= 0)
13899             {
13900               switch (TREE_CODE (arg1))
13901                 {
13902                 case ARRAY_TYPE:
13903                   arg1 = TREE_TYPE (arg1);
13904                   /* FALLTHROUGH. */
13905                 case FUNCTION_TYPE:
13906                   arg1 = build_pointer_type (arg1);
13907                   break;
13908
13909                 default:
13910                   break;
13911                 }
13912             }
13913           else
13914             {
13915               switch (TREE_CODE (arg2))
13916                 {
13917                 case ARRAY_TYPE:
13918                   arg2 = TREE_TYPE (arg2);
13919                   /* FALLTHROUGH. */
13920                 case FUNCTION_TYPE:
13921                   arg2 = build_pointer_type (arg2);
13922                   break;
13923
13924                 default:
13925                   break;
13926                 }
13927             }
13928         }
13929
13930       arg1 = TYPE_MAIN_VARIANT (arg1);
13931       arg2 = TYPE_MAIN_VARIANT (arg2);
13932
13933       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13934         {
13935           int i, len2 = list_length (args2);
13936           tree parmvec = make_tree_vec (1);
13937           tree argvec = make_tree_vec (len2);
13938           tree ta = args2;
13939
13940           /* Setup the parameter vector, which contains only ARG1.  */
13941           TREE_VEC_ELT (parmvec, 0) = arg1;
13942
13943           /* Setup the argument vector, which contains the remaining
13944              arguments.  */
13945           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13946             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13947
13948           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13949                                            argvec, UNIFY_ALLOW_NONE, 
13950                                            /*call_args_p=*/false, 
13951                                            /*subr=*/0);
13952
13953           /* We cannot deduce in the other direction, because ARG1 is
13954              a pack expansion but ARG2 is not.  */
13955           deduce2 = 0;
13956         }
13957       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13958         {
13959           int i, len1 = list_length (args1);
13960           tree parmvec = make_tree_vec (1);
13961           tree argvec = make_tree_vec (len1);
13962           tree ta = args1;
13963
13964           /* Setup the parameter vector, which contains only ARG1.  */
13965           TREE_VEC_ELT (parmvec, 0) = arg2;
13966
13967           /* Setup the argument vector, which contains the remaining
13968              arguments.  */
13969           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13970             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13971
13972           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13973                                            argvec, UNIFY_ALLOW_NONE, 
13974                                            /*call_args_p=*/false, 
13975                                            /*subr=*/0);
13976
13977           /* We cannot deduce in the other direction, because ARG2 is
13978              a pack expansion but ARG1 is not.*/
13979           deduce1 = 0;
13980         }
13981
13982       else
13983         {
13984           /* The normal case, where neither argument is a pack
13985              expansion.  */
13986           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13987           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13988         }
13989
13990       if (!deduce1)
13991         better2 = -1;
13992       if (!deduce2)
13993         better1 = -1;
13994       if (better1 < 0 && better2 < 0)
13995         /* We've failed to deduce something in either direction.
13996            These must be unordered.  */
13997         break;
13998
13999       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
14000         {
14001           /* Deduces in both directions, see if quals can
14002              disambiguate.  Pretend the worse one failed to deduce. */
14003           if ((quals1 & quals2) == quals2)
14004             deduce1 = 0;
14005           if ((quals1 & quals2) == quals1)
14006             deduce2 = 0;
14007         }
14008       if (deduce1 && !deduce2 && !better2)
14009         better2 = 1;
14010       if (deduce2 && !deduce1 && !better1)
14011         better1 = 1;
14012
14013       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14014           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14015         /* We have already processed all of the arguments in our
14016            handing of the pack expansion type.  */
14017         len = 0;
14018
14019       args1 = TREE_CHAIN (args1);
14020       args2 = TREE_CHAIN (args2);
14021     }
14022
14023   processing_template_decl--;
14024
14025   /* All things being equal, if the next argument is a pack expansion
14026      for one function but not for the other, prefer the
14027      non-variadic function.  */
14028   if ((better1 > 0) - (better2 > 0) == 0
14029       && args1 && TREE_VALUE (args1)
14030       && args2 && TREE_VALUE (args2))
14031     {
14032       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14033         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14034       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14035         return 1;
14036     }
14037
14038   return (better1 > 0) - (better2 > 0);
14039 }
14040
14041 /* Determine which of two partial specializations is more specialized.
14042
14043    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14044    to the first partial specialization.  The TREE_VALUE is the
14045    innermost set of template parameters for the partial
14046    specialization.  PAT2 is similar, but for the second template.
14047
14048    Return 1 if the first partial specialization is more specialized;
14049    -1 if the second is more specialized; 0 if neither is more
14050    specialized.
14051
14052    See [temp.class.order] for information about determining which of
14053    two templates is more specialized.  */
14054
14055 static int
14056 more_specialized_class (tree pat1, tree pat2)
14057 {
14058   tree targs;
14059   tree tmpl1, tmpl2;
14060   int winner = 0;
14061   bool any_deductions = false;
14062
14063   tmpl1 = TREE_TYPE (pat1);
14064   tmpl2 = TREE_TYPE (pat2);
14065
14066   /* Just like what happens for functions, if we are ordering between
14067      different class template specializations, we may encounter dependent
14068      types in the arguments, and we need our dependency check functions
14069      to behave correctly.  */
14070   ++processing_template_decl;
14071   targs = get_class_bindings (TREE_VALUE (pat1),
14072                               CLASSTYPE_TI_ARGS (tmpl1),
14073                               CLASSTYPE_TI_ARGS (tmpl2));
14074   if (targs)
14075     {
14076       --winner;
14077       any_deductions = true;
14078     }
14079
14080   targs = get_class_bindings (TREE_VALUE (pat2),
14081                               CLASSTYPE_TI_ARGS (tmpl2),
14082                               CLASSTYPE_TI_ARGS (tmpl1));
14083   if (targs)
14084     {
14085       ++winner;
14086       any_deductions = true;
14087     }
14088   --processing_template_decl;
14089
14090   /* In the case of a tie where at least one of the class templates
14091      has a parameter pack at the end, the template with the most
14092      non-packed parameters wins.  */
14093   if (winner == 0
14094       && any_deductions
14095       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14096           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14097     {
14098       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14099       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14100       int len1 = TREE_VEC_LENGTH (args1);
14101       int len2 = TREE_VEC_LENGTH (args2);
14102
14103       /* We don't count the pack expansion at the end.  */
14104       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14105         --len1;
14106       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14107         --len2;
14108
14109       if (len1 > len2)
14110         return 1;
14111       else if (len1 < len2)
14112         return -1;
14113     }
14114
14115   return winner;
14116 }
14117
14118 /* Return the template arguments that will produce the function signature
14119    DECL from the function template FN, with the explicit template
14120    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14121    also match.  Return NULL_TREE if no satisfactory arguments could be
14122    found.  */
14123
14124 static tree
14125 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14126 {
14127   int ntparms = DECL_NTPARMS (fn);
14128   tree targs = make_tree_vec (ntparms);
14129   tree decl_type;
14130   tree decl_arg_types;
14131
14132   /* Substitute the explicit template arguments into the type of DECL.
14133      The call to fn_type_unification will handle substitution into the
14134      FN.  */
14135   decl_type = TREE_TYPE (decl);
14136   if (explicit_args && uses_template_parms (decl_type))
14137     {
14138       tree tmpl;
14139       tree converted_args;
14140
14141       if (DECL_TEMPLATE_INFO (decl))
14142         tmpl = DECL_TI_TEMPLATE (decl);
14143       else
14144         /* We can get here for some invalid specializations.  */
14145         return NULL_TREE;
14146
14147       converted_args
14148         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14149                                  explicit_args, NULL_TREE,
14150                                  tf_none,
14151                                  /*require_all_args=*/false,
14152                                  /*use_default_args=*/false);
14153       if (converted_args == error_mark_node)
14154         return NULL_TREE;
14155
14156       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14157       if (decl_type == error_mark_node)
14158         return NULL_TREE;
14159     }
14160
14161   /* Never do unification on the 'this' parameter.  */
14162   decl_arg_types = skip_artificial_parms_for (decl, 
14163                                               TYPE_ARG_TYPES (decl_type));
14164
14165   if (fn_type_unification (fn, explicit_args, targs,
14166                            decl_arg_types,
14167                            (check_rettype || DECL_CONV_FN_P (fn)
14168                             ? TREE_TYPE (decl_type) : NULL_TREE),
14169                            DEDUCE_EXACT, LOOKUP_NORMAL))
14170     return NULL_TREE;
14171
14172   return targs;
14173 }
14174
14175 /* Return the innermost template arguments that, when applied to a
14176    template specialization whose innermost template parameters are
14177    TPARMS, and whose specialization arguments are PARMS, yield the
14178    ARGS.
14179
14180    For example, suppose we have:
14181
14182      template <class T, class U> struct S {};
14183      template <class T> struct S<T*, int> {};
14184
14185    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14186    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14187    int}.  The resulting vector will be {double}, indicating that `T'
14188    is bound to `double'.  */
14189
14190 static tree
14191 get_class_bindings (tree tparms, tree spec_args, tree args)
14192 {
14193   int i, ntparms = TREE_VEC_LENGTH (tparms);
14194   tree deduced_args;
14195   tree innermost_deduced_args;
14196
14197   innermost_deduced_args = make_tree_vec (ntparms);
14198   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14199     {
14200       deduced_args = copy_node (args);
14201       SET_TMPL_ARGS_LEVEL (deduced_args,
14202                            TMPL_ARGS_DEPTH (deduced_args),
14203                            innermost_deduced_args);
14204     }
14205   else
14206     deduced_args = innermost_deduced_args;
14207
14208   if (unify (tparms, deduced_args,
14209              INNERMOST_TEMPLATE_ARGS (spec_args),
14210              INNERMOST_TEMPLATE_ARGS (args),
14211              UNIFY_ALLOW_NONE))
14212     return NULL_TREE;
14213
14214   for (i =  0; i < ntparms; ++i)
14215     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14216       return NULL_TREE;
14217
14218   /* Verify that nondeduced template arguments agree with the type
14219      obtained from argument deduction.
14220
14221      For example:
14222
14223        struct A { typedef int X; };
14224        template <class T, class U> struct C {};
14225        template <class T> struct C<T, typename T::X> {};
14226
14227      Then with the instantiation `C<A, int>', we can deduce that
14228      `T' is `A' but unify () does not check whether `typename T::X'
14229      is `int'.  */
14230   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14231   if (spec_args == error_mark_node
14232       /* We only need to check the innermost arguments; the other
14233          arguments will always agree.  */
14234       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14235                               INNERMOST_TEMPLATE_ARGS (args)))
14236     return NULL_TREE;
14237
14238   /* Now that we have bindings for all of the template arguments,
14239      ensure that the arguments deduced for the template template
14240      parameters have compatible template parameter lists.  See the use
14241      of template_template_parm_bindings_ok_p in fn_type_unification
14242      for more information.  */
14243   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14244     return NULL_TREE;
14245
14246   return deduced_args;
14247 }
14248
14249 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14250    Return the TREE_LIST node with the most specialized template, if
14251    any.  If there is no most specialized template, the error_mark_node
14252    is returned.
14253
14254    Note that this function does not look at, or modify, the
14255    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14256    returned is one of the elements of INSTANTIATIONS, callers may
14257    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14258    and retrieve it from the value returned.  */
14259
14260 tree
14261 most_specialized_instantiation (tree templates)
14262 {
14263   tree fn, champ;
14264
14265   ++processing_template_decl;
14266
14267   champ = templates;
14268   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14269     {
14270       int fate = 0;
14271
14272       if (get_bindings (TREE_VALUE (champ),
14273                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14274                         NULL_TREE, /*check_ret=*/false))
14275         fate--;
14276
14277       if (get_bindings (TREE_VALUE (fn),
14278                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14279                         NULL_TREE, /*check_ret=*/false))
14280         fate++;
14281
14282       if (fate == -1)
14283         champ = fn;
14284       else if (!fate)
14285         {
14286           /* Equally specialized, move to next function.  If there
14287              is no next function, nothing's most specialized.  */
14288           fn = TREE_CHAIN (fn);
14289           champ = fn;
14290           if (!fn)
14291             break;
14292         }
14293     }
14294
14295   if (champ)
14296     /* Now verify that champ is better than everything earlier in the
14297        instantiation list.  */
14298     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14299       if (get_bindings (TREE_VALUE (champ),
14300                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14301                         NULL_TREE, /*check_ret=*/false)
14302           || !get_bindings (TREE_VALUE (fn),
14303                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14304                             NULL_TREE, /*check_ret=*/false))
14305         {
14306           champ = NULL_TREE;
14307           break;
14308         }
14309
14310   processing_template_decl--;
14311
14312   if (!champ)
14313     return error_mark_node;
14314
14315   return champ;
14316 }
14317
14318 /* If DECL is a specialization of some template, return the most
14319    general such template.  Otherwise, returns NULL_TREE.
14320
14321    For example, given:
14322
14323      template <class T> struct S { template <class U> void f(U); };
14324
14325    if TMPL is `template <class U> void S<int>::f(U)' this will return
14326    the full template.  This function will not trace past partial
14327    specializations, however.  For example, given in addition:
14328
14329      template <class T> struct S<T*> { template <class U> void f(U); };
14330
14331    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14332    `template <class T> template <class U> S<T*>::f(U)'.  */
14333
14334 tree
14335 most_general_template (tree decl)
14336 {
14337   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14338      an immediate specialization.  */
14339   if (TREE_CODE (decl) == FUNCTION_DECL)
14340     {
14341       if (DECL_TEMPLATE_INFO (decl)) {
14342         decl = DECL_TI_TEMPLATE (decl);
14343
14344         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14345            template friend.  */
14346         if (TREE_CODE (decl) != TEMPLATE_DECL)
14347           return NULL_TREE;
14348       } else
14349         return NULL_TREE;
14350     }
14351
14352   /* Look for more and more general templates.  */
14353   while (DECL_TEMPLATE_INFO (decl))
14354     {
14355       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14356          (See cp-tree.h for details.)  */
14357       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14358         break;
14359
14360       if (CLASS_TYPE_P (TREE_TYPE (decl))
14361           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14362         break;
14363
14364       /* Stop if we run into an explicitly specialized class template.  */
14365       if (!DECL_NAMESPACE_SCOPE_P (decl)
14366           && DECL_CONTEXT (decl)
14367           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14368         break;
14369
14370       decl = DECL_TI_TEMPLATE (decl);
14371     }
14372
14373   return decl;
14374 }
14375
14376 /* Return the most specialized of the class template partial
14377    specializations of TMPL which can produce TYPE, a specialization of
14378    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14379    a _TYPE node corresponding to the partial specialization, while the
14380    TREE_PURPOSE is the set of template arguments that must be
14381    substituted into the TREE_TYPE in order to generate TYPE.
14382
14383    If the choice of partial specialization is ambiguous, a diagnostic
14384    is issued, and the error_mark_node is returned.  If there are no
14385    partial specializations of TMPL matching TYPE, then NULL_TREE is
14386    returned.  */
14387
14388 static tree
14389 most_specialized_class (tree type, tree tmpl)
14390 {
14391   tree list = NULL_TREE;
14392   tree t;
14393   tree champ;
14394   int fate;
14395   bool ambiguous_p;
14396   tree args;
14397   tree outer_args = NULL_TREE;
14398
14399   tmpl = most_general_template (tmpl);
14400   args = CLASSTYPE_TI_ARGS (type);
14401
14402   /* For determining which partial specialization to use, only the
14403      innermost args are interesting.  */
14404   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14405     {
14406       outer_args = strip_innermost_template_args (args, 1);
14407       args = INNERMOST_TEMPLATE_ARGS (args);
14408     }
14409
14410   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14411     {
14412       tree partial_spec_args;
14413       tree spec_args;
14414       tree parms = TREE_VALUE (t);
14415
14416       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14417       if (outer_args)
14418         {
14419           int i;
14420
14421           ++processing_template_decl;
14422
14423           /* Discard the outer levels of args, and then substitute in the
14424              template args from the enclosing class.  */
14425           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14426           partial_spec_args = tsubst_template_args
14427             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14428
14429           /* PARMS already refers to just the innermost parms, but the
14430              template parms in partial_spec_args had their levels lowered
14431              by tsubst, so we need to do the same for the parm list.  We
14432              can't just tsubst the TREE_VEC itself, as tsubst wants to
14433              treat a TREE_VEC as an argument vector.  */
14434           parms = copy_node (parms);
14435           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14436             TREE_VEC_ELT (parms, i) =
14437               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14438
14439           --processing_template_decl;
14440         }
14441       spec_args = get_class_bindings (parms,
14442                                       partial_spec_args,
14443                                       args);
14444       if (spec_args)
14445         {
14446           if (outer_args)
14447             spec_args = add_to_template_args (outer_args, spec_args);
14448           list = tree_cons (spec_args, TREE_VALUE (t), list);
14449           TREE_TYPE (list) = TREE_TYPE (t);
14450         }
14451     }
14452
14453   if (! list)
14454     return NULL_TREE;
14455
14456   ambiguous_p = false;
14457   t = list;
14458   champ = t;
14459   t = TREE_CHAIN (t);
14460   for (; t; t = TREE_CHAIN (t))
14461     {
14462       fate = more_specialized_class (champ, t);
14463       if (fate == 1)
14464         ;
14465       else
14466         {
14467           if (fate == 0)
14468             {
14469               t = TREE_CHAIN (t);
14470               if (! t)
14471                 {
14472                   ambiguous_p = true;
14473                   break;
14474                 }
14475             }
14476           champ = t;
14477         }
14478     }
14479
14480   if (!ambiguous_p)
14481     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14482       {
14483         fate = more_specialized_class (champ, t);
14484         if (fate != 1)
14485           {
14486             ambiguous_p = true;
14487             break;
14488           }
14489       }
14490
14491   if (ambiguous_p)
14492     {
14493       const char *str = "candidates are:";
14494       error ("ambiguous class template instantiation for %q#T", type);
14495       for (t = list; t; t = TREE_CHAIN (t))
14496         {
14497           error ("%s %+#T", str, TREE_TYPE (t));
14498           str = "               ";
14499         }
14500       return error_mark_node;
14501     }
14502
14503   return champ;
14504 }
14505
14506 /* Explicitly instantiate DECL.  */
14507
14508 void
14509 do_decl_instantiation (tree decl, tree storage)
14510 {
14511   tree result = NULL_TREE;
14512   int extern_p = 0;
14513
14514   if (!decl || decl == error_mark_node)
14515     /* An error occurred, for which grokdeclarator has already issued
14516        an appropriate message.  */
14517     return;
14518   else if (! DECL_LANG_SPECIFIC (decl))
14519     {
14520       error ("explicit instantiation of non-template %q#D", decl);
14521       return;
14522     }
14523   else if (TREE_CODE (decl) == VAR_DECL)
14524     {
14525       /* There is an asymmetry here in the way VAR_DECLs and
14526          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14527          the latter, the DECL we get back will be marked as a
14528          template instantiation, and the appropriate
14529          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14530          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14531          should handle VAR_DECLs as it currently handles
14532          FUNCTION_DECLs.  */
14533       if (!DECL_CLASS_SCOPE_P (decl))
14534         {
14535           error ("%qD is not a static data member of a class template", decl);
14536           return;
14537         }
14538       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14539       if (!result || TREE_CODE (result) != VAR_DECL)
14540         {
14541           error ("no matching template for %qD found", decl);
14542           return;
14543         }
14544       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14545         {
14546           error ("type %qT for explicit instantiation %qD does not match "
14547                  "declared type %qT", TREE_TYPE (result), decl,
14548                  TREE_TYPE (decl));
14549           return;
14550         }
14551     }
14552   else if (TREE_CODE (decl) != FUNCTION_DECL)
14553     {
14554       error ("explicit instantiation of %q#D", decl);
14555       return;
14556     }
14557   else
14558     result = decl;
14559
14560   /* Check for various error cases.  Note that if the explicit
14561      instantiation is valid the RESULT will currently be marked as an
14562      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14563      until we get here.  */
14564
14565   if (DECL_TEMPLATE_SPECIALIZATION (result))
14566     {
14567       /* DR 259 [temp.spec].
14568
14569          Both an explicit instantiation and a declaration of an explicit
14570          specialization shall not appear in a program unless the explicit
14571          instantiation follows a declaration of the explicit specialization.
14572
14573          For a given set of template parameters, if an explicit
14574          instantiation of a template appears after a declaration of an
14575          explicit specialization for that template, the explicit
14576          instantiation has no effect.  */
14577       return;
14578     }
14579   else if (DECL_EXPLICIT_INSTANTIATION (result))
14580     {
14581       /* [temp.spec]
14582
14583          No program shall explicitly instantiate any template more
14584          than once.
14585
14586          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14587          the first instantiation was `extern' and the second is not,
14588          and EXTERN_P for the opposite case.  */
14589       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14590         permerror ("duplicate explicit instantiation of %q#D", result);
14591       /* If an "extern" explicit instantiation follows an ordinary
14592          explicit instantiation, the template is instantiated.  */
14593       if (extern_p)
14594         return;
14595     }
14596   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14597     {
14598       error ("no matching template for %qD found", result);
14599       return;
14600     }
14601   else if (!DECL_TEMPLATE_INFO (result))
14602     {
14603       permerror ("explicit instantiation of non-template %q#D", result);
14604       return;
14605     }
14606
14607   if (storage == NULL_TREE)
14608     ;
14609   else if (storage == ridpointers[(int) RID_EXTERN])
14610     {
14611       if (!in_system_header && (cxx_dialect == cxx98))
14612         pedwarn (OPT_pedantic, 
14613                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
14614                  "instantiations");
14615       extern_p = 1;
14616     }
14617   else
14618     error ("storage class %qD applied to template instantiation", storage);
14619
14620   check_explicit_instantiation_namespace (result);
14621   mark_decl_instantiated (result, extern_p);
14622   if (! extern_p)
14623     instantiate_decl (result, /*defer_ok=*/1,
14624                       /*expl_inst_class_mem_p=*/false);
14625 }
14626
14627 static void
14628 mark_class_instantiated (tree t, int extern_p)
14629 {
14630   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14631   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14632   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14633   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14634   if (! extern_p)
14635     {
14636       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14637       rest_of_type_compilation (t, 1);
14638     }
14639 }
14640
14641 /* Called from do_type_instantiation through binding_table_foreach to
14642    do recursive instantiation for the type bound in ENTRY.  */
14643 static void
14644 bt_instantiate_type_proc (binding_entry entry, void *data)
14645 {
14646   tree storage = *(tree *) data;
14647
14648   if (MAYBE_CLASS_TYPE_P (entry->type)
14649       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14650     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14651 }
14652
14653 /* Called from do_type_instantiation to instantiate a member
14654    (a member function or a static member variable) of an
14655    explicitly instantiated class template.  */
14656 static void
14657 instantiate_class_member (tree decl, int extern_p)
14658 {
14659   mark_decl_instantiated (decl, extern_p);
14660   if (! extern_p)
14661     instantiate_decl (decl, /*defer_ok=*/1,
14662                       /*expl_inst_class_mem_p=*/true);
14663 }
14664
14665 /* Perform an explicit instantiation of template class T.  STORAGE, if
14666    non-null, is the RID for extern, inline or static.  COMPLAIN is
14667    nonzero if this is called from the parser, zero if called recursively,
14668    since the standard is unclear (as detailed below).  */
14669
14670 void
14671 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14672 {
14673   int extern_p = 0;
14674   int nomem_p = 0;
14675   int static_p = 0;
14676   int previous_instantiation_extern_p = 0;
14677
14678   if (TREE_CODE (t) == TYPE_DECL)
14679     t = TREE_TYPE (t);
14680
14681   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14682     {
14683       error ("explicit instantiation of non-template type %qT", t);
14684       return;
14685     }
14686
14687   complete_type (t);
14688
14689   if (!COMPLETE_TYPE_P (t))
14690     {
14691       if (complain & tf_error)
14692         error ("explicit instantiation of %q#T before definition of template",
14693                t);
14694       return;
14695     }
14696
14697   if (storage != NULL_TREE)
14698     {
14699       if (!in_system_header)
14700         {
14701           if (storage == ridpointers[(int) RID_EXTERN])
14702             {
14703               if (cxx_dialect == cxx98)
14704                 pedwarn(OPT_pedantic, 
14705                         "ISO C++ 1998 forbids the use of %<extern%> on "
14706                         "explicit instantiations");
14707             }
14708           else
14709             pedwarn(OPT_pedantic, "ISO C++ forbids the use of %qE on explicit "
14710                     "instantiations", storage);
14711         }
14712
14713       if (storage == ridpointers[(int) RID_INLINE])
14714         nomem_p = 1;
14715       else if (storage == ridpointers[(int) RID_EXTERN])
14716         extern_p = 1;
14717       else if (storage == ridpointers[(int) RID_STATIC])
14718         static_p = 1;
14719       else
14720         {
14721           error ("storage class %qD applied to template instantiation",
14722                  storage);
14723           extern_p = 0;
14724         }
14725     }
14726
14727   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14728     {
14729       /* DR 259 [temp.spec].
14730
14731          Both an explicit instantiation and a declaration of an explicit
14732          specialization shall not appear in a program unless the explicit
14733          instantiation follows a declaration of the explicit specialization.
14734
14735          For a given set of template parameters, if an explicit
14736          instantiation of a template appears after a declaration of an
14737          explicit specialization for that template, the explicit
14738          instantiation has no effect.  */
14739       return;
14740     }
14741   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14742     {
14743       /* [temp.spec]
14744
14745          No program shall explicitly instantiate any template more
14746          than once.
14747
14748          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14749          instantiation was `extern'.  If EXTERN_P then the second is.
14750          These cases are OK.  */
14751       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14752
14753       if (!previous_instantiation_extern_p && !extern_p
14754           && (complain & tf_error))
14755         permerror ("duplicate explicit instantiation of %q#T", t);
14756
14757       /* If we've already instantiated the template, just return now.  */
14758       if (!CLASSTYPE_INTERFACE_ONLY (t))
14759         return;
14760     }
14761
14762   check_explicit_instantiation_namespace (TYPE_NAME (t));
14763   mark_class_instantiated (t, extern_p);
14764
14765   if (nomem_p)
14766     return;
14767
14768   {
14769     tree tmp;
14770
14771     /* In contrast to implicit instantiation, where only the
14772        declarations, and not the definitions, of members are
14773        instantiated, we have here:
14774
14775          [temp.explicit]
14776
14777          The explicit instantiation of a class template specialization
14778          implies the instantiation of all of its members not
14779          previously explicitly specialized in the translation unit
14780          containing the explicit instantiation.
14781
14782        Of course, we can't instantiate member template classes, since
14783        we don't have any arguments for them.  Note that the standard
14784        is unclear on whether the instantiation of the members are
14785        *explicit* instantiations or not.  However, the most natural
14786        interpretation is that it should be an explicit instantiation.  */
14787
14788     if (! static_p)
14789       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14790         if (TREE_CODE (tmp) == FUNCTION_DECL
14791             && DECL_TEMPLATE_INSTANTIATION (tmp))
14792           instantiate_class_member (tmp, extern_p);
14793
14794     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14795       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14796         instantiate_class_member (tmp, extern_p);
14797
14798     if (CLASSTYPE_NESTED_UTDS (t))
14799       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14800                              bt_instantiate_type_proc, &storage);
14801   }
14802 }
14803
14804 /* Given a function DECL, which is a specialization of TMPL, modify
14805    DECL to be a re-instantiation of TMPL with the same template
14806    arguments.  TMPL should be the template into which tsubst'ing
14807    should occur for DECL, not the most general template.
14808
14809    One reason for doing this is a scenario like this:
14810
14811      template <class T>
14812      void f(const T&, int i);
14813
14814      void g() { f(3, 7); }
14815
14816      template <class T>
14817      void f(const T& t, const int i) { }
14818
14819    Note that when the template is first instantiated, with
14820    instantiate_template, the resulting DECL will have no name for the
14821    first parameter, and the wrong type for the second.  So, when we go
14822    to instantiate the DECL, we regenerate it.  */
14823
14824 static void
14825 regenerate_decl_from_template (tree decl, tree tmpl)
14826 {
14827   /* The arguments used to instantiate DECL, from the most general
14828      template.  */
14829   tree args;
14830   tree code_pattern;
14831
14832   args = DECL_TI_ARGS (decl);
14833   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14834
14835   /* Make sure that we can see identifiers, and compute access
14836      correctly.  */
14837   push_access_scope (decl);
14838
14839   if (TREE_CODE (decl) == FUNCTION_DECL)
14840     {
14841       tree decl_parm;
14842       tree pattern_parm;
14843       tree specs;
14844       int args_depth;
14845       int parms_depth;
14846
14847       args_depth = TMPL_ARGS_DEPTH (args);
14848       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14849       if (args_depth > parms_depth)
14850         args = get_innermost_template_args (args, parms_depth);
14851
14852       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14853                                               args, tf_error, NULL_TREE);
14854       if (specs)
14855         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14856                                                     specs);
14857
14858       /* Merge parameter declarations.  */
14859       decl_parm = skip_artificial_parms_for (decl,
14860                                              DECL_ARGUMENTS (decl));
14861       pattern_parm
14862         = skip_artificial_parms_for (code_pattern,
14863                                      DECL_ARGUMENTS (code_pattern));
14864       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14865         {
14866           tree parm_type;
14867           tree attributes;
14868           
14869           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14870             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14871           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14872                               NULL_TREE);
14873           parm_type = type_decays_to (parm_type);
14874           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14875             TREE_TYPE (decl_parm) = parm_type;
14876           attributes = DECL_ATTRIBUTES (pattern_parm);
14877           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14878             {
14879               DECL_ATTRIBUTES (decl_parm) = attributes;
14880               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14881             }
14882           decl_parm = TREE_CHAIN (decl_parm);
14883           pattern_parm = TREE_CHAIN (pattern_parm);
14884         }
14885       /* Merge any parameters that match with the function parameter
14886          pack.  */
14887       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14888         {
14889           int i, len;
14890           tree expanded_types;
14891           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14892              the parameters in this function parameter pack.  */
14893           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14894                                                  args, tf_error, NULL_TREE);
14895           len = TREE_VEC_LENGTH (expanded_types);
14896           for (i = 0; i < len; i++)
14897             {
14898               tree parm_type;
14899               tree attributes;
14900           
14901               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14902                 /* Rename the parameter to include the index.  */
14903                 DECL_NAME (decl_parm) = 
14904                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14905               parm_type = TREE_VEC_ELT (expanded_types, i);
14906               parm_type = type_decays_to (parm_type);
14907               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14908                 TREE_TYPE (decl_parm) = parm_type;
14909               attributes = DECL_ATTRIBUTES (pattern_parm);
14910               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14911                 {
14912                   DECL_ATTRIBUTES (decl_parm) = attributes;
14913                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14914                 }
14915               decl_parm = TREE_CHAIN (decl_parm);
14916             }
14917         }
14918       /* Merge additional specifiers from the CODE_PATTERN.  */
14919       if (DECL_DECLARED_INLINE_P (code_pattern)
14920           && !DECL_DECLARED_INLINE_P (decl))
14921         DECL_DECLARED_INLINE_P (decl) = 1;
14922     }
14923   else if (TREE_CODE (decl) == VAR_DECL)
14924     DECL_INITIAL (decl) =
14925       tsubst_expr (DECL_INITIAL (code_pattern), args,
14926                    tf_error, DECL_TI_TEMPLATE (decl),
14927                    /*integral_constant_expression_p=*/false);
14928   else
14929     gcc_unreachable ();
14930
14931   pop_access_scope (decl);
14932 }
14933
14934 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14935    substituted to get DECL.  */
14936
14937 tree
14938 template_for_substitution (tree decl)
14939 {
14940   tree tmpl = DECL_TI_TEMPLATE (decl);
14941
14942   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14943      for the instantiation.  This is not always the most general
14944      template.  Consider, for example:
14945
14946         template <class T>
14947         struct S { template <class U> void f();
14948                    template <> void f<int>(); };
14949
14950      and an instantiation of S<double>::f<int>.  We want TD to be the
14951      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14952   while (/* An instantiation cannot have a definition, so we need a
14953             more general template.  */
14954          DECL_TEMPLATE_INSTANTIATION (tmpl)
14955            /* We must also deal with friend templates.  Given:
14956
14957                 template <class T> struct S {
14958                   template <class U> friend void f() {};
14959                 };
14960
14961               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14962               so far as the language is concerned, but that's still
14963               where we get the pattern for the instantiation from.  On
14964               other hand, if the definition comes outside the class, say:
14965
14966                 template <class T> struct S {
14967                   template <class U> friend void f();
14968                 };
14969                 template <class U> friend void f() {}
14970
14971               we don't need to look any further.  That's what the check for
14972               DECL_INITIAL is for.  */
14973           || (TREE_CODE (decl) == FUNCTION_DECL
14974               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14975               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14976     {
14977       /* The present template, TD, should not be a definition.  If it
14978          were a definition, we should be using it!  Note that we
14979          cannot restructure the loop to just keep going until we find
14980          a template with a definition, since that might go too far if
14981          a specialization was declared, but not defined.  */
14982       gcc_assert (TREE_CODE (decl) != VAR_DECL
14983                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14984
14985       /* Fetch the more general template.  */
14986       tmpl = DECL_TI_TEMPLATE (tmpl);
14987     }
14988
14989   return tmpl;
14990 }
14991
14992 /* Produce the definition of D, a _DECL generated from a template.  If
14993    DEFER_OK is nonzero, then we don't have to actually do the
14994    instantiation now; we just have to do it sometime.  Normally it is
14995    an error if this is an explicit instantiation but D is undefined.
14996    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14997    explicitly instantiated class template.  */
14998
14999 tree
15000 instantiate_decl (tree d, int defer_ok,
15001                   bool expl_inst_class_mem_p)
15002 {
15003   tree tmpl = DECL_TI_TEMPLATE (d);
15004   tree gen_args;
15005   tree args;
15006   tree td;
15007   tree code_pattern;
15008   tree spec;
15009   tree gen_tmpl;
15010   bool pattern_defined;
15011   int need_push;
15012   location_t saved_loc = input_location;
15013   bool external_p;
15014
15015   /* This function should only be used to instantiate templates for
15016      functions and static member variables.  */
15017   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15018               || TREE_CODE (d) == VAR_DECL);
15019
15020   /* Variables are never deferred; if instantiation is required, they
15021      are instantiated right away.  That allows for better code in the
15022      case that an expression refers to the value of the variable --
15023      if the variable has a constant value the referring expression can
15024      take advantage of that fact.  */
15025   if (TREE_CODE (d) == VAR_DECL)
15026     defer_ok = 0;
15027
15028   /* Don't instantiate cloned functions.  Instead, instantiate the
15029      functions they cloned.  */
15030   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15031     d = DECL_CLONED_FUNCTION (d);
15032
15033   if (DECL_TEMPLATE_INSTANTIATED (d))
15034     /* D has already been instantiated.  It might seem reasonable to
15035        check whether or not D is an explicit instantiation, and, if so,
15036        stop here.  But when an explicit instantiation is deferred
15037        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15038        is set, even though we still need to do the instantiation.  */
15039     return d;
15040
15041   /* If we already have a specialization of this declaration, then
15042      there's no reason to instantiate it.  Note that
15043      retrieve_specialization gives us both instantiations and
15044      specializations, so we must explicitly check
15045      DECL_TEMPLATE_SPECIALIZATION.  */
15046   gen_tmpl = most_general_template (tmpl);
15047   gen_args = DECL_TI_ARGS (d);
15048   spec = retrieve_specialization (gen_tmpl, gen_args,
15049                                   /*class_specializations_p=*/false);
15050   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15051     return spec;
15052
15053   /* This needs to happen before any tsubsting.  */
15054   if (! push_tinst_level (d))
15055     return d;
15056
15057   timevar_push (TV_PARSE);
15058
15059   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15060      for the instantiation.  */
15061   td = template_for_substitution (d);
15062   code_pattern = DECL_TEMPLATE_RESULT (td);
15063
15064   /* We should never be trying to instantiate a member of a class
15065      template or partial specialization.  */
15066   gcc_assert (d != code_pattern);
15067
15068   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15069       || DECL_TEMPLATE_SPECIALIZATION (td))
15070     /* In the case of a friend template whose definition is provided
15071        outside the class, we may have too many arguments.  Drop the
15072        ones we don't need.  The same is true for specializations.  */
15073     args = get_innermost_template_args
15074       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15075   else
15076     args = gen_args;
15077
15078   if (TREE_CODE (d) == FUNCTION_DECL)
15079     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15080   else
15081     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15082
15083   /* We may be in the middle of deferred access check.  Disable it now.  */
15084   push_deferring_access_checks (dk_no_deferred);
15085
15086   /* Unless an explicit instantiation directive has already determined
15087      the linkage of D, remember that a definition is available for
15088      this entity.  */
15089   if (pattern_defined
15090       && !DECL_INTERFACE_KNOWN (d)
15091       && !DECL_NOT_REALLY_EXTERN (d))
15092     mark_definable (d);
15093
15094   input_location = DECL_SOURCE_LOCATION (d);
15095
15096   /* If D is a member of an explicitly instantiated class template,
15097      and no definition is available, treat it like an implicit
15098      instantiation.  */
15099   if (!pattern_defined && expl_inst_class_mem_p
15100       && DECL_EXPLICIT_INSTANTIATION (d))
15101     {
15102       DECL_NOT_REALLY_EXTERN (d) = 0;
15103       DECL_INTERFACE_KNOWN (d) = 0;
15104       SET_DECL_IMPLICIT_INSTANTIATION (d);
15105     }
15106
15107   if (!defer_ok)
15108     {
15109       /* Recheck the substitutions to obtain any warning messages
15110          about ignoring cv qualifiers.  */
15111       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15112       tree type = TREE_TYPE (gen);
15113
15114       /* Make sure that we can see identifiers, and compute access
15115          correctly.  D is already the target FUNCTION_DECL with the
15116          right context.  */
15117       push_access_scope (d);
15118
15119       if (TREE_CODE (gen) == FUNCTION_DECL)
15120         {
15121           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15122           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15123                                           d);
15124           /* Don't simply tsubst the function type, as that will give
15125              duplicate warnings about poor parameter qualifications.
15126              The function arguments are the same as the decl_arguments
15127              without the top level cv qualifiers.  */
15128           type = TREE_TYPE (type);
15129         }
15130       tsubst (type, gen_args, tf_warning_or_error, d);
15131
15132       pop_access_scope (d);
15133     }
15134
15135   /* Check to see whether we know that this template will be
15136      instantiated in some other file, as with "extern template"
15137      extension.  */
15138   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15139   /* In general, we do not instantiate such templates...  */
15140   if (external_p
15141       /* ... but we instantiate inline functions so that we can inline
15142          them and ... */
15143       && ! (TREE_CODE (d) == FUNCTION_DECL
15144             && possibly_inlined_p (d))
15145       /* ... we instantiate static data members whose values are
15146          needed in integral constant expressions.  */
15147       && ! (TREE_CODE (d) == VAR_DECL
15148             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15149     goto out;
15150   /* Defer all other templates, unless we have been explicitly
15151      forbidden from doing so.  */
15152   if (/* If there is no definition, we cannot instantiate the
15153          template.  */
15154       ! pattern_defined
15155       /* If it's OK to postpone instantiation, do so.  */
15156       || defer_ok
15157       /* If this is a static data member that will be defined
15158          elsewhere, we don't want to instantiate the entire data
15159          member, but we do want to instantiate the initializer so that
15160          we can substitute that elsewhere.  */
15161       || (external_p && TREE_CODE (d) == VAR_DECL))
15162     {
15163       /* The definition of the static data member is now required so
15164          we must substitute the initializer.  */
15165       if (TREE_CODE (d) == VAR_DECL
15166           && !DECL_INITIAL (d)
15167           && DECL_INITIAL (code_pattern))
15168         {
15169           tree ns;
15170           tree init;
15171
15172           ns = decl_namespace_context (d);
15173           push_nested_namespace (ns);
15174           push_nested_class (DECL_CONTEXT (d));
15175           init = tsubst_expr (DECL_INITIAL (code_pattern),
15176                               args,
15177                               tf_warning_or_error, NULL_TREE,
15178                               /*integral_constant_expression_p=*/false);
15179           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15180                           /*asmspec_tree=*/NULL_TREE,
15181                           LOOKUP_ONLYCONVERTING);
15182           pop_nested_class ();
15183           pop_nested_namespace (ns);
15184         }
15185
15186       /* We restore the source position here because it's used by
15187          add_pending_template.  */
15188       input_location = saved_loc;
15189
15190       if (at_eof && !pattern_defined
15191           && DECL_EXPLICIT_INSTANTIATION (d))
15192         /* [temp.explicit]
15193
15194            The definition of a non-exported function template, a
15195            non-exported member function template, or a non-exported
15196            member function or static data member of a class template
15197            shall be present in every translation unit in which it is
15198            explicitly instantiated.  */
15199         permerror
15200           ("explicit instantiation of %qD but no definition available", d);
15201
15202       /* ??? Historically, we have instantiated inline functions, even
15203          when marked as "extern template".  */
15204       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15205         add_pending_template (d);
15206       goto out;
15207     }
15208   /* Tell the repository that D is available in this translation unit
15209      -- and see if it is supposed to be instantiated here.  */
15210   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15211     {
15212       /* In a PCH file, despite the fact that the repository hasn't
15213          requested instantiation in the PCH it is still possible that
15214          an instantiation will be required in a file that includes the
15215          PCH.  */
15216       if (pch_file)
15217         add_pending_template (d);
15218       /* Instantiate inline functions so that the inliner can do its
15219          job, even though we'll not be emitting a copy of this
15220          function.  */
15221       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
15222         goto out;
15223     }
15224
15225   need_push = !cfun || !global_bindings_p ();
15226   if (need_push)
15227     push_to_top_level ();
15228
15229   /* Mark D as instantiated so that recursive calls to
15230      instantiate_decl do not try to instantiate it again.  */
15231   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15232
15233   /* Regenerate the declaration in case the template has been modified
15234      by a subsequent redeclaration.  */
15235   regenerate_decl_from_template (d, td);
15236
15237   /* We already set the file and line above.  Reset them now in case
15238      they changed as a result of calling regenerate_decl_from_template.  */
15239   input_location = DECL_SOURCE_LOCATION (d);
15240
15241   if (TREE_CODE (d) == VAR_DECL)
15242     {
15243       tree init;
15244
15245       /* Clear out DECL_RTL; whatever was there before may not be right
15246          since we've reset the type of the declaration.  */
15247       SET_DECL_RTL (d, NULL_RTX);
15248       DECL_IN_AGGR_P (d) = 0;
15249
15250       /* The initializer is placed in DECL_INITIAL by
15251          regenerate_decl_from_template.  Pull it out so that
15252          finish_decl can process it.  */
15253       init = DECL_INITIAL (d);
15254       DECL_INITIAL (d) = NULL_TREE;
15255       DECL_INITIALIZED_P (d) = 0;
15256
15257       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15258          initializer.  That function will defer actual emission until
15259          we have a chance to determine linkage.  */
15260       DECL_EXTERNAL (d) = 0;
15261
15262       /* Enter the scope of D so that access-checking works correctly.  */
15263       push_nested_class (DECL_CONTEXT (d));
15264       finish_decl (d, init, NULL_TREE);
15265       pop_nested_class ();
15266     }
15267   else if (TREE_CODE (d) == FUNCTION_DECL)
15268     {
15269       htab_t saved_local_specializations;
15270       tree subst_decl;
15271       tree tmpl_parm;
15272       tree spec_parm;
15273
15274       /* Save away the current list, in case we are instantiating one
15275          template from within the body of another.  */
15276       saved_local_specializations = local_specializations;
15277
15278       /* Set up the list of local specializations.  */
15279       local_specializations = htab_create (37,
15280                                            hash_local_specialization,
15281                                            eq_local_specializations,
15282                                            NULL);
15283
15284       /* Set up context.  */
15285       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15286
15287       /* Create substitution entries for the parameters.  */
15288       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15289       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15290       spec_parm = DECL_ARGUMENTS (d);
15291       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15292         {
15293           register_local_specialization (spec_parm, tmpl_parm);
15294           spec_parm = skip_artificial_parms_for (d, spec_parm);
15295           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15296         }
15297       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15298         {
15299           register_local_specialization (spec_parm, tmpl_parm);
15300           tmpl_parm = TREE_CHAIN (tmpl_parm);
15301           spec_parm = TREE_CHAIN (spec_parm);
15302         }
15303       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15304         {
15305           /* Collect all of the extra "packed" parameters into an
15306              argument pack.  */
15307           tree parmvec;
15308           tree parmtypevec;
15309           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15310           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15311           int i, len = 0;
15312           tree t;
15313           
15314           /* Count how many parameters remain.  */
15315           for (t = spec_parm; t; t = TREE_CHAIN (t))
15316             len++;
15317
15318           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15319           parmvec = make_tree_vec (len);
15320           parmtypevec = make_tree_vec (len);
15321           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15322             {
15323               TREE_VEC_ELT (parmvec, i) = spec_parm;
15324               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15325             }
15326
15327           /* Build the argument packs.  */
15328           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15329           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15330           TREE_TYPE (argpack) = argtypepack;
15331           
15332           /* Register the (value) argument pack as a specialization of
15333              TMPL_PARM, then move on.  */
15334           register_local_specialization (argpack, tmpl_parm);
15335           tmpl_parm = TREE_CHAIN (tmpl_parm);
15336         }
15337       gcc_assert (!spec_parm);
15338
15339       /* Substitute into the body of the function.  */
15340       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15341                    tf_warning_or_error, tmpl,
15342                    /*integral_constant_expression_p=*/false);
15343
15344       /* Set the current input_location to the end of the function
15345          so that finish_function knows where we are.  */
15346       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15347
15348       /* We don't need the local specializations any more.  */
15349       htab_delete (local_specializations);
15350       local_specializations = saved_local_specializations;
15351
15352       /* Finish the function.  */
15353       d = finish_function (0);
15354       expand_or_defer_fn (d);
15355     }
15356
15357   /* We're not deferring instantiation any more.  */
15358   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15359
15360   if (need_push)
15361     pop_from_top_level ();
15362
15363 out:
15364   input_location = saved_loc;
15365   pop_deferring_access_checks ();
15366   pop_tinst_level ();
15367
15368   timevar_pop (TV_PARSE);
15369
15370   return d;
15371 }
15372
15373 /* Run through the list of templates that we wish we could
15374    instantiate, and instantiate any we can.  RETRIES is the
15375    number of times we retry pending template instantiation.  */
15376
15377 void
15378 instantiate_pending_templates (int retries)
15379 {
15380   int reconsider;
15381   location_t saved_loc = input_location;
15382
15383   /* Instantiating templates may trigger vtable generation.  This in turn
15384      may require further template instantiations.  We place a limit here
15385      to avoid infinite loop.  */
15386   if (pending_templates && retries >= max_tinst_depth)
15387     {
15388       tree decl = pending_templates->tinst->decl;
15389
15390       error ("template instantiation depth exceeds maximum of %d"
15391              " instantiating %q+D, possibly from virtual table generation"
15392              " (use -ftemplate-depth-NN to increase the maximum)",
15393              max_tinst_depth, decl);
15394       if (TREE_CODE (decl) == FUNCTION_DECL)
15395         /* Pretend that we defined it.  */
15396         DECL_INITIAL (decl) = error_mark_node;
15397       return;
15398     }
15399
15400   do
15401     {
15402       struct pending_template **t = &pending_templates;
15403       struct pending_template *last = NULL;
15404       reconsider = 0;
15405       while (*t)
15406         {
15407           tree instantiation = reopen_tinst_level ((*t)->tinst);
15408           bool complete = false;
15409
15410           if (TYPE_P (instantiation))
15411             {
15412               tree fn;
15413
15414               if (!COMPLETE_TYPE_P (instantiation))
15415                 {
15416                   instantiate_class_template (instantiation);
15417                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15418                     for (fn = TYPE_METHODS (instantiation);
15419                          fn;
15420                          fn = TREE_CHAIN (fn))
15421                       if (! DECL_ARTIFICIAL (fn))
15422                         instantiate_decl (fn,
15423                                           /*defer_ok=*/0,
15424                                           /*expl_inst_class_mem_p=*/false);
15425                   if (COMPLETE_TYPE_P (instantiation))
15426                     reconsider = 1;
15427                 }
15428
15429               complete = COMPLETE_TYPE_P (instantiation);
15430             }
15431           else
15432             {
15433               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15434                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15435                 {
15436                   instantiation
15437                     = instantiate_decl (instantiation,
15438                                         /*defer_ok=*/0,
15439                                         /*expl_inst_class_mem_p=*/false);
15440                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15441                     reconsider = 1;
15442                 }
15443
15444               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15445                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15446             }
15447
15448           if (complete)
15449             /* If INSTANTIATION has been instantiated, then we don't
15450                need to consider it again in the future.  */
15451             *t = (*t)->next;
15452           else
15453             {
15454               last = *t;
15455               t = &(*t)->next;
15456             }
15457           tinst_depth = 0;
15458           current_tinst_level = NULL;
15459         }
15460       last_pending_template = last;
15461     }
15462   while (reconsider);
15463
15464   input_location = saved_loc;
15465 }
15466
15467 /* Substitute ARGVEC into T, which is a list of initializers for
15468    either base class or a non-static data member.  The TREE_PURPOSEs
15469    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15470    instantiate_decl.  */
15471
15472 static tree
15473 tsubst_initializer_list (tree t, tree argvec)
15474 {
15475   tree inits = NULL_TREE;
15476
15477   for (; t; t = TREE_CHAIN (t))
15478     {
15479       tree decl;
15480       tree init;
15481       tree expanded_bases = NULL_TREE;
15482       tree expanded_arguments = NULL_TREE;
15483       int i, len = 1;
15484
15485       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15486         {
15487           tree expr;
15488           tree arg;
15489
15490           /* Expand the base class expansion type into separate base
15491              classes.  */
15492           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15493                                                  tf_warning_or_error,
15494                                                  NULL_TREE);
15495           if (expanded_bases == error_mark_node)
15496             continue;
15497           
15498           /* We'll be building separate TREE_LISTs of arguments for
15499              each base.  */
15500           len = TREE_VEC_LENGTH (expanded_bases);
15501           expanded_arguments = make_tree_vec (len);
15502           for (i = 0; i < len; i++)
15503             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15504
15505           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15506              expand each argument in the TREE_VALUE of t.  */
15507           expr = make_node (EXPR_PACK_EXPANSION);
15508           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15509             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15510
15511           if (TREE_VALUE (t) == void_type_node)
15512             /* VOID_TYPE_NODE is used to indicate
15513                value-initialization.  */
15514             {
15515               for (i = 0; i < len; i++)
15516                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15517             }
15518           else
15519             {
15520               /* Substitute parameter packs into each argument in the
15521                  TREE_LIST.  */
15522               in_base_initializer = 1;
15523               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15524                 {
15525                   tree expanded_exprs;
15526
15527                   /* Expand the argument.  */
15528                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15529                   expanded_exprs 
15530                     = tsubst_pack_expansion (expr, argvec,
15531                                              tf_warning_or_error,
15532                                              NULL_TREE);
15533                   if (expanded_exprs == error_mark_node)
15534                     continue;
15535
15536                   /* Prepend each of the expanded expressions to the
15537                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15538                   for (i = 0; i < len; i++)
15539                     {
15540                       TREE_VEC_ELT (expanded_arguments, i) = 
15541                         tree_cons (NULL_TREE, 
15542                                    TREE_VEC_ELT (expanded_exprs, i),
15543                                    TREE_VEC_ELT (expanded_arguments, i));
15544                     }
15545                 }
15546               in_base_initializer = 0;
15547
15548               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15549                  since we built them backwards.  */
15550               for (i = 0; i < len; i++)
15551                 {
15552                   TREE_VEC_ELT (expanded_arguments, i) = 
15553                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15554                 }
15555             }
15556         }
15557
15558       for (i = 0; i < len; ++i)
15559         {
15560           if (expanded_bases)
15561             {
15562               decl = TREE_VEC_ELT (expanded_bases, i);
15563               decl = expand_member_init (decl);
15564               init = TREE_VEC_ELT (expanded_arguments, i);
15565             }
15566           else
15567             {
15568               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15569                                   tf_warning_or_error, NULL_TREE);
15570
15571               decl = expand_member_init (decl);
15572               if (decl && !DECL_P (decl))
15573                 in_base_initializer = 1;
15574
15575               init = tsubst_expr (TREE_VALUE (t), argvec, 
15576                                   tf_warning_or_error, NULL_TREE,
15577                                   /*integral_constant_expression_p=*/false);
15578               in_base_initializer = 0;
15579             }
15580
15581           if (decl)
15582             {
15583               init = build_tree_list (decl, init);
15584               TREE_CHAIN (init) = inits;
15585               inits = init;
15586             }
15587         }
15588     }
15589   return inits;
15590 }
15591
15592 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15593
15594 static void
15595 set_current_access_from_decl (tree decl)
15596 {
15597   if (TREE_PRIVATE (decl))
15598     current_access_specifier = access_private_node;
15599   else if (TREE_PROTECTED (decl))
15600     current_access_specifier = access_protected_node;
15601   else
15602     current_access_specifier = access_public_node;
15603 }
15604
15605 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15606    is the instantiation (which should have been created with
15607    start_enum) and ARGS are the template arguments to use.  */
15608
15609 static void
15610 tsubst_enum (tree tag, tree newtag, tree args)
15611 {
15612   tree e;
15613
15614   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15615     {
15616       tree value;
15617       tree decl;
15618
15619       decl = TREE_VALUE (e);
15620       /* Note that in a template enum, the TREE_VALUE is the
15621          CONST_DECL, not the corresponding INTEGER_CST.  */
15622       value = tsubst_expr (DECL_INITIAL (decl),
15623                            args, tf_warning_or_error, NULL_TREE,
15624                            /*integral_constant_expression_p=*/true);
15625
15626       /* Give this enumeration constant the correct access.  */
15627       set_current_access_from_decl (decl);
15628
15629       /* Actually build the enumerator itself.  */
15630       build_enumerator (DECL_NAME (decl), value, newtag);
15631     }
15632
15633   finish_enum (newtag);
15634   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15635     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15636 }
15637
15638 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15639    its type -- but without substituting the innermost set of template
15640    arguments.  So, innermost set of template parameters will appear in
15641    the type.  */
15642
15643 tree
15644 get_mostly_instantiated_function_type (tree decl)
15645 {
15646   tree fn_type;
15647   tree tmpl;
15648   tree targs;
15649   tree tparms;
15650   int parm_depth;
15651
15652   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15653   targs = DECL_TI_ARGS (decl);
15654   tparms = DECL_TEMPLATE_PARMS (tmpl);
15655   parm_depth = TMPL_PARMS_DEPTH (tparms);
15656
15657   /* There should be as many levels of arguments as there are levels
15658      of parameters.  */
15659   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15660
15661   fn_type = TREE_TYPE (tmpl);
15662
15663   if (parm_depth == 1)
15664     /* No substitution is necessary.  */
15665     ;
15666   else
15667     {
15668       int i, save_access_control;
15669       tree partial_args;
15670
15671       /* Replace the innermost level of the TARGS with NULL_TREEs to
15672          let tsubst know not to substitute for those parameters.  */
15673       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15674       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15675         SET_TMPL_ARGS_LEVEL (partial_args, i,
15676                              TMPL_ARGS_LEVEL (targs, i));
15677       SET_TMPL_ARGS_LEVEL (partial_args,
15678                            TMPL_ARGS_DEPTH (targs),
15679                            make_tree_vec (DECL_NTPARMS (tmpl)));
15680
15681       /* Disable access control as this function is used only during
15682          name-mangling.  */
15683       save_access_control = flag_access_control;
15684       flag_access_control = 0;
15685
15686       ++processing_template_decl;
15687       /* Now, do the (partial) substitution to figure out the
15688          appropriate function type.  */
15689       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15690       --processing_template_decl;
15691
15692       /* Substitute into the template parameters to obtain the real
15693          innermost set of parameters.  This step is important if the
15694          innermost set of template parameters contains value
15695          parameters whose types depend on outer template parameters.  */
15696       TREE_VEC_LENGTH (partial_args)--;
15697       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15698
15699       flag_access_control = save_access_control;
15700     }
15701
15702   return fn_type;
15703 }
15704
15705 /* Return truthvalue if we're processing a template different from
15706    the last one involved in diagnostics.  */
15707 int
15708 problematic_instantiation_changed (void)
15709 {
15710   return last_template_error_tick != tinst_level_tick;
15711 }
15712
15713 /* Remember current template involved in diagnostics.  */
15714 void
15715 record_last_problematic_instantiation (void)
15716 {
15717   last_template_error_tick = tinst_level_tick;
15718 }
15719
15720 struct tinst_level *
15721 current_instantiation (void)
15722 {
15723   return current_tinst_level;
15724 }
15725
15726 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15727    type. Return zero for ok, nonzero for disallowed. Issue error and
15728    warning messages under control of COMPLAIN.  */
15729
15730 static int
15731 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15732 {
15733   if (INTEGRAL_TYPE_P (type))
15734     return 0;
15735   else if (POINTER_TYPE_P (type))
15736     return 0;
15737   else if (TYPE_PTR_TO_MEMBER_P (type))
15738     return 0;
15739   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15740     return 0;
15741   else if (TREE_CODE (type) == TYPENAME_TYPE)
15742     return 0;
15743
15744   if (complain & tf_error)
15745     error ("%q#T is not a valid type for a template constant parameter", type);
15746   return 1;
15747 }
15748
15749 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15750    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15751
15752 static bool
15753 dependent_type_p_r (tree type)
15754 {
15755   tree scope;
15756
15757   /* [temp.dep.type]
15758
15759      A type is dependent if it is:
15760
15761      -- a template parameter. Template template parameters are types
15762         for us (since TYPE_P holds true for them) so we handle
15763         them here.  */
15764   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15765       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15766     return true;
15767   /* -- a qualified-id with a nested-name-specifier which contains a
15768         class-name that names a dependent type or whose unqualified-id
15769         names a dependent type.  */
15770   if (TREE_CODE (type) == TYPENAME_TYPE)
15771     return true;
15772   /* -- a cv-qualified type where the cv-unqualified type is
15773         dependent.  */
15774   type = TYPE_MAIN_VARIANT (type);
15775   /* -- a compound type constructed from any dependent type.  */
15776   if (TYPE_PTR_TO_MEMBER_P (type))
15777     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15778             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15779                                            (type)));
15780   else if (TREE_CODE (type) == POINTER_TYPE
15781            || TREE_CODE (type) == REFERENCE_TYPE)
15782     return dependent_type_p (TREE_TYPE (type));
15783   else if (TREE_CODE (type) == FUNCTION_TYPE
15784            || TREE_CODE (type) == METHOD_TYPE)
15785     {
15786       tree arg_type;
15787
15788       if (dependent_type_p (TREE_TYPE (type)))
15789         return true;
15790       for (arg_type = TYPE_ARG_TYPES (type);
15791            arg_type;
15792            arg_type = TREE_CHAIN (arg_type))
15793         if (dependent_type_p (TREE_VALUE (arg_type)))
15794           return true;
15795       return false;
15796     }
15797   /* -- an array type constructed from any dependent type or whose
15798         size is specified by a constant expression that is
15799         value-dependent.  */
15800   if (TREE_CODE (type) == ARRAY_TYPE)
15801     {
15802       if (TYPE_DOMAIN (type)
15803           && dependent_type_p (TYPE_DOMAIN (type)))
15804         return true;
15805       return dependent_type_p (TREE_TYPE (type));
15806     }
15807   else if (TREE_CODE (type) == INTEGER_TYPE
15808            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15809     {
15810       /* If this is the TYPE_DOMAIN of an array type, consider it
15811          dependent.  */
15812       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15813               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15814     }
15815
15816   /* -- a template-id in which either the template name is a template
15817      parameter ...  */
15818   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15819     return true;
15820   /* ... or any of the template arguments is a dependent type or
15821         an expression that is type-dependent or value-dependent.  */
15822   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15823            && (any_dependent_template_arguments_p
15824                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15825     return true;
15826
15827   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15828      argument of the `typeof' expression is not type-dependent, then
15829      it should already been have resolved.  */
15830   if (TREE_CODE (type) == TYPEOF_TYPE
15831       || TREE_CODE (type) == DECLTYPE_TYPE)
15832     return true;
15833
15834   /* A template argument pack is dependent if any of its packed
15835      arguments are.  */
15836   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15837     {
15838       tree args = ARGUMENT_PACK_ARGS (type);
15839       int i, len = TREE_VEC_LENGTH (args);
15840       for (i = 0; i < len; ++i)
15841         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15842           return true;
15843     }
15844
15845   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15846      be template parameters.  */
15847   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15848     return true;
15849
15850   /* The standard does not specifically mention types that are local
15851      to template functions or local classes, but they should be
15852      considered dependent too.  For example:
15853
15854        template <int I> void f() {
15855          enum E { a = I };
15856          S<sizeof (E)> s;
15857        }
15858
15859      The size of `E' cannot be known until the value of `I' has been
15860      determined.  Therefore, `E' must be considered dependent.  */
15861   scope = TYPE_CONTEXT (type);
15862   if (scope && TYPE_P (scope))
15863     return dependent_type_p (scope);
15864   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15865     return type_dependent_expression_p (scope);
15866
15867   /* Other types are non-dependent.  */
15868   return false;
15869 }
15870
15871 /* Returns TRUE if TYPE is dependent, in the sense of
15872    [temp.dep.type].  */
15873
15874 bool
15875 dependent_type_p (tree type)
15876 {
15877   /* If there are no template parameters in scope, then there can't be
15878      any dependent types.  */
15879   if (!processing_template_decl)
15880     {
15881       /* If we are not processing a template, then nobody should be
15882          providing us with a dependent type.  */
15883       gcc_assert (type);
15884       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15885       return false;
15886     }
15887
15888   /* If the type is NULL, we have not computed a type for the entity
15889      in question; in that case, the type is dependent.  */
15890   if (!type)
15891     return true;
15892
15893   /* Erroneous types can be considered non-dependent.  */
15894   if (type == error_mark_node)
15895     return false;
15896
15897   /* If we have not already computed the appropriate value for TYPE,
15898      do so now.  */
15899   if (!TYPE_DEPENDENT_P_VALID (type))
15900     {
15901       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15902       TYPE_DEPENDENT_P_VALID (type) = 1;
15903     }
15904
15905   return TYPE_DEPENDENT_P (type);
15906 }
15907
15908 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15909
15910 static bool
15911 dependent_scope_ref_p (tree expression, bool criterion (tree))
15912 {
15913   tree scope;
15914   tree name;
15915
15916   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15917
15918   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15919     return true;
15920
15921   scope = TREE_OPERAND (expression, 0);
15922   name = TREE_OPERAND (expression, 1);
15923
15924   /* [temp.dep.expr]
15925
15926      An id-expression is type-dependent if it contains a
15927      nested-name-specifier that contains a class-name that names a
15928      dependent type.  */
15929   /* The suggested resolution to Core Issue 2 implies that if the
15930      qualifying type is the current class, then we must peek
15931      inside it.  */
15932   if (DECL_P (name)
15933       && currently_open_class (scope)
15934       && !criterion (name))
15935     return false;
15936   if (dependent_type_p (scope))
15937     return true;
15938
15939   return false;
15940 }
15941
15942 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15943    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15944    expression.  */
15945
15946 bool
15947 value_dependent_expression_p (tree expression)
15948 {
15949   if (!processing_template_decl)
15950     return false;
15951
15952   /* A name declared with a dependent type.  */
15953   if (DECL_P (expression) && type_dependent_expression_p (expression))
15954     return true;
15955
15956   switch (TREE_CODE (expression))
15957     {
15958     case IDENTIFIER_NODE:
15959       /* A name that has not been looked up -- must be dependent.  */
15960       return true;
15961
15962     case TEMPLATE_PARM_INDEX:
15963       /* A non-type template parm.  */
15964       return true;
15965
15966     case CONST_DECL:
15967       /* A non-type template parm.  */
15968       if (DECL_TEMPLATE_PARM_P (expression))
15969         return true;
15970       return value_dependent_expression_p (DECL_INITIAL (expression));
15971
15972     case VAR_DECL:
15973        /* A constant with integral or enumeration type and is initialized
15974           with an expression that is value-dependent.  */
15975       if (DECL_INITIAL (expression)
15976           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15977           && value_dependent_expression_p (DECL_INITIAL (expression)))
15978         return true;
15979       return false;
15980
15981     case DYNAMIC_CAST_EXPR:
15982     case STATIC_CAST_EXPR:
15983     case CONST_CAST_EXPR:
15984     case REINTERPRET_CAST_EXPR:
15985     case CAST_EXPR:
15986       /* These expressions are value-dependent if the type to which
15987          the cast occurs is dependent or the expression being casted
15988          is value-dependent.  */
15989       {
15990         tree type = TREE_TYPE (expression);
15991
15992         if (dependent_type_p (type))
15993           return true;
15994
15995         /* A functional cast has a list of operands.  */
15996         expression = TREE_OPERAND (expression, 0);
15997         if (!expression)
15998           {
15999             /* If there are no operands, it must be an expression such
16000                as "int()". This should not happen for aggregate types
16001                because it would form non-constant expressions.  */
16002             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16003
16004             return false;
16005           }
16006
16007         if (TREE_CODE (expression) == TREE_LIST)
16008           return any_value_dependent_elements_p (expression);
16009
16010         return value_dependent_expression_p (expression);
16011       }
16012
16013     case SIZEOF_EXPR:
16014     case ALIGNOF_EXPR:
16015       /* A `sizeof' expression is value-dependent if the operand is
16016          type-dependent or is a pack expansion.  */
16017       expression = TREE_OPERAND (expression, 0);
16018       if (PACK_EXPANSION_P (expression))
16019         return true;
16020       else if (TYPE_P (expression))
16021         return dependent_type_p (expression);
16022       return type_dependent_expression_p (expression);
16023
16024     case SCOPE_REF:
16025       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16026
16027     case COMPONENT_REF:
16028       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16029               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16030
16031     case CALL_EXPR:
16032       /* A CALL_EXPR may appear in a constant expression if it is a
16033          call to a builtin function, e.g., __builtin_constant_p.  All
16034          such calls are value-dependent.  */
16035       return true;
16036
16037     case NONTYPE_ARGUMENT_PACK:
16038       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16039          is value-dependent.  */
16040       {
16041         tree values = ARGUMENT_PACK_ARGS (expression);
16042         int i, len = TREE_VEC_LENGTH (values);
16043         
16044         for (i = 0; i < len; ++i)
16045           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16046             return true;
16047         
16048         return false;
16049       }
16050
16051     case TRAIT_EXPR:
16052       {
16053         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16054         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16055                 || (type2 ? dependent_type_p (type2) : false));
16056       }
16057
16058     case MODOP_EXPR:
16059       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16060               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16061
16062     default:
16063       /* A constant expression is value-dependent if any subexpression is
16064          value-dependent.  */
16065       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16066         {
16067         case tcc_reference:
16068         case tcc_unary:
16069           return (value_dependent_expression_p
16070                   (TREE_OPERAND (expression, 0)));
16071
16072         case tcc_comparison:
16073         case tcc_binary:
16074           return ((value_dependent_expression_p
16075                    (TREE_OPERAND (expression, 0)))
16076                   || (value_dependent_expression_p
16077                       (TREE_OPERAND (expression, 1))));
16078
16079         case tcc_expression:
16080         case tcc_vl_exp:
16081           {
16082             int i;
16083             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16084               /* In some cases, some of the operands may be missing.
16085                  (For example, in the case of PREDECREMENT_EXPR, the
16086                  amount to increment by may be missing.)  That doesn't
16087                  make the expression dependent.  */
16088               if (TREE_OPERAND (expression, i)
16089                   && (value_dependent_expression_p
16090                       (TREE_OPERAND (expression, i))))
16091                 return true;
16092             return false;
16093           }
16094
16095         default:
16096           break;
16097         }
16098     }
16099
16100   /* The expression is not value-dependent.  */
16101   return false;
16102 }
16103
16104 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16105    [temp.dep.expr].  */
16106
16107 bool
16108 type_dependent_expression_p (tree expression)
16109 {
16110   if (!processing_template_decl)
16111     return false;
16112
16113   if (expression == error_mark_node)
16114     return false;
16115
16116   /* An unresolved name is always dependent.  */
16117   if (TREE_CODE (expression) == IDENTIFIER_NODE
16118       || TREE_CODE (expression) == USING_DECL)
16119     return true;
16120
16121   /* Some expression forms are never type-dependent.  */
16122   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16123       || TREE_CODE (expression) == SIZEOF_EXPR
16124       || TREE_CODE (expression) == ALIGNOF_EXPR
16125       || TREE_CODE (expression) == TRAIT_EXPR
16126       || TREE_CODE (expression) == TYPEID_EXPR
16127       || TREE_CODE (expression) == DELETE_EXPR
16128       || TREE_CODE (expression) == VEC_DELETE_EXPR
16129       || TREE_CODE (expression) == THROW_EXPR)
16130     return false;
16131
16132   /* The types of these expressions depends only on the type to which
16133      the cast occurs.  */
16134   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16135       || TREE_CODE (expression) == STATIC_CAST_EXPR
16136       || TREE_CODE (expression) == CONST_CAST_EXPR
16137       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16138       || TREE_CODE (expression) == CAST_EXPR)
16139     return dependent_type_p (TREE_TYPE (expression));
16140
16141   /* The types of these expressions depends only on the type created
16142      by the expression.  */
16143   if (TREE_CODE (expression) == NEW_EXPR
16144       || TREE_CODE (expression) == VEC_NEW_EXPR)
16145     {
16146       /* For NEW_EXPR tree nodes created inside a template, either
16147          the object type itself or a TREE_LIST may appear as the
16148          operand 1.  */
16149       tree type = TREE_OPERAND (expression, 1);
16150       if (TREE_CODE (type) == TREE_LIST)
16151         /* This is an array type.  We need to check array dimensions
16152            as well.  */
16153         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16154                || value_dependent_expression_p
16155                     (TREE_OPERAND (TREE_VALUE (type), 1));
16156       else
16157         return dependent_type_p (type);
16158     }
16159
16160   if (TREE_CODE (expression) == SCOPE_REF
16161       && dependent_scope_ref_p (expression,
16162                                 type_dependent_expression_p))
16163     return true;
16164
16165   if (TREE_CODE (expression) == FUNCTION_DECL
16166       && DECL_LANG_SPECIFIC (expression)
16167       && DECL_TEMPLATE_INFO (expression)
16168       && (any_dependent_template_arguments_p
16169           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16170     return true;
16171
16172   if (TREE_CODE (expression) == TEMPLATE_DECL
16173       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16174     return false;
16175
16176   if (TREE_CODE (expression) == STMT_EXPR)
16177     expression = stmt_expr_value_expr (expression);
16178
16179   if (TREE_TYPE (expression) == unknown_type_node)
16180     {
16181       if (TREE_CODE (expression) == ADDR_EXPR)
16182         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16183       if (TREE_CODE (expression) == COMPONENT_REF
16184           || TREE_CODE (expression) == OFFSET_REF)
16185         {
16186           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16187             return true;
16188           expression = TREE_OPERAND (expression, 1);
16189           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16190             return false;
16191         }
16192       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16193       if (TREE_CODE (expression) == SCOPE_REF)
16194         return false;
16195
16196       if (TREE_CODE (expression) == BASELINK)
16197         expression = BASELINK_FUNCTIONS (expression);
16198
16199       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16200         {
16201           if (any_dependent_template_arguments_p
16202               (TREE_OPERAND (expression, 1)))
16203             return true;
16204           expression = TREE_OPERAND (expression, 0);
16205         }
16206       gcc_assert (TREE_CODE (expression) == OVERLOAD
16207                   || TREE_CODE (expression) == FUNCTION_DECL);
16208
16209       while (expression)
16210         {
16211           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16212             return true;
16213           expression = OVL_NEXT (expression);
16214         }
16215       return false;
16216     }
16217
16218   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16219
16220   return (dependent_type_p (TREE_TYPE (expression)));
16221 }
16222
16223 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16224    contains a type-dependent expression.  */
16225
16226 bool
16227 any_type_dependent_arguments_p (const_tree args)
16228 {
16229   while (args)
16230     {
16231       tree arg = TREE_VALUE (args);
16232
16233       if (type_dependent_expression_p (arg))
16234         return true;
16235       args = TREE_CHAIN (args);
16236     }
16237   return false;
16238 }
16239
16240 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16241    expressions) contains any value-dependent expressions.  */
16242
16243 bool
16244 any_value_dependent_elements_p (const_tree list)
16245 {
16246   for (; list; list = TREE_CHAIN (list))
16247     if (value_dependent_expression_p (TREE_VALUE (list)))
16248       return true;
16249
16250   return false;
16251 }
16252
16253 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16254
16255 bool
16256 dependent_template_arg_p (tree arg)
16257 {
16258   if (!processing_template_decl)
16259     return false;
16260
16261   if (TREE_CODE (arg) == TEMPLATE_DECL
16262       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16263     return dependent_template_p (arg);
16264   else if (ARGUMENT_PACK_P (arg))
16265     {
16266       tree args = ARGUMENT_PACK_ARGS (arg);
16267       int i, len = TREE_VEC_LENGTH (args);
16268       for (i = 0; i < len; ++i)
16269         {
16270           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16271             return true;
16272         }
16273
16274       return false;
16275     }
16276   else if (TYPE_P (arg))
16277     return dependent_type_p (arg);
16278   else
16279     return (type_dependent_expression_p (arg)
16280             || value_dependent_expression_p (arg));
16281 }
16282
16283 /* Returns true if ARGS (a collection of template arguments) contains
16284    any types that require structural equality testing.  */
16285
16286 bool
16287 any_template_arguments_need_structural_equality_p (tree args)
16288 {
16289   int i;
16290   int j;
16291
16292   if (!args)
16293     return false;
16294   if (args == error_mark_node)
16295     return true;
16296
16297   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16298     {
16299       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16300       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16301         {
16302           tree arg = TREE_VEC_ELT (level, j);
16303           tree packed_args = NULL_TREE;
16304           int k, len = 1;
16305
16306           if (ARGUMENT_PACK_P (arg))
16307             {
16308               /* Look inside the argument pack.  */
16309               packed_args = ARGUMENT_PACK_ARGS (arg);
16310               len = TREE_VEC_LENGTH (packed_args);
16311             }
16312
16313           for (k = 0; k < len; ++k)
16314             {
16315               if (packed_args)
16316                 arg = TREE_VEC_ELT (packed_args, k);
16317
16318               if (error_operand_p (arg))
16319                 return true;
16320               else if (TREE_CODE (arg) == TEMPLATE_DECL
16321                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16322                 continue;
16323               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16324                 return true;
16325               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16326                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16327                 return true;
16328             }
16329         }
16330     }
16331
16332   return false;
16333 }
16334
16335 /* Returns true if ARGS (a collection of template arguments) contains
16336    any dependent arguments.  */
16337
16338 bool
16339 any_dependent_template_arguments_p (const_tree args)
16340 {
16341   int i;
16342   int j;
16343
16344   if (!args)
16345     return false;
16346   if (args == error_mark_node)
16347     return true;
16348
16349   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16350     {
16351       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16352       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16353         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16354           return true;
16355     }
16356
16357   return false;
16358 }
16359
16360 /* Returns TRUE if the template TMPL is dependent.  */
16361
16362 bool
16363 dependent_template_p (tree tmpl)
16364 {
16365   if (TREE_CODE (tmpl) == OVERLOAD)
16366     {
16367       while (tmpl)
16368         {
16369           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16370             return true;
16371           tmpl = OVL_CHAIN (tmpl);
16372         }
16373       return false;
16374     }
16375
16376   /* Template template parameters are dependent.  */
16377   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16378       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16379     return true;
16380   /* So are names that have not been looked up.  */
16381   if (TREE_CODE (tmpl) == SCOPE_REF
16382       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16383     return true;
16384   /* So are member templates of dependent classes.  */
16385   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16386     return dependent_type_p (DECL_CONTEXT (tmpl));
16387   return false;
16388 }
16389
16390 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16391
16392 bool
16393 dependent_template_id_p (tree tmpl, tree args)
16394 {
16395   return (dependent_template_p (tmpl)
16396           || any_dependent_template_arguments_p (args));
16397 }
16398
16399 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16400    is dependent.  */
16401
16402 bool
16403 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16404 {
16405   int i;
16406
16407   if (!processing_template_decl)
16408     return false;
16409
16410   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16411     {
16412       tree decl = TREE_VEC_ELT (declv, i);
16413       tree init = TREE_VEC_ELT (initv, i);
16414       tree cond = TREE_VEC_ELT (condv, i);
16415       tree incr = TREE_VEC_ELT (incrv, i);
16416
16417       if (type_dependent_expression_p (decl))
16418         return true;
16419
16420       if (init && type_dependent_expression_p (init))
16421         return true;
16422
16423       if (type_dependent_expression_p (cond))
16424         return true;
16425
16426       if (COMPARISON_CLASS_P (cond)
16427           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16428               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16429         return true;
16430
16431       if (TREE_CODE (incr) == MODOP_EXPR)
16432         {
16433           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16434               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16435             return true;
16436         }
16437       else if (type_dependent_expression_p (incr))
16438         return true;
16439       else if (TREE_CODE (incr) == MODIFY_EXPR)
16440         {
16441           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16442             return true;
16443           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16444             {
16445               tree t = TREE_OPERAND (incr, 1);
16446               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16447                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16448                 return true;
16449             }
16450         }
16451     }
16452
16453   return false;
16454 }
16455
16456 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16457    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16458    no such TYPE can be found.  Note that this function peers inside
16459    uninstantiated templates and therefore should be used only in
16460    extremely limited situations.  ONLY_CURRENT_P restricts this
16461    peering to the currently open classes hierarchy (which is required
16462    when comparing types).  */
16463
16464 tree
16465 resolve_typename_type (tree type, bool only_current_p)
16466 {
16467   tree scope;
16468   tree name;
16469   tree decl;
16470   int quals;
16471   tree pushed_scope;
16472   tree result;
16473
16474   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16475
16476   scope = TYPE_CONTEXT (type);
16477   name = TYPE_IDENTIFIER (type);
16478
16479   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16480      it first before we can figure out what NAME refers to.  */
16481   if (TREE_CODE (scope) == TYPENAME_TYPE)
16482     scope = resolve_typename_type (scope, only_current_p);
16483   /* If we don't know what SCOPE refers to, then we cannot resolve the
16484      TYPENAME_TYPE.  */
16485   if (TREE_CODE (scope) == TYPENAME_TYPE)
16486     return type;
16487   /* If the SCOPE is a template type parameter, we have no way of
16488      resolving the name.  */
16489   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16490     return type;
16491   /* If the SCOPE is not the current instantiation, there's no reason
16492      to look inside it.  */
16493   if (only_current_p && !currently_open_class (scope))
16494     return type;
16495   /* If SCOPE isn't the template itself, it will not have a valid
16496      TYPE_FIELDS list.  */
16497   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16498     /* scope is either the template itself or a compatible instantiation
16499        like X<T>, so look up the name in the original template.  */
16500     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16501   else
16502     /* scope is a partial instantiation, so we can't do the lookup or we
16503        will lose the template arguments.  */
16504     return type;
16505   /* Enter the SCOPE so that name lookup will be resolved as if we
16506      were in the class definition.  In particular, SCOPE will no
16507      longer be considered a dependent type.  */
16508   pushed_scope = push_scope (scope);
16509   /* Look up the declaration.  */
16510   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16511
16512   result = NULL_TREE;
16513   
16514   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16515      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16516   if (!decl)
16517     /*nop*/;
16518   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16519            && TREE_CODE (decl) == TYPE_DECL)
16520     {
16521       result = TREE_TYPE (decl);
16522       if (result == error_mark_node)
16523         result = NULL_TREE;
16524     }
16525   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16526            && DECL_CLASS_TEMPLATE_P (decl))
16527     {
16528       tree tmpl;
16529       tree args;
16530       /* Obtain the template and the arguments.  */
16531       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16532       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16533       /* Instantiate the template.  */
16534       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16535                                       /*entering_scope=*/0,
16536                                       tf_error | tf_user);
16537       if (result == error_mark_node)
16538         result = NULL_TREE;
16539     }
16540   
16541   /* Leave the SCOPE.  */
16542   if (pushed_scope)
16543     pop_scope (pushed_scope);
16544
16545   /* If we failed to resolve it, return the original typename.  */
16546   if (!result)
16547     return type;
16548   
16549   /* If lookup found a typename type, resolve that too.  */
16550   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16551     {
16552       /* Ill-formed programs can cause infinite recursion here, so we
16553          must catch that.  */
16554       TYPENAME_IS_RESOLVING_P (type) = 1;
16555       result = resolve_typename_type (result, only_current_p);
16556       TYPENAME_IS_RESOLVING_P (type) = 0;
16557     }
16558   
16559   /* Qualify the resulting type.  */
16560   quals = cp_type_quals (type);
16561   if (quals)
16562     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16563
16564   return result;
16565 }
16566
16567 /* EXPR is an expression which is not type-dependent.  Return a proxy
16568    for EXPR that can be used to compute the types of larger
16569    expressions containing EXPR.  */
16570
16571 tree
16572 build_non_dependent_expr (tree expr)
16573 {
16574   tree inner_expr;
16575
16576   /* Preserve null pointer constants so that the type of things like
16577      "p == 0" where "p" is a pointer can be determined.  */
16578   if (null_ptr_cst_p (expr))
16579     return expr;
16580   /* Preserve OVERLOADs; the functions must be available to resolve
16581      types.  */
16582   inner_expr = expr;
16583   if (TREE_CODE (inner_expr) == STMT_EXPR)
16584     inner_expr = stmt_expr_value_expr (inner_expr);
16585   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16586     inner_expr = TREE_OPERAND (inner_expr, 0);
16587   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16588     inner_expr = TREE_OPERAND (inner_expr, 1);
16589   if (is_overloaded_fn (inner_expr)
16590       || TREE_CODE (inner_expr) == OFFSET_REF)
16591     return expr;
16592   /* There is no need to return a proxy for a variable.  */
16593   if (TREE_CODE (expr) == VAR_DECL)
16594     return expr;
16595   /* Preserve string constants; conversions from string constants to
16596      "char *" are allowed, even though normally a "const char *"
16597      cannot be used to initialize a "char *".  */
16598   if (TREE_CODE (expr) == STRING_CST)
16599     return expr;
16600   /* Preserve arithmetic constants, as an optimization -- there is no
16601      reason to create a new node.  */
16602   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16603     return expr;
16604   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16605      There is at least one place where we want to know that a
16606      particular expression is a throw-expression: when checking a ?:
16607      expression, there are special rules if the second or third
16608      argument is a throw-expression.  */
16609   if (TREE_CODE (expr) == THROW_EXPR)
16610     return expr;
16611
16612   if (TREE_CODE (expr) == COND_EXPR)
16613     return build3 (COND_EXPR,
16614                    TREE_TYPE (expr),
16615                    TREE_OPERAND (expr, 0),
16616                    (TREE_OPERAND (expr, 1)
16617                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16618                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16619                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16620   if (TREE_CODE (expr) == COMPOUND_EXPR
16621       && !COMPOUND_EXPR_OVERLOADED (expr))
16622     return build2 (COMPOUND_EXPR,
16623                    TREE_TYPE (expr),
16624                    TREE_OPERAND (expr, 0),
16625                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16626
16627   /* If the type is unknown, it can't really be non-dependent */
16628   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16629
16630   /* Otherwise, build a NON_DEPENDENT_EXPR.
16631
16632      REFERENCE_TYPEs are not stripped for expressions in templates
16633      because doing so would play havoc with mangling.  Consider, for
16634      example:
16635
16636        template <typename T> void f<T& g>() { g(); }
16637
16638      In the body of "f", the expression for "g" will have
16639      REFERENCE_TYPE, even though the standard says that it should
16640      not.  The reason is that we must preserve the syntactic form of
16641      the expression so that mangling (say) "f<g>" inside the body of
16642      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16643      stripped here.  */
16644   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16645 }
16646
16647 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16648    Return a new TREE_LIST with the various arguments replaced with
16649    equivalent non-dependent expressions.  */
16650
16651 tree
16652 build_non_dependent_args (tree args)
16653 {
16654   tree a;
16655   tree new_args;
16656
16657   new_args = NULL_TREE;
16658   for (a = args; a; a = TREE_CHAIN (a))
16659     new_args = tree_cons (NULL_TREE,
16660                           build_non_dependent_expr (TREE_VALUE (a)),
16661                           new_args);
16662   return nreverse (new_args);
16663 }
16664
16665 #include "gt-cp-pt.h"