OSDN Git Service

c609bd0cc3aaba9792f83737f0a80f524e7a9324
[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                 {
1293                   DECL_DECLARED_INLINE_P (clone)
1294                     = DECL_DECLARED_INLINE_P (fn);
1295                   DECL_INLINE (clone)
1296                     = DECL_INLINE (fn);
1297                 }
1298               check_specialization_namespace (fn);
1299
1300               return fn;
1301             }
1302         }
1303       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1304         {
1305           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1306             /* Dup decl failed, but this is a new definition. Set the
1307                line number so any errors match this new
1308                definition.  */
1309             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1310
1311           return fn;
1312         }
1313     }
1314
1315   /* A specialization must be declared in the same namespace as the
1316      template it is specializing.  */
1317   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1318       && !check_specialization_namespace (tmpl))
1319     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1320
1321   if (!optimize_specialization_lookup_p (tmpl))
1322     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1323       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1324
1325   return spec;
1326 }
1327
1328 /* Unregister the specialization SPEC as a specialization of TMPL.
1329    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1330    if the SPEC was listed as a specialization of TMPL.  */
1331
1332 bool
1333 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1334 {
1335   tree* s;
1336
1337   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1338        *s != NULL_TREE;
1339        s = &TREE_CHAIN (*s))
1340     if (TREE_VALUE (*s) == spec)
1341       {
1342         if (!new_spec)
1343           *s = TREE_CHAIN (*s);
1344         else
1345           TREE_VALUE (*s) = new_spec;
1346         return 1;
1347       }
1348
1349   return 0;
1350 }
1351
1352 /* Compare an entry in the local specializations hash table P1 (which
1353    is really a pointer to a TREE_LIST) with P2 (which is really a
1354    DECL).  */
1355
1356 static int
1357 eq_local_specializations (const void *p1, const void *p2)
1358 {
1359   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1360 }
1361
1362 /* Hash P1, an entry in the local specializations table.  */
1363
1364 static hashval_t
1365 hash_local_specialization (const void* p1)
1366 {
1367   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1368 }
1369
1370 /* Like register_specialization, but for local declarations.  We are
1371    registering SPEC, an instantiation of TMPL.  */
1372
1373 static void
1374 register_local_specialization (tree spec, tree tmpl)
1375 {
1376   void **slot;
1377
1378   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1379                                    htab_hash_pointer (tmpl), INSERT);
1380   *slot = build_tree_list (spec, tmpl);
1381 }
1382
1383 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1384    specialized class.  */
1385
1386 bool
1387 explicit_class_specialization_p (tree type)
1388 {
1389   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1390     return false;
1391   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1392 }
1393
1394 /* Print the list of candidate FNS in an error message.  */
1395
1396 void
1397 print_candidates (tree fns)
1398 {
1399   tree fn;
1400
1401   const char *str = "candidates are:";
1402
1403   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1404     {
1405       tree f;
1406
1407       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1408         error ("%s %+#D", str, OVL_CURRENT (f));
1409       str = "               ";
1410     }
1411 }
1412
1413 /* Returns the template (one of the functions given by TEMPLATE_ID)
1414    which can be specialized to match the indicated DECL with the
1415    explicit template args given in TEMPLATE_ID.  The DECL may be
1416    NULL_TREE if none is available.  In that case, the functions in
1417    TEMPLATE_ID are non-members.
1418
1419    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1420    specialization of a member template.
1421
1422    The TEMPLATE_COUNT is the number of references to qualifying
1423    template classes that appeared in the name of the function. See
1424    check_explicit_specialization for a more accurate description.
1425
1426    TSK indicates what kind of template declaration (if any) is being
1427    declared.  TSK_TEMPLATE indicates that the declaration given by
1428    DECL, though a FUNCTION_DECL, has template parameters, and is
1429    therefore a template function.
1430
1431    The template args (those explicitly specified and those deduced)
1432    are output in a newly created vector *TARGS_OUT.
1433
1434    If it is impossible to determine the result, an error message is
1435    issued.  The error_mark_node is returned to indicate failure.  */
1436
1437 static tree
1438 determine_specialization (tree template_id,
1439                           tree decl,
1440                           tree* targs_out,
1441                           int need_member_template,
1442                           int template_count,
1443                           tmpl_spec_kind tsk)
1444 {
1445   tree fns;
1446   tree targs;
1447   tree explicit_targs;
1448   tree candidates = NULL_TREE;
1449   /* A TREE_LIST of templates of which DECL may be a specialization.
1450      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1451      corresponding TREE_PURPOSE is the set of template arguments that,
1452      when used to instantiate the template, would produce a function
1453      with the signature of DECL.  */
1454   tree templates = NULL_TREE;
1455   int header_count;
1456   struct cp_binding_level *b;
1457
1458   *targs_out = NULL_TREE;
1459
1460   if (template_id == error_mark_node || decl == error_mark_node)
1461     return error_mark_node;
1462
1463   fns = TREE_OPERAND (template_id, 0);
1464   explicit_targs = TREE_OPERAND (template_id, 1);
1465
1466   if (fns == error_mark_node)
1467     return error_mark_node;
1468
1469   /* Check for baselinks.  */
1470   if (BASELINK_P (fns))
1471     fns = BASELINK_FUNCTIONS (fns);
1472
1473   if (!is_overloaded_fn (fns))
1474     {
1475       error ("%qD is not a function template", fns);
1476       return error_mark_node;
1477     }
1478
1479   /* Count the number of template headers specified for this
1480      specialization.  */
1481   header_count = 0;
1482   for (b = current_binding_level;
1483        b->kind == sk_template_parms;
1484        b = b->level_chain)
1485     ++header_count;
1486
1487   for (; fns; fns = OVL_NEXT (fns))
1488     {
1489       tree fn = OVL_CURRENT (fns);
1490
1491       if (TREE_CODE (fn) == TEMPLATE_DECL)
1492         {
1493           tree decl_arg_types;
1494           tree fn_arg_types;
1495
1496           /* In case of explicit specialization, we need to check if
1497              the number of template headers appearing in the specialization
1498              is correct. This is usually done in check_explicit_specialization,
1499              but the check done there cannot be exhaustive when specializing
1500              member functions. Consider the following code:
1501
1502              template <> void A<int>::f(int);
1503              template <> template <> void A<int>::f(int);
1504
1505              Assuming that A<int> is not itself an explicit specialization
1506              already, the first line specializes "f" which is a non-template
1507              member function, whilst the second line specializes "f" which
1508              is a template member function. So both lines are syntactically
1509              correct, and check_explicit_specialization does not reject
1510              them.
1511
1512              Here, we can do better, as we are matching the specialization
1513              against the declarations. We count the number of template
1514              headers, and we check if they match TEMPLATE_COUNT + 1
1515              (TEMPLATE_COUNT is the number of qualifying template classes,
1516              plus there must be another header for the member template
1517              itself).
1518
1519              Notice that if header_count is zero, this is not a
1520              specialization but rather a template instantiation, so there
1521              is no check we can perform here.  */
1522           if (header_count && header_count != template_count + 1)
1523             continue;
1524
1525           /* Check that the number of template arguments at the
1526              innermost level for DECL is the same as for FN.  */
1527           if (current_binding_level->kind == sk_template_parms
1528               && !current_binding_level->explicit_spec_p
1529               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1530                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1531                                       (current_template_parms))))
1532             continue;
1533
1534           /* DECL might be a specialization of FN.  */
1535           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1536           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1537
1538           /* For a non-static member function, we need to make sure
1539              that the const qualification is the same.  Since
1540              get_bindings does not try to merge the "this" parameter,
1541              we must do the comparison explicitly.  */
1542           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1543               && !same_type_p (TREE_VALUE (fn_arg_types),
1544                                TREE_VALUE (decl_arg_types)))
1545             continue;
1546
1547           /* Skip the "this" parameter and, for constructors of
1548              classes with virtual bases, the VTT parameter.  A
1549              full specialization of a constructor will have a VTT
1550              parameter, but a template never will.  */ 
1551           decl_arg_types 
1552             = skip_artificial_parms_for (decl, decl_arg_types);
1553           fn_arg_types 
1554             = skip_artificial_parms_for (fn, fn_arg_types);
1555
1556           /* Check that the number of function parameters matches.
1557              For example,
1558                template <class T> void f(int i = 0);
1559                template <> void f<int>();
1560              The specialization f<int> is invalid but is not caught
1561              by get_bindings below.  */
1562           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1563             continue;
1564
1565           /* Function templates cannot be specializations; there are
1566              no partial specializations of functions.  Therefore, if
1567              the type of DECL does not match FN, there is no
1568              match.  */
1569           if (tsk == tsk_template)
1570             {
1571               if (compparms (fn_arg_types, decl_arg_types))
1572                 candidates = tree_cons (NULL_TREE, fn, candidates);
1573               continue;
1574             }
1575
1576           /* See whether this function might be a specialization of this
1577              template.  */
1578           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1579
1580           if (!targs)
1581             /* We cannot deduce template arguments that when used to
1582                specialize TMPL will produce DECL.  */
1583             continue;
1584
1585           /* Save this template, and the arguments deduced.  */
1586           templates = tree_cons (targs, fn, templates);
1587         }
1588       else if (need_member_template)
1589         /* FN is an ordinary member function, and we need a
1590            specialization of a member template.  */
1591         ;
1592       else if (TREE_CODE (fn) != FUNCTION_DECL)
1593         /* We can get IDENTIFIER_NODEs here in certain erroneous
1594            cases.  */
1595         ;
1596       else if (!DECL_FUNCTION_MEMBER_P (fn))
1597         /* This is just an ordinary non-member function.  Nothing can
1598            be a specialization of that.  */
1599         ;
1600       else if (DECL_ARTIFICIAL (fn))
1601         /* Cannot specialize functions that are created implicitly.  */
1602         ;
1603       else
1604         {
1605           tree decl_arg_types;
1606
1607           /* This is an ordinary member function.  However, since
1608              we're here, we can assume it's enclosing class is a
1609              template class.  For example,
1610
1611                template <typename T> struct S { void f(); };
1612                template <> void S<int>::f() {}
1613
1614              Here, S<int>::f is a non-template, but S<int> is a
1615              template class.  If FN has the same type as DECL, we
1616              might be in business.  */
1617
1618           if (!DECL_TEMPLATE_INFO (fn))
1619             /* Its enclosing class is an explicit specialization
1620                of a template class.  This is not a candidate.  */
1621             continue;
1622
1623           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1624                             TREE_TYPE (TREE_TYPE (fn))))
1625             /* The return types differ.  */
1626             continue;
1627
1628           /* Adjust the type of DECL in case FN is a static member.  */
1629           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1630           if (DECL_STATIC_FUNCTION_P (fn)
1631               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1632             decl_arg_types = TREE_CHAIN (decl_arg_types);
1633
1634           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1635                          decl_arg_types))
1636             /* They match!  */
1637             candidates = tree_cons (NULL_TREE, fn, candidates);
1638         }
1639     }
1640
1641   if (templates && TREE_CHAIN (templates))
1642     {
1643       /* We have:
1644
1645            [temp.expl.spec]
1646
1647            It is possible for a specialization with a given function
1648            signature to be instantiated from more than one function
1649            template.  In such cases, explicit specification of the
1650            template arguments must be used to uniquely identify the
1651            function template specialization being specialized.
1652
1653          Note that here, there's no suggestion that we're supposed to
1654          determine which of the candidate templates is most
1655          specialized.  However, we, also have:
1656
1657            [temp.func.order]
1658
1659            Partial ordering of overloaded function template
1660            declarations is used in the following contexts to select
1661            the function template to which a function template
1662            specialization refers:
1663
1664            -- when an explicit specialization refers to a function
1665               template.
1666
1667          So, we do use the partial ordering rules, at least for now.
1668          This extension can only serve to make invalid programs valid,
1669          so it's safe.  And, there is strong anecdotal evidence that
1670          the committee intended the partial ordering rules to apply;
1671          the EDG front end has that behavior, and John Spicer claims
1672          that the committee simply forgot to delete the wording in
1673          [temp.expl.spec].  */
1674       tree tmpl = most_specialized_instantiation (templates);
1675       if (tmpl != error_mark_node)
1676         {
1677           templates = tmpl;
1678           TREE_CHAIN (templates) = NULL_TREE;
1679         }
1680     }
1681
1682   if (templates == NULL_TREE && candidates == NULL_TREE)
1683     {
1684       error ("template-id %qD for %q+D does not match any template "
1685              "declaration", template_id, decl);
1686       return error_mark_node;
1687     }
1688   else if ((templates && TREE_CHAIN (templates))
1689            || (candidates && TREE_CHAIN (candidates))
1690            || (templates && candidates))
1691     {
1692       error ("ambiguous template specialization %qD for %q+D",
1693              template_id, decl);
1694       chainon (candidates, templates);
1695       print_candidates (candidates);
1696       return error_mark_node;
1697     }
1698
1699   /* We have one, and exactly one, match.  */
1700   if (candidates)
1701     {
1702       tree fn = TREE_VALUE (candidates);
1703       /* DECL is a re-declaration of a template function.  */
1704       if (TREE_CODE (fn) == TEMPLATE_DECL)
1705         return fn;
1706       /* It was a specialization of an ordinary member function in a
1707          template class.  */
1708       *targs_out = copy_node (DECL_TI_ARGS (fn));
1709       return DECL_TI_TEMPLATE (fn);
1710     }
1711
1712   /* It was a specialization of a template.  */
1713   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1714   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1715     {
1716       *targs_out = copy_node (targs);
1717       SET_TMPL_ARGS_LEVEL (*targs_out,
1718                            TMPL_ARGS_DEPTH (*targs_out),
1719                            TREE_PURPOSE (templates));
1720     }
1721   else
1722     *targs_out = TREE_PURPOSE (templates);
1723   return TREE_VALUE (templates);
1724 }
1725
1726 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1727    but with the default argument values filled in from those in the
1728    TMPL_TYPES.  */
1729
1730 static tree
1731 copy_default_args_to_explicit_spec_1 (tree spec_types,
1732                                       tree tmpl_types)
1733 {
1734   tree new_spec_types;
1735
1736   if (!spec_types)
1737     return NULL_TREE;
1738
1739   if (spec_types == void_list_node)
1740     return void_list_node;
1741
1742   /* Substitute into the rest of the list.  */
1743   new_spec_types =
1744     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1745                                           TREE_CHAIN (tmpl_types));
1746
1747   /* Add the default argument for this parameter.  */
1748   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1749                          TREE_VALUE (spec_types),
1750                          new_spec_types);
1751 }
1752
1753 /* DECL is an explicit specialization.  Replicate default arguments
1754    from the template it specializes.  (That way, code like:
1755
1756      template <class T> void f(T = 3);
1757      template <> void f(double);
1758      void g () { f (); }
1759
1760    works, as required.)  An alternative approach would be to look up
1761    the correct default arguments at the call-site, but this approach
1762    is consistent with how implicit instantiations are handled.  */
1763
1764 static void
1765 copy_default_args_to_explicit_spec (tree decl)
1766 {
1767   tree tmpl;
1768   tree spec_types;
1769   tree tmpl_types;
1770   tree new_spec_types;
1771   tree old_type;
1772   tree new_type;
1773   tree t;
1774   tree object_type = NULL_TREE;
1775   tree in_charge = NULL_TREE;
1776   tree vtt = NULL_TREE;
1777
1778   /* See if there's anything we need to do.  */
1779   tmpl = DECL_TI_TEMPLATE (decl);
1780   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1781   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1782     if (TREE_PURPOSE (t))
1783       break;
1784   if (!t)
1785     return;
1786
1787   old_type = TREE_TYPE (decl);
1788   spec_types = TYPE_ARG_TYPES (old_type);
1789
1790   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1791     {
1792       /* Remove the this pointer, but remember the object's type for
1793          CV quals.  */
1794       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1795       spec_types = TREE_CHAIN (spec_types);
1796       tmpl_types = TREE_CHAIN (tmpl_types);
1797
1798       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1799         {
1800           /* DECL may contain more parameters than TMPL due to the extra
1801              in-charge parameter in constructors and destructors.  */
1802           in_charge = spec_types;
1803           spec_types = TREE_CHAIN (spec_types);
1804         }
1805       if (DECL_HAS_VTT_PARM_P (decl))
1806         {
1807           vtt = spec_types;
1808           spec_types = TREE_CHAIN (spec_types);
1809         }
1810     }
1811
1812   /* Compute the merged default arguments.  */
1813   new_spec_types =
1814     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1815
1816   /* Compute the new FUNCTION_TYPE.  */
1817   if (object_type)
1818     {
1819       if (vtt)
1820         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1821                                          TREE_VALUE (vtt),
1822                                          new_spec_types);
1823
1824       if (in_charge)
1825         /* Put the in-charge parameter back.  */
1826         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1827                                          TREE_VALUE (in_charge),
1828                                          new_spec_types);
1829
1830       new_type = build_method_type_directly (object_type,
1831                                              TREE_TYPE (old_type),
1832                                              new_spec_types);
1833     }
1834   else
1835     new_type = build_function_type (TREE_TYPE (old_type),
1836                                     new_spec_types);
1837   new_type = cp_build_type_attribute_variant (new_type,
1838                                               TYPE_ATTRIBUTES (old_type));
1839   new_type = build_exception_variant (new_type,
1840                                       TYPE_RAISES_EXCEPTIONS (old_type));
1841   TREE_TYPE (decl) = new_type;
1842 }
1843
1844 /* Check to see if the function just declared, as indicated in
1845    DECLARATOR, and in DECL, is a specialization of a function
1846    template.  We may also discover that the declaration is an explicit
1847    instantiation at this point.
1848
1849    Returns DECL, or an equivalent declaration that should be used
1850    instead if all goes well.  Issues an error message if something is
1851    amiss.  Returns error_mark_node if the error is not easily
1852    recoverable.
1853
1854    FLAGS is a bitmask consisting of the following flags:
1855
1856    2: The function has a definition.
1857    4: The function is a friend.
1858
1859    The TEMPLATE_COUNT is the number of references to qualifying
1860    template classes that appeared in the name of the function.  For
1861    example, in
1862
1863      template <class T> struct S { void f(); };
1864      void S<int>::f();
1865
1866    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1867    classes are not counted in the TEMPLATE_COUNT, so that in
1868
1869      template <class T> struct S {};
1870      template <> struct S<int> { void f(); }
1871      template <> void S<int>::f();
1872
1873    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1874    invalid; there should be no template <>.)
1875
1876    If the function is a specialization, it is marked as such via
1877    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1878    is set up correctly, and it is added to the list of specializations
1879    for that template.  */
1880
1881 tree
1882 check_explicit_specialization (tree declarator,
1883                                tree decl,
1884                                int template_count,
1885                                int flags)
1886 {
1887   int have_def = flags & 2;
1888   int is_friend = flags & 4;
1889   int specialization = 0;
1890   int explicit_instantiation = 0;
1891   int member_specialization = 0;
1892   tree ctype = DECL_CLASS_CONTEXT (decl);
1893   tree dname = DECL_NAME (decl);
1894   tmpl_spec_kind tsk;
1895
1896   if (is_friend)
1897     {
1898       if (!processing_specialization)
1899         tsk = tsk_none;
1900       else
1901         tsk = tsk_excessive_parms;
1902     }
1903   else
1904     tsk = current_tmpl_spec_kind (template_count);
1905
1906   switch (tsk)
1907     {
1908     case tsk_none:
1909       if (processing_specialization)
1910         {
1911           specialization = 1;
1912           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1913         }
1914       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1915         {
1916           if (is_friend)
1917             /* This could be something like:
1918
1919                template <class T> void f(T);
1920                class S { friend void f<>(int); }  */
1921             specialization = 1;
1922           else
1923             {
1924               /* This case handles bogus declarations like template <>
1925                  template <class T> void f<int>(); */
1926
1927               error ("template-id %qD in declaration of primary template",
1928                      declarator);
1929               return decl;
1930             }
1931         }
1932       break;
1933
1934     case tsk_invalid_member_spec:
1935       /* The error has already been reported in
1936          check_specialization_scope.  */
1937       return error_mark_node;
1938
1939     case tsk_invalid_expl_inst:
1940       error ("template parameter list used in explicit instantiation");
1941
1942       /* Fall through.  */
1943
1944     case tsk_expl_inst:
1945       if (have_def)
1946         error ("definition provided for explicit instantiation");
1947
1948       explicit_instantiation = 1;
1949       break;
1950
1951     case tsk_excessive_parms:
1952     case tsk_insufficient_parms:
1953       if (tsk == tsk_excessive_parms)
1954         error ("too many template parameter lists in declaration of %qD",
1955                decl);
1956       else if (template_header_count)
1957         error("too few template parameter lists in declaration of %qD", decl);
1958       else
1959         error("explicit specialization of %qD must be introduced by "
1960               "%<template <>%>", decl);
1961
1962       /* Fall through.  */
1963     case tsk_expl_spec:
1964       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1965       if (ctype)
1966         member_specialization = 1;
1967       else
1968         specialization = 1;
1969       break;
1970
1971     case tsk_template:
1972       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1973         {
1974           /* This case handles bogus declarations like template <>
1975              template <class T> void f<int>(); */
1976
1977           if (uses_template_parms (declarator))
1978             error ("function template partial specialization %qD "
1979                    "is not allowed", declarator);
1980           else
1981             error ("template-id %qD in declaration of primary template",
1982                    declarator);
1983           return decl;
1984         }
1985
1986       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1987         /* This is a specialization of a member template, without
1988            specialization the containing class.  Something like:
1989
1990              template <class T> struct S {
1991                template <class U> void f (U);
1992              };
1993              template <> template <class U> void S<int>::f(U) {}
1994
1995            That's a specialization -- but of the entire template.  */
1996         specialization = 1;
1997       break;
1998
1999     default:
2000       gcc_unreachable ();
2001     }
2002
2003   if (specialization || member_specialization)
2004     {
2005       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2006       for (; t; t = TREE_CHAIN (t))
2007         if (TREE_PURPOSE (t))
2008           {
2009             permerror
2010               ("default argument specified in explicit specialization");
2011             break;
2012           }
2013     }
2014
2015   if (specialization || member_specialization || explicit_instantiation)
2016     {
2017       tree tmpl = NULL_TREE;
2018       tree targs = NULL_TREE;
2019
2020       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2021       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2022         {
2023           tree fns;
2024
2025           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2026           if (ctype)
2027             fns = dname;
2028           else
2029             {
2030               /* If there is no class context, the explicit instantiation
2031                  must be at namespace scope.  */
2032               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2033
2034               /* Find the namespace binding, using the declaration
2035                  context.  */
2036               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2037                                            false, true);
2038               if (fns == error_mark_node || !is_overloaded_fn (fns))
2039                 {
2040                   error ("%qD is not a template function", dname);
2041                   fns = error_mark_node;
2042                 }
2043               else
2044                 {
2045                   tree fn = OVL_CURRENT (fns);
2046                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2047                                                 CP_DECL_CONTEXT (fn)))
2048                     error ("%qD is not declared in %qD",
2049                            decl, current_namespace);
2050                 }
2051             }
2052
2053           declarator = lookup_template_function (fns, NULL_TREE);
2054         }
2055
2056       if (declarator == error_mark_node)
2057         return error_mark_node;
2058
2059       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2060         {
2061           if (!explicit_instantiation)
2062             /* A specialization in class scope.  This is invalid,
2063                but the error will already have been flagged by
2064                check_specialization_scope.  */
2065             return error_mark_node;
2066           else
2067             {
2068               /* It's not valid to write an explicit instantiation in
2069                  class scope, e.g.:
2070
2071                    class C { template void f(); }
2072
2073                    This case is caught by the parser.  However, on
2074                    something like:
2075
2076                    template class C { void f(); };
2077
2078                    (which is invalid) we can get here.  The error will be
2079                    issued later.  */
2080               ;
2081             }
2082
2083           return decl;
2084         }
2085       else if (ctype != NULL_TREE
2086                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2087                    IDENTIFIER_NODE))
2088         {
2089           /* Find the list of functions in ctype that have the same
2090              name as the declared function.  */
2091           tree name = TREE_OPERAND (declarator, 0);
2092           tree fns = NULL_TREE;
2093           int idx;
2094
2095           if (constructor_name_p (name, ctype))
2096             {
2097               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2098
2099               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2100                   : !CLASSTYPE_DESTRUCTORS (ctype))
2101                 {
2102                   /* From [temp.expl.spec]:
2103
2104                      If such an explicit specialization for the member
2105                      of a class template names an implicitly-declared
2106                      special member function (clause _special_), the
2107                      program is ill-formed.
2108
2109                      Similar language is found in [temp.explicit].  */
2110                   error ("specialization of implicitly-declared special member function");
2111                   return error_mark_node;
2112                 }
2113
2114               name = is_constructor ? ctor_identifier : dtor_identifier;
2115             }
2116
2117           if (!DECL_CONV_FN_P (decl))
2118             {
2119               idx = lookup_fnfields_1 (ctype, name);
2120               if (idx >= 0)
2121                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2122             }
2123           else
2124             {
2125               VEC(tree,gc) *methods;
2126               tree ovl;
2127
2128               /* For a type-conversion operator, we cannot do a
2129                  name-based lookup.  We might be looking for `operator
2130                  int' which will be a specialization of `operator T'.
2131                  So, we find *all* the conversion operators, and then
2132                  select from them.  */
2133               fns = NULL_TREE;
2134
2135               methods = CLASSTYPE_METHOD_VEC (ctype);
2136               if (methods)
2137                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2138                      VEC_iterate (tree, methods, idx, ovl);
2139                      ++idx)
2140                   {
2141                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2142                       /* There are no more conversion functions.  */
2143                       break;
2144
2145                     /* Glue all these conversion functions together
2146                        with those we already have.  */
2147                     for (; ovl; ovl = OVL_NEXT (ovl))
2148                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2149                   }
2150             }
2151
2152           if (fns == NULL_TREE)
2153             {
2154               error ("no member function %qD declared in %qT", name, ctype);
2155               return error_mark_node;
2156             }
2157           else
2158             TREE_OPERAND (declarator, 0) = fns;
2159         }
2160
2161       /* Figure out what exactly is being specialized at this point.
2162          Note that for an explicit instantiation, even one for a
2163          member function, we cannot tell apriori whether the
2164          instantiation is for a member template, or just a member
2165          function of a template class.  Even if a member template is
2166          being instantiated, the member template arguments may be
2167          elided if they can be deduced from the rest of the
2168          declaration.  */
2169       tmpl = determine_specialization (declarator, decl,
2170                                        &targs,
2171                                        member_specialization,
2172                                        template_count,
2173                                        tsk);
2174
2175       if (!tmpl || tmpl == error_mark_node)
2176         /* We couldn't figure out what this declaration was
2177            specializing.  */
2178         return error_mark_node;
2179       else
2180         {
2181           tree gen_tmpl = most_general_template (tmpl);
2182
2183           if (explicit_instantiation)
2184             {
2185               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2186                  is done by do_decl_instantiation later.  */
2187
2188               int arg_depth = TMPL_ARGS_DEPTH (targs);
2189               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2190
2191               if (arg_depth > parm_depth)
2192                 {
2193                   /* If TMPL is not the most general template (for
2194                      example, if TMPL is a friend template that is
2195                      injected into namespace scope), then there will
2196                      be too many levels of TARGS.  Remove some of them
2197                      here.  */
2198                   int i;
2199                   tree new_targs;
2200
2201                   new_targs = make_tree_vec (parm_depth);
2202                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2203                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2204                       = TREE_VEC_ELT (targs, i);
2205                   targs = new_targs;
2206                 }
2207
2208               return instantiate_template (tmpl, targs, tf_error);
2209             }
2210
2211           /* If we thought that the DECL was a member function, but it
2212              turns out to be specializing a static member function,
2213              make DECL a static member function as well.  */
2214           if (DECL_STATIC_FUNCTION_P (tmpl)
2215               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2216             revert_static_member_fn (decl);
2217
2218           /* If this is a specialization of a member template of a
2219              template class, we want to return the TEMPLATE_DECL, not
2220              the specialization of it.  */
2221           if (tsk == tsk_template)
2222             {
2223               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2224               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2225               if (have_def)
2226                 {
2227                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2228                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2229                     = DECL_SOURCE_LOCATION (decl);
2230                   /* We want to use the argument list specified in the
2231                      definition, not in the original declaration.  */
2232                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2233                     = DECL_ARGUMENTS (decl);
2234                 }
2235               return tmpl;
2236             }
2237
2238           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2239           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2240
2241           /* Inherit default function arguments from the template
2242              DECL is specializing.  */
2243           copy_default_args_to_explicit_spec (decl);
2244
2245           /* This specialization has the same protection as the
2246              template it specializes.  */
2247           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2248           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2249
2250           /* 7.1.1-1 [dcl.stc]
2251
2252              A storage-class-specifier shall not be specified in an
2253              explicit specialization...
2254
2255              The parser rejects these, so unless action is taken here,
2256              explicit function specializations will always appear with
2257              global linkage.
2258
2259              The action recommended by the C++ CWG in response to C++
2260              defect report 605 is to make the storage class and linkage
2261              of the explicit specialization match the templated function:
2262
2263              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2264            */
2265           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2266             {
2267               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2268               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2269
2270               /* This specialization has the same linkage and visibility as
2271                  the function template it specializes.  */
2272               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2273               if (! TREE_PUBLIC (decl))
2274                 {
2275                   DECL_INTERFACE_KNOWN (decl) = 1;
2276                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2277                 }
2278               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2279               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2280                 {
2281                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2282                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2283                 }
2284             }
2285
2286           /* If DECL is a friend declaration, declared using an
2287              unqualified name, the namespace associated with DECL may
2288              have been set incorrectly.  For example, in:
2289
2290                template <typename T> void f(T);
2291                namespace N {
2292                  struct S { friend void f<int>(int); }
2293                }
2294
2295              we will have set the DECL_CONTEXT for the friend
2296              declaration to N, rather than to the global namespace.  */
2297           if (DECL_NAMESPACE_SCOPE_P (decl))
2298             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2299
2300           if (is_friend && !have_def)
2301             /* This is not really a declaration of a specialization.
2302                It's just the name of an instantiation.  But, it's not
2303                a request for an instantiation, either.  */
2304             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2305           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2306             /* This is indeed a specialization.  In case of constructors
2307                and destructors, we need in-charge and not-in-charge
2308                versions in V3 ABI.  */
2309             clone_function_decl (decl, /*update_method_vec_p=*/0);
2310
2311           /* Register this specialization so that we can find it
2312              again.  */
2313           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2314         }
2315     }
2316
2317   return decl;
2318 }
2319
2320 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2321    parameters.  These are represented in the same format used for
2322    DECL_TEMPLATE_PARMS.  */
2323
2324 int
2325 comp_template_parms (const_tree parms1, const_tree parms2)
2326 {
2327   const_tree p1;
2328   const_tree p2;
2329
2330   if (parms1 == parms2)
2331     return 1;
2332
2333   for (p1 = parms1, p2 = parms2;
2334        p1 != NULL_TREE && p2 != NULL_TREE;
2335        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2336     {
2337       tree t1 = TREE_VALUE (p1);
2338       tree t2 = TREE_VALUE (p2);
2339       int i;
2340
2341       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2342       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2343
2344       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2345         return 0;
2346
2347       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2348         {
2349           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2350           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2351
2352           /* If either of the template parameters are invalid, assume
2353              they match for the sake of error recovery. */
2354           if (parm1 == error_mark_node || parm2 == error_mark_node)
2355             return 1;
2356
2357           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2358             return 0;
2359
2360           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2361               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2362                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2363             continue;
2364           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2365             return 0;
2366         }
2367     }
2368
2369   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2370     /* One set of parameters has more parameters lists than the
2371        other.  */
2372     return 0;
2373
2374   return 1;
2375 }
2376
2377 /* Determine whether PARM is a parameter pack.  */
2378 bool 
2379 template_parameter_pack_p (const_tree parm)
2380 {
2381   /* Determine if we have a non-type template parameter pack.  */
2382   if (TREE_CODE (parm) == PARM_DECL)
2383     return (DECL_TEMPLATE_PARM_P (parm) 
2384             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2385
2386   /* If this is a list of template parameters, we could get a
2387      TYPE_DECL or a TEMPLATE_DECL.  */ 
2388   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2389     parm = TREE_TYPE (parm);
2390
2391   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2392            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2393           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2394 }
2395
2396 /* Determine whether ARGS describes a variadic template args list,
2397    i.e., one that is terminated by a template argument pack.  */
2398 static bool 
2399 template_args_variadic_p (tree args)
2400 {
2401   int nargs;
2402   tree last_parm;
2403
2404   if (args == NULL_TREE)
2405     return false;
2406
2407   args = INNERMOST_TEMPLATE_ARGS (args);
2408   nargs = TREE_VEC_LENGTH (args);
2409
2410   if (nargs == 0)
2411     return false;
2412
2413   last_parm = TREE_VEC_ELT (args, nargs - 1);
2414
2415   return ARGUMENT_PACK_P (last_parm);
2416 }
2417
2418 /* Generate a new name for the parameter pack name NAME (an
2419    IDENTIFIER_NODE) that incorporates its */
2420 static tree
2421 make_ith_pack_parameter_name (tree name, int i)
2422 {
2423   /* Munge the name to include the parameter index.  */
2424   char numbuf[128];
2425   char* newname;
2426   
2427   sprintf(numbuf, "%i", i);
2428   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2429   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2430   return get_identifier (newname);
2431 }
2432
2433 /* Structure used to track the progress of find_parameter_packs_r.  */
2434 struct find_parameter_pack_data 
2435 {
2436   /* TREE_LIST that will contain all of the parameter packs found by
2437      the traversal.  */
2438   tree* parameter_packs;
2439
2440   /* Set of AST nodes that have been visited by the traversal.  */
2441   struct pointer_set_t *visited;
2442 };
2443
2444 /* Identifies all of the argument packs that occur in a template
2445    argument and appends them to the TREE_LIST inside DATA, which is a
2446    find_parameter_pack_data structure. This is a subroutine of
2447    make_pack_expansion and uses_parameter_packs.  */
2448 static tree
2449 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2450 {
2451   tree t = *tp;
2452   struct find_parameter_pack_data* ppd = 
2453     (struct find_parameter_pack_data*)data;
2454   bool parameter_pack_p = false;
2455
2456   /* Identify whether this is a parameter pack or not.  */
2457   switch (TREE_CODE (t))
2458     {
2459     case TEMPLATE_PARM_INDEX:
2460       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2461         parameter_pack_p = true;
2462       break;
2463
2464     case TEMPLATE_TYPE_PARM:
2465     case TEMPLATE_TEMPLATE_PARM:
2466       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2467         parameter_pack_p = true;
2468       break;
2469
2470     case PARM_DECL:
2471       if (FUNCTION_PARAMETER_PACK_P (t))
2472         {
2473           /* We don't want to walk into the type of a PARM_DECL,
2474              because we don't want to see the type parameter pack.  */
2475           *walk_subtrees = 0;
2476           parameter_pack_p = true;
2477         }
2478       break;
2479
2480     default:
2481       /* Not a parameter pack.  */
2482       break;
2483     }
2484
2485   if (parameter_pack_p)
2486     {
2487       /* Add this parameter pack to the list.  */
2488       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2489     }
2490
2491   if (TYPE_P (t))
2492     cp_walk_tree (&TYPE_CONTEXT (t), 
2493                   &find_parameter_packs_r, ppd, ppd->visited);
2494
2495   /* This switch statement will return immediately if we don't find a
2496      parameter pack.  */
2497   switch (TREE_CODE (t)) 
2498     {
2499     case TEMPLATE_PARM_INDEX:
2500       return NULL_TREE;
2501
2502     case BOUND_TEMPLATE_TEMPLATE_PARM:
2503       /* Check the template itself.  */
2504       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2505                     &find_parameter_packs_r, ppd, ppd->visited);
2506       /* Check the template arguments.  */
2507       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2508                     ppd->visited);
2509       *walk_subtrees = 0;
2510       return NULL_TREE;
2511
2512     case TEMPLATE_TYPE_PARM:
2513     case TEMPLATE_TEMPLATE_PARM:
2514       return NULL_TREE;
2515
2516     case PARM_DECL:
2517       return NULL_TREE;
2518
2519     case RECORD_TYPE:
2520       if (TYPE_PTRMEMFUNC_P (t))
2521         return NULL_TREE;
2522       /* Fall through.  */
2523
2524     case UNION_TYPE:
2525     case ENUMERAL_TYPE:
2526       if (TYPE_TEMPLATE_INFO (t))
2527         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2528                       &find_parameter_packs_r, ppd, ppd->visited);
2529
2530       *walk_subtrees = 0;
2531       return NULL_TREE;
2532
2533     case TEMPLATE_DECL:
2534       cp_walk_tree (&TREE_TYPE (t),
2535                     &find_parameter_packs_r, ppd, ppd->visited);
2536       return NULL_TREE;
2537  
2538     case TYPENAME_TYPE:
2539       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2540                    ppd, ppd->visited);
2541       *walk_subtrees = 0;
2542       return NULL_TREE;
2543       
2544     case TYPE_PACK_EXPANSION:
2545     case EXPR_PACK_EXPANSION:
2546       *walk_subtrees = 0;
2547       return NULL_TREE;
2548
2549     case INTEGER_TYPE:
2550       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2551                     ppd, ppd->visited);
2552       *walk_subtrees = 0;
2553       return NULL_TREE;
2554
2555     case IDENTIFIER_NODE:
2556       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
2557                     ppd->visited);
2558       *walk_subtrees = 0;
2559       return NULL_TREE;
2560
2561     default:
2562       return NULL_TREE;
2563     }
2564
2565   return NULL_TREE;
2566 }
2567
2568 /* Determines if the expression or type T uses any parameter packs.  */
2569 bool
2570 uses_parameter_packs (tree t)
2571 {
2572   tree parameter_packs = NULL_TREE;
2573   struct find_parameter_pack_data ppd;
2574   ppd.parameter_packs = &parameter_packs;
2575   ppd.visited = pointer_set_create ();
2576   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2577   pointer_set_destroy (ppd.visited);
2578   return parameter_packs != NULL_TREE;
2579 }
2580
2581 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2582    representation a base-class initializer into a parameter pack
2583    expansion. If all goes well, the resulting node will be an
2584    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2585    respectively.  */
2586 tree 
2587 make_pack_expansion (tree arg)
2588 {
2589   tree result;
2590   tree parameter_packs = NULL_TREE;
2591   bool for_types = false;
2592   struct find_parameter_pack_data ppd;
2593
2594   if (!arg || arg == error_mark_node)
2595     return arg;
2596
2597   if (TREE_CODE (arg) == TREE_LIST)
2598     {
2599       /* The only time we will see a TREE_LIST here is for a base
2600          class initializer.  In this case, the TREE_PURPOSE will be a
2601          _TYPE node (representing the base class expansion we're
2602          initializing) and the TREE_VALUE will be a TREE_LIST
2603          containing the initialization arguments. 
2604
2605          The resulting expansion looks somewhat different from most
2606          expansions. Rather than returning just one _EXPANSION, we
2607          return a TREE_LIST whose TREE_PURPOSE is a
2608          TYPE_PACK_EXPANSION containing the bases that will be
2609          initialized.  The TREE_VALUE will be identical to the
2610          original TREE_VALUE, which is a list of arguments that will
2611          be passed to each base.  We do not introduce any new pack
2612          expansion nodes into the TREE_VALUE (although it is possible
2613          that some already exist), because the TREE_PURPOSE and
2614          TREE_VALUE all need to be expanded together with the same
2615          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2616          resulting TREE_PURPOSE will mention the parameter packs in
2617          both the bases and the arguments to the bases.  */
2618       tree purpose;
2619       tree value;
2620       tree parameter_packs = NULL_TREE;
2621
2622       /* Determine which parameter packs will be used by the base
2623          class expansion.  */
2624       ppd.visited = pointer_set_create ();
2625       ppd.parameter_packs = &parameter_packs;
2626       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2627                     &ppd, ppd.visited);
2628
2629       if (parameter_packs == NULL_TREE)
2630         {
2631           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2632           pointer_set_destroy (ppd.visited);
2633           return error_mark_node;
2634         }
2635
2636       if (TREE_VALUE (arg) != void_type_node)
2637         {
2638           /* Collect the sets of parameter packs used in each of the
2639              initialization arguments.  */
2640           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2641             {
2642               /* Determine which parameter packs will be expanded in this
2643                  argument.  */
2644               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2645                             &ppd, ppd.visited);
2646             }
2647         }
2648
2649       pointer_set_destroy (ppd.visited);
2650
2651       /* Create the pack expansion type for the base type.  */
2652       purpose = make_node (TYPE_PACK_EXPANSION);
2653       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2654       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2655
2656       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2657          they will rarely be compared to anything.  */
2658       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2659
2660       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2661     }
2662
2663   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2664     for_types = true;
2665
2666   /* Build the PACK_EXPANSION_* node.  */
2667   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2668   SET_PACK_EXPANSION_PATTERN (result, arg);
2669   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2670     {
2671       /* Propagate type and const-expression information.  */
2672       TREE_TYPE (result) = TREE_TYPE (arg);
2673       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2674     }
2675   else
2676     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2677        they will rarely be compared to anything.  */
2678     SET_TYPE_STRUCTURAL_EQUALITY (result);
2679
2680   /* Determine which parameter packs will be expanded.  */
2681   ppd.parameter_packs = &parameter_packs;
2682   ppd.visited = pointer_set_create ();
2683   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2684   pointer_set_destroy (ppd.visited);
2685
2686   /* Make sure we found some parameter packs.  */
2687   if (parameter_packs == NULL_TREE)
2688     {
2689       if (TYPE_P (arg))
2690         error ("expansion pattern %<%T%> contains no argument packs", arg);
2691       else
2692         error ("expansion pattern %<%E%> contains no argument packs", arg);
2693       return error_mark_node;
2694     }
2695   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2696
2697   return result;
2698 }
2699
2700 /* Checks T for any "bare" parameter packs, which have not yet been
2701    expanded, and issues an error if any are found. This operation can
2702    only be done on full expressions or types (e.g., an expression
2703    statement, "if" condition, etc.), because we could have expressions like:
2704
2705      foo(f(g(h(args)))...)
2706
2707    where "args" is a parameter pack. check_for_bare_parameter_packs
2708    should not be called for the subexpressions args, h(args),
2709    g(h(args)), or f(g(h(args))), because we would produce erroneous
2710    error messages. 
2711
2712    Returns TRUE and emits an error if there were bare parameter packs,
2713    returns FALSE otherwise.  */
2714 bool 
2715 check_for_bare_parameter_packs (tree t)
2716 {
2717   tree parameter_packs = NULL_TREE;
2718   struct find_parameter_pack_data ppd;
2719
2720   if (!processing_template_decl || !t || t == error_mark_node)
2721     return false;
2722
2723   if (TREE_CODE (t) == TYPE_DECL)
2724     t = TREE_TYPE (t);
2725
2726   ppd.parameter_packs = &parameter_packs;
2727   ppd.visited = pointer_set_create ();
2728   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2729   pointer_set_destroy (ppd.visited);
2730
2731   if (parameter_packs) 
2732     {
2733       error ("parameter packs not expanded with %<...%>:");
2734       while (parameter_packs)
2735         {
2736           tree pack = TREE_VALUE (parameter_packs);
2737           tree name = NULL_TREE;
2738
2739           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2740               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2741             name = TYPE_NAME (pack);
2742           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2743             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2744           else
2745             name = DECL_NAME (pack);
2746
2747           if (name)
2748             inform ("        %qD", name);
2749           else
2750             inform ("        <anonymous>");
2751
2752           parameter_packs = TREE_CHAIN (parameter_packs);
2753         }
2754
2755       return true;
2756     }
2757
2758   return false;
2759 }
2760
2761 /* Expand any parameter packs that occur in the template arguments in
2762    ARGS.  */
2763 tree
2764 expand_template_argument_pack (tree args)
2765 {
2766   tree result_args = NULL_TREE;
2767   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2768   int num_result_args = -1;
2769
2770   /* First, determine if we need to expand anything, and the number of
2771      slots we'll need.  */
2772   for (in_arg = 0; in_arg < nargs; ++in_arg)
2773     {
2774       tree arg = TREE_VEC_ELT (args, in_arg);
2775       if (ARGUMENT_PACK_P (arg))
2776         {
2777           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2778           if (num_result_args < 0)
2779             num_result_args = in_arg + num_packed;
2780           else
2781             num_result_args += num_packed;
2782         }
2783       else
2784         {
2785           if (num_result_args >= 0)
2786             num_result_args++;
2787         }
2788     }
2789
2790   /* If no expansion is necessary, we're done.  */
2791   if (num_result_args < 0)
2792     return args;
2793
2794   /* Expand arguments.  */
2795   result_args = make_tree_vec (num_result_args);
2796   for (in_arg = 0; in_arg < nargs; ++in_arg)
2797     {
2798       tree arg = TREE_VEC_ELT (args, in_arg);
2799       if (ARGUMENT_PACK_P (arg))
2800         {
2801           tree packed = ARGUMENT_PACK_ARGS (arg);
2802           int i, num_packed = TREE_VEC_LENGTH (packed);
2803           for (i = 0; i < num_packed; ++i, ++out_arg)
2804             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2805         }
2806       else
2807         {
2808           TREE_VEC_ELT (result_args, out_arg) = arg;
2809           ++out_arg;
2810         }
2811     }
2812
2813   return result_args;
2814 }
2815
2816 /* Complain if DECL shadows a template parameter.
2817
2818    [temp.local]: A template-parameter shall not be redeclared within its
2819    scope (including nested scopes).  */
2820
2821 void
2822 check_template_shadow (tree decl)
2823 {
2824   tree olddecl;
2825
2826   /* If we're not in a template, we can't possibly shadow a template
2827      parameter.  */
2828   if (!current_template_parms)
2829     return;
2830
2831   /* Figure out what we're shadowing.  */
2832   if (TREE_CODE (decl) == OVERLOAD)
2833     decl = OVL_CURRENT (decl);
2834   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2835
2836   /* If there's no previous binding for this name, we're not shadowing
2837      anything, let alone a template parameter.  */
2838   if (!olddecl)
2839     return;
2840
2841   /* If we're not shadowing a template parameter, we're done.  Note
2842      that OLDDECL might be an OVERLOAD (or perhaps even an
2843      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2844      node.  */
2845   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2846     return;
2847
2848   /* We check for decl != olddecl to avoid bogus errors for using a
2849      name inside a class.  We check TPFI to avoid duplicate errors for
2850      inline member templates.  */
2851   if (decl == olddecl
2852       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2853     return;
2854
2855   error ("declaration of %q+#D", decl);
2856   error (" shadows template parm %q+#D", olddecl);
2857 }
2858
2859 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2860    ORIG_LEVEL, DECL, and TYPE.  */
2861
2862 static tree
2863 build_template_parm_index (int index,
2864                            int level,
2865                            int orig_level,
2866                            tree decl,
2867                            tree type)
2868 {
2869   tree t = make_node (TEMPLATE_PARM_INDEX);
2870   TEMPLATE_PARM_IDX (t) = index;
2871   TEMPLATE_PARM_LEVEL (t) = level;
2872   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2873   TEMPLATE_PARM_DECL (t) = decl;
2874   TREE_TYPE (t) = type;
2875   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2876   TREE_READONLY (t) = TREE_READONLY (decl);
2877
2878   return t;
2879 }
2880
2881 /* Find the canonical type parameter for the given template type
2882    parameter.  Returns the canonical type parameter, which may be TYPE
2883    if no such parameter existed.  */
2884 static tree
2885 canonical_type_parameter (tree type)
2886 {
2887   tree list;
2888   int idx = TEMPLATE_TYPE_IDX (type);
2889   if (!canonical_template_parms)
2890     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2891
2892   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2893     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2894
2895   list = VEC_index (tree, canonical_template_parms, idx);
2896   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2897     list = TREE_CHAIN (list);
2898
2899   if (list)
2900     return TREE_VALUE (list);
2901   else
2902     {
2903       VEC_replace(tree, canonical_template_parms, idx,
2904                   tree_cons (NULL_TREE, type, 
2905                              VEC_index (tree, canonical_template_parms, idx)));
2906       return type;
2907     }
2908 }
2909
2910 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2911    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2912    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2913    new one is created.  */
2914
2915 static tree
2916 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2917                             tsubst_flags_t complain)
2918 {
2919   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2920       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2921           != TEMPLATE_PARM_LEVEL (index) - levels))
2922     {
2923       tree orig_decl = TEMPLATE_PARM_DECL (index);
2924       tree decl, t;
2925
2926       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2927       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2928       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2929       DECL_ARTIFICIAL (decl) = 1;
2930       SET_DECL_TEMPLATE_PARM_P (decl);
2931
2932       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2933                                      TEMPLATE_PARM_LEVEL (index) - levels,
2934                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2935                                      decl, type);
2936       TEMPLATE_PARM_DESCENDANTS (index) = t;
2937       TEMPLATE_PARM_PARAMETER_PACK (t) 
2938         = TEMPLATE_PARM_PARAMETER_PACK (index);
2939
2940         /* Template template parameters need this.  */
2941       if (TREE_CODE (decl) == TEMPLATE_DECL)
2942         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2943           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2944            args, complain);
2945     }
2946
2947   return TEMPLATE_PARM_DESCENDANTS (index);
2948 }
2949
2950 /* Process information from new template parameter PARM and append it to the
2951    LIST being built.  This new parameter is a non-type parameter iff
2952    IS_NON_TYPE is true. This new parameter is a parameter
2953    pack iff IS_PARAMETER_PACK is true.  */
2954
2955 tree
2956 process_template_parm (tree list, tree parm, bool is_non_type, 
2957                        bool is_parameter_pack)
2958 {
2959   tree decl = 0;
2960   tree defval;
2961   tree err_parm_list;
2962   int idx = 0;
2963
2964   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2965   defval = TREE_PURPOSE (parm);
2966
2967   if (list)
2968     {
2969       tree p = tree_last (list);
2970
2971       if (p && TREE_VALUE (p) != error_mark_node)
2972         {
2973           p = TREE_VALUE (p);
2974           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2975             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2976           else
2977             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2978         }
2979
2980       ++idx;
2981     }
2982   else
2983     idx = 0;
2984
2985   if (is_non_type)
2986     {
2987       parm = TREE_VALUE (parm);
2988
2989       SET_DECL_TEMPLATE_PARM_P (parm);
2990
2991       if (TREE_TYPE (parm) == error_mark_node)
2992         {
2993           err_parm_list = build_tree_list (defval, parm);
2994           TREE_VALUE (err_parm_list) = error_mark_node;
2995            return chainon (list, err_parm_list);
2996         }
2997       else
2998       {
2999         /* [temp.param]
3000
3001            The top-level cv-qualifiers on the template-parameter are
3002            ignored when determining its type.  */
3003         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3004         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3005           {
3006             err_parm_list = build_tree_list (defval, parm);
3007             TREE_VALUE (err_parm_list) = error_mark_node;
3008              return chainon (list, err_parm_list);
3009           }
3010
3011         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3012           {
3013             /* This template parameter is not a parameter pack, but it
3014                should be. Complain about "bare" parameter packs.  */
3015             check_for_bare_parameter_packs (TREE_TYPE (parm));
3016             
3017             /* Recover by calling this a parameter pack.  */
3018             is_parameter_pack = true;
3019           }
3020       }
3021
3022       /* A template parameter is not modifiable.  */
3023       TREE_CONSTANT (parm) = 1;
3024       TREE_READONLY (parm) = 1;
3025       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3026       TREE_CONSTANT (decl) = 1;
3027       TREE_READONLY (decl) = 1;
3028       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3029         = build_template_parm_index (idx, processing_template_decl,
3030                                      processing_template_decl,
3031                                      decl, TREE_TYPE (parm));
3032
3033       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3034         = is_parameter_pack;
3035     }
3036   else
3037     {
3038       tree t;
3039       parm = TREE_VALUE (TREE_VALUE (parm));
3040
3041       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3042         {
3043           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3044           /* This is for distinguishing between real templates and template
3045              template parameters */
3046           TREE_TYPE (parm) = t;
3047           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3048           decl = parm;
3049         }
3050       else
3051         {
3052           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3053           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3054           decl = build_decl (TYPE_DECL, parm, t);
3055         }
3056
3057       TYPE_NAME (t) = decl;
3058       TYPE_STUB_DECL (t) = decl;
3059       parm = decl;
3060       TEMPLATE_TYPE_PARM_INDEX (t)
3061         = build_template_parm_index (idx, processing_template_decl,
3062                                      processing_template_decl,
3063                                      decl, TREE_TYPE (parm));
3064       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3065       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3066     }
3067   DECL_ARTIFICIAL (decl) = 1;
3068   SET_DECL_TEMPLATE_PARM_P (decl);
3069   pushdecl (decl);
3070   parm = build_tree_list (defval, parm);
3071   return chainon (list, parm);
3072 }
3073
3074 /* The end of a template parameter list has been reached.  Process the
3075    tree list into a parameter vector, converting each parameter into a more
3076    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3077    as PARM_DECLs.  */
3078
3079 tree
3080 end_template_parm_list (tree parms)
3081 {
3082   int nparms;
3083   tree parm, next;
3084   tree saved_parmlist = make_tree_vec (list_length (parms));
3085
3086   current_template_parms
3087     = tree_cons (size_int (processing_template_decl),
3088                  saved_parmlist, current_template_parms);
3089
3090   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3091     {
3092       next = TREE_CHAIN (parm);
3093       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3094       TREE_CHAIN (parm) = NULL_TREE;
3095     }
3096
3097   --processing_template_parmlist;
3098
3099   return saved_parmlist;
3100 }
3101
3102 /* end_template_decl is called after a template declaration is seen.  */
3103
3104 void
3105 end_template_decl (void)
3106 {
3107   reset_specialization ();
3108
3109   if (! processing_template_decl)
3110     return;
3111
3112   /* This matches the pushlevel in begin_template_parm_list.  */
3113   finish_scope ();
3114
3115   --processing_template_decl;
3116   current_template_parms = TREE_CHAIN (current_template_parms);
3117 }
3118
3119 /* Within the declaration of a template, return all levels of template
3120    parameters that apply.  The template parameters are represented as
3121    a TREE_VEC, in the form documented in cp-tree.h for template
3122    arguments.  */
3123
3124 static tree
3125 current_template_args (void)
3126 {
3127   tree header;
3128   tree args = NULL_TREE;
3129   int length = TMPL_PARMS_DEPTH (current_template_parms);
3130   int l = length;
3131
3132   /* If there is only one level of template parameters, we do not
3133      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3134      TREE_VEC containing the arguments.  */
3135   if (length > 1)
3136     args = make_tree_vec (length);
3137
3138   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3139     {
3140       tree a = copy_node (TREE_VALUE (header));
3141       int i;
3142
3143       TREE_TYPE (a) = NULL_TREE;
3144       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3145         {
3146           tree t = TREE_VEC_ELT (a, i);
3147
3148           /* T will be a list if we are called from within a
3149              begin/end_template_parm_list pair, but a vector directly
3150              if within a begin/end_member_template_processing pair.  */
3151           if (TREE_CODE (t) == TREE_LIST)
3152             {
3153               t = TREE_VALUE (t);
3154
3155               if (!error_operand_p (t))
3156                 {
3157                   if (TREE_CODE (t) == TYPE_DECL
3158                       || TREE_CODE (t) == TEMPLATE_DECL)
3159                     {
3160                       t = TREE_TYPE (t);
3161                       
3162                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3163                         {
3164                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3165                              with a single element, which expands T.  */
3166                           tree vec = make_tree_vec (1);
3167                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3168                           
3169                           t = make_node (TYPE_ARGUMENT_PACK);
3170                           SET_ARGUMENT_PACK_ARGS (t, vec);
3171                         }
3172                     }
3173                   else
3174                     {
3175                       t = DECL_INITIAL (t);
3176                       
3177                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3178                         {
3179                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3180                              with a single element, which expands T.  */
3181                           tree vec = make_tree_vec (1);
3182                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3183                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3184                           
3185                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3186                           SET_ARGUMENT_PACK_ARGS (t, vec);
3187                           TREE_TYPE (t) = type;
3188                         }
3189                     }
3190                   TREE_VEC_ELT (a, i) = t;
3191                 }
3192             }
3193         }
3194
3195       if (length > 1)
3196         TREE_VEC_ELT (args, --l) = a;
3197       else
3198         args = a;
3199     }
3200
3201   return args;
3202 }
3203
3204 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3205    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3206    a member template.  Used by push_template_decl below.  */
3207
3208 static tree
3209 build_template_decl (tree decl, tree parms, bool member_template_p)
3210 {
3211   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3212   DECL_TEMPLATE_PARMS (tmpl) = parms;
3213   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3214   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3215   if (DECL_LANG_SPECIFIC (decl))
3216     {
3217       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3218       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3219       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3220       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3221       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3222       if (DECL_OVERLOADED_OPERATOR_P (decl))
3223         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3224                                       DECL_OVERLOADED_OPERATOR_P (decl));
3225     }
3226
3227   return tmpl;
3228 }
3229
3230 struct template_parm_data
3231 {
3232   /* The level of the template parameters we are currently
3233      processing.  */
3234   int level;
3235
3236   /* The index of the specialization argument we are currently
3237      processing.  */
3238   int current_arg;
3239
3240   /* An array whose size is the number of template parameters.  The
3241      elements are nonzero if the parameter has been used in any one
3242      of the arguments processed so far.  */
3243   int* parms;
3244
3245   /* An array whose size is the number of template arguments.  The
3246      elements are nonzero if the argument makes use of template
3247      parameters of this level.  */
3248   int* arg_uses_template_parms;
3249 };
3250
3251 /* Subroutine of push_template_decl used to see if each template
3252    parameter in a partial specialization is used in the explicit
3253    argument list.  If T is of the LEVEL given in DATA (which is
3254    treated as a template_parm_data*), then DATA->PARMS is marked
3255    appropriately.  */
3256
3257 static int
3258 mark_template_parm (tree t, void* data)
3259 {
3260   int level;
3261   int idx;
3262   struct template_parm_data* tpd = (struct template_parm_data*) data;
3263
3264   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3265     {
3266       level = TEMPLATE_PARM_LEVEL (t);
3267       idx = TEMPLATE_PARM_IDX (t);
3268     }
3269   else
3270     {
3271       level = TEMPLATE_TYPE_LEVEL (t);
3272       idx = TEMPLATE_TYPE_IDX (t);
3273     }
3274
3275   if (level == tpd->level)
3276     {
3277       tpd->parms[idx] = 1;
3278       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3279     }
3280
3281   /* Return zero so that for_each_template_parm will continue the
3282      traversal of the tree; we want to mark *every* template parm.  */
3283   return 0;
3284 }
3285
3286 /* Process the partial specialization DECL.  */
3287
3288 static tree
3289 process_partial_specialization (tree decl)
3290 {
3291   tree type = TREE_TYPE (decl);
3292   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3293   tree specargs = CLASSTYPE_TI_ARGS (type);
3294   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3295   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3296   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3297   int nargs = TREE_VEC_LENGTH (inner_args);
3298   int ntparms = TREE_VEC_LENGTH (inner_parms);
3299   int  i;
3300   int did_error_intro = 0;
3301   struct template_parm_data tpd;
3302   struct template_parm_data tpd2;
3303
3304   /* We check that each of the template parameters given in the
3305      partial specialization is used in the argument list to the
3306      specialization.  For example:
3307
3308        template <class T> struct S;
3309        template <class T> struct S<T*>;
3310
3311      The second declaration is OK because `T*' uses the template
3312      parameter T, whereas
3313
3314        template <class T> struct S<int>;
3315
3316      is no good.  Even trickier is:
3317
3318        template <class T>
3319        struct S1
3320        {
3321           template <class U>
3322           struct S2;
3323           template <class U>
3324           struct S2<T>;
3325        };
3326
3327      The S2<T> declaration is actually invalid; it is a
3328      full-specialization.  Of course,
3329
3330           template <class U>
3331           struct S2<T (*)(U)>;
3332
3333      or some such would have been OK.  */
3334   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3335   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3336   memset (tpd.parms, 0, sizeof (int) * ntparms);
3337
3338   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3339   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3340   for (i = 0; i < nargs; ++i)
3341     {
3342       tpd.current_arg = i;
3343       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3344                               &mark_template_parm,
3345                               &tpd,
3346                               NULL,
3347                               /*include_nondeduced_p=*/false);
3348     }
3349   for (i = 0; i < ntparms; ++i)
3350     if (tpd.parms[i] == 0)
3351       {
3352         /* One of the template parms was not used in the
3353            specialization.  */
3354         if (!did_error_intro)
3355           {
3356             error ("template parameters not used in partial specialization:");
3357             did_error_intro = 1;
3358           }
3359
3360         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3361       }
3362
3363   /* [temp.class.spec]
3364
3365      The argument list of the specialization shall not be identical to
3366      the implicit argument list of the primary template.  */
3367   if (comp_template_args
3368       (inner_args,
3369        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3370                                                    (maintmpl)))))
3371     error ("partial specialization %qT does not specialize any template arguments", type);
3372
3373   /* [temp.class.spec]
3374
3375      A partially specialized non-type argument expression shall not
3376      involve template parameters of the partial specialization except
3377      when the argument expression is a simple identifier.
3378
3379      The type of a template parameter corresponding to a specialized
3380      non-type argument shall not be dependent on a parameter of the
3381      specialization. 
3382
3383      Also, we verify that pack expansions only occur at the
3384      end of the argument list.  */
3385   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3386   tpd2.parms = 0;
3387   for (i = 0; i < nargs; ++i)
3388     {
3389       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3390       tree arg = TREE_VEC_ELT (inner_args, i);
3391       tree packed_args = NULL_TREE;
3392       int j, len = 1;
3393
3394       if (ARGUMENT_PACK_P (arg))
3395         {
3396           /* Extract the arguments from the argument pack. We'll be
3397              iterating over these in the following loop.  */
3398           packed_args = ARGUMENT_PACK_ARGS (arg);
3399           len = TREE_VEC_LENGTH (packed_args);
3400         }
3401
3402       for (j = 0; j < len; j++)
3403         {
3404           if (packed_args)
3405             /* Get the Jth argument in the parameter pack.  */
3406             arg = TREE_VEC_ELT (packed_args, j);
3407
3408           if (PACK_EXPANSION_P (arg))
3409             {
3410               /* Pack expansions must come at the end of the
3411                  argument list.  */
3412               if ((packed_args && j < len - 1)
3413                   || (!packed_args && i < nargs - 1))
3414                 {
3415                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3416                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3417                   else
3418                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3419
3420                   if (packed_args)
3421                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3422                 }
3423             }
3424
3425           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3426             /* We only care about the pattern.  */
3427             arg = PACK_EXPANSION_PATTERN (arg);
3428
3429           if (/* These first two lines are the `non-type' bit.  */
3430               !TYPE_P (arg)
3431               && TREE_CODE (arg) != TEMPLATE_DECL
3432               /* This next line is the `argument expression is not just a
3433                  simple identifier' condition and also the `specialized
3434                  non-type argument' bit.  */
3435               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3436             {
3437               if ((!packed_args && tpd.arg_uses_template_parms[i])
3438                   || (packed_args && uses_template_parms (arg)))
3439                 error ("template argument %qE involves template parameter(s)",
3440                        arg);
3441               else 
3442                 {
3443                   /* Look at the corresponding template parameter,
3444                      marking which template parameters its type depends
3445                      upon.  */
3446                   tree type = TREE_TYPE (parm);
3447
3448                   if (!tpd2.parms)
3449                     {
3450                       /* We haven't yet initialized TPD2.  Do so now.  */
3451                       tpd2.arg_uses_template_parms 
3452                         = (int *) alloca (sizeof (int) * nargs);
3453                       /* The number of parameters here is the number in the
3454                          main template, which, as checked in the assertion
3455                          above, is NARGS.  */
3456                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3457                       tpd2.level = 
3458                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3459                     }
3460
3461                   /* Mark the template parameters.  But this time, we're
3462                      looking for the template parameters of the main
3463                      template, not in the specialization.  */
3464                   tpd2.current_arg = i;
3465                   tpd2.arg_uses_template_parms[i] = 0;
3466                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3467                   for_each_template_parm (type,
3468                                           &mark_template_parm,
3469                                           &tpd2,
3470                                           NULL,
3471                                           /*include_nondeduced_p=*/false);
3472
3473                   if (tpd2.arg_uses_template_parms [i])
3474                     {
3475                       /* The type depended on some template parameters.
3476                          If they are fully specialized in the
3477                          specialization, that's OK.  */
3478                       int j;
3479                       for (j = 0; j < nargs; ++j)
3480                         if (tpd2.parms[j] != 0
3481                             && tpd.arg_uses_template_parms [j])
3482                           {
3483                             error ("type %qT of template argument %qE depends "
3484                                    "on template parameter(s)", 
3485                                    type,
3486                                    arg);
3487                             break;
3488                           }
3489                     }
3490                 }
3491             }
3492         }
3493     }
3494
3495   if (retrieve_specialization (maintmpl, specargs,
3496                                /*class_specializations_p=*/true))
3497     /* We've already got this specialization.  */
3498     return decl;
3499
3500   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3501     = tree_cons (specargs, inner_parms,
3502                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3503   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3504   return decl;
3505 }
3506
3507 /* Check that a template declaration's use of default arguments and
3508    parameter packs is not invalid.  Here, PARMS are the template
3509    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
3510    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
3511    specialization.
3512    
3513
3514    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3515    declaration (but not a definition); 1 indicates a declaration, 2
3516    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3517    emitted for extraneous default arguments.
3518
3519    Returns TRUE if there were no errors found, FALSE otherwise. */
3520
3521 bool
3522 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3523                          int is_partial, int is_friend_decl)
3524 {
3525   const char *msg;
3526   int last_level_to_check;
3527   tree parm_level;
3528   bool no_errors = true;
3529
3530   /* [temp.param]
3531
3532      A default template-argument shall not be specified in a
3533      function template declaration or a function template definition, nor
3534      in the template-parameter-list of the definition of a member of a
3535      class template.  */
3536
3537   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3538     /* You can't have a function template declaration in a local
3539        scope, nor you can you define a member of a class template in a
3540        local scope.  */
3541     return true;
3542
3543   if (current_class_type
3544       && !TYPE_BEING_DEFINED (current_class_type)
3545       && DECL_LANG_SPECIFIC (decl)
3546       /* If this is either a friend defined in the scope of the class
3547          or a member function.  */
3548       && (DECL_FUNCTION_MEMBER_P (decl)
3549           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3550           : DECL_FRIEND_CONTEXT (decl)
3551           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3552           : false)
3553       /* And, if it was a member function, it really was defined in
3554          the scope of the class.  */
3555       && (!DECL_FUNCTION_MEMBER_P (decl)
3556           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3557     /* We already checked these parameters when the template was
3558        declared, so there's no need to do it again now.  This function
3559        was defined in class scope, but we're processing it's body now
3560        that the class is complete.  */
3561     return true;
3562
3563   /* Core issue 226 (C++0x only): the following only applies to class
3564      templates.  */
3565   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3566     {
3567       /* [temp.param]
3568
3569          If a template-parameter has a default template-argument, all
3570          subsequent template-parameters shall have a default
3571          template-argument supplied.  */
3572       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3573         {
3574           tree inner_parms = TREE_VALUE (parm_level);
3575           int ntparms = TREE_VEC_LENGTH (inner_parms);
3576           int seen_def_arg_p = 0;
3577           int i;
3578
3579           for (i = 0; i < ntparms; ++i)
3580             {
3581               tree parm = TREE_VEC_ELT (inner_parms, i);
3582
3583               if (parm == error_mark_node)
3584                 continue;
3585
3586               if (TREE_PURPOSE (parm))
3587                 seen_def_arg_p = 1;
3588               else if (seen_def_arg_p)
3589                 {
3590                   error ("no default argument for %qD", TREE_VALUE (parm));
3591                   /* For better subsequent error-recovery, we indicate that
3592                      there should have been a default argument.  */
3593                   TREE_PURPOSE (parm) = error_mark_node;
3594                   no_errors = false;
3595                 }
3596               else if (is_primary
3597                        && !is_partial
3598                        && !is_friend_decl
3599                        && TREE_CODE (decl) == TYPE_DECL
3600                        && i < ntparms - 1
3601                        && template_parameter_pack_p (TREE_VALUE (parm)))
3602                 {
3603                   /* A primary class template can only have one
3604                      parameter pack, at the end of the template
3605                      parameter list.  */
3606
3607                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
3608                     error ("parameter pack %qE must be at the end of the"
3609                            " template parameter list", TREE_VALUE (parm));
3610                   else
3611                     error ("parameter pack %qT must be at the end of the"
3612                            " template parameter list", 
3613                            TREE_TYPE (TREE_VALUE (parm)));
3614
3615                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
3616                     = error_mark_node;
3617                   no_errors = false;
3618                 }
3619             }
3620         }
3621     }
3622
3623   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3624       || is_partial 
3625       || !is_primary
3626       || is_friend_decl)
3627     /* For an ordinary class template, default template arguments are
3628        allowed at the innermost level, e.g.:
3629          template <class T = int>
3630          struct S {};
3631        but, in a partial specialization, they're not allowed even
3632        there, as we have in [temp.class.spec]:
3633
3634          The template parameter list of a specialization shall not
3635          contain default template argument values.
3636
3637        So, for a partial specialization, or for a function template
3638        (in C++98/C++03), we look at all of them.  */
3639     ;
3640   else
3641     /* But, for a primary class template that is not a partial
3642        specialization we look at all template parameters except the
3643        innermost ones.  */
3644     parms = TREE_CHAIN (parms);
3645
3646   /* Figure out what error message to issue.  */
3647   if (is_friend_decl == 2)
3648     msg = "default template arguments may not be used in function template friend re-declaration";
3649   else if (is_friend_decl)
3650     msg = "default template arguments may not be used in function template friend declarations";
3651   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3652     msg = "default template arguments may not be used in function templates";
3653   else if (is_partial)
3654     msg = "default template arguments may not be used in partial specializations";
3655   else
3656     msg = "default argument for template parameter for class enclosing %qD";
3657
3658   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3659     /* If we're inside a class definition, there's no need to
3660        examine the parameters to the class itself.  On the one
3661        hand, they will be checked when the class is defined, and,
3662        on the other, default arguments are valid in things like:
3663          template <class T = double>
3664          struct S { template <class U> void f(U); };
3665        Here the default argument for `S' has no bearing on the
3666        declaration of `f'.  */
3667     last_level_to_check = template_class_depth (current_class_type) + 1;
3668   else
3669     /* Check everything.  */
3670     last_level_to_check = 0;
3671
3672   for (parm_level = parms;
3673        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3674        parm_level = TREE_CHAIN (parm_level))
3675     {
3676       tree inner_parms = TREE_VALUE (parm_level);
3677       int i;
3678       int ntparms;
3679
3680       ntparms = TREE_VEC_LENGTH (inner_parms);
3681       for (i = 0; i < ntparms; ++i)
3682         {
3683           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3684             continue;
3685
3686           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3687             {
3688               if (msg)
3689                 {
3690                   no_errors = false;
3691                   if (is_friend_decl == 2)
3692                     return no_errors;
3693
3694                   error (msg, decl);
3695                   msg = 0;
3696                 }
3697
3698               /* Clear out the default argument so that we are not
3699                  confused later.  */
3700               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3701             }
3702         }
3703
3704       /* At this point, if we're still interested in issuing messages,
3705          they must apply to classes surrounding the object declared.  */
3706       if (msg)
3707         msg = "default argument for template parameter for class enclosing %qD";
3708     }
3709
3710   return no_errors;
3711 }
3712
3713 /* Worker for push_template_decl_real, called via
3714    for_each_template_parm.  DATA is really an int, indicating the
3715    level of the parameters we are interested in.  If T is a template
3716    parameter of that level, return nonzero.  */
3717
3718 static int
3719 template_parm_this_level_p (tree t, void* data)
3720 {
3721   int this_level = *(int *)data;
3722   int level;
3723
3724   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3725     level = TEMPLATE_PARM_LEVEL (t);
3726   else
3727     level = TEMPLATE_TYPE_LEVEL (t);
3728   return level == this_level;
3729 }
3730
3731 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3732    parameters given by current_template_args, or reuses a
3733    previously existing one, if appropriate.  Returns the DECL, or an
3734    equivalent one, if it is replaced via a call to duplicate_decls.
3735
3736    If IS_FRIEND is true, DECL is a friend declaration.  */
3737
3738 tree
3739 push_template_decl_real (tree decl, bool is_friend)
3740 {
3741   tree tmpl;
3742   tree args;
3743   tree info;
3744   tree ctx;
3745   int primary;
3746   int is_partial;
3747   int new_template_p = 0;
3748   /* True if the template is a member template, in the sense of
3749      [temp.mem].  */
3750   bool member_template_p = false;
3751
3752   if (decl == error_mark_node)
3753     return decl;
3754
3755   /* See if this is a partial specialization.  */
3756   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3757                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3758                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3759
3760   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3761     is_friend = true;
3762
3763   if (is_friend)
3764     /* For a friend, we want the context of the friend function, not
3765        the type of which it is a friend.  */
3766     ctx = DECL_CONTEXT (decl);
3767   else if (CP_DECL_CONTEXT (decl)
3768            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3769     /* In the case of a virtual function, we want the class in which
3770        it is defined.  */
3771     ctx = CP_DECL_CONTEXT (decl);
3772   else
3773     /* Otherwise, if we're currently defining some class, the DECL
3774        is assumed to be a member of the class.  */
3775     ctx = current_scope ();
3776
3777   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3778     ctx = NULL_TREE;
3779
3780   if (!DECL_CONTEXT (decl))
3781     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3782
3783   /* See if this is a primary template.  */
3784   if (is_friend && ctx)
3785     /* A friend template that specifies a class context, i.e.
3786          template <typename T> friend void A<T>::f();
3787        is not primary.  */
3788     primary = 0;
3789   else
3790     primary = template_parm_scope_p ();
3791
3792   if (primary)
3793     {
3794       if (DECL_CLASS_SCOPE_P (decl))
3795         member_template_p = true;
3796       if (TREE_CODE (decl) == TYPE_DECL
3797           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3798         {
3799           error ("template class without a name");
3800           return error_mark_node;
3801         }
3802       else if (TREE_CODE (decl) == FUNCTION_DECL)
3803         {
3804           if (DECL_DESTRUCTOR_P (decl))
3805             {
3806               /* [temp.mem]
3807
3808                  A destructor shall not be a member template.  */
3809               error ("destructor %qD declared as member template", decl);
3810               return error_mark_node;
3811             }
3812           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3813               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3814                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3815                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3816                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3817                       == void_list_node)))
3818             {
3819               /* [basic.stc.dynamic.allocation]
3820
3821                  An allocation function can be a function
3822                  template. ... Template allocation functions shall
3823                  have two or more parameters.  */
3824               error ("invalid template declaration of %qD", decl);
3825               return error_mark_node;
3826             }
3827         }
3828       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3829                && CLASS_TYPE_P (TREE_TYPE (decl)))
3830         /* OK */;
3831       else
3832         {
3833           error ("template declaration of %q#D", decl);
3834           return error_mark_node;
3835         }
3836     }
3837
3838   /* Check to see that the rules regarding the use of default
3839      arguments are not being violated.  */
3840   check_default_tmpl_args (decl, current_template_parms,
3841                            primary, is_partial, /*is_friend_decl=*/0);
3842
3843   /* Ensure that there are no parameter packs in the type of this
3844      declaration that have not been expanded.  */
3845   if (TREE_CODE (decl) == FUNCTION_DECL)
3846     {
3847       /* Check each of the arguments individually to see if there are
3848          any bare parameter packs.  */
3849       tree type = TREE_TYPE (decl);
3850       tree arg = DECL_ARGUMENTS (decl);
3851       tree argtype = TYPE_ARG_TYPES (type);
3852
3853       while (arg && argtype)
3854         {
3855           if (!FUNCTION_PARAMETER_PACK_P (arg)
3856               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
3857             {
3858             /* This is a PARM_DECL that contains unexpanded parameter
3859                packs. We have already complained about this in the
3860                check_for_bare_parameter_packs call, so just replace
3861                these types with ERROR_MARK_NODE.  */
3862               TREE_TYPE (arg) = error_mark_node;
3863               TREE_VALUE (argtype) = error_mark_node;
3864             }
3865
3866           arg = TREE_CHAIN (arg);
3867           argtype = TREE_CHAIN (argtype);
3868         }
3869
3870       /* Check for bare parameter packs in the return type and the
3871          exception specifiers.  */
3872       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
3873         /* Errors were already issued, set return type to int
3874            as the frontend doesn't expect error_mark_node as
3875            the return type.  */
3876         TREE_TYPE (type) = integer_type_node;
3877       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
3878         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
3879     }
3880   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
3881     {
3882       TREE_TYPE (decl) = error_mark_node;
3883       return error_mark_node;
3884     }
3885
3886   if (is_partial)
3887     return process_partial_specialization (decl);
3888
3889   args = current_template_args ();
3890
3891   if (!ctx
3892       || TREE_CODE (ctx) == FUNCTION_DECL
3893       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3894       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3895     {
3896       if (DECL_LANG_SPECIFIC (decl)
3897           && DECL_TEMPLATE_INFO (decl)
3898           && DECL_TI_TEMPLATE (decl))
3899         tmpl = DECL_TI_TEMPLATE (decl);
3900       /* If DECL is a TYPE_DECL for a class-template, then there won't
3901          be DECL_LANG_SPECIFIC.  The information equivalent to
3902          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3903       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3904                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3905                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3906         {
3907           /* Since a template declaration already existed for this
3908              class-type, we must be redeclaring it here.  Make sure
3909              that the redeclaration is valid.  */
3910           redeclare_class_template (TREE_TYPE (decl),
3911                                     current_template_parms);
3912           /* We don't need to create a new TEMPLATE_DECL; just use the
3913              one we already had.  */
3914           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3915         }
3916       else
3917         {
3918           tmpl = build_template_decl (decl, current_template_parms,
3919                                       member_template_p);
3920           new_template_p = 1;
3921
3922           if (DECL_LANG_SPECIFIC (decl)
3923               && DECL_TEMPLATE_SPECIALIZATION (decl))
3924             {
3925               /* A specialization of a member template of a template
3926                  class.  */
3927               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3928               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3929               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3930             }
3931         }
3932     }
3933   else
3934     {
3935       tree a, t, current, parms;
3936       int i;
3937       tree tinfo = get_template_info (decl);
3938
3939       if (!tinfo)
3940         {
3941           error ("template definition of non-template %q#D", decl);
3942           return error_mark_node;
3943         }
3944
3945       tmpl = TI_TEMPLATE (tinfo);
3946
3947       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3948           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3949           && DECL_TEMPLATE_SPECIALIZATION (decl)
3950           && DECL_MEMBER_TEMPLATE_P (tmpl))
3951         {
3952           tree new_tmpl;
3953
3954           /* The declaration is a specialization of a member
3955              template, declared outside the class.  Therefore, the
3956              innermost template arguments will be NULL, so we
3957              replace them with the arguments determined by the
3958              earlier call to check_explicit_specialization.  */
3959           args = DECL_TI_ARGS (decl);
3960
3961           new_tmpl
3962             = build_template_decl (decl, current_template_parms,
3963                                    member_template_p);
3964           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3965           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3966           DECL_TI_TEMPLATE (decl) = new_tmpl;
3967           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3968           DECL_TEMPLATE_INFO (new_tmpl)
3969             = tree_cons (tmpl, args, NULL_TREE);
3970
3971           register_specialization (new_tmpl,
3972                                    most_general_template (tmpl),
3973                                    args,
3974                                    is_friend);
3975           return decl;
3976         }
3977
3978       /* Make sure the template headers we got make sense.  */
3979
3980       parms = DECL_TEMPLATE_PARMS (tmpl);
3981       i = TMPL_PARMS_DEPTH (parms);
3982       if (TMPL_ARGS_DEPTH (args) != i)
3983         {
3984           error ("expected %d levels of template parms for %q#D, got %d",
3985                  i, decl, TMPL_ARGS_DEPTH (args));
3986         }
3987       else
3988         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3989           {
3990             a = TMPL_ARGS_LEVEL (args, i);
3991             t = INNERMOST_TEMPLATE_PARMS (parms);
3992
3993             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3994               {
3995                 if (current == decl)
3996                   error ("got %d template parameters for %q#D",
3997                          TREE_VEC_LENGTH (a), decl);
3998                 else
3999                   error ("got %d template parameters for %q#T",
4000                          TREE_VEC_LENGTH (a), current);
4001                 error ("  but %d required", TREE_VEC_LENGTH (t));
4002                 return error_mark_node;
4003               }
4004
4005             if (current == decl)
4006               current = ctx;
4007             else
4008               current = (TYPE_P (current)
4009                          ? TYPE_CONTEXT (current)
4010                          : DECL_CONTEXT (current));
4011           }
4012
4013       /* Check that the parms are used in the appropriate qualifying scopes
4014          in the declarator.  */
4015       if (!comp_template_args
4016           (TI_ARGS (tinfo),
4017            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4018         {
4019           error ("\
4020 template arguments to %qD do not match original template %qD",
4021                  decl, DECL_TEMPLATE_RESULT (tmpl));
4022           if (!uses_template_parms (TI_ARGS (tinfo)))
4023             inform ("use template<> for an explicit specialization");
4024           /* Avoid crash in import_export_decl.  */
4025           DECL_INTERFACE_KNOWN (decl) = 1;
4026           return error_mark_node;
4027         }
4028     }
4029
4030   DECL_TEMPLATE_RESULT (tmpl) = decl;
4031   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4032
4033   /* Push template declarations for global functions and types.  Note
4034      that we do not try to push a global template friend declared in a
4035      template class; such a thing may well depend on the template
4036      parameters of the class.  */
4037   if (new_template_p && !ctx
4038       && !(is_friend && template_class_depth (current_class_type) > 0))
4039     {
4040       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4041       if (tmpl == error_mark_node)
4042         return error_mark_node;
4043
4044       /* Hide template friend classes that haven't been declared yet.  */
4045       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4046         {
4047           DECL_ANTICIPATED (tmpl) = 1;
4048           DECL_FRIEND_P (tmpl) = 1;
4049         }
4050     }
4051
4052   if (primary)
4053     {
4054       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4055       int i;
4056
4057       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4058       if (DECL_CONV_FN_P (tmpl))
4059         {
4060           int depth = TMPL_PARMS_DEPTH (parms);
4061
4062           /* It is a conversion operator. See if the type converted to
4063              depends on innermost template operands.  */
4064
4065           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4066                                          depth))
4067             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4068         }
4069
4070       /* Give template template parms a DECL_CONTEXT of the template
4071          for which they are a parameter.  */
4072       parms = INNERMOST_TEMPLATE_PARMS (parms);
4073       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4074         {
4075           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4076           if (TREE_CODE (parm) == TEMPLATE_DECL)
4077             DECL_CONTEXT (parm) = tmpl;
4078         }
4079     }
4080
4081   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4082      back to its most general template.  If TMPL is a specialization,
4083      ARGS may only have the innermost set of arguments.  Add the missing
4084      argument levels if necessary.  */
4085   if (DECL_TEMPLATE_INFO (tmpl))
4086     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4087
4088   info = tree_cons (tmpl, args, NULL_TREE);
4089
4090   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4091     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4092   else if (DECL_LANG_SPECIFIC (decl))
4093     DECL_TEMPLATE_INFO (decl) = info;
4094
4095   return DECL_TEMPLATE_RESULT (tmpl);
4096 }
4097
4098 tree
4099 push_template_decl (tree decl)
4100 {
4101   return push_template_decl_real (decl, false);
4102 }
4103
4104 /* Called when a class template TYPE is redeclared with the indicated
4105    template PARMS, e.g.:
4106
4107      template <class T> struct S;
4108      template <class T> struct S {};  */
4109
4110 bool
4111 redeclare_class_template (tree type, tree parms)
4112 {
4113   tree tmpl;
4114   tree tmpl_parms;
4115   int i;
4116
4117   if (!TYPE_TEMPLATE_INFO (type))
4118     {
4119       error ("%qT is not a template type", type);
4120       return false;
4121     }
4122
4123   tmpl = TYPE_TI_TEMPLATE (type);
4124   if (!PRIMARY_TEMPLATE_P (tmpl))
4125     /* The type is nested in some template class.  Nothing to worry
4126        about here; there are no new template parameters for the nested
4127        type.  */
4128     return true;
4129
4130   if (!parms)
4131     {
4132       error ("template specifiers not specified in declaration of %qD",
4133              tmpl);
4134       return false;
4135     }
4136
4137   parms = INNERMOST_TEMPLATE_PARMS (parms);
4138   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4139
4140   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4141     {
4142       error ("redeclared with %d template parameter(s)", 
4143              TREE_VEC_LENGTH (parms));
4144       inform ("previous declaration %q+D used %d template parameter(s)", 
4145              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4146       return false;
4147     }
4148
4149   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4150     {
4151       tree tmpl_parm;
4152       tree parm;
4153       tree tmpl_default;
4154       tree parm_default;
4155
4156       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4157           || TREE_VEC_ELT (parms, i) == error_mark_node)
4158         continue;
4159
4160       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4161       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4162       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4163       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4164
4165       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4166          TEMPLATE_DECL.  */
4167       if (tmpl_parm != error_mark_node
4168           && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4169               || (TREE_CODE (tmpl_parm) != TYPE_DECL
4170                   && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
4171               || (TREE_CODE (tmpl_parm) != PARM_DECL
4172                   && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
4173                       != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
4174               || (TREE_CODE (tmpl_parm) == PARM_DECL
4175                   && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
4176                       != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))))
4177         {
4178           error ("template parameter %q+#D", tmpl_parm);
4179           error ("redeclared here as %q#D", parm);
4180           return false;
4181         }
4182
4183       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4184         {
4185           /* We have in [temp.param]:
4186
4187              A template-parameter may not be given default arguments
4188              by two different declarations in the same scope.  */
4189           error ("redefinition of default argument for %q#D", parm);
4190           inform ("%Joriginal definition appeared here", tmpl_parm);
4191           return false;
4192         }
4193
4194       if (parm_default != NULL_TREE)
4195         /* Update the previous template parameters (which are the ones
4196            that will really count) with the new default value.  */
4197         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4198       else if (tmpl_default != NULL_TREE)
4199         /* Update the new parameters, too; they'll be used as the
4200            parameters for any members.  */
4201         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4202     }
4203
4204     return true;
4205 }
4206
4207 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4208    (possibly simplified) expression.  */
4209
4210 tree
4211 fold_non_dependent_expr (tree expr)
4212 {
4213   if (expr == NULL_TREE)
4214     return NULL_TREE;
4215
4216   /* If we're in a template, but EXPR isn't value dependent, simplify
4217      it.  We're supposed to treat:
4218
4219        template <typename T> void f(T[1 + 1]);
4220        template <typename T> void f(T[2]);
4221
4222      as two declarations of the same function, for example.  */
4223   if (processing_template_decl
4224       && !type_dependent_expression_p (expr)
4225       && !value_dependent_expression_p (expr))
4226     {
4227       HOST_WIDE_INT saved_processing_template_decl;
4228
4229       saved_processing_template_decl = processing_template_decl;
4230       processing_template_decl = 0;
4231       expr = tsubst_copy_and_build (expr,
4232                                     /*args=*/NULL_TREE,
4233                                     tf_error,
4234                                     /*in_decl=*/NULL_TREE,
4235                                     /*function_p=*/false,
4236                                     /*integral_constant_expression_p=*/true);
4237       processing_template_decl = saved_processing_template_decl;
4238     }
4239   return expr;
4240 }
4241
4242 /* EXPR is an expression which is used in a constant-expression context.
4243    For instance, it could be a VAR_DECL with a constant initializer.
4244    Extract the innermost constant expression.
4245
4246    This is basically a more powerful version of
4247    integral_constant_value, which can be used also in templates where
4248    initializers can maintain a syntactic rather than semantic form
4249    (even if they are non-dependent, for access-checking purposes).  */
4250
4251 static tree
4252 fold_decl_constant_value (tree expr)
4253 {
4254   tree const_expr = expr;
4255   do
4256     {
4257       expr = fold_non_dependent_expr (const_expr);
4258       const_expr = integral_constant_value (expr);
4259     }
4260   while (expr != const_expr);
4261
4262   return expr;
4263 }
4264
4265 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4266    must be a function or a pointer-to-function type, as specified
4267    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4268    and check that the resulting function has external linkage.  */
4269
4270 static tree
4271 convert_nontype_argument_function (tree type, tree expr)
4272 {
4273   tree fns = expr;
4274   tree fn, fn_no_ptr;
4275
4276   fn = instantiate_type (type, fns, tf_none);
4277   if (fn == error_mark_node)
4278     return error_mark_node;
4279
4280   fn_no_ptr = fn;
4281   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4282     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4283   if (TREE_CODE (fn_no_ptr) == BASELINK)
4284     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4285  
4286   /* [temp.arg.nontype]/1
4287
4288      A template-argument for a non-type, non-template template-parameter
4289      shall be one of:
4290      [...]
4291      -- the address of an object or function with external linkage.  */
4292   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4293     {
4294       error ("%qE is not a valid template argument for type %qT "
4295              "because function %qD has not external linkage",
4296              expr, type, fn_no_ptr);
4297       return NULL_TREE;
4298     }
4299
4300   return fn;
4301 }
4302
4303 /* Attempt to convert the non-type template parameter EXPR to the
4304    indicated TYPE.  If the conversion is successful, return the
4305    converted value.  If the conversion is unsuccessful, return
4306    NULL_TREE if we issued an error message, or error_mark_node if we
4307    did not.  We issue error messages for out-and-out bad template
4308    parameters, but not simply because the conversion failed, since we
4309    might be just trying to do argument deduction.  Both TYPE and EXPR
4310    must be non-dependent.
4311
4312    The conversion follows the special rules described in
4313    [temp.arg.nontype], and it is much more strict than an implicit
4314    conversion.
4315
4316    This function is called twice for each template argument (see
4317    lookup_template_class for a more accurate description of this
4318    problem). This means that we need to handle expressions which
4319    are not valid in a C++ source, but can be created from the
4320    first call (for instance, casts to perform conversions). These
4321    hacks can go away after we fix the double coercion problem.  */
4322
4323 static tree
4324 convert_nontype_argument (tree type, tree expr)
4325 {
4326   tree expr_type;
4327
4328   /* Detect immediately string literals as invalid non-type argument.
4329      This special-case is not needed for correctness (we would easily
4330      catch this later), but only to provide better diagnostic for this
4331      common user mistake. As suggested by DR 100, we do not mention
4332      linkage issues in the diagnostic as this is not the point.  */
4333   if (TREE_CODE (expr) == STRING_CST)
4334     {
4335       error ("%qE is not a valid template argument for type %qT "
4336              "because string literals can never be used in this context",
4337              expr, type);
4338       return NULL_TREE;
4339     }
4340
4341   /* If we are in a template, EXPR may be non-dependent, but still
4342      have a syntactic, rather than semantic, form.  For example, EXPR
4343      might be a SCOPE_REF, rather than the VAR_DECL to which the
4344      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4345      so that access checking can be performed when the template is
4346      instantiated -- but here we need the resolved form so that we can
4347      convert the argument.  */
4348   expr = fold_non_dependent_expr (expr);
4349   if (error_operand_p (expr))
4350     return error_mark_node;
4351   expr_type = TREE_TYPE (expr);
4352
4353   /* HACK: Due to double coercion, we can get a
4354      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4355      which is the tree that we built on the first call (see
4356      below when coercing to reference to object or to reference to
4357      function). We just strip everything and get to the arg.
4358      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4359      for examples.  */
4360   if (TREE_CODE (expr) == NOP_EXPR)
4361     {
4362       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4363         {
4364           /* ??? Maybe we could use convert_from_reference here, but we
4365              would need to relax its constraints because the NOP_EXPR
4366              could actually change the type to something more cv-qualified,
4367              and this is not folded by convert_from_reference.  */
4368           tree addr = TREE_OPERAND (expr, 0);
4369           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4370           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4371           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4372           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4373                       (TREE_TYPE (expr_type),
4374                        TREE_TYPE (TREE_TYPE (addr))));
4375
4376           expr = TREE_OPERAND (addr, 0);
4377           expr_type = TREE_TYPE (expr);
4378         }
4379
4380       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4381          parameter is a pointer to object, through decay and
4382          qualification conversion. Let's strip everything.  */
4383       else if (TYPE_PTROBV_P (type))
4384         {
4385           STRIP_NOPS (expr);
4386           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4387           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4388           /* Skip the ADDR_EXPR only if it is part of the decay for
4389              an array. Otherwise, it is part of the original argument
4390              in the source code.  */
4391           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4392             expr = TREE_OPERAND (expr, 0);
4393           expr_type = TREE_TYPE (expr);
4394         }
4395     }
4396
4397   /* [temp.arg.nontype]/5, bullet 1
4398
4399      For a non-type template-parameter of integral or enumeration type,
4400      integral promotions (_conv.prom_) and integral conversions
4401      (_conv.integral_) are applied.  */
4402   if (INTEGRAL_TYPE_P (type))
4403     {
4404       if (!INTEGRAL_TYPE_P (expr_type))
4405         return error_mark_node;
4406
4407       expr = fold_decl_constant_value (expr);
4408       /* Notice that there are constant expressions like '4 % 0' which
4409          do not fold into integer constants.  */
4410       if (TREE_CODE (expr) != INTEGER_CST)
4411         {
4412           error ("%qE is not a valid template argument for type %qT "
4413                  "because it is a non-constant expression", expr, type);
4414           return NULL_TREE;
4415         }
4416
4417       /* At this point, an implicit conversion does what we want,
4418          because we already know that the expression is of integral
4419          type.  */
4420       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4421       if (expr == error_mark_node)
4422         return error_mark_node;
4423
4424       /* Conversion was allowed: fold it to a bare integer constant.  */
4425       expr = fold (expr);
4426     }
4427   /* [temp.arg.nontype]/5, bullet 2
4428
4429      For a non-type template-parameter of type pointer to object,
4430      qualification conversions (_conv.qual_) and the array-to-pointer
4431      conversion (_conv.array_) are applied.  */
4432   else if (TYPE_PTROBV_P (type))
4433     {
4434       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4435
4436          A template-argument for a non-type, non-template template-parameter
4437          shall be one of: [...]
4438
4439          -- the name of a non-type template-parameter;
4440          -- the address of an object or function with external linkage, [...]
4441             expressed as "& id-expression" where the & is optional if the name
4442             refers to a function or array, or if the corresponding
4443             template-parameter is a reference.
4444
4445         Here, we do not care about functions, as they are invalid anyway
4446         for a parameter of type pointer-to-object.  */
4447
4448       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4449         /* Non-type template parameters are OK.  */
4450         ;
4451       else if (TREE_CODE (expr) != ADDR_EXPR
4452                && TREE_CODE (expr_type) != ARRAY_TYPE)
4453         {
4454           if (TREE_CODE (expr) == VAR_DECL)
4455             {
4456               error ("%qD is not a valid template argument "
4457                      "because %qD is a variable, not the address of "
4458                      "a variable",
4459                      expr, expr);
4460               return NULL_TREE;
4461             }
4462           /* Other values, like integer constants, might be valid
4463              non-type arguments of some other type.  */
4464           return error_mark_node;
4465         }
4466       else
4467         {
4468           tree decl;
4469
4470           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4471                   ? TREE_OPERAND (expr, 0) : expr);
4472           if (TREE_CODE (decl) != VAR_DECL)
4473             {
4474               error ("%qE is not a valid template argument of type %qT "
4475                      "because %qE is not a variable",
4476                      expr, type, decl);
4477               return NULL_TREE;
4478             }
4479           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4480             {
4481               error ("%qE is not a valid template argument of type %qT "
4482                      "because %qD does not have external linkage",
4483                      expr, type, decl);
4484               return NULL_TREE;
4485             }
4486         }
4487
4488       expr = decay_conversion (expr);
4489       if (expr == error_mark_node)
4490         return error_mark_node;
4491
4492       expr = perform_qualification_conversions (type, expr);
4493       if (expr == error_mark_node)
4494         return error_mark_node;
4495     }
4496   /* [temp.arg.nontype]/5, bullet 3
4497
4498      For a non-type template-parameter of type reference to object, no
4499      conversions apply. The type referred to by the reference may be more
4500      cv-qualified than the (otherwise identical) type of the
4501      template-argument. The template-parameter is bound directly to the
4502      template-argument, which must be an lvalue.  */
4503   else if (TYPE_REF_OBJ_P (type))
4504     {
4505       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4506                                                       expr_type))
4507         return error_mark_node;
4508
4509       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4510         {
4511           error ("%qE is not a valid template argument for type %qT "
4512                  "because of conflicts in cv-qualification", expr, type);
4513           return NULL_TREE;
4514         }
4515
4516       if (!real_lvalue_p (expr))
4517         {
4518           error ("%qE is not a valid template argument for type %qT "
4519                  "because it is not an lvalue", expr, type);
4520           return NULL_TREE;
4521         }
4522
4523       /* [temp.arg.nontype]/1
4524
4525          A template-argument for a non-type, non-template template-parameter
4526          shall be one of: [...]
4527
4528          -- the address of an object or function with external linkage.  */
4529       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4530         {
4531           error ("%qE is not a valid template argument for type %qT "
4532                  "because object %qD has not external linkage",
4533                  expr, type, expr);
4534           return NULL_TREE;
4535         }
4536
4537       expr = build_nop (type, build_address (expr));
4538     }
4539   /* [temp.arg.nontype]/5, bullet 4
4540
4541      For a non-type template-parameter of type pointer to function, only
4542      the function-to-pointer conversion (_conv.func_) is applied. If the
4543      template-argument represents a set of overloaded functions (or a
4544      pointer to such), the matching function is selected from the set
4545      (_over.over_).  */
4546   else if (TYPE_PTRFN_P (type))
4547     {
4548       /* If the argument is a template-id, we might not have enough
4549          context information to decay the pointer.  */
4550       if (!type_unknown_p (expr_type))
4551         {
4552           expr = decay_conversion (expr);
4553           if (expr == error_mark_node)
4554             return error_mark_node;
4555         }
4556
4557       expr = convert_nontype_argument_function (type, expr);
4558       if (!expr || expr == error_mark_node)
4559         return expr;
4560     }
4561   /* [temp.arg.nontype]/5, bullet 5
4562
4563      For a non-type template-parameter of type reference to function, no
4564      conversions apply. If the template-argument represents a set of
4565      overloaded functions, the matching function is selected from the set
4566      (_over.over_).  */
4567   else if (TYPE_REFFN_P (type))
4568     {
4569       if (TREE_CODE (expr) == ADDR_EXPR)
4570         {
4571           error ("%qE is not a valid template argument for type %qT "
4572                  "because it is a pointer", expr, type);
4573           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4574           return NULL_TREE;
4575         }
4576
4577       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4578       if (!expr || expr == error_mark_node)
4579         return expr;
4580
4581       expr = build_nop (type, build_address (expr));
4582     }
4583   /* [temp.arg.nontype]/5, bullet 6
4584
4585      For a non-type template-parameter of type pointer to member function,
4586      no conversions apply. If the template-argument represents a set of
4587      overloaded member functions, the matching member function is selected
4588      from the set (_over.over_).  */
4589   else if (TYPE_PTRMEMFUNC_P (type))
4590     {
4591       expr = instantiate_type (type, expr, tf_none);
4592       if (expr == error_mark_node)
4593         return error_mark_node;
4594
4595       /* There is no way to disable standard conversions in
4596          resolve_address_of_overloaded_function (called by
4597          instantiate_type). It is possible that the call succeeded by
4598          converting &B::I to &D::I (where B is a base of D), so we need
4599          to reject this conversion here.
4600
4601          Actually, even if there was a way to disable standard conversions,
4602          it would still be better to reject them here so that we can
4603          provide a superior diagnostic.  */
4604       if (!same_type_p (TREE_TYPE (expr), type))
4605         {
4606           /* Make sure we are just one standard conversion off.  */
4607           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4608           error ("%qE is not a valid template argument for type %qT "
4609                  "because it is of type %qT", expr, type,
4610                  TREE_TYPE (expr));
4611           inform ("standard conversions are not allowed in this context");
4612           return NULL_TREE;
4613         }
4614     }
4615   /* [temp.arg.nontype]/5, bullet 7
4616
4617      For a non-type template-parameter of type pointer to data member,
4618      qualification conversions (_conv.qual_) are applied.  */
4619   else if (TYPE_PTRMEM_P (type))
4620     {
4621       expr = perform_qualification_conversions (type, expr);
4622       if (expr == error_mark_node)
4623         return expr;
4624     }
4625   /* A template non-type parameter must be one of the above.  */
4626   else
4627     gcc_unreachable ();
4628
4629   /* Sanity check: did we actually convert the argument to the
4630      right type?  */
4631   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4632   return expr;
4633 }
4634
4635 /* Subroutine of coerce_template_template_parms, which returns 1 if
4636    PARM_PARM and ARG_PARM match using the rule for the template
4637    parameters of template template parameters. Both PARM and ARG are
4638    template parameters; the rest of the arguments are the same as for
4639    coerce_template_template_parms.
4640  */
4641 static int
4642 coerce_template_template_parm (tree parm,
4643                               tree arg,
4644                               tsubst_flags_t complain,
4645                               tree in_decl,
4646                               tree outer_args)
4647 {
4648   if (arg == NULL_TREE || arg == error_mark_node
4649       || parm == NULL_TREE || parm == error_mark_node)
4650     return 0;
4651   
4652   if (TREE_CODE (arg) != TREE_CODE (parm))
4653     return 0;
4654   
4655   switch (TREE_CODE (parm))
4656     {
4657     case TEMPLATE_DECL:
4658       /* We encounter instantiations of templates like
4659          template <template <template <class> class> class TT>
4660          class C;  */
4661       {
4662         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4663         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4664         
4665         if (!coerce_template_template_parms
4666             (parmparm, argparm, complain, in_decl, outer_args))
4667           return 0;
4668       }
4669       /* Fall through.  */
4670       
4671     case TYPE_DECL:
4672       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
4673           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4674         /* Argument is a parameter pack but parameter is not.  */
4675         return 0;
4676       break;
4677       
4678     case PARM_DECL:
4679       /* The tsubst call is used to handle cases such as
4680          
4681            template <int> class C {};
4682            template <class T, template <T> class TT> class D {};
4683            D<int, C> d;
4684
4685          i.e. the parameter list of TT depends on earlier parameters.  */
4686       if (!dependent_type_p (TREE_TYPE (arg))
4687           && !same_type_p
4688                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4689                  TREE_TYPE (arg)))
4690         return 0;
4691       
4692       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
4693           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4694         /* Argument is a parameter pack but parameter is not.  */
4695         return 0;
4696       
4697       break;
4698
4699     default:
4700       gcc_unreachable ();
4701     }
4702
4703   return 1;
4704 }
4705
4706
4707 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4708    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4709    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4710    or PARM_DECL.
4711
4712    Consider the example:
4713      template <class T> class A;
4714      template<template <class U> class TT> class B;
4715
4716    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4717    the parameters to A, and OUTER_ARGS contains A.  */
4718
4719 static int
4720 coerce_template_template_parms (tree parm_parms,
4721                                 tree arg_parms,
4722                                 tsubst_flags_t complain,
4723                                 tree in_decl,
4724                                 tree outer_args)
4725 {
4726   int nparms, nargs, i;
4727   tree parm, arg;
4728   int variadic_p = 0;
4729
4730   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4731   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4732
4733   nparms = TREE_VEC_LENGTH (parm_parms);
4734   nargs = TREE_VEC_LENGTH (arg_parms);
4735
4736   /* Determine whether we have a parameter pack at the end of the
4737      template template parameter's template parameter list.  */
4738   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
4739     {
4740       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
4741       
4742       switch (TREE_CODE (parm))
4743         {
4744         case TEMPLATE_DECL:
4745         case TYPE_DECL:
4746           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
4747             variadic_p = 1;
4748           break;
4749           
4750         case PARM_DECL:
4751           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
4752             variadic_p = 1;
4753           break;
4754           
4755         default:
4756           gcc_unreachable ();
4757         }
4758     }
4759  
4760   if (nargs != nparms
4761       && !(variadic_p && nargs >= nparms - 1))
4762     return 0;
4763
4764   /* Check all of the template parameters except the parameter pack at
4765      the end (if any).  */
4766   for (i = 0; i < nparms - variadic_p; ++i)
4767     {
4768       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4769           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4770         continue;
4771
4772       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4773       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4774
4775       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4776                                           outer_args))
4777         return 0;
4778
4779     }
4780
4781   if (variadic_p)
4782     {
4783       /* Check each of the template parameters in the template
4784          argument against the template parameter pack at the end of
4785          the template template parameter.  */
4786       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
4787         return 0;
4788
4789       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4790
4791       for (; i < nargs; ++i)
4792         {
4793           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4794             continue;
4795  
4796           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4797  
4798           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
4799                                               outer_args))
4800             return 0;
4801         }
4802     }
4803
4804   return 1;
4805 }
4806
4807 /* Verifies that the deduced template arguments (in TARGS) for the
4808    template template parameters (in TPARMS) represent valid bindings,
4809    by comparing the template parameter list of each template argument
4810    to the template parameter list of its corresponding template
4811    template parameter, in accordance with DR150. This
4812    routine can only be called after all template arguments have been
4813    deduced. It will return TRUE if all of the template template
4814    parameter bindings are okay, FALSE otherwise.  */
4815 bool 
4816 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4817 {
4818   int i, ntparms = TREE_VEC_LENGTH (tparms);
4819   bool ret = true;
4820
4821   /* We're dealing with template parms in this process.  */
4822   ++processing_template_decl;
4823
4824   targs = INNERMOST_TEMPLATE_ARGS (targs);
4825
4826   for (i = 0; i < ntparms; ++i)
4827     {
4828       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4829       tree targ = TREE_VEC_ELT (targs, i);
4830
4831       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4832         {
4833           tree packed_args = NULL_TREE;
4834           int idx, len = 1;
4835
4836           if (ARGUMENT_PACK_P (targ))
4837             {
4838               /* Look inside the argument pack.  */
4839               packed_args = ARGUMENT_PACK_ARGS (targ);
4840               len = TREE_VEC_LENGTH (packed_args);
4841             }
4842
4843           for (idx = 0; idx < len; ++idx)
4844             {
4845               tree targ_parms = NULL_TREE;
4846
4847               if (packed_args)
4848                 /* Extract the next argument from the argument
4849                    pack.  */
4850                 targ = TREE_VEC_ELT (packed_args, idx);
4851
4852               if (PACK_EXPANSION_P (targ))
4853                 /* Look at the pattern of the pack expansion.  */
4854                 targ = PACK_EXPANSION_PATTERN (targ);
4855
4856               /* Extract the template parameters from the template
4857                  argument.  */
4858               if (TREE_CODE (targ) == TEMPLATE_DECL)
4859                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4860               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4861                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4862
4863               /* Verify that we can coerce the template template
4864                  parameters from the template argument to the template
4865                  parameter.  This requires an exact match.  */
4866               if (targ_parms
4867                   && !coerce_template_template_parms
4868                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4869                         targ_parms,
4870                         tf_none,
4871                         tparm,
4872                         targs))
4873                 {
4874                   ret = false;
4875                   goto out;
4876                 }
4877             }
4878         }
4879     }
4880
4881  out:
4882
4883   --processing_template_decl;
4884   return ret;
4885 }
4886
4887 /* Convert the indicated template ARG as necessary to match the
4888    indicated template PARM.  Returns the converted ARG, or
4889    error_mark_node if the conversion was unsuccessful.  Error and
4890    warning messages are issued under control of COMPLAIN.  This
4891    conversion is for the Ith parameter in the parameter list.  ARGS is
4892    the full set of template arguments deduced so far.  */
4893
4894 static tree
4895 convert_template_argument (tree parm,
4896                            tree arg,
4897                            tree args,
4898                            tsubst_flags_t complain,
4899                            int i,
4900                            tree in_decl)
4901 {
4902   tree orig_arg;
4903   tree val;
4904   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4905
4906   if (TREE_CODE (arg) == TREE_LIST
4907       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4908     {
4909       /* The template argument was the name of some
4910          member function.  That's usually
4911          invalid, but static members are OK.  In any
4912          case, grab the underlying fields/functions
4913          and issue an error later if required.  */
4914       orig_arg = TREE_VALUE (arg);
4915       TREE_TYPE (arg) = unknown_type_node;
4916     }
4917
4918   orig_arg = arg;
4919
4920   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4921   requires_type = (TREE_CODE (parm) == TYPE_DECL
4922                    || requires_tmpl_type);
4923
4924   /* When determining whether an argument pack expansion is a template,
4925      look at the pattern.  */
4926   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4927     arg = PACK_EXPANSION_PATTERN (arg);
4928
4929   is_tmpl_type = 
4930     ((TREE_CODE (arg) == TEMPLATE_DECL
4931       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4932      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4933      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4934
4935   if (is_tmpl_type
4936       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4937           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4938     arg = TYPE_STUB_DECL (arg);
4939
4940   is_type = TYPE_P (arg) || is_tmpl_type;
4941
4942   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4943       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4944     {
4945       permerror ("to refer to a type member of a template parameter, "
4946                  "use %<typename %E%>", orig_arg);
4947
4948       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4949                                      TREE_OPERAND (arg, 1),
4950                                      typename_type,
4951                                      complain & tf_error);
4952       arg = orig_arg;
4953       is_type = 1;
4954     }
4955   if (is_type != requires_type)
4956     {
4957       if (in_decl)
4958         {
4959           if (complain & tf_error)
4960             {
4961               error ("type/value mismatch at argument %d in template "
4962                      "parameter list for %qD",
4963                      i + 1, in_decl);
4964               if (is_type)
4965                 error ("  expected a constant of type %qT, got %qT",
4966                        TREE_TYPE (parm),
4967                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4968               else if (requires_tmpl_type)
4969                 error ("  expected a class template, got %qE", orig_arg);
4970               else
4971                 error ("  expected a type, got %qE", orig_arg);
4972             }
4973         }
4974       return error_mark_node;
4975     }
4976   if (is_tmpl_type ^ requires_tmpl_type)
4977     {
4978       if (in_decl && (complain & tf_error))
4979         {
4980           error ("type/value mismatch at argument %d in template "
4981                  "parameter list for %qD",
4982                  i + 1, in_decl);
4983           if (is_tmpl_type)
4984             error ("  expected a type, got %qT", DECL_NAME (arg));
4985           else
4986             error ("  expected a class template, got %qT", orig_arg);
4987         }
4988       return error_mark_node;
4989     }
4990
4991   if (is_type)
4992     {
4993       if (requires_tmpl_type)
4994         {
4995           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4996             /* The number of argument required is not known yet.
4997                Just accept it for now.  */
4998             val = TREE_TYPE (arg);
4999           else
5000             {
5001               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5002               tree argparm;
5003
5004               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5005
5006               if (coerce_template_template_parms (parmparm, argparm,
5007                                                   complain, in_decl,
5008                                                   args))
5009                 {
5010                   val = orig_arg;
5011
5012                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
5013                      TEMPLATE_DECL.  */
5014                   if (val != error_mark_node)
5015                     {
5016                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
5017                         val = TREE_TYPE (val);
5018                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
5019                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
5020                         {
5021                           val = TREE_TYPE (arg);
5022                           val = make_pack_expansion (val);
5023                         }
5024                     }
5025                 }
5026               else
5027                 {
5028                   if (in_decl && (complain & tf_error))
5029                     {
5030                       error ("type/value mismatch at argument %d in "
5031                              "template parameter list for %qD",
5032                              i + 1, in_decl);
5033                       error ("  expected a template of type %qD, got %qD",
5034                              parm, orig_arg);
5035                     }
5036
5037                   val = error_mark_node;
5038                 }
5039             }
5040         }
5041       else
5042         val = orig_arg;
5043       /* We only form one instance of each template specialization.
5044          Therefore, if we use a non-canonical variant (i.e., a
5045          typedef), any future messages referring to the type will use
5046          the typedef, which is confusing if those future uses do not
5047          themselves also use the typedef.  */
5048       if (TYPE_P (val))
5049         val = canonical_type_variant (val);
5050     }
5051   else
5052     {
5053       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
5054
5055       if (invalid_nontype_parm_type_p (t, complain))
5056         return error_mark_node;
5057
5058       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
5059         /* We used to call digest_init here.  However, digest_init
5060            will report errors, which we don't want when complain
5061            is zero.  More importantly, digest_init will try too
5062            hard to convert things: for example, `0' should not be
5063            converted to pointer type at this point according to
5064            the standard.  Accepting this is not merely an
5065            extension, since deciding whether or not these
5066            conversions can occur is part of determining which
5067            function template to call, or whether a given explicit
5068            argument specification is valid.  */
5069         val = convert_nontype_argument (t, orig_arg);
5070       else
5071         val = orig_arg;
5072
5073       if (val == NULL_TREE)
5074         val = error_mark_node;
5075       else if (val == error_mark_node && (complain & tf_error))
5076         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5077     }
5078
5079   return val;
5080 }
5081
5082 /* Coerces the remaining template arguments in INNER_ARGS (from
5083    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5084    Returns the coerced argument pack. PARM_IDX is the position of this
5085    parameter in the template parameter list. ARGS is the original
5086    template argument list.  */
5087 static tree
5088 coerce_template_parameter_pack (tree parms,
5089                                 int parm_idx,
5090                                 tree args,
5091                                 tree inner_args,
5092                                 int arg_idx,
5093                                 tree new_args,
5094                                 int* lost,
5095                                 tree in_decl,
5096                                 tsubst_flags_t complain)
5097 {
5098   tree parm = TREE_VEC_ELT (parms, parm_idx);
5099   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5100   tree packed_args;
5101   tree argument_pack;
5102   tree packed_types = NULL_TREE;
5103
5104   if (arg_idx > nargs)
5105     arg_idx = nargs;
5106
5107   packed_args = make_tree_vec (nargs - arg_idx);
5108
5109   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5110       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5111     {
5112       /* When the template parameter is a non-type template
5113          parameter pack whose type uses parameter packs, we need
5114          to look at each of the template arguments
5115          separately. Build a vector of the types for these
5116          non-type template parameters in PACKED_TYPES.  */
5117       tree expansion 
5118         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5119       packed_types = tsubst_pack_expansion (expansion, args,
5120                                             complain, in_decl);
5121
5122       if (packed_types == error_mark_node)
5123         return error_mark_node;
5124
5125       /* Check that we have the right number of arguments.  */
5126       if (arg_idx < nargs
5127           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5128           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5129         {
5130           int needed_parms 
5131             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5132           error ("wrong number of template arguments (%d, should be %d)",
5133                  nargs, needed_parms);
5134           return error_mark_node;
5135         }
5136
5137       /* If we aren't able to check the actual arguments now
5138          (because they haven't been expanded yet), we can at least
5139          verify that all of the types used for the non-type
5140          template parameter pack are, in fact, valid for non-type
5141          template parameters.  */
5142       if (arg_idx < nargs 
5143           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5144         {
5145           int j, len = TREE_VEC_LENGTH (packed_types);
5146           for (j = 0; j < len; ++j)
5147             {
5148               tree t = TREE_VEC_ELT (packed_types, j);
5149               if (invalid_nontype_parm_type_p (t, complain))
5150                 return error_mark_node;
5151             }
5152         }
5153     }
5154
5155   /* Convert the remaining arguments, which will be a part of the
5156      parameter pack "parm".  */
5157   for (; arg_idx < nargs; ++arg_idx)
5158     {
5159       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5160       tree actual_parm = TREE_VALUE (parm);
5161
5162       if (packed_types && !PACK_EXPANSION_P (arg))
5163         {
5164           /* When we have a vector of types (corresponding to the
5165              non-type template parameter pack that uses parameter
5166              packs in its type, as mention above), and the
5167              argument is not an expansion (which expands to a
5168              currently unknown number of arguments), clone the
5169              parm and give it the next type in PACKED_TYPES.  */
5170           actual_parm = copy_node (actual_parm);
5171           TREE_TYPE (actual_parm) = 
5172             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5173         }
5174
5175       if (arg != error_mark_node)
5176         arg = convert_template_argument (actual_parm, 
5177                                          arg, new_args, complain, parm_idx,
5178                                          in_decl);
5179       if (arg == error_mark_node)
5180         (*lost)++;
5181       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5182     }
5183
5184   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5185       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5186     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5187   else
5188     {
5189       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5190       TREE_TYPE (argument_pack) 
5191         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
5192       TREE_CONSTANT (argument_pack) = 1;
5193     }
5194
5195   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5196   return argument_pack;
5197 }
5198
5199 /* Convert all template arguments to their appropriate types, and
5200    return a vector containing the innermost resulting template
5201    arguments.  If any error occurs, return error_mark_node. Error and
5202    warning messages are issued under control of COMPLAIN.
5203
5204    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5205    for arguments not specified in ARGS.  Otherwise, if
5206    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5207    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5208    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5209    ARGS.  */
5210
5211 static tree
5212 coerce_template_parms (tree parms,
5213                        tree args,
5214                        tree in_decl,
5215                        tsubst_flags_t complain,
5216                        bool require_all_args,
5217                        bool use_default_args)
5218 {
5219   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5220   tree inner_args;
5221   tree new_args;
5222   tree new_inner_args;
5223   bool saved_skip_evaluation;
5224
5225   /* When used as a boolean value, indicates whether this is a
5226      variadic template parameter list. Since it's an int, we can also
5227      subtract it from nparms to get the number of non-variadic
5228      parameters.  */
5229   int variadic_p = 0;
5230
5231   inner_args 
5232     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5233
5234   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5235   nparms = TREE_VEC_LENGTH (parms);
5236
5237   /* Determine if there are any parameter packs.  */
5238   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5239     {
5240       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5241       if (template_parameter_pack_p (tparm))
5242         {
5243           variadic_p = 1;
5244           break;
5245         }
5246     }
5247
5248   if ((nargs > nparms - variadic_p && !variadic_p)
5249       || (nargs < nparms - variadic_p
5250           && require_all_args
5251           && (!use_default_args
5252               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5253                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5254     {
5255       if (complain & tf_error)
5256         {
5257           const char *or_more = "";
5258           if (variadic_p)
5259             {
5260               or_more = " or more";
5261               --nparms;
5262             }
5263
5264           error ("wrong number of template arguments (%d, should be %d%s)",
5265                  nargs, nparms, or_more);
5266
5267           if (in_decl)
5268             error ("provided for %q+D", in_decl);
5269         }
5270
5271       return error_mark_node;
5272     }
5273
5274   /* We need to evaluate the template arguments, even though this
5275      template-id may be nested within a "sizeof".  */
5276   saved_skip_evaluation = skip_evaluation;
5277   skip_evaluation = false;
5278   new_inner_args = make_tree_vec (nparms);
5279   new_args = add_outermost_template_args (args, new_inner_args);
5280   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5281     {
5282       tree arg;
5283       tree parm;
5284
5285       /* Get the Ith template parameter.  */
5286       parm = TREE_VEC_ELT (parms, parm_idx);
5287  
5288       if (parm == error_mark_node)
5289       {
5290         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5291         continue;
5292       }
5293
5294       /* Calculate the next argument.  */
5295       if (template_parameter_pack_p (TREE_VALUE (parm)))
5296         {
5297           /* All remaining arguments will be placed in the
5298              template parameter pack PARM.  */
5299           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5300                                                 inner_args, arg_idx,
5301                                                 new_args, &lost,
5302                                                 in_decl, complain);
5303           
5304           /* Store this argument.  */
5305           if (arg == error_mark_node)
5306             lost++;
5307           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5308
5309           /* We are done with all of the arguments.  */
5310           arg_idx = nargs;
5311
5312           continue;
5313         }
5314       else if (arg_idx < nargs)
5315         {
5316           arg = TREE_VEC_ELT (inner_args, arg_idx);
5317
5318           if (arg && PACK_EXPANSION_P (arg))
5319             {
5320               if (complain & tf_error)
5321                 {
5322                   /* If ARG is a pack expansion, but PARM is not a
5323                      template parameter pack (if it were, we would have
5324                      handled it above), we're trying to expand into a
5325                      fixed-length argument list.  */
5326                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5327                     error ("cannot expand %<%E%> into a fixed-length "
5328                            "argument list", arg);
5329                   else
5330                     error ("cannot expand %<%T%> into a fixed-length "
5331                            "argument list", arg);
5332                 }
5333               return error_mark_node;
5334             }
5335         }
5336       else if (require_all_args)
5337         /* There must be a default arg in this case.  */
5338         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5339                                    complain, in_decl);
5340       else
5341         break;
5342
5343       if (arg == error_mark_node)
5344         {
5345           if (complain & tf_error)
5346             error ("template argument %d is invalid", arg_idx + 1);
5347         }
5348       else if (!arg)
5349         /* This only occurs if there was an error in the template
5350            parameter list itself (which we would already have
5351            reported) that we are trying to recover from, e.g., a class
5352            template with a parameter list such as
5353            template<typename..., typename>.  */
5354         return error_mark_node;
5355       else
5356         arg = convert_template_argument (TREE_VALUE (parm),
5357                                          arg, new_args, complain, 
5358                                          parm_idx, in_decl);
5359
5360       if (arg == error_mark_node)
5361         lost++;
5362       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5363     }
5364   skip_evaluation = saved_skip_evaluation;
5365
5366   if (lost)
5367     return error_mark_node;
5368
5369   return new_inner_args;
5370 }
5371
5372 /* Returns 1 if template args OT and NT are equivalent.  */
5373
5374 static int
5375 template_args_equal (tree ot, tree nt)
5376 {
5377   if (nt == ot)
5378     return 1;
5379
5380   if (TREE_CODE (nt) == TREE_VEC)
5381     /* For member templates */
5382     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5383   else if (PACK_EXPANSION_P (ot))
5384     return PACK_EXPANSION_P (nt) 
5385       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5386                               PACK_EXPANSION_PATTERN (nt));
5387   else if (TYPE_P (nt))
5388     return TYPE_P (ot) && same_type_p (ot, nt);
5389   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5390     return 0;
5391   else
5392     return cp_tree_equal (ot, nt);
5393 }
5394
5395 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5396    of template arguments.  Returns 0 otherwise.  */
5397
5398 int
5399 comp_template_args (tree oldargs, tree newargs)
5400 {
5401   int i;
5402
5403   oldargs = expand_template_argument_pack (oldargs);
5404   newargs = expand_template_argument_pack (newargs);
5405
5406   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5407     return 0;
5408
5409   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5410     {
5411       tree nt = TREE_VEC_ELT (newargs, i);
5412       tree ot = TREE_VEC_ELT (oldargs, i);
5413
5414       if (! template_args_equal (ot, nt))
5415         return 0;
5416     }
5417   return 1;
5418 }
5419
5420 static void
5421 add_pending_template (tree d)
5422 {
5423   tree ti = (TYPE_P (d)
5424              ? CLASSTYPE_TEMPLATE_INFO (d)
5425              : DECL_TEMPLATE_INFO (d));
5426   struct pending_template *pt;
5427   int level;
5428
5429   if (TI_PENDING_TEMPLATE_FLAG (ti))
5430     return;
5431
5432   /* We are called both from instantiate_decl, where we've already had a
5433      tinst_level pushed, and instantiate_template, where we haven't.
5434      Compensate.  */
5435   level = !current_tinst_level || current_tinst_level->decl != d;
5436
5437   if (level)
5438     push_tinst_level (d);
5439
5440   pt = GGC_NEW (struct pending_template);
5441   pt->next = NULL;
5442   pt->tinst = current_tinst_level;
5443   if (last_pending_template)
5444     last_pending_template->next = pt;
5445   else
5446     pending_templates = pt;
5447
5448   last_pending_template = pt;
5449
5450   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5451
5452   if (level)
5453     pop_tinst_level ();
5454 }
5455
5456
5457 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5458    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5459    documentation for TEMPLATE_ID_EXPR.  */
5460
5461 tree
5462 lookup_template_function (tree fns, tree arglist)
5463 {
5464   tree type;
5465
5466   if (fns == error_mark_node || arglist == error_mark_node)
5467     return error_mark_node;
5468
5469   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5470   gcc_assert (fns && (is_overloaded_fn (fns)
5471                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5472
5473   if (BASELINK_P (fns))
5474     {
5475       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5476                                          unknown_type_node,
5477                                          BASELINK_FUNCTIONS (fns),
5478                                          arglist);
5479       return fns;
5480     }
5481
5482   type = TREE_TYPE (fns);
5483   if (TREE_CODE (fns) == OVERLOAD || !type)
5484     type = unknown_type_node;
5485
5486   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5487 }
5488
5489 /* Within the scope of a template class S<T>, the name S gets bound
5490    (in build_self_reference) to a TYPE_DECL for the class, not a
5491    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5492    or one of its enclosing classes, and that type is a template,
5493    return the associated TEMPLATE_DECL.  Otherwise, the original
5494    DECL is returned.  */
5495
5496 tree
5497 maybe_get_template_decl_from_type_decl (tree decl)
5498 {
5499   return (decl != NULL_TREE
5500           && TREE_CODE (decl) == TYPE_DECL
5501           && DECL_ARTIFICIAL (decl)
5502           && CLASS_TYPE_P (TREE_TYPE (decl))
5503           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5504     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5505 }
5506
5507 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5508    parameters, find the desired type.
5509
5510    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5511
5512    IN_DECL, if non-NULL, is the template declaration we are trying to
5513    instantiate.
5514
5515    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5516    the class we are looking up.
5517
5518    Issue error and warning messages under control of COMPLAIN.
5519
5520    If the template class is really a local class in a template
5521    function, then the FUNCTION_CONTEXT is the function in which it is
5522    being instantiated.
5523
5524    ??? Note that this function is currently called *twice* for each
5525    template-id: the first time from the parser, while creating the
5526    incomplete type (finish_template_type), and the second type during the
5527    real instantiation (instantiate_template_class). This is surely something
5528    that we want to avoid. It also causes some problems with argument
5529    coercion (see convert_nontype_argument for more information on this).  */
5530
5531 tree
5532 lookup_template_class (tree d1,
5533                        tree arglist,
5534                        tree in_decl,
5535                        tree context,
5536                        int entering_scope,
5537                        tsubst_flags_t complain)
5538 {
5539   tree templ = NULL_TREE, parmlist;
5540   tree t;
5541
5542   timevar_push (TV_NAME_LOOKUP);
5543
5544   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5545     {
5546       tree value = innermost_non_namespace_value (d1);
5547       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5548         templ = value;
5549       else
5550         {
5551           if (context)
5552             push_decl_namespace (context);
5553           templ = lookup_name (d1);
5554           templ = maybe_get_template_decl_from_type_decl (templ);
5555           if (context)
5556             pop_decl_namespace ();
5557         }
5558       if (templ)
5559         context = DECL_CONTEXT (templ);
5560     }
5561   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
5562     {
5563       tree type = TREE_TYPE (d1);
5564
5565       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5566          an implicit typename for the second A.  Deal with it.  */
5567       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5568         type = TREE_TYPE (type);
5569
5570       if (CLASSTYPE_TEMPLATE_INFO (type))
5571         {
5572           templ = CLASSTYPE_TI_TEMPLATE (type);
5573           d1 = DECL_NAME (templ);
5574         }
5575     }
5576   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5577            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
5578     {
5579       templ = TYPE_TI_TEMPLATE (d1);
5580       d1 = DECL_NAME (templ);
5581     }
5582   else if (TREE_CODE (d1) == TEMPLATE_DECL
5583            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5584     {
5585       templ = d1;
5586       d1 = DECL_NAME (templ);
5587       context = DECL_CONTEXT (templ);
5588     }
5589
5590   /* Issue an error message if we didn't find a template.  */
5591   if (! templ)
5592     {
5593       if (complain & tf_error)
5594         error ("%qT is not a template", d1);
5595       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5596     }
5597
5598   if (TREE_CODE (templ) != TEMPLATE_DECL
5599          /* Make sure it's a user visible template, if it was named by
5600             the user.  */
5601       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
5602           && !PRIMARY_TEMPLATE_P (templ)))
5603     {
5604       if (complain & tf_error)
5605         {
5606           error ("non-template type %qT used as a template", d1);
5607           if (in_decl)
5608             error ("for template declaration %q+D", in_decl);
5609         }
5610       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5611     }
5612
5613   complain &= ~tf_user;
5614
5615   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
5616     {
5617       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5618          template arguments */
5619
5620       tree parm;
5621       tree arglist2;
5622       tree outer;
5623
5624       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
5625
5626       /* Consider an example where a template template parameter declared as
5627
5628            template <class T, class U = std::allocator<T> > class TT
5629
5630          The template parameter level of T and U are one level larger than
5631          of TT.  To proper process the default argument of U, say when an
5632          instantiation `TT<int>' is seen, we need to build the full
5633          arguments containing {int} as the innermost level.  Outer levels,
5634          available when not appearing as default template argument, can be
5635          obtained from the arguments of the enclosing template.
5636
5637          Suppose that TT is later substituted with std::vector.  The above
5638          instantiation is `TT<int, std::allocator<T> >' with TT at
5639          level 1, and T at level 2, while the template arguments at level 1
5640          becomes {std::vector} and the inner level 2 is {int}.  */
5641
5642       outer = DECL_CONTEXT (templ);
5643       if (outer)
5644         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5645       else if (current_template_parms)
5646         /* This is an argument of the current template, so we haven't set
5647            DECL_CONTEXT yet.  */
5648         outer = current_template_args ();
5649
5650       if (outer)
5651         arglist = add_to_template_args (outer, arglist);
5652
5653       arglist2 = coerce_template_parms (parmlist, arglist, templ,
5654                                         complain,
5655                                         /*require_all_args=*/true,
5656                                         /*use_default_args=*/true);
5657       if (arglist2 == error_mark_node
5658           || (!uses_template_parms (arglist2)
5659               && check_instantiated_args (templ, arglist2, complain)))
5660         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5661
5662       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
5663       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5664     }
5665   else
5666     {
5667       tree template_type = TREE_TYPE (templ);
5668       tree gen_tmpl;
5669       tree type_decl;
5670       tree found = NULL_TREE;
5671       int arg_depth;
5672       int parm_depth;
5673       int is_partial_instantiation;
5674
5675       gen_tmpl = most_general_template (templ);
5676       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5677       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5678       arg_depth = TMPL_ARGS_DEPTH (arglist);
5679
5680       if (arg_depth == 1 && parm_depth > 1)
5681         {
5682           /* We've been given an incomplete set of template arguments.
5683              For example, given:
5684
5685                template <class T> struct S1 {
5686                  template <class U> struct S2 {};
5687                  template <class U> struct S2<U*> {};
5688                 };
5689
5690              we will be called with an ARGLIST of `U*', but the
5691              TEMPLATE will be `template <class T> template
5692              <class U> struct S1<T>::S2'.  We must fill in the missing
5693              arguments.  */
5694           arglist
5695             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
5696                                            arglist);
5697           arg_depth = TMPL_ARGS_DEPTH (arglist);
5698         }
5699
5700       /* Now we should have enough arguments.  */
5701       gcc_assert (parm_depth == arg_depth);
5702
5703       /* From here on, we're only interested in the most general
5704          template.  */
5705       templ = gen_tmpl;
5706
5707       /* Calculate the BOUND_ARGS.  These will be the args that are
5708          actually tsubst'd into the definition to create the
5709          instantiation.  */
5710       if (parm_depth > 1)
5711         {
5712           /* We have multiple levels of arguments to coerce, at once.  */
5713           int i;
5714           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5715
5716           tree bound_args = make_tree_vec (parm_depth);
5717
5718           for (i = saved_depth,
5719                  t = DECL_TEMPLATE_PARMS (templ);
5720                i > 0 && t != NULL_TREE;
5721                --i, t = TREE_CHAIN (t))
5722             {
5723               tree a = coerce_template_parms (TREE_VALUE (t),
5724                                               arglist, templ,
5725                                               complain,
5726                                               /*require_all_args=*/true,
5727                                               /*use_default_args=*/true);
5728
5729               /* Don't process further if one of the levels fails.  */
5730               if (a == error_mark_node)
5731                 {
5732                   /* Restore the ARGLIST to its full size.  */
5733                   TREE_VEC_LENGTH (arglist) = saved_depth;
5734                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5735                 }
5736
5737               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5738
5739               /* We temporarily reduce the length of the ARGLIST so
5740                  that coerce_template_parms will see only the arguments
5741                  corresponding to the template parameters it is
5742                  examining.  */
5743               TREE_VEC_LENGTH (arglist)--;
5744             }
5745
5746           /* Restore the ARGLIST to its full size.  */
5747           TREE_VEC_LENGTH (arglist) = saved_depth;
5748
5749           arglist = bound_args;
5750         }
5751       else
5752         arglist
5753           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5754                                    INNERMOST_TEMPLATE_ARGS (arglist),
5755                                    templ,
5756                                    complain,
5757                                    /*require_all_args=*/true,
5758                                    /*use_default_args=*/true);
5759
5760       if (arglist == error_mark_node)
5761         /* We were unable to bind the arguments.  */
5762         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5763
5764       /* In the scope of a template class, explicit references to the
5765          template class refer to the type of the template, not any
5766          instantiation of it.  For example, in:
5767
5768            template <class T> class C { void f(C<T>); }
5769
5770          the `C<T>' is just the same as `C'.  Outside of the
5771          class, however, such a reference is an instantiation.  */
5772       if (comp_template_args (TYPE_TI_ARGS (template_type),
5773                               arglist))
5774         {
5775           found = template_type;
5776
5777           if (!entering_scope && PRIMARY_TEMPLATE_P (templ))
5778             {
5779               tree ctx;
5780
5781               for (ctx = current_class_type;
5782                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5783                    ctx = (TYPE_P (ctx)
5784                           ? TYPE_CONTEXT (ctx)
5785                           : DECL_CONTEXT (ctx)))
5786                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5787                   goto found_ctx;
5788
5789               /* We're not in the scope of the class, so the
5790                  TEMPLATE_TYPE is not the type we want after all.  */
5791               found = NULL_TREE;
5792             found_ctx:;
5793             }
5794         }
5795       if (found)
5796         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5797
5798       /* If we already have this specialization, return it.  */
5799       found = retrieve_specialization (templ, arglist,
5800                                        /*class_specializations_p=*/false);
5801       if (found)
5802         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5803
5804       /* This type is a "partial instantiation" if any of the template
5805          arguments still involve template parameters.  Note that we set
5806          IS_PARTIAL_INSTANTIATION for partial specializations as
5807          well.  */
5808       is_partial_instantiation = uses_template_parms (arglist);
5809
5810       /* If the deduced arguments are invalid, then the binding
5811          failed.  */
5812       if (!is_partial_instantiation
5813           && check_instantiated_args (templ,
5814                                       INNERMOST_TEMPLATE_ARGS (arglist),
5815                                       complain))
5816         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5817
5818       if (!is_partial_instantiation
5819           && !PRIMARY_TEMPLATE_P (templ)
5820           && TREE_CODE (CP_DECL_CONTEXT (templ)) == NAMESPACE_DECL)
5821         {
5822           found = xref_tag_from_type (TREE_TYPE (templ),
5823                                       DECL_NAME (templ),
5824                                       /*tag_scope=*/ts_global);
5825           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5826         }
5827
5828       context = tsubst (DECL_CONTEXT (templ), arglist,
5829                         complain, in_decl);
5830       if (!context)
5831         context = global_namespace;
5832
5833       /* Create the type.  */
5834       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5835         {
5836           if (!is_partial_instantiation)
5837             {
5838               set_current_access_from_decl (TYPE_NAME (template_type));
5839               t = start_enum (TYPE_IDENTIFIER (template_type));
5840             }
5841           else
5842             /* We don't want to call start_enum for this type, since
5843                the values for the enumeration constants may involve
5844                template parameters.  And, no one should be interested
5845                in the enumeration constants for such a type.  */
5846             t = make_node (ENUMERAL_TYPE);
5847         }
5848       else
5849         {
5850           t = make_class_type (TREE_CODE (template_type));
5851           CLASSTYPE_DECLARED_CLASS (t)
5852             = CLASSTYPE_DECLARED_CLASS (template_type);
5853           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5854           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5855
5856           /* A local class.  Make sure the decl gets registered properly.  */
5857           if (context == current_function_decl)
5858             pushtag (DECL_NAME (templ), t, /*tag_scope=*/ts_current);
5859
5860           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5861             /* This instantiation is another name for the primary
5862                template type. Set the TYPE_CANONICAL field
5863                appropriately. */
5864             TYPE_CANONICAL (t) = template_type;
5865           else if (any_template_arguments_need_structural_equality_p (arglist))
5866             /* Some of the template arguments require structural
5867                equality testing, so this template class requires
5868                structural equality testing. */
5869             SET_TYPE_STRUCTURAL_EQUALITY (t);
5870         }
5871
5872       /* If we called start_enum or pushtag above, this information
5873          will already be set up.  */
5874       if (!TYPE_NAME (t))
5875         {
5876           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5877
5878           type_decl = create_implicit_typedef (DECL_NAME (templ), t);
5879           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5880           TYPE_STUB_DECL (t) = type_decl;
5881           DECL_SOURCE_LOCATION (type_decl)
5882             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5883         }
5884       else
5885         type_decl = TYPE_NAME (t);
5886
5887       TREE_PRIVATE (type_decl)
5888         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5889       TREE_PROTECTED (type_decl)
5890         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5891       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5892         {
5893           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5894           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5895         }
5896
5897       /* Set up the template information.  We have to figure out which
5898          template is the immediate parent if this is a full
5899          instantiation.  */
5900       if (parm_depth == 1 || is_partial_instantiation
5901           || !PRIMARY_TEMPLATE_P (templ))
5902         /* This case is easy; there are no member templates involved.  */
5903         found = templ;
5904       else
5905         {
5906           /* This is a full instantiation of a member template.  Look
5907              for a partial instantiation of which this is an instance.  */
5908
5909           for (found = DECL_TEMPLATE_INSTANTIATIONS (templ);
5910                found; found = TREE_CHAIN (found))
5911             {
5912               int success;
5913               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5914
5915               /* We only want partial instantiations, here, not
5916                  specializations or full instantiations.  */
5917               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5918                   || !uses_template_parms (TREE_VALUE (found)))
5919                 continue;
5920
5921               /* Temporarily reduce by one the number of levels in the
5922                  ARGLIST and in FOUND so as to avoid comparing the
5923                  last set of arguments.  */
5924               TREE_VEC_LENGTH (arglist)--;
5925               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5926
5927               /* See if the arguments match.  If they do, then TMPL is
5928                  the partial instantiation we want.  */
5929               success = comp_template_args (TREE_PURPOSE (found), arglist);
5930
5931               /* Restore the argument vectors to their full size.  */
5932               TREE_VEC_LENGTH (arglist)++;
5933               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5934
5935               if (success)
5936                 {
5937                   found = tmpl;
5938                   break;
5939                 }
5940             }
5941
5942           if (!found)
5943             {
5944               /* There was no partial instantiation. This happens
5945                  where C<T> is a member template of A<T> and it's used
5946                  in something like
5947
5948                   template <typename T> struct B { A<T>::C<int> m; };
5949                   B<float>;
5950
5951                  Create the partial instantiation.
5952                */
5953               TREE_VEC_LENGTH (arglist)--;
5954               found = tsubst (templ, arglist, complain, NULL_TREE);
5955               TREE_VEC_LENGTH (arglist)++;
5956             }
5957         }
5958
5959       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5960       DECL_TEMPLATE_INSTANTIATIONS (templ)
5961         = tree_cons (arglist, t,
5962                      DECL_TEMPLATE_INSTANTIATIONS (templ));
5963
5964       if (TREE_CODE (t) == ENUMERAL_TYPE
5965           && !is_partial_instantiation)
5966         /* Now that the type has been registered on the instantiations
5967            list, we set up the enumerators.  Because the enumeration
5968            constants may involve the enumeration type itself, we make
5969            sure to register the type first, and then create the
5970            constants.  That way, doing tsubst_expr for the enumeration
5971            constants won't result in recursive calls here; we'll find
5972            the instantiation and exit above.  */
5973         tsubst_enum (template_type, t, arglist);
5974
5975       if (is_partial_instantiation)
5976         /* If the type makes use of template parameters, the
5977            code that generates debugging information will crash.  */
5978         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5979
5980       /* Possibly limit visibility based on template args.  */
5981       TREE_PUBLIC (type_decl) = 1;
5982       determine_visibility (type_decl);
5983
5984       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5985     }
5986   timevar_pop (TV_NAME_LOOKUP);
5987 }
5988 \f
5989 struct pair_fn_data
5990 {
5991   tree_fn_t fn;
5992   void *data;
5993   /* True when we should also visit template parameters that occur in
5994      non-deduced contexts.  */
5995   bool include_nondeduced_p;
5996   struct pointer_set_t *visited;
5997 };
5998
5999 /* Called from for_each_template_parm via walk_tree.  */
6000
6001 static tree
6002 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
6003 {
6004   tree t = *tp;
6005   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
6006   tree_fn_t fn = pfd->fn;
6007   void *data = pfd->data;
6008
6009   if (TYPE_P (t)
6010       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
6011       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
6012                                  pfd->include_nondeduced_p))
6013     return error_mark_node;
6014
6015   switch (TREE_CODE (t))
6016     {
6017     case RECORD_TYPE:
6018       if (TYPE_PTRMEMFUNC_P (t))
6019         break;
6020       /* Fall through.  */
6021
6022     case UNION_TYPE:
6023     case ENUMERAL_TYPE:
6024       if (!TYPE_TEMPLATE_INFO (t))
6025         *walk_subtrees = 0;
6026       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
6027                                        fn, data, pfd->visited, 
6028                                        pfd->include_nondeduced_p))
6029         return error_mark_node;
6030       break;
6031
6032     case INTEGER_TYPE:
6033       if (for_each_template_parm (TYPE_MIN_VALUE (t),
6034                                   fn, data, pfd->visited, 
6035                                   pfd->include_nondeduced_p)
6036           || for_each_template_parm (TYPE_MAX_VALUE (t),
6037                                      fn, data, pfd->visited,
6038                                      pfd->include_nondeduced_p))
6039         return error_mark_node;
6040       break;
6041
6042     case METHOD_TYPE:
6043       /* Since we're not going to walk subtrees, we have to do this
6044          explicitly here.  */
6045       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
6046                                   pfd->visited, pfd->include_nondeduced_p))
6047         return error_mark_node;
6048       /* Fall through.  */
6049
6050     case FUNCTION_TYPE:
6051       /* Check the return type.  */
6052       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6053                                   pfd->include_nondeduced_p))
6054         return error_mark_node;
6055
6056       /* Check the parameter types.  Since default arguments are not
6057          instantiated until they are needed, the TYPE_ARG_TYPES may
6058          contain expressions that involve template parameters.  But,
6059          no-one should be looking at them yet.  And, once they're
6060          instantiated, they don't contain template parameters, so
6061          there's no point in looking at them then, either.  */
6062       {
6063         tree parm;
6064
6065         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
6066           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
6067                                       pfd->visited, pfd->include_nondeduced_p))
6068             return error_mark_node;
6069
6070         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6071            want walk_tree walking into them itself.  */
6072         *walk_subtrees = 0;
6073       }
6074       break;
6075
6076     case TYPEOF_TYPE:
6077       if (pfd->include_nondeduced_p
6078           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
6079                                      pfd->visited, 
6080                                      pfd->include_nondeduced_p))
6081         return error_mark_node;
6082       break;
6083
6084     case FUNCTION_DECL:
6085     case VAR_DECL:
6086       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6087           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6088                                      pfd->visited, pfd->include_nondeduced_p))
6089         return error_mark_node;
6090       /* Fall through.  */
6091
6092     case PARM_DECL:
6093     case CONST_DECL:
6094       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6095           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6096                                      pfd->visited, pfd->include_nondeduced_p))
6097         return error_mark_node;
6098       if (DECL_CONTEXT (t)
6099           && pfd->include_nondeduced_p
6100           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6101                                      pfd->visited, pfd->include_nondeduced_p))
6102         return error_mark_node;
6103       break;
6104
6105     case BOUND_TEMPLATE_TEMPLATE_PARM:
6106       /* Record template parameters such as `T' inside `TT<T>'.  */
6107       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
6108                                   pfd->include_nondeduced_p))
6109         return error_mark_node;
6110       /* Fall through.  */
6111
6112     case TEMPLATE_TEMPLATE_PARM:
6113     case TEMPLATE_TYPE_PARM:
6114     case TEMPLATE_PARM_INDEX:
6115       if (fn && (*fn)(t, data))
6116         return error_mark_node;
6117       else if (!fn)
6118         return error_mark_node;
6119       break;
6120
6121     case TEMPLATE_DECL:
6122       /* A template template parameter is encountered.  */
6123       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6124           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
6125                                      pfd->include_nondeduced_p))
6126         return error_mark_node;
6127
6128       /* Already substituted template template parameter */
6129       *walk_subtrees = 0;
6130       break;
6131
6132     case TYPENAME_TYPE:
6133       if (!fn
6134           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6135                                      data, pfd->visited, 
6136                                      pfd->include_nondeduced_p))
6137         return error_mark_node;
6138       break;
6139
6140     case CONSTRUCTOR:
6141       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6142           && pfd->include_nondeduced_p
6143           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6144                                      (TREE_TYPE (t)), fn, data,
6145                                      pfd->visited, pfd->include_nondeduced_p))
6146         return error_mark_node;
6147       break;
6148
6149     case INDIRECT_REF:
6150     case COMPONENT_REF:
6151       /* If there's no type, then this thing must be some expression
6152          involving template parameters.  */
6153       if (!fn && !TREE_TYPE (t))
6154         return error_mark_node;
6155       break;
6156
6157     case MODOP_EXPR:
6158     case CAST_EXPR:
6159     case REINTERPRET_CAST_EXPR:
6160     case CONST_CAST_EXPR:
6161     case STATIC_CAST_EXPR:
6162     case DYNAMIC_CAST_EXPR:
6163     case ARROW_EXPR:
6164     case DOTSTAR_EXPR:
6165     case TYPEID_EXPR:
6166     case PSEUDO_DTOR_EXPR:
6167       if (!fn)
6168         return error_mark_node;
6169       break;
6170
6171     default:
6172       break;
6173     }
6174
6175   /* We didn't find any template parameters we liked.  */
6176   return NULL_TREE;
6177 }
6178
6179 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6180    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6181    call FN with the parameter and the DATA.
6182    If FN returns nonzero, the iteration is terminated, and
6183    for_each_template_parm returns 1.  Otherwise, the iteration
6184    continues.  If FN never returns a nonzero value, the value
6185    returned by for_each_template_parm is 0.  If FN is NULL, it is
6186    considered to be the function which always returns 1.
6187
6188    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
6189    parameters that occur in non-deduced contexts.  When false, only
6190    visits those template parameters that can be deduced.  */
6191
6192 static int
6193 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6194                         struct pointer_set_t *visited,
6195                         bool include_nondeduced_p)
6196 {
6197   struct pair_fn_data pfd;
6198   int result;
6199
6200   /* Set up.  */
6201   pfd.fn = fn;
6202   pfd.data = data;
6203   pfd.include_nondeduced_p = include_nondeduced_p;
6204
6205   /* Walk the tree.  (Conceptually, we would like to walk without
6206      duplicates, but for_each_template_parm_r recursively calls
6207      for_each_template_parm, so we would need to reorganize a fair
6208      bit to use walk_tree_without_duplicates, so we keep our own
6209      visited list.)  */
6210   if (visited)
6211     pfd.visited = visited;
6212   else
6213     pfd.visited = pointer_set_create ();
6214   result = cp_walk_tree (&t,
6215                          for_each_template_parm_r,
6216                          &pfd,
6217                          pfd.visited) != NULL_TREE;
6218
6219   /* Clean up.  */
6220   if (!visited)
6221     {
6222       pointer_set_destroy (pfd.visited);
6223       pfd.visited = 0;
6224     }
6225
6226   return result;
6227 }
6228
6229 /* Returns true if T depends on any template parameter.  */
6230
6231 int
6232 uses_template_parms (tree t)
6233 {
6234   bool dependent_p;
6235   int saved_processing_template_decl;
6236
6237   saved_processing_template_decl = processing_template_decl;
6238   if (!saved_processing_template_decl)
6239     processing_template_decl = 1;
6240   if (TYPE_P (t))
6241     dependent_p = dependent_type_p (t);
6242   else if (TREE_CODE (t) == TREE_VEC)
6243     dependent_p = any_dependent_template_arguments_p (t);
6244   else if (TREE_CODE (t) == TREE_LIST)
6245     dependent_p = (uses_template_parms (TREE_VALUE (t))
6246                    || uses_template_parms (TREE_CHAIN (t)));
6247   else if (TREE_CODE (t) == TYPE_DECL)
6248     dependent_p = dependent_type_p (TREE_TYPE (t));
6249   else if (DECL_P (t)
6250            || EXPR_P (t)
6251            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6252            || TREE_CODE (t) == OVERLOAD
6253            || TREE_CODE (t) == BASELINK
6254            || TREE_CODE (t) == IDENTIFIER_NODE
6255            || TREE_CODE (t) == TRAIT_EXPR
6256            || CONSTANT_CLASS_P (t))
6257     dependent_p = (type_dependent_expression_p (t)
6258                    || value_dependent_expression_p (t));
6259   else
6260     {
6261       gcc_assert (t == error_mark_node);
6262       dependent_p = false;
6263     }
6264
6265   processing_template_decl = saved_processing_template_decl;
6266
6267   return dependent_p;
6268 }
6269
6270 /* Returns true if T depends on any template parameter with level LEVEL.  */
6271
6272 int
6273 uses_template_parms_level (tree t, int level)
6274 {
6275   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
6276                                  /*include_nondeduced_p=*/true);
6277 }
6278
6279 static int tinst_depth;
6280 extern int max_tinst_depth;
6281 #ifdef GATHER_STATISTICS
6282 int depth_reached;
6283 #endif
6284 static int tinst_level_tick;
6285 static int last_template_error_tick;
6286
6287 /* We're starting to instantiate D; record the template instantiation context
6288    for diagnostics and to restore it later.  */
6289
6290 static int
6291 push_tinst_level (tree d)
6292 {
6293   struct tinst_level *new_level;
6294
6295   if (tinst_depth >= max_tinst_depth)
6296     {
6297       /* If the instantiation in question still has unbound template parms,
6298          we don't really care if we can't instantiate it, so just return.
6299          This happens with base instantiation for implicit `typename'.  */
6300       if (uses_template_parms (d))
6301         return 0;
6302
6303       last_template_error_tick = tinst_level_tick;
6304       error ("template instantiation depth exceeds maximum of %d (use "
6305              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6306              max_tinst_depth, d);
6307
6308       print_instantiation_context ();
6309
6310       return 0;
6311     }
6312
6313   new_level = GGC_NEW (struct tinst_level);
6314   new_level->decl = d;
6315   new_level->locus = input_location;
6316   new_level->in_system_header_p = in_system_header;
6317   new_level->next = current_tinst_level;
6318   current_tinst_level = new_level;
6319
6320   ++tinst_depth;
6321 #ifdef GATHER_STATISTICS
6322   if (tinst_depth > depth_reached)
6323     depth_reached = tinst_depth;
6324 #endif
6325
6326   ++tinst_level_tick;
6327   return 1;
6328 }
6329
6330 /* We're done instantiating this template; return to the instantiation
6331    context.  */
6332
6333 static void
6334 pop_tinst_level (void)
6335 {
6336   /* Restore the filename and line number stashed away when we started
6337      this instantiation.  */
6338   input_location = current_tinst_level->locus;
6339   current_tinst_level = current_tinst_level->next;
6340   --tinst_depth;
6341   ++tinst_level_tick;
6342 }
6343
6344 /* We're instantiating a deferred template; restore the template
6345    instantiation context in which the instantiation was requested, which
6346    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6347
6348 static tree
6349 reopen_tinst_level (struct tinst_level *level)
6350 {
6351   struct tinst_level *t;
6352
6353   tinst_depth = 0;
6354   for (t = level; t; t = t->next)
6355     ++tinst_depth;
6356
6357   current_tinst_level = level;
6358   pop_tinst_level ();
6359   return level->decl;
6360 }
6361
6362 /* Returns the TINST_LEVEL which gives the original instantiation
6363    context.  */
6364
6365 struct tinst_level *
6366 outermost_tinst_level (void)
6367 {
6368   struct tinst_level *level = current_tinst_level;
6369   if (level)
6370     while (level->next)
6371       level = level->next;
6372   return level;
6373 }
6374
6375 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6376    vector of template arguments, as for tsubst.
6377
6378    Returns an appropriate tsubst'd friend declaration.  */
6379
6380 static tree
6381 tsubst_friend_function (tree decl, tree args)
6382 {
6383   tree new_friend;
6384
6385   if (TREE_CODE (decl) == FUNCTION_DECL
6386       && DECL_TEMPLATE_INSTANTIATION (decl)
6387       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6388     /* This was a friend declared with an explicit template
6389        argument list, e.g.:
6390
6391        friend void f<>(T);
6392
6393        to indicate that f was a template instantiation, not a new
6394        function declaration.  Now, we have to figure out what
6395        instantiation of what template.  */
6396     {
6397       tree template_id, arglist, fns;
6398       tree new_args;
6399       tree tmpl;
6400       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6401
6402       /* Friend functions are looked up in the containing namespace scope.
6403          We must enter that scope, to avoid finding member functions of the
6404          current class with same name.  */
6405       push_nested_namespace (ns);
6406       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6407                          tf_warning_or_error, NULL_TREE,
6408                          /*integral_constant_expression_p=*/false);
6409       pop_nested_namespace (ns);
6410       arglist = tsubst (DECL_TI_ARGS (decl), args,
6411                         tf_warning_or_error, NULL_TREE);
6412       template_id = lookup_template_function (fns, arglist);
6413
6414       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6415       tmpl = determine_specialization (template_id, new_friend,
6416                                        &new_args,
6417                                        /*need_member_template=*/0,
6418                                        TREE_VEC_LENGTH (args),
6419                                        tsk_none);
6420       return instantiate_template (tmpl, new_args, tf_error);
6421     }
6422
6423   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6424
6425   /* The NEW_FRIEND will look like an instantiation, to the
6426      compiler, but is not an instantiation from the point of view of
6427      the language.  For example, we might have had:
6428
6429      template <class T> struct S {
6430        template <class U> friend void f(T, U);
6431      };
6432
6433      Then, in S<int>, template <class U> void f(int, U) is not an
6434      instantiation of anything.  */
6435   if (new_friend == error_mark_node)
6436     return error_mark_node;
6437
6438   DECL_USE_TEMPLATE (new_friend) = 0;
6439   if (TREE_CODE (decl) == TEMPLATE_DECL)
6440     {
6441       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6442       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6443         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6444     }
6445
6446   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6447      is not a template instantiation and should not be mangled like
6448      one.  Therefore, we forget the mangling here; we'll recompute it
6449      later if we need it.  */
6450   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6451     {
6452       SET_DECL_RTL (new_friend, NULL_RTX);
6453       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6454     }
6455
6456   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6457     {
6458       tree old_decl;
6459       tree new_friend_template_info;
6460       tree new_friend_result_template_info;
6461       tree ns;
6462       int  new_friend_is_defn;
6463
6464       /* We must save some information from NEW_FRIEND before calling
6465          duplicate decls since that function will free NEW_FRIEND if
6466          possible.  */
6467       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6468       new_friend_is_defn =
6469             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6470                            (template_for_substitution (new_friend)))
6471              != NULL_TREE);
6472       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6473         {
6474           /* This declaration is a `primary' template.  */
6475           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6476
6477           new_friend_result_template_info
6478             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6479         }
6480       else
6481         new_friend_result_template_info = NULL_TREE;
6482
6483       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6484       if (new_friend_is_defn)
6485         DECL_INITIAL (new_friend) = error_mark_node;
6486
6487       /* Inside pushdecl_namespace_level, we will push into the
6488          current namespace. However, the friend function should go
6489          into the namespace of the template.  */
6490       ns = decl_namespace_context (new_friend);
6491       push_nested_namespace (ns);
6492       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6493       pop_nested_namespace (ns);
6494
6495       if (old_decl == error_mark_node)
6496         return error_mark_node;
6497
6498       if (old_decl != new_friend)
6499         {
6500           /* This new friend declaration matched an existing
6501              declaration.  For example, given:
6502
6503                template <class T> void f(T);
6504                template <class U> class C {
6505                  template <class T> friend void f(T) {}
6506                };
6507
6508              the friend declaration actually provides the definition
6509              of `f', once C has been instantiated for some type.  So,
6510              old_decl will be the out-of-class template declaration,
6511              while new_friend is the in-class definition.
6512
6513              But, if `f' was called before this point, the
6514              instantiation of `f' will have DECL_TI_ARGS corresponding
6515              to `T' but not to `U', references to which might appear
6516              in the definition of `f'.  Previously, the most general
6517              template for an instantiation of `f' was the out-of-class
6518              version; now it is the in-class version.  Therefore, we
6519              run through all specialization of `f', adding to their
6520              DECL_TI_ARGS appropriately.  In particular, they need a
6521              new set of outer arguments, corresponding to the
6522              arguments for this class instantiation.
6523
6524              The same situation can arise with something like this:
6525
6526                friend void f(int);
6527                template <class T> class C {
6528                  friend void f(T) {}
6529                };
6530
6531              when `C<int>' is instantiated.  Now, `f(int)' is defined
6532              in the class.  */
6533
6534           if (!new_friend_is_defn)
6535             /* On the other hand, if the in-class declaration does
6536                *not* provide a definition, then we don't want to alter
6537                existing definitions.  We can just leave everything
6538                alone.  */
6539             ;
6540           else
6541             {
6542               /* Overwrite whatever template info was there before, if
6543                  any, with the new template information pertaining to
6544                  the declaration.  */
6545               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6546
6547               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6548                 reregister_specialization (new_friend,
6549                                            most_general_template (old_decl),
6550                                            old_decl);
6551               else
6552                 {
6553                   tree t;
6554                   tree new_friend_args;
6555
6556                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6557                     = new_friend_result_template_info;
6558
6559                   new_friend_args = TI_ARGS (new_friend_template_info);
6560                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6561                        t != NULL_TREE;
6562                        t = TREE_CHAIN (t))
6563                     {
6564                       tree spec = TREE_VALUE (t);
6565
6566                       DECL_TI_ARGS (spec)
6567                         = add_outermost_template_args (new_friend_args,
6568                                                        DECL_TI_ARGS (spec));
6569                     }
6570
6571                   /* Now, since specializations are always supposed to
6572                      hang off of the most general template, we must move
6573                      them.  */
6574                   t = most_general_template (old_decl);
6575                   if (t != old_decl)
6576                     {
6577                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6578                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6579                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6580                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6581                     }
6582                 }
6583             }
6584
6585           /* The information from NEW_FRIEND has been merged into OLD_DECL
6586              by duplicate_decls.  */
6587           new_friend = old_decl;
6588         }
6589     }
6590   else
6591     {
6592       tree context = DECL_CONTEXT (new_friend);
6593       bool dependent_p;
6594
6595       /* In the code
6596            template <class T> class C {
6597              template <class U> friend void C1<U>::f (); // case 1
6598              friend void C2<T>::f ();                    // case 2
6599            };
6600          we only need to make sure CONTEXT is a complete type for
6601          case 2.  To distinguish between the two cases, we note that
6602          CONTEXT of case 1 remains dependent type after tsubst while
6603          this isn't true for case 2.  */
6604       ++processing_template_decl;
6605       dependent_p = dependent_type_p (context);
6606       --processing_template_decl;
6607
6608       if (!dependent_p
6609           && !complete_type_or_else (context, NULL_TREE))
6610         return error_mark_node;
6611
6612       if (COMPLETE_TYPE_P (context))
6613         {
6614           /* Check to see that the declaration is really present, and,
6615              possibly obtain an improved declaration.  */
6616           tree fn = check_classfn (context,
6617                                    new_friend, NULL_TREE);
6618
6619           if (fn)
6620             new_friend = fn;
6621         }
6622     }
6623
6624   return new_friend;
6625 }
6626
6627 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6628    template arguments, as for tsubst.
6629
6630    Returns an appropriate tsubst'd friend type or error_mark_node on
6631    failure.  */
6632
6633 static tree
6634 tsubst_friend_class (tree friend_tmpl, tree args)
6635 {
6636   tree friend_type;
6637   tree tmpl;
6638   tree context;
6639
6640   context = DECL_CONTEXT (friend_tmpl);
6641
6642   if (context)
6643     {
6644       if (TREE_CODE (context) == NAMESPACE_DECL)
6645         push_nested_namespace (context);
6646       else
6647         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6648     }
6649
6650   /* Look for a class template declaration.  We look for hidden names
6651      because two friend declarations of the same template are the
6652      same.  For example, in:
6653
6654        struct A { 
6655          template <typename> friend class F;
6656        };
6657        template <typename> struct B { 
6658          template <typename> friend class F;
6659        };
6660
6661      both F templates are the same.  */
6662   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6663                            /*block_p=*/true, 0, 
6664                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6665
6666   /* But, if we don't find one, it might be because we're in a
6667      situation like this:
6668
6669        template <class T>
6670        struct S {
6671          template <class U>
6672          friend struct S;
6673        };
6674
6675      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6676      for `S<int>', not the TEMPLATE_DECL.  */
6677   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6678     {
6679       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6680       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6681     }
6682
6683   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6684     {
6685       /* The friend template has already been declared.  Just
6686          check to see that the declarations match, and install any new
6687          default parameters.  We must tsubst the default parameters,
6688          of course.  We only need the innermost template parameters
6689          because that is all that redeclare_class_template will look
6690          at.  */
6691       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6692           > TMPL_ARGS_DEPTH (args))
6693         {
6694           tree parms;
6695           location_t saved_input_location;
6696           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6697                                          args, tf_warning_or_error);
6698
6699           saved_input_location = input_location;
6700           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6701           redeclare_class_template (TREE_TYPE (tmpl), parms);
6702           input_location = saved_input_location;
6703           
6704         }
6705
6706       friend_type = TREE_TYPE (tmpl);
6707     }
6708   else
6709     {
6710       /* The friend template has not already been declared.  In this
6711          case, the instantiation of the template class will cause the
6712          injection of this template into the global scope.  */
6713       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6714       if (tmpl == error_mark_node)
6715         return error_mark_node;
6716
6717       /* The new TMPL is not an instantiation of anything, so we
6718          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6719          the new type because that is supposed to be the corresponding
6720          template decl, i.e., TMPL.  */
6721       DECL_USE_TEMPLATE (tmpl) = 0;
6722       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6723       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6724       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6725         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6726
6727       /* Inject this template into the global scope.  */
6728       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6729     }
6730
6731   if (context)
6732     {
6733       if (TREE_CODE (context) == NAMESPACE_DECL)
6734         pop_nested_namespace (context);
6735       else
6736         pop_nested_class ();
6737     }
6738
6739   return friend_type;
6740 }
6741
6742 /* Returns zero if TYPE cannot be completed later due to circularity.
6743    Otherwise returns one.  */
6744
6745 static int
6746 can_complete_type_without_circularity (tree type)
6747 {
6748   if (type == NULL_TREE || type == error_mark_node)
6749     return 0;
6750   else if (COMPLETE_TYPE_P (type))
6751     return 1;
6752   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6753     return can_complete_type_without_circularity (TREE_TYPE (type));
6754   else if (CLASS_TYPE_P (type)
6755            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6756     return 0;
6757   else
6758     return 1;
6759 }
6760
6761 /* Apply any attributes which had to be deferred until instantiation
6762    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6763    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6764
6765 static void
6766 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6767                                 tree args, tsubst_flags_t complain, tree in_decl)
6768 {
6769   tree last_dep = NULL_TREE;
6770   tree t;
6771   tree *p;
6772
6773   for (t = attributes; t; t = TREE_CHAIN (t))
6774     if (ATTR_IS_DEPENDENT (t))
6775       {
6776         last_dep = t;
6777         attributes = copy_list (attributes);
6778         break;
6779       }
6780
6781   if (DECL_P (*decl_p))
6782     {
6783       if (TREE_TYPE (*decl_p) == error_mark_node)
6784         return;
6785       p = &DECL_ATTRIBUTES (*decl_p);
6786     }
6787   else
6788     p = &TYPE_ATTRIBUTES (*decl_p);
6789
6790   if (last_dep)
6791     {
6792       tree late_attrs = NULL_TREE;
6793       tree *q = &late_attrs;
6794
6795       for (*p = attributes; *p; )
6796         {
6797           t = *p;
6798           if (ATTR_IS_DEPENDENT (t))
6799             {
6800               *p = TREE_CHAIN (t);
6801               TREE_CHAIN (t) = NULL_TREE;
6802               /* If the first attribute argument is an identifier, don't
6803                  pass it through tsubst.  Attributes like mode, format,
6804                  cleanup and several target specific attributes expect it
6805                  unmodified.  */
6806               if (TREE_VALUE (t)
6807                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
6808                   && TREE_VALUE (TREE_VALUE (t))
6809                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
6810                       == IDENTIFIER_NODE))
6811                 {
6812                   tree chain
6813                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
6814                                    in_decl,
6815                                    /*integral_constant_expression_p=*/false);
6816                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
6817                     TREE_VALUE (t)
6818                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
6819                                    chain);
6820                 }
6821               else
6822                 TREE_VALUE (t)
6823                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6824                                  /*integral_constant_expression_p=*/false);
6825               *q = t;
6826               q = &TREE_CHAIN (t);
6827             }
6828           else
6829             p = &TREE_CHAIN (t);
6830         }
6831
6832       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6833     }
6834 }
6835
6836 tree
6837 instantiate_class_template (tree type)
6838 {
6839   tree templ, args, pattern, t, member;
6840   tree typedecl;
6841   tree pbinfo;
6842   tree base_list;
6843
6844   if (type == error_mark_node)
6845     return error_mark_node;
6846
6847   if (TYPE_BEING_DEFINED (type)
6848       || COMPLETE_TYPE_P (type)
6849       || dependent_type_p (type))
6850     return type;
6851
6852   /* Figure out which template is being instantiated.  */
6853   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6854   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
6855
6856   /* Determine what specialization of the original template to
6857      instantiate.  */
6858   t = most_specialized_class (type, templ);
6859   if (t == error_mark_node)
6860     {
6861       TYPE_BEING_DEFINED (type) = 1;
6862       return error_mark_node;
6863     }
6864   else if (t)
6865     {
6866       /* This TYPE is actually an instantiation of a partial
6867          specialization.  We replace the innermost set of ARGS with
6868          the arguments appropriate for substitution.  For example,
6869          given:
6870
6871            template <class T> struct S {};
6872            template <class T> struct S<T*> {};
6873
6874          and supposing that we are instantiating S<int*>, ARGS will
6875          presently be {int*} -- but we need {int}.  */
6876       pattern = TREE_TYPE (t);
6877       args = TREE_PURPOSE (t);
6878     }
6879   else
6880     {
6881       pattern = TREE_TYPE (templ);
6882       args = CLASSTYPE_TI_ARGS (type);
6883     }
6884
6885   /* If the template we're instantiating is incomplete, then clearly
6886      there's nothing we can do.  */
6887   if (!COMPLETE_TYPE_P (pattern))
6888     return type;
6889
6890   /* If we've recursively instantiated too many templates, stop.  */
6891   if (! push_tinst_level (type))
6892     return type;
6893
6894   /* Now we're really doing the instantiation.  Mark the type as in
6895      the process of being defined.  */
6896   TYPE_BEING_DEFINED (type) = 1;
6897
6898   /* We may be in the middle of deferred access check.  Disable
6899      it now.  */
6900   push_deferring_access_checks (dk_no_deferred);
6901
6902   push_to_top_level ();
6903
6904   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6905
6906   /* Set the input location to the template definition. This is needed
6907      if tsubsting causes an error.  */
6908   typedecl = TYPE_MAIN_DECL (type);
6909   input_location = DECL_SOURCE_LOCATION (typedecl);
6910
6911   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
6912   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6913   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6914   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6915   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6916   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6917   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6918   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6919   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6920   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6921   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6922   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6923   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6924   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6925   if (ANON_AGGR_TYPE_P (pattern))
6926     SET_ANON_AGGR_TYPE_P (type);
6927   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6928     {
6929       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6930       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6931     }
6932
6933   pbinfo = TYPE_BINFO (pattern);
6934
6935   /* We should never instantiate a nested class before its enclosing
6936      class; we need to look up the nested class by name before we can
6937      instantiate it, and that lookup should instantiate the enclosing
6938      class.  */
6939   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6940               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6941               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6942
6943   base_list = NULL_TREE;
6944   if (BINFO_N_BASE_BINFOS (pbinfo))
6945     {
6946       tree pbase_binfo;
6947       tree context = TYPE_CONTEXT (type);
6948       tree pushed_scope;
6949       int i;
6950
6951       /* We must enter the scope containing the type, as that is where
6952          the accessibility of types named in dependent bases are
6953          looked up from.  */
6954       pushed_scope = push_scope (context ? context : global_namespace);
6955
6956       /* Substitute into each of the bases to determine the actual
6957          basetypes.  */
6958       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6959         {
6960           tree base;
6961           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6962           tree expanded_bases = NULL_TREE;
6963           int idx, len = 1;
6964
6965           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6966             {
6967               expanded_bases = 
6968                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6969                                        args, tf_error, NULL_TREE);
6970               if (expanded_bases == error_mark_node)
6971                 continue;
6972
6973               len = TREE_VEC_LENGTH (expanded_bases);
6974             }
6975
6976           for (idx = 0; idx < len; idx++)
6977             {
6978               if (expanded_bases)
6979                 /* Extract the already-expanded base class.  */
6980                 base = TREE_VEC_ELT (expanded_bases, idx);
6981               else
6982                 /* Substitute to figure out the base class.  */
6983                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6984                                NULL_TREE);
6985
6986               if (base == error_mark_node)
6987                 continue;
6988
6989               base_list = tree_cons (access, base, base_list);
6990               if (BINFO_VIRTUAL_P (pbase_binfo))
6991                 TREE_TYPE (base_list) = integer_type_node;
6992             }
6993         }
6994
6995       /* The list is now in reverse order; correct that.  */
6996       base_list = nreverse (base_list);
6997
6998       if (pushed_scope)
6999         pop_scope (pushed_scope);
7000     }
7001   /* Now call xref_basetypes to set up all the base-class
7002      information.  */
7003   xref_basetypes (type, base_list);
7004
7005   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
7006                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
7007                                   args, tf_error, NULL_TREE);
7008
7009   /* Now that our base classes are set up, enter the scope of the
7010      class, so that name lookups into base classes, etc. will work
7011      correctly.  This is precisely analogous to what we do in
7012      begin_class_definition when defining an ordinary non-template
7013      class, except we also need to push the enclosing classes.  */
7014   push_nested_class (type);
7015
7016   /* Now members are processed in the order of declaration.  */
7017   for (member = CLASSTYPE_DECL_LIST (pattern);
7018        member; member = TREE_CHAIN (member))
7019     {
7020       tree t = TREE_VALUE (member);
7021
7022       if (TREE_PURPOSE (member))
7023         {
7024           if (TYPE_P (t))
7025             {
7026               /* Build new CLASSTYPE_NESTED_UTDS.  */
7027
7028               tree newtag;
7029               bool class_template_p;
7030
7031               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
7032                                   && TYPE_LANG_SPECIFIC (t)
7033                                   && CLASSTYPE_IS_TEMPLATE (t));
7034               /* If the member is a class template, then -- even after
7035                  substitution -- there may be dependent types in the
7036                  template argument list for the class.  We increment
7037                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
7038                  that function will assume that no types are dependent
7039                  when outside of a template.  */
7040               if (class_template_p)
7041                 ++processing_template_decl;
7042               newtag = tsubst (t, args, tf_error, NULL_TREE);
7043               if (class_template_p)
7044                 --processing_template_decl;
7045               if (newtag == error_mark_node)
7046                 continue;
7047
7048               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
7049                 {
7050                   tree name = TYPE_IDENTIFIER (t);
7051
7052                   if (class_template_p)
7053                     /* Unfortunately, lookup_template_class sets
7054                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
7055                        instantiation (i.e., for the type of a member
7056                        template class nested within a template class.)
7057                        This behavior is required for
7058                        maybe_process_partial_specialization to work
7059                        correctly, but is not accurate in this case;
7060                        the TAG is not an instantiation of anything.
7061                        (The corresponding TEMPLATE_DECL is an
7062                        instantiation, but the TYPE is not.) */
7063                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
7064
7065                   /* Now, we call pushtag to put this NEWTAG into the scope of
7066                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
7067                      pushtag calling push_template_decl.  We don't have to do
7068                      this for enums because it will already have been done in
7069                      tsubst_enum.  */
7070                   if (name)
7071                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
7072                   pushtag (name, newtag, /*tag_scope=*/ts_current);
7073                 }
7074             }
7075           else if (TREE_CODE (t) == FUNCTION_DECL
7076                    || DECL_FUNCTION_TEMPLATE_P (t))
7077             {
7078               /* Build new TYPE_METHODS.  */
7079               tree r;
7080
7081               if (TREE_CODE (t) == TEMPLATE_DECL)
7082                 ++processing_template_decl;
7083               r = tsubst (t, args, tf_error, NULL_TREE);
7084               if (TREE_CODE (t) == TEMPLATE_DECL)
7085                 --processing_template_decl;
7086               set_current_access_from_decl (r);
7087               finish_member_declaration (r);
7088             }
7089           else
7090             {
7091               /* Build new TYPE_FIELDS.  */
7092               if (TREE_CODE (t) == STATIC_ASSERT)
7093                 {
7094                   tree condition = 
7095                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
7096                                  tf_warning_or_error, NULL_TREE,
7097                                  /*integral_constant_expression_p=*/true);
7098                   finish_static_assert (condition,
7099                                         STATIC_ASSERT_MESSAGE (t), 
7100                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7101                                         /*member_p=*/true);
7102                 }
7103               else if (TREE_CODE (t) != CONST_DECL)
7104                 {
7105                   tree r;
7106
7107                   /* The file and line for this declaration, to
7108                      assist in error message reporting.  Since we
7109                      called push_tinst_level above, we don't need to
7110                      restore these.  */
7111                   input_location = DECL_SOURCE_LOCATION (t);
7112
7113                   if (TREE_CODE (t) == TEMPLATE_DECL)
7114                     ++processing_template_decl;
7115                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7116                   if (TREE_CODE (t) == TEMPLATE_DECL)
7117                     --processing_template_decl;
7118                   if (TREE_CODE (r) == VAR_DECL)
7119                     {
7120                       /* In [temp.inst]:
7121
7122                            [t]he initialization (and any associated
7123                            side-effects) of a static data member does
7124                            not occur unless the static data member is
7125                            itself used in a way that requires the
7126                            definition of the static data member to
7127                            exist.
7128
7129                          Therefore, we do not substitute into the
7130                          initialized for the static data member here.  */
7131                       finish_static_data_member_decl
7132                         (r,
7133                          /*init=*/NULL_TREE,
7134                          /*init_const_expr_p=*/false,
7135                          /*asmspec_tree=*/NULL_TREE,
7136                          /*flags=*/0);
7137                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7138                         check_static_variable_definition (r, TREE_TYPE (r));
7139                     }
7140                   else if (TREE_CODE (r) == FIELD_DECL)
7141                     {
7142                       /* Determine whether R has a valid type and can be
7143                          completed later.  If R is invalid, then it is
7144                          replaced by error_mark_node so that it will not be
7145                          added to TYPE_FIELDS.  */
7146                       tree rtype = TREE_TYPE (r);
7147                       if (can_complete_type_without_circularity (rtype))
7148                         complete_type (rtype);
7149
7150                       if (!COMPLETE_TYPE_P (rtype))
7151                         {
7152                           cxx_incomplete_type_error (r, rtype);
7153                           r = error_mark_node;
7154                         }
7155                     }
7156
7157                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7158                      such a thing will already have been added to the field
7159                      list by tsubst_enum in finish_member_declaration in the
7160                      CLASSTYPE_NESTED_UTDS case above.  */
7161                   if (!(TREE_CODE (r) == TYPE_DECL
7162                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7163                         && DECL_ARTIFICIAL (r)))
7164                     {
7165                       set_current_access_from_decl (r);
7166                       finish_member_declaration (r);
7167                     }
7168                 }
7169             }
7170         }
7171       else
7172         {
7173           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7174             {
7175               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7176
7177               tree friend_type = t;
7178               bool adjust_processing_template_decl = false;
7179
7180               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7181                 {
7182                   /* template <class T> friend class C;  */
7183                   friend_type = tsubst_friend_class (friend_type, args);
7184                   adjust_processing_template_decl = true;
7185                 }
7186               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7187                 {
7188                   /* template <class T> friend class C::D;  */
7189                   friend_type = tsubst (friend_type, args,
7190                                         tf_warning_or_error, NULL_TREE);
7191                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7192                     friend_type = TREE_TYPE (friend_type);
7193                   adjust_processing_template_decl = true;
7194                 }
7195               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7196                 {
7197                   /* This could be either
7198
7199                        friend class T::C;
7200
7201                      when dependent_type_p is false or
7202
7203                        template <class U> friend class T::C;
7204
7205                      otherwise.  */
7206                   friend_type = tsubst (friend_type, args,
7207                                         tf_warning_or_error, NULL_TREE);
7208                   /* Bump processing_template_decl for correct
7209                      dependent_type_p calculation.  */
7210                   ++processing_template_decl;
7211                   if (dependent_type_p (friend_type))
7212                     adjust_processing_template_decl = true;
7213                   --processing_template_decl;
7214                 }
7215               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7216                        && hidden_name_p (TYPE_NAME (friend_type)))
7217                 {
7218                   /* friend class C;
7219
7220                      where C hasn't been declared yet.  Let's lookup name
7221                      from namespace scope directly, bypassing any name that
7222                      come from dependent base class.  */
7223                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7224
7225                   /* The call to xref_tag_from_type does injection for friend
7226                      classes.  */
7227                   push_nested_namespace (ns);
7228                   friend_type =
7229                     xref_tag_from_type (friend_type, NULL_TREE,
7230                                         /*tag_scope=*/ts_current);
7231                   pop_nested_namespace (ns);
7232                 }
7233               else if (uses_template_parms (friend_type))
7234                 /* friend class C<T>;  */
7235                 friend_type = tsubst (friend_type, args,
7236                                       tf_warning_or_error, NULL_TREE);
7237               /* Otherwise it's
7238
7239                    friend class C;
7240
7241                  where C is already declared or
7242
7243                    friend class C<int>;
7244
7245                  We don't have to do anything in these cases.  */
7246
7247               if (adjust_processing_template_decl)
7248                 /* Trick make_friend_class into realizing that the friend
7249                    we're adding is a template, not an ordinary class.  It's
7250                    important that we use make_friend_class since it will
7251                    perform some error-checking and output cross-reference
7252                    information.  */
7253                 ++processing_template_decl;
7254
7255               if (friend_type != error_mark_node)
7256                 make_friend_class (type, friend_type, /*complain=*/false);
7257
7258               if (adjust_processing_template_decl)
7259                 --processing_template_decl;
7260             }
7261           else
7262             {
7263               /* Build new DECL_FRIENDLIST.  */
7264               tree r;
7265
7266               /* The file and line for this declaration, to
7267                  assist in error message reporting.  Since we
7268                  called push_tinst_level above, we don't need to
7269                  restore these.  */
7270               input_location = DECL_SOURCE_LOCATION (t);
7271
7272               if (TREE_CODE (t) == TEMPLATE_DECL)
7273                 {
7274                   ++processing_template_decl;
7275                   push_deferring_access_checks (dk_no_check);
7276                 }
7277
7278               r = tsubst_friend_function (t, args);
7279               add_friend (type, r, /*complain=*/false);
7280               if (TREE_CODE (t) == TEMPLATE_DECL)
7281                 {
7282                   pop_deferring_access_checks ();
7283                   --processing_template_decl;
7284                 }
7285             }
7286         }
7287     }
7288
7289   /* Set the file and line number information to whatever is given for
7290      the class itself.  This puts error messages involving generated
7291      implicit functions at a predictable point, and the same point
7292      that would be used for non-template classes.  */
7293   input_location = DECL_SOURCE_LOCATION (typedecl);
7294
7295   unreverse_member_declarations (type);
7296   finish_struct_1 (type);
7297   TYPE_BEING_DEFINED (type) = 0;
7298
7299   /* Now that the class is complete, instantiate default arguments for
7300      any member functions.  We don't do this earlier because the
7301      default arguments may reference members of the class.  */
7302   if (!PRIMARY_TEMPLATE_P (templ))
7303     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7304       if (TREE_CODE (t) == FUNCTION_DECL
7305           /* Implicitly generated member functions will not have template
7306              information; they are not instantiations, but instead are
7307              created "fresh" for each instantiation.  */
7308           && DECL_TEMPLATE_INFO (t))
7309         tsubst_default_arguments (t);
7310
7311   pop_nested_class ();
7312   pop_from_top_level ();
7313   pop_deferring_access_checks ();
7314   pop_tinst_level ();
7315
7316   /* The vtable for a template class can be emitted in any translation
7317      unit in which the class is instantiated.  When there is no key
7318      method, however, finish_struct_1 will already have added TYPE to
7319      the keyed_classes list.  */
7320   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7321     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7322
7323   return type;
7324 }
7325
7326 static tree
7327 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7328 {
7329   tree r;
7330
7331   if (!t)
7332     r = t;
7333   else if (TYPE_P (t))
7334     r = tsubst (t, args, complain, in_decl);
7335   else
7336     {
7337       r = tsubst_expr (t, args, complain, in_decl,
7338                        /*integral_constant_expression_p=*/true);
7339       r = fold_non_dependent_expr (r);
7340     }
7341   return r;
7342 }
7343
7344 /* Substitute ARGS into T, which is an pack expansion
7345    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7346    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7347    (if only a partial substitution could be performed) or
7348    ERROR_MARK_NODE if there was an error.  */
7349 tree
7350 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7351                        tree in_decl)
7352 {
7353   tree pattern;
7354   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7355   tree first_arg_pack; int i, len = -1;
7356   tree result;
7357   int incomplete = 0;
7358
7359   gcc_assert (PACK_EXPANSION_P (t));
7360   pattern = PACK_EXPANSION_PATTERN (t);
7361
7362   /* Determine the argument packs that will instantiate the parameter
7363      packs used in the expansion expression. While we're at it,
7364      compute the number of arguments to be expanded and make sure it
7365      is consistent.  */
7366   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7367        pack = TREE_CHAIN (pack))
7368     {
7369       tree parm_pack = TREE_VALUE (pack);
7370       tree arg_pack = NULL_TREE;
7371       tree orig_arg = NULL_TREE;
7372
7373       if (TREE_CODE (parm_pack) == PARM_DECL)
7374         arg_pack = retrieve_local_specialization (parm_pack);
7375       else
7376         {
7377           int level, idx, levels;
7378           template_parm_level_and_index (parm_pack, &level, &idx);
7379
7380           levels = TMPL_ARGS_DEPTH (args);
7381           if (level <= levels)
7382             arg_pack = TMPL_ARG (args, level, idx);
7383         }
7384
7385       orig_arg = arg_pack;
7386       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7387         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7388       
7389       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7390         /* This can only happen if we forget to expand an argument
7391            pack somewhere else. Just return an error, silently.  */
7392         {
7393           result = make_tree_vec (1);
7394           TREE_VEC_ELT (result, 0) = error_mark_node;
7395           return result;
7396         }
7397
7398       if (arg_pack
7399           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7400           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7401         {
7402           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7403           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7404           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7405               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7406             /* The argument pack that the parameter maps to is just an
7407                expansion of the parameter itself, such as one would
7408                find in the implicit typedef of a class inside the
7409                class itself.  Consider this parameter "unsubstituted",
7410                so that we will maintain the outer pack expansion.  */
7411             arg_pack = NULL_TREE;
7412         }
7413           
7414       if (arg_pack)
7415         {
7416           int my_len = 
7417             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7418
7419           /* It's all-or-nothing with incomplete argument packs.  */
7420           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7421             return error_mark_node;
7422           
7423           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7424             incomplete = 1;
7425
7426           if (len < 0)
7427             {
7428               len = my_len;
7429               first_arg_pack = arg_pack;
7430             }
7431           else if (len != my_len)
7432             {
7433               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7434                 error ("mismatched argument pack lengths while expanding "
7435                        "%<%T%>",
7436                        pattern);
7437               else
7438                 error ("mismatched argument pack lengths while expanding "
7439                        "%<%E%>",
7440                        pattern);
7441               return error_mark_node;
7442             }
7443
7444           /* Keep track of the parameter packs and their corresponding
7445              argument packs.  */
7446           packs = tree_cons (parm_pack, arg_pack, packs);
7447           TREE_TYPE (packs) = orig_arg;
7448         }
7449       else
7450         /* We can't substitute for this parameter pack.  */
7451         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7452                                          TREE_VALUE (pack),
7453                                          unsubstituted_packs);
7454     }
7455
7456   /* We cannot expand this expansion expression, because we don't have
7457      all of the argument packs we need. Substitute into the pattern
7458      and return a PACK_EXPANSION_*. The caller will need to deal with
7459      that.  */
7460   if (unsubstituted_packs)
7461     return make_pack_expansion (tsubst (pattern, args, complain, 
7462                                         in_decl));
7463
7464   /* We could not find any argument packs that work.  */
7465   if (len < 0)
7466     return error_mark_node;
7467
7468   /* For each argument in each argument pack, substitute into the
7469      pattern.  */
7470   result = make_tree_vec (len + incomplete);
7471   for (i = 0; i < len + incomplete; ++i)
7472     {
7473       /* For parameter pack, change the substitution of the parameter
7474          pack to the ith argument in its argument pack, then expand
7475          the pattern.  */
7476       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7477         {
7478           tree parm = TREE_PURPOSE (pack);
7479
7480           if (TREE_CODE (parm) == PARM_DECL)
7481             {
7482               /* Select the Ith argument from the pack.  */
7483               tree arg = make_node (ARGUMENT_PACK_SELECT);
7484               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7485               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7486               mark_used (parm);
7487               register_local_specialization (arg, parm);
7488             }
7489           else
7490             {
7491               tree value = parm;
7492               int idx, level;
7493               template_parm_level_and_index (parm, &level, &idx);
7494               
7495               if (i < len) 
7496                 {
7497                   /* Select the Ith argument from the pack. */
7498                   value = make_node (ARGUMENT_PACK_SELECT);
7499                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7500                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7501                 }
7502
7503               /* Update the corresponding argument.  */
7504               TMPL_ARG (args, level, idx) = value;
7505             }
7506         }
7507
7508       /* Substitute into the PATTERN with the altered arguments.  */
7509       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7510         TREE_VEC_ELT (result, i) = 
7511           tsubst_expr (pattern, args, complain, in_decl,
7512                        /*integral_constant_expression_p=*/false);
7513       else
7514         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7515
7516       if (i == len)
7517         /* When we have incomplete argument packs, the last "expanded"
7518            result is itself a pack expansion, which allows us
7519            to deduce more arguments.  */
7520         TREE_VEC_ELT (result, i) = 
7521           make_pack_expansion (TREE_VEC_ELT (result, i));
7522
7523       if (TREE_VEC_ELT (result, i) == error_mark_node)
7524         {
7525           result = error_mark_node;
7526           break;
7527         }
7528     }
7529   
7530   /* Update ARGS to restore the substitution from parameter packs to
7531      their argument packs.  */
7532   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7533     {
7534       tree parm = TREE_PURPOSE (pack);
7535
7536       if (TREE_CODE (parm) == PARM_DECL)
7537         register_local_specialization (TREE_TYPE (pack), parm);
7538       else
7539         {
7540           int idx, level;
7541           template_parm_level_and_index (parm, &level, &idx);
7542           
7543           /* Update the corresponding argument.  */
7544           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7545             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7546               TREE_TYPE (pack);
7547           else
7548             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7549         }
7550     }
7551
7552   return result;
7553 }
7554
7555 /* Substitute ARGS into the vector or list of template arguments T.  */
7556
7557 static tree
7558 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7559 {
7560   tree orig_t = t;
7561   int len = TREE_VEC_LENGTH (t);
7562   int need_new = 0, i, expanded_len_adjust = 0, out;
7563   tree *elts = (tree *) alloca (len * sizeof (tree));
7564
7565   for (i = 0; i < len; i++)
7566     {
7567       tree orig_arg = TREE_VEC_ELT (t, i);
7568       tree new_arg;
7569
7570       if (TREE_CODE (orig_arg) == TREE_VEC)
7571         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7572       else if (PACK_EXPANSION_P (orig_arg))
7573         {
7574           /* Substitute into an expansion expression.  */
7575           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7576
7577           if (TREE_CODE (new_arg) == TREE_VEC)
7578             /* Add to the expanded length adjustment the number of
7579                expanded arguments. We subtract one from this
7580                measurement, because the argument pack expression
7581                itself is already counted as 1 in
7582                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7583                the argument pack is empty.  */
7584             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7585         }
7586       else if (ARGUMENT_PACK_P (orig_arg))
7587         {
7588           /* Substitute into each of the arguments.  */
7589           new_arg = make_node (TREE_CODE (orig_arg));
7590           
7591           SET_ARGUMENT_PACK_ARGS (
7592             new_arg,
7593             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7594                                   args, complain, in_decl));
7595
7596           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7597             new_arg = error_mark_node;
7598
7599           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7600             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7601                                           complain, in_decl);
7602             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7603
7604             if (TREE_TYPE (new_arg) == error_mark_node)
7605               new_arg = error_mark_node;
7606           }
7607         }
7608       else
7609         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7610
7611       if (new_arg == error_mark_node)
7612         return error_mark_node;
7613
7614       elts[i] = new_arg;
7615       if (new_arg != orig_arg)
7616         need_new = 1;
7617     }
7618
7619   if (!need_new)
7620     return t;
7621
7622   /* Make space for the expanded arguments coming from template
7623      argument packs.  */
7624   t = make_tree_vec (len + expanded_len_adjust);
7625   for (i = 0, out = 0; i < len; i++)
7626     {
7627       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7628            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7629           && TREE_CODE (elts[i]) == TREE_VEC)
7630         {
7631           int idx;
7632
7633           /* Now expand the template argument pack "in place".  */
7634           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7635             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7636         }
7637       else
7638         {
7639           TREE_VEC_ELT (t, out) = elts[i];
7640           out++;
7641         }
7642     }
7643
7644   return t;
7645 }
7646
7647 /* Return the result of substituting ARGS into the template parameters
7648    given by PARMS.  If there are m levels of ARGS and m + n levels of
7649    PARMS, then the result will contain n levels of PARMS.  For
7650    example, if PARMS is `template <class T> template <class U>
7651    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7652    result will be `template <int*, double, class V>'.  */
7653
7654 static tree
7655 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7656 {
7657   tree r = NULL_TREE;
7658   tree* new_parms;
7659
7660   /* When substituting into a template, we must set
7661      PROCESSING_TEMPLATE_DECL as the template parameters may be
7662      dependent if they are based on one-another, and the dependency
7663      predicates are short-circuit outside of templates.  */
7664   ++processing_template_decl;
7665
7666   for (new_parms = &r;
7667        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7668        new_parms = &(TREE_CHAIN (*new_parms)),
7669          parms = TREE_CHAIN (parms))
7670     {
7671       tree new_vec =
7672         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7673       int i;
7674
7675       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7676         {
7677           tree tuple;
7678           tree default_value;
7679           tree parm_decl;
7680
7681           if (parms == error_mark_node)
7682             continue;
7683
7684           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7685
7686           if (tuple == error_mark_node)
7687             continue;
7688
7689           default_value = TREE_PURPOSE (tuple);
7690           parm_decl = TREE_VALUE (tuple);
7691
7692           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7693           if (TREE_CODE (parm_decl) == PARM_DECL
7694               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7695             parm_decl = error_mark_node;
7696           default_value = tsubst_template_arg (default_value, args,
7697                                                complain, NULL_TREE);
7698
7699           tuple = build_tree_list (default_value, parm_decl);
7700           TREE_VEC_ELT (new_vec, i) = tuple;
7701         }
7702
7703       *new_parms =
7704         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7705                              - TMPL_ARGS_DEPTH (args)),
7706                    new_vec, NULL_TREE);
7707     }
7708
7709   --processing_template_decl;
7710
7711   return r;
7712 }
7713
7714 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7715    type T.  If T is not an aggregate or enumeration type, it is
7716    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7717    ENTERING_SCOPE is nonzero, T is the context for a template which
7718    we are presently tsubst'ing.  Return the substituted value.  */
7719
7720 static tree
7721 tsubst_aggr_type (tree t,
7722                   tree args,
7723                   tsubst_flags_t complain,
7724                   tree in_decl,
7725                   int entering_scope)
7726 {
7727   if (t == NULL_TREE)
7728     return NULL_TREE;
7729
7730   switch (TREE_CODE (t))
7731     {
7732     case RECORD_TYPE:
7733       if (TYPE_PTRMEMFUNC_P (t))
7734         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7735
7736       /* Else fall through.  */
7737     case ENUMERAL_TYPE:
7738     case UNION_TYPE:
7739       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7740         {
7741           tree argvec;
7742           tree context;
7743           tree r;
7744           bool saved_skip_evaluation;
7745
7746           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7747           saved_skip_evaluation = skip_evaluation;
7748           skip_evaluation = false;
7749
7750           /* First, determine the context for the type we are looking
7751              up.  */
7752           context = TYPE_CONTEXT (t);
7753           if (context)
7754             {
7755               context = tsubst_aggr_type (context, args, complain,
7756                                           in_decl, /*entering_scope=*/1);
7757               /* If context is a nested class inside a class template,
7758                  it may still need to be instantiated (c++/33959).  */
7759               if (TYPE_P (context))
7760                 context = complete_type (context);
7761             }
7762
7763           /* Then, figure out what arguments are appropriate for the
7764              type we are trying to find.  For example, given:
7765
7766                template <class T> struct S;
7767                template <class T, class U> void f(T, U) { S<U> su; }
7768
7769              and supposing that we are instantiating f<int, double>,
7770              then our ARGS will be {int, double}, but, when looking up
7771              S we only want {double}.  */
7772           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7773                                          complain, in_decl);
7774           if (argvec == error_mark_node)
7775             r = error_mark_node;
7776           else
7777             {
7778               r = lookup_template_class (t, argvec, in_decl, context,
7779                                          entering_scope, complain);
7780               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7781             }
7782
7783           skip_evaluation = saved_skip_evaluation;
7784
7785           return r;
7786         }
7787       else
7788         /* This is not a template type, so there's nothing to do.  */
7789         return t;
7790
7791     default:
7792       return tsubst (t, args, complain, in_decl);
7793     }
7794 }
7795
7796 /* Substitute into the default argument ARG (a default argument for
7797    FN), which has the indicated TYPE.  */
7798
7799 tree
7800 tsubst_default_argument (tree fn, tree type, tree arg)
7801 {
7802   tree saved_class_ptr = NULL_TREE;
7803   tree saved_class_ref = NULL_TREE;
7804
7805   /* This default argument came from a template.  Instantiate the
7806      default argument here, not in tsubst.  In the case of
7807      something like:
7808
7809        template <class T>
7810        struct S {
7811          static T t();
7812          void f(T = t());
7813        };
7814
7815      we must be careful to do name lookup in the scope of S<T>,
7816      rather than in the current class.  */
7817   push_access_scope (fn);
7818   /* The "this" pointer is not valid in a default argument.  */
7819   if (cfun)
7820     {
7821       saved_class_ptr = current_class_ptr;
7822       cp_function_chain->x_current_class_ptr = NULL_TREE;
7823       saved_class_ref = current_class_ref;
7824       cp_function_chain->x_current_class_ref = NULL_TREE;
7825     }
7826
7827   push_deferring_access_checks(dk_no_deferred);
7828   /* The default argument expression may cause implicitly defined
7829      member functions to be synthesized, which will result in garbage
7830      collection.  We must treat this situation as if we were within
7831      the body of function so as to avoid collecting live data on the
7832      stack.  */
7833   ++function_depth;
7834   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7835                      tf_warning_or_error, NULL_TREE,
7836                      /*integral_constant_expression_p=*/false);
7837   --function_depth;
7838   pop_deferring_access_checks();
7839
7840   /* Restore the "this" pointer.  */
7841   if (cfun)
7842     {
7843       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7844       cp_function_chain->x_current_class_ref = saved_class_ref;
7845     }
7846
7847   pop_access_scope (fn);
7848
7849   /* Make sure the default argument is reasonable.  */
7850   arg = check_default_argument (type, arg);
7851
7852   return arg;
7853 }
7854
7855 /* Substitute into all the default arguments for FN.  */
7856
7857 static void
7858 tsubst_default_arguments (tree fn)
7859 {
7860   tree arg;
7861   tree tmpl_args;
7862
7863   tmpl_args = DECL_TI_ARGS (fn);
7864
7865   /* If this function is not yet instantiated, we certainly don't need
7866      its default arguments.  */
7867   if (uses_template_parms (tmpl_args))
7868     return;
7869
7870   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7871        arg;
7872        arg = TREE_CHAIN (arg))
7873     if (TREE_PURPOSE (arg))
7874       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7875                                                     TREE_VALUE (arg),
7876                                                     TREE_PURPOSE (arg));
7877 }
7878
7879 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7880    result of the substitution.  Issue error and warning messages under
7881    control of COMPLAIN.  */
7882
7883 static tree
7884 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7885 {
7886   location_t saved_loc;
7887   tree r = NULL_TREE;
7888   tree in_decl = t;
7889
7890   /* Set the filename and linenumber to improve error-reporting.  */
7891   saved_loc = input_location;
7892   input_location = DECL_SOURCE_LOCATION (t);
7893
7894   switch (TREE_CODE (t))
7895     {
7896     case TEMPLATE_DECL:
7897       {
7898         /* We can get here when processing a member function template,
7899            member class template, and template template parameter of
7900            a template class.  */
7901         tree decl = DECL_TEMPLATE_RESULT (t);
7902         tree spec;
7903         tree tmpl_args;
7904         tree full_args;
7905
7906         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7907           {
7908             /* Template template parameter is treated here.  */
7909             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7910             if (new_type == error_mark_node)
7911               return error_mark_node;
7912
7913             r = copy_decl (t);
7914             TREE_CHAIN (r) = NULL_TREE;
7915             TREE_TYPE (r) = new_type;
7916             DECL_TEMPLATE_RESULT (r)
7917               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7918             DECL_TEMPLATE_PARMS (r)
7919               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7920                                        complain);
7921             TYPE_NAME (new_type) = r;
7922             break;
7923           }
7924
7925         /* We might already have an instance of this template.
7926            The ARGS are for the surrounding class type, so the
7927            full args contain the tsubst'd args for the context,
7928            plus the innermost args from the template decl.  */
7929         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7930           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7931           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7932         /* Because this is a template, the arguments will still be
7933            dependent, even after substitution.  If
7934            PROCESSING_TEMPLATE_DECL is not set, the dependency
7935            predicates will short-circuit.  */
7936         ++processing_template_decl;
7937         full_args = tsubst_template_args (tmpl_args, args,
7938                                           complain, in_decl);
7939         --processing_template_decl;
7940         if (full_args == error_mark_node)
7941           return error_mark_node;
7942
7943         /* tsubst_template_args doesn't copy the vector if
7944            nothing changed.  But, *something* should have
7945            changed.  */
7946         gcc_assert (full_args != tmpl_args);
7947
7948         spec = retrieve_specialization (t, full_args,
7949                                         /*class_specializations_p=*/true);
7950         if (spec != NULL_TREE)
7951           {
7952             r = spec;
7953             break;
7954           }
7955
7956         /* Make a new template decl.  It will be similar to the
7957            original, but will record the current template arguments.
7958            We also create a new function declaration, which is just
7959            like the old one, but points to this new template, rather
7960            than the old one.  */
7961         r = copy_decl (t);
7962         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7963         TREE_CHAIN (r) = NULL_TREE;
7964
7965         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7966
7967         if (TREE_CODE (decl) == TYPE_DECL)
7968           {
7969             tree new_type;
7970             ++processing_template_decl;
7971             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7972             --processing_template_decl;
7973             if (new_type == error_mark_node)
7974               return error_mark_node;
7975
7976             TREE_TYPE (r) = new_type;
7977             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7978             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7979             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7980             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7981           }
7982         else
7983           {
7984             tree new_decl;
7985             ++processing_template_decl;
7986             new_decl = tsubst (decl, args, complain, in_decl);
7987             --processing_template_decl;
7988             if (new_decl == error_mark_node)
7989               return error_mark_node;
7990
7991             DECL_TEMPLATE_RESULT (r) = new_decl;
7992             DECL_TI_TEMPLATE (new_decl) = r;
7993             TREE_TYPE (r) = TREE_TYPE (new_decl);
7994             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7995             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7996           }
7997
7998         SET_DECL_IMPLICIT_INSTANTIATION (r);
7999         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
8000         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
8001
8002         /* The template parameters for this new template are all the
8003            template parameters for the old template, except the
8004            outermost level of parameters.  */
8005         DECL_TEMPLATE_PARMS (r)
8006           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
8007                                    complain);
8008
8009         if (PRIMARY_TEMPLATE_P (t))
8010           DECL_PRIMARY_TEMPLATE (r) = r;
8011
8012         if (TREE_CODE (decl) != TYPE_DECL)
8013           /* Record this non-type partial instantiation.  */
8014           register_specialization (r, t,
8015                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
8016                                    false);
8017       }
8018       break;
8019
8020     case FUNCTION_DECL:
8021       {
8022         tree ctx;
8023         tree argvec = NULL_TREE;
8024         tree *friends;
8025         tree gen_tmpl;
8026         tree type;
8027         int member;
8028         int args_depth;
8029         int parms_depth;
8030
8031         /* Nobody should be tsubst'ing into non-template functions.  */
8032         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
8033
8034         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
8035           {
8036             tree spec;
8037             bool dependent_p;
8038
8039             /* If T is not dependent, just return it.  We have to
8040                increment PROCESSING_TEMPLATE_DECL because
8041                value_dependent_expression_p assumes that nothing is
8042                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
8043             ++processing_template_decl;
8044             dependent_p = value_dependent_expression_p (t);
8045             --processing_template_decl;
8046             if (!dependent_p)
8047               return t;
8048
8049             /* Calculate the most general template of which R is a
8050                specialization, and the complete set of arguments used to
8051                specialize R.  */
8052             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
8053             argvec = tsubst_template_args (DECL_TI_ARGS
8054                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
8055                                            args, complain, in_decl);
8056
8057             /* Check to see if we already have this specialization.  */
8058             spec = retrieve_specialization (gen_tmpl, argvec,
8059                                             /*class_specializations_p=*/false);
8060
8061             if (spec)
8062               {
8063                 r = spec;
8064                 break;
8065               }
8066
8067             /* We can see more levels of arguments than parameters if
8068                there was a specialization of a member template, like
8069                this:
8070
8071                  template <class T> struct S { template <class U> void f(); }
8072                  template <> template <class U> void S<int>::f(U);
8073
8074                Here, we'll be substituting into the specialization,
8075                because that's where we can find the code we actually
8076                want to generate, but we'll have enough arguments for
8077                the most general template.
8078
8079                We also deal with the peculiar case:
8080
8081                  template <class T> struct S {
8082                    template <class U> friend void f();
8083                  };
8084                  template <class U> void f() {}
8085                  template S<int>;
8086                  template void f<double>();
8087
8088                Here, the ARGS for the instantiation of will be {int,
8089                double}.  But, we only need as many ARGS as there are
8090                levels of template parameters in CODE_PATTERN.  We are
8091                careful not to get fooled into reducing the ARGS in
8092                situations like:
8093
8094                  template <class T> struct S { template <class U> void f(U); }
8095                  template <class T> template <> void S<T>::f(int) {}
8096
8097                which we can spot because the pattern will be a
8098                specialization in this case.  */
8099             args_depth = TMPL_ARGS_DEPTH (args);
8100             parms_depth =
8101               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
8102             if (args_depth > parms_depth
8103                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8104               args = get_innermost_template_args (args, parms_depth);
8105           }
8106         else
8107           {
8108             /* This special case arises when we have something like this:
8109
8110                  template <class T> struct S {
8111                    friend void f<int>(int, double);
8112                  };
8113
8114                Here, the DECL_TI_TEMPLATE for the friend declaration
8115                will be an IDENTIFIER_NODE.  We are being called from
8116                tsubst_friend_function, and we want only to create a
8117                new decl (R) with appropriate types so that we can call
8118                determine_specialization.  */
8119             gen_tmpl = NULL_TREE;
8120           }
8121
8122         if (DECL_CLASS_SCOPE_P (t))
8123           {
8124             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8125               member = 2;
8126             else
8127               member = 1;
8128             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8129                                     complain, t, /*entering_scope=*/1);
8130           }
8131         else
8132           {
8133             member = 0;
8134             ctx = DECL_CONTEXT (t);
8135           }
8136         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8137         if (type == error_mark_node)
8138           return error_mark_node;
8139
8140         /* We do NOT check for matching decls pushed separately at this
8141            point, as they may not represent instantiations of this
8142            template, and in any case are considered separate under the
8143            discrete model.  */
8144         r = copy_decl (t);
8145         DECL_USE_TEMPLATE (r) = 0;
8146         TREE_TYPE (r) = type;
8147         /* Clear out the mangled name and RTL for the instantiation.  */
8148         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8149         SET_DECL_RTL (r, NULL_RTX);
8150         DECL_INITIAL (r) = NULL_TREE;
8151         DECL_CONTEXT (r) = ctx;
8152
8153         if (member && DECL_CONV_FN_P (r))
8154           /* Type-conversion operator.  Reconstruct the name, in
8155              case it's the name of one of the template's parameters.  */
8156           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8157
8158         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8159                                      complain, t);
8160         DECL_RESULT (r) = NULL_TREE;
8161
8162         TREE_STATIC (r) = 0;
8163         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8164         DECL_EXTERNAL (r) = 1;
8165         /* If this is an instantiation of a function with internal
8166            linkage, we already know what object file linkage will be
8167            assigned to the instantiation.  */
8168         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8169         DECL_DEFER_OUTPUT (r) = 0;
8170         TREE_CHAIN (r) = NULL_TREE;
8171         DECL_PENDING_INLINE_INFO (r) = 0;
8172         DECL_PENDING_INLINE_P (r) = 0;
8173         DECL_SAVED_TREE (r) = NULL_TREE;
8174         TREE_USED (r) = 0;
8175         if (DECL_CLONED_FUNCTION (r))
8176           {
8177             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8178                                                args, complain, t);
8179             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8180             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8181           }
8182
8183         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8184            this in the special friend case mentioned above where
8185            GEN_TMPL is NULL.  */
8186         if (gen_tmpl)
8187           {
8188             DECL_TEMPLATE_INFO (r)
8189               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8190             SET_DECL_IMPLICIT_INSTANTIATION (r);
8191             register_specialization (r, gen_tmpl, argvec, false);
8192
8193             /* We're not supposed to instantiate default arguments
8194                until they are called, for a template.  But, for a
8195                declaration like:
8196
8197                  template <class T> void f ()
8198                  { extern void g(int i = T()); }
8199
8200                we should do the substitution when the template is
8201                instantiated.  We handle the member function case in
8202                instantiate_class_template since the default arguments
8203                might refer to other members of the class.  */
8204             if (!member
8205                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8206                 && !uses_template_parms (argvec))
8207               tsubst_default_arguments (r);
8208           }
8209         else
8210           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8211
8212         /* Copy the list of befriending classes.  */
8213         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8214              *friends;
8215              friends = &TREE_CHAIN (*friends))
8216           {
8217             *friends = copy_node (*friends);
8218             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8219                                             args, complain,
8220                                             in_decl);
8221           }
8222
8223         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8224           {
8225             maybe_retrofit_in_chrg (r);
8226             if (DECL_CONSTRUCTOR_P (r))
8227               grok_ctor_properties (ctx, r);
8228             /* If this is an instantiation of a member template, clone it.
8229                If it isn't, that'll be handled by
8230                clone_constructors_and_destructors.  */
8231             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8232               clone_function_decl (r, /*update_method_vec_p=*/0);
8233           }
8234         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8235                  && !grok_op_properties (r, (complain & tf_error) != 0))
8236           return error_mark_node;
8237
8238         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8239           SET_DECL_FRIEND_CONTEXT (r,
8240                                    tsubst (DECL_FRIEND_CONTEXT (t),
8241                                             args, complain, in_decl));
8242
8243         /* Possibly limit visibility based on template args.  */
8244         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8245         if (DECL_VISIBILITY_SPECIFIED (t))
8246           {
8247             DECL_VISIBILITY_SPECIFIED (r) = 0;
8248             DECL_ATTRIBUTES (r)
8249               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8250           }
8251         determine_visibility (r);
8252
8253         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8254                                         args, complain, in_decl);
8255       }
8256       break;
8257
8258     case PARM_DECL:
8259       {
8260         tree type = NULL_TREE;
8261         int i, len = 1;
8262         tree expanded_types = NULL_TREE;
8263         tree prev_r = NULL_TREE;
8264         tree first_r = NULL_TREE;
8265
8266         if (FUNCTION_PARAMETER_PACK_P (t))
8267           {
8268             /* If there is a local specialization that isn't a
8269                parameter pack, it means that we're doing a "simple"
8270                substitution from inside tsubst_pack_expansion. Just
8271                return the local specialization (which will be a single
8272                parm).  */
8273             tree spec = retrieve_local_specialization (t);
8274             if (spec 
8275                 && TREE_CODE (spec) == PARM_DECL
8276                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8277               return spec;
8278
8279             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8280                the parameters in this function parameter pack.  */
8281             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8282                                                     complain, in_decl);
8283             if (TREE_CODE (expanded_types) == TREE_VEC)
8284               {
8285                 len = TREE_VEC_LENGTH (expanded_types);
8286
8287                 /* Zero-length parameter packs are boring. Just substitute
8288                    into the chain.  */
8289                 if (len == 0)
8290                   return tsubst (TREE_CHAIN (t), args, complain, 
8291                                  TREE_CHAIN (t));
8292               }
8293             else
8294               {
8295                 /* All we did was update the type. Make a note of that.  */
8296                 type = expanded_types;
8297                 expanded_types = NULL_TREE;
8298               }
8299           }
8300
8301         /* Loop through all of the parameter's we'll build. When T is
8302            a function parameter pack, LEN is the number of expanded
8303            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8304         r = NULL_TREE;
8305         for (i = 0; i < len; ++i)
8306           {
8307             prev_r = r;
8308             r = copy_node (t);
8309             if (DECL_TEMPLATE_PARM_P (t))
8310               SET_DECL_TEMPLATE_PARM_P (r);
8311
8312             if (expanded_types)
8313               /* We're on the Ith parameter of the function parameter
8314                  pack.  */
8315               {
8316                 /* Get the Ith type.  */
8317                 type = TREE_VEC_ELT (expanded_types, i);
8318
8319                 if (DECL_NAME (r))
8320                   /* Rename the parameter to include the index.  */
8321                   DECL_NAME (r) =
8322                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8323               }
8324             else if (!type)
8325               /* We're dealing with a normal parameter.  */
8326               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8327
8328             type = type_decays_to (type);
8329             TREE_TYPE (r) = type;
8330             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8331
8332             if (DECL_INITIAL (r))
8333               {
8334                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8335                   DECL_INITIAL (r) = TREE_TYPE (r);
8336                 else
8337                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8338                                              complain, in_decl);
8339               }
8340
8341             DECL_CONTEXT (r) = NULL_TREE;
8342
8343             if (!DECL_TEMPLATE_PARM_P (r))
8344               DECL_ARG_TYPE (r) = type_passed_as (type);
8345
8346             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8347                                             args, complain, in_decl);
8348
8349             /* Keep track of the first new parameter we
8350                generate. That's what will be returned to the
8351                caller.  */
8352             if (!first_r)
8353               first_r = r;
8354
8355             /* Build a proper chain of parameters when substituting
8356                into a function parameter pack.  */
8357             if (prev_r)
8358               TREE_CHAIN (prev_r) = r;
8359           }
8360
8361         if (TREE_CHAIN (t))
8362           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8363                                    complain, TREE_CHAIN (t));
8364
8365         /* FIRST_R contains the start of the chain we've built.  */
8366         r = first_r;
8367       }
8368       break;
8369
8370     case FIELD_DECL:
8371       {
8372         tree type;
8373
8374         r = copy_decl (t);
8375         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8376         if (type == error_mark_node)
8377           return error_mark_node;
8378         TREE_TYPE (r) = type;
8379         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8380
8381         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8382         DECL_INITIAL (r)
8383           = tsubst_expr (DECL_INITIAL (t), args,
8384                          complain, in_decl,
8385                          /*integral_constant_expression_p=*/true);
8386         /* We don't have to set DECL_CONTEXT here; it is set by
8387            finish_member_declaration.  */
8388         TREE_CHAIN (r) = NULL_TREE;
8389         if (VOID_TYPE_P (type))
8390           error ("instantiation of %q+D as type %qT", r, type);
8391
8392         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8393                                         args, complain, in_decl);
8394       }
8395       break;
8396
8397     case USING_DECL:
8398       /* We reach here only for member using decls.  */
8399       if (DECL_DEPENDENT_P (t))
8400         {
8401           r = do_class_using_decl
8402             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8403              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8404           if (!r)
8405             r = error_mark_node;
8406         }
8407       else
8408         {
8409           r = copy_node (t);
8410           TREE_CHAIN (r) = NULL_TREE;
8411         }
8412       break;
8413
8414     case TYPE_DECL:
8415     case VAR_DECL:
8416       {
8417         tree argvec = NULL_TREE;
8418         tree gen_tmpl = NULL_TREE;
8419         tree spec;
8420         tree tmpl = NULL_TREE;
8421         tree ctx;
8422         tree type = NULL_TREE;
8423         bool local_p;
8424
8425         if (TREE_CODE (t) == TYPE_DECL
8426             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8427           {
8428             /* If this is the canonical decl, we don't have to
8429                mess with instantiations, and often we can't (for
8430                typename, template type parms and such).  Note that
8431                TYPE_NAME is not correct for the above test if
8432                we've copied the type for a typedef.  */
8433             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8434             if (type == error_mark_node)
8435               return error_mark_node;
8436             r = TYPE_NAME (type);
8437             break;
8438           }
8439
8440         /* Check to see if we already have the specialization we
8441            need.  */
8442         spec = NULL_TREE;
8443         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8444           {
8445             /* T is a static data member or namespace-scope entity.
8446                We have to substitute into namespace-scope variables
8447                (even though such entities are never templates) because
8448                of cases like:
8449                
8450                  template <class T> void f() { extern T t; }
8451
8452                where the entity referenced is not known until
8453                instantiation time.  */
8454             local_p = false;
8455             ctx = DECL_CONTEXT (t);
8456             if (DECL_CLASS_SCOPE_P (t))
8457               {
8458                 ctx = tsubst_aggr_type (ctx, args,
8459                                         complain,
8460                                         in_decl, /*entering_scope=*/1);
8461                 /* If CTX is unchanged, then T is in fact the
8462                    specialization we want.  That situation occurs when
8463                    referencing a static data member within in its own
8464                    class.  We can use pointer equality, rather than
8465                    same_type_p, because DECL_CONTEXT is always
8466                    canonical.  */
8467                 if (ctx == DECL_CONTEXT (t))
8468                   spec = t;
8469               }
8470
8471             if (!spec)
8472               {
8473                 tmpl = DECL_TI_TEMPLATE (t);
8474                 gen_tmpl = most_general_template (tmpl);
8475                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8476                 spec = (retrieve_specialization 
8477                         (gen_tmpl, argvec,
8478                          /*class_specializations_p=*/false));
8479               }
8480           }
8481         else
8482           {
8483             /* A local variable.  */
8484             local_p = true;
8485             /* Subsequent calls to pushdecl will fill this in.  */
8486             ctx = NULL_TREE;
8487             spec = retrieve_local_specialization (t);
8488           }
8489         /* If we already have the specialization we need, there is
8490            nothing more to do.  */ 
8491         if (spec)
8492           {
8493             r = spec;
8494             break;
8495           }
8496
8497         /* Create a new node for the specialization we need.  */
8498         r = copy_decl (t);
8499         if (type == NULL_TREE)
8500           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8501         if (TREE_CODE (r) == VAR_DECL)
8502           {
8503             /* Even if the original location is out of scope, the
8504                newly substituted one is not.  */
8505             DECL_DEAD_FOR_LOCAL (r) = 0;
8506             DECL_INITIALIZED_P (r) = 0;
8507             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8508             if (type == error_mark_node)
8509               return error_mark_node;
8510             if (TREE_CODE (type) == FUNCTION_TYPE)
8511               {
8512                 /* It may seem that this case cannot occur, since:
8513
8514                      typedef void f();
8515                      void g() { f x; }
8516
8517                    declares a function, not a variable.  However:
8518       
8519                      typedef void f();
8520                      template <typename T> void g() { T t; }
8521                      template void g<f>();
8522
8523                    is an attempt to declare a variable with function
8524                    type.  */
8525                 error ("variable %qD has function type",
8526                        /* R is not yet sufficiently initialized, so we
8527                           just use its name.  */
8528                        DECL_NAME (r));
8529                 return error_mark_node;
8530               }
8531             type = complete_type (type);
8532             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8533               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8534             type = check_var_type (DECL_NAME (r), type);
8535
8536             if (DECL_HAS_VALUE_EXPR_P (t))
8537               {
8538                 tree ve = DECL_VALUE_EXPR (t);
8539                 ve = tsubst_expr (ve, args, complain, in_decl,
8540                                   /*constant_expression_p=*/false);
8541                 SET_DECL_VALUE_EXPR (r, ve);
8542               }
8543           }
8544         else if (DECL_SELF_REFERENCE_P (t))
8545           SET_DECL_SELF_REFERENCE_P (r);
8546         TREE_TYPE (r) = type;
8547         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8548         DECL_CONTEXT (r) = ctx;
8549         /* Clear out the mangled name and RTL for the instantiation.  */
8550         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8551         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8552           SET_DECL_RTL (r, NULL_RTX);
8553         /* The initializer must not be expanded until it is required;
8554            see [temp.inst].  */
8555         DECL_INITIAL (r) = NULL_TREE;
8556         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8557           SET_DECL_RTL (r, NULL_RTX);
8558         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8559         if (TREE_CODE (r) == VAR_DECL)
8560           {
8561             /* Possibly limit visibility based on template args.  */
8562             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8563             if (DECL_VISIBILITY_SPECIFIED (t))
8564               {
8565                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8566                 DECL_ATTRIBUTES (r)
8567                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8568               }
8569             determine_visibility (r);
8570           }
8571         /* Preserve a typedef that names a type.  */
8572         else if (TREE_CODE (r) == TYPE_DECL
8573                  && DECL_ORIGINAL_TYPE (t)
8574                  && type != error_mark_node)
8575           {
8576             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8577                                              args, complain, in_decl);
8578             TREE_TYPE (r) = type = build_variant_type_copy (type);
8579             TYPE_NAME (type) = r;
8580           }
8581
8582         if (!local_p)
8583           {
8584             /* A static data member declaration is always marked
8585                external when it is declared in-class, even if an
8586                initializer is present.  We mimic the non-template
8587                processing here.  */
8588             DECL_EXTERNAL (r) = 1;
8589
8590             register_specialization (r, gen_tmpl, argvec, false);
8591             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8592             SET_DECL_IMPLICIT_INSTANTIATION (r);
8593           }
8594         else
8595           register_local_specialization (r, t);
8596
8597         TREE_CHAIN (r) = NULL_TREE;
8598
8599         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8600                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8601                                         args, complain, in_decl);
8602         layout_decl (r, 0);
8603       }
8604       break;
8605
8606     default:
8607       gcc_unreachable ();
8608     }
8609
8610   /* Restore the file and line information.  */
8611   input_location = saved_loc;
8612
8613   return r;
8614 }
8615
8616 /* Substitute into the ARG_TYPES of a function type.  */
8617
8618 static tree
8619 tsubst_arg_types (tree arg_types,
8620                   tree args,
8621                   tsubst_flags_t complain,
8622                   tree in_decl)
8623 {
8624   tree remaining_arg_types;
8625   tree type = NULL_TREE;
8626   int i = 1;
8627   tree expanded_args = NULL_TREE;
8628   tree default_arg;
8629
8630   if (!arg_types || arg_types == void_list_node)
8631     return arg_types;
8632
8633   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8634                                           args, complain, in_decl);
8635   if (remaining_arg_types == error_mark_node)
8636     return error_mark_node;
8637
8638   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8639     {
8640       /* For a pack expansion, perform substitution on the
8641          entire expression. Later on, we'll handle the arguments
8642          one-by-one.  */
8643       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8644                                             args, complain, in_decl);
8645
8646       if (TREE_CODE (expanded_args) == TREE_VEC)
8647         /* So that we'll spin through the parameters, one by one.  */
8648         i = TREE_VEC_LENGTH (expanded_args);
8649       else
8650         {
8651           /* We only partially substituted into the parameter
8652              pack. Our type is TYPE_PACK_EXPANSION.  */
8653           type = expanded_args;
8654           expanded_args = NULL_TREE;
8655         }
8656     }
8657
8658   while (i > 0) {
8659     --i;
8660     
8661     if (expanded_args)
8662       type = TREE_VEC_ELT (expanded_args, i);
8663     else if (!type)
8664       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8665
8666     if (type == error_mark_node)
8667       return error_mark_node;
8668     if (VOID_TYPE_P (type))
8669       {
8670         if (complain & tf_error)
8671           {
8672             error ("invalid parameter type %qT", type);
8673             if (in_decl)
8674               error ("in declaration %q+D", in_decl);
8675           }
8676         return error_mark_node;
8677     }
8678     
8679     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8680        top-level qualifiers as required.  */
8681     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8682
8683     /* We do not substitute into default arguments here.  The standard
8684        mandates that they be instantiated only when needed, which is
8685        done in build_over_call.  */
8686     default_arg = TREE_PURPOSE (arg_types);
8687
8688     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8689       {
8690         /* We've instantiated a template before its default arguments
8691            have been parsed.  This can happen for a nested template
8692            class, and is not an error unless we require the default
8693            argument in a call of this function.  */
8694         remaining_arg_types = 
8695           tree_cons (default_arg, type, remaining_arg_types);
8696         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8697                        remaining_arg_types);
8698       }
8699     else
8700       remaining_arg_types = 
8701         hash_tree_cons (default_arg, type, remaining_arg_types);
8702   }
8703         
8704   return remaining_arg_types;
8705 }
8706
8707 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8708    *not* handle the exception-specification for FNTYPE, because the
8709    initial substitution of explicitly provided template parameters
8710    during argument deduction forbids substitution into the
8711    exception-specification:
8712
8713      [temp.deduct]
8714
8715      All references in the function type of the function template to  the
8716      corresponding template parameters are replaced by the specified tem-
8717      plate argument values.  If a substitution in a template parameter or
8718      in  the function type of the function template results in an invalid
8719      type, type deduction fails.  [Note: The equivalent  substitution  in
8720      exception specifications is done only when the function is instanti-
8721      ated, at which point a program is  ill-formed  if  the  substitution
8722      results in an invalid type.]  */
8723
8724 static tree
8725 tsubst_function_type (tree t,
8726                       tree args,
8727                       tsubst_flags_t complain,
8728                       tree in_decl)
8729 {
8730   tree return_type;
8731   tree arg_types;
8732   tree fntype;
8733
8734   /* The TYPE_CONTEXT is not used for function/method types.  */
8735   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8736
8737   /* Substitute the return type.  */
8738   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8739   if (return_type == error_mark_node)
8740     return error_mark_node;
8741   /* The standard does not presently indicate that creation of a
8742      function type with an invalid return type is a deduction failure.
8743      However, that is clearly analogous to creating an array of "void"
8744      or a reference to a reference.  This is core issue #486.  */
8745   if (TREE_CODE (return_type) == ARRAY_TYPE
8746       || TREE_CODE (return_type) == FUNCTION_TYPE)
8747     {
8748       if (complain & tf_error)
8749         {
8750           if (TREE_CODE (return_type) == ARRAY_TYPE)
8751             error ("function returning an array");
8752           else
8753             error ("function returning a function");
8754         }
8755       return error_mark_node;
8756     }
8757
8758   /* Substitute the argument types.  */
8759   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8760                                 complain, in_decl);
8761   if (arg_types == error_mark_node)
8762     return error_mark_node;
8763
8764   /* Construct a new type node and return it.  */
8765   if (TREE_CODE (t) == FUNCTION_TYPE)
8766     fntype = build_function_type (return_type, arg_types);
8767   else
8768     {
8769       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8770       if (! MAYBE_CLASS_TYPE_P (r))
8771         {
8772           /* [temp.deduct]
8773
8774              Type deduction may fail for any of the following
8775              reasons:
8776
8777              -- Attempting to create "pointer to member of T" when T
8778              is not a class type.  */
8779           if (complain & tf_error)
8780             error ("creating pointer to member function of non-class type %qT",
8781                       r);
8782           return error_mark_node;
8783         }
8784
8785       fntype = build_method_type_directly (r, return_type,
8786                                            TREE_CHAIN (arg_types));
8787     }
8788   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8789   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8790
8791   return fntype;
8792 }
8793
8794 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8795    ARGS into that specification, and return the substituted
8796    specification.  If there is no specification, return NULL_TREE.  */
8797
8798 static tree
8799 tsubst_exception_specification (tree fntype,
8800                                 tree args,
8801                                 tsubst_flags_t complain,
8802                                 tree in_decl)
8803 {
8804   tree specs;
8805   tree new_specs;
8806
8807   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8808   new_specs = NULL_TREE;
8809   if (specs)
8810     {
8811       if (! TREE_VALUE (specs))
8812         new_specs = specs;
8813       else
8814         while (specs)
8815           {
8816             tree spec;
8817             int i, len = 1;
8818             tree expanded_specs = NULL_TREE;
8819
8820             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8821               {
8822                 /* Expand the pack expansion type.  */
8823                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8824                                                        args, complain,
8825                                                        in_decl);
8826
8827                 if (expanded_specs == error_mark_node)
8828                   return error_mark_node;
8829                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8830                   len = TREE_VEC_LENGTH (expanded_specs);
8831                 else
8832                   {
8833                     /* We're substituting into a member template, so
8834                        we got a TYPE_PACK_EXPANSION back.  Add that
8835                        expansion and move on.  */
8836                     gcc_assert (TREE_CODE (expanded_specs) 
8837                                 == TYPE_PACK_EXPANSION);
8838                     new_specs = add_exception_specifier (new_specs,
8839                                                          expanded_specs,
8840                                                          complain);
8841                     specs = TREE_CHAIN (specs);
8842                     continue;
8843                   }
8844               }
8845
8846             for (i = 0; i < len; ++i)
8847               {
8848                 if (expanded_specs)
8849                   spec = TREE_VEC_ELT (expanded_specs, i);
8850                 else
8851                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8852                 if (spec == error_mark_node)
8853                   return spec;
8854                 new_specs = add_exception_specifier (new_specs, spec, 
8855                                                      complain);
8856               }
8857
8858             specs = TREE_CHAIN (specs);
8859           }
8860     }
8861   return new_specs;
8862 }
8863
8864 /* Take the tree structure T and replace template parameters used
8865    therein with the argument vector ARGS.  IN_DECL is an associated
8866    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8867    Issue error and warning messages under control of COMPLAIN.  Note
8868    that we must be relatively non-tolerant of extensions here, in
8869    order to preserve conformance; if we allow substitutions that
8870    should not be allowed, we may allow argument deductions that should
8871    not succeed, and therefore report ambiguous overload situations
8872    where there are none.  In theory, we could allow the substitution,
8873    but indicate that it should have failed, and allow our caller to
8874    make sure that the right thing happens, but we don't try to do this
8875    yet.
8876
8877    This function is used for dealing with types, decls and the like;
8878    for expressions, use tsubst_expr or tsubst_copy.  */
8879
8880 static tree
8881 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8882 {
8883   tree type, r;
8884
8885   if (t == NULL_TREE || t == error_mark_node
8886       || t == integer_type_node
8887       || t == void_type_node
8888       || t == char_type_node
8889       || t == unknown_type_node
8890       || TREE_CODE (t) == NAMESPACE_DECL)
8891     return t;
8892
8893   if (DECL_P (t))
8894     return tsubst_decl (t, args, complain);
8895
8896   if (TREE_CODE (t) == IDENTIFIER_NODE)
8897     type = IDENTIFIER_TYPE_VALUE (t);
8898   else
8899     type = TREE_TYPE (t);
8900
8901   gcc_assert (type != unknown_type_node);
8902
8903   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8904      such as attribute aligned.  */
8905   if (TYPE_P (t)
8906       && TYPE_NAME (t)
8907       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8908     {
8909       tree decl = TYPE_NAME (t);
8910       
8911       if (DECL_CLASS_SCOPE_P (decl)
8912           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
8913           && uses_template_parms (DECL_CONTEXT (decl)))
8914         {
8915           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8916           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8917           r = retrieve_specialization (tmpl, gen_args, false);
8918         }
8919       else if (DECL_FUNCTION_SCOPE_P (decl)
8920                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
8921                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
8922         r = retrieve_local_specialization (decl);
8923       else
8924         /* The typedef is from a non-template context.  */
8925         return t;
8926
8927       if (r)
8928         {
8929           r = TREE_TYPE (r);
8930           r = cp_build_qualified_type_real
8931             (r, cp_type_quals (t) | cp_type_quals (r),
8932              complain | tf_ignore_bad_quals);
8933           return r;
8934         }
8935       /* Else we must be instantiating the typedef, so fall through.  */
8936     }
8937
8938   if (type
8939       && TREE_CODE (t) != TYPENAME_TYPE
8940       && TREE_CODE (t) != IDENTIFIER_NODE
8941       && TREE_CODE (t) != FUNCTION_TYPE
8942       && TREE_CODE (t) != METHOD_TYPE)
8943     type = tsubst (type, args, complain, in_decl);
8944   if (type == error_mark_node)
8945     return error_mark_node;
8946
8947   switch (TREE_CODE (t))
8948     {
8949     case RECORD_TYPE:
8950     case UNION_TYPE:
8951     case ENUMERAL_TYPE:
8952       return tsubst_aggr_type (t, args, complain, in_decl,
8953                                /*entering_scope=*/0);
8954
8955     case ERROR_MARK:
8956     case IDENTIFIER_NODE:
8957     case VOID_TYPE:
8958     case REAL_TYPE:
8959     case COMPLEX_TYPE:
8960     case VECTOR_TYPE:
8961     case BOOLEAN_TYPE:
8962     case INTEGER_CST:
8963     case REAL_CST:
8964     case STRING_CST:
8965       return t;
8966
8967     case INTEGER_TYPE:
8968       if (t == integer_type_node)
8969         return t;
8970
8971       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8972           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8973         return t;
8974
8975       {
8976         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8977
8978         max = tsubst_expr (omax, args, complain, in_decl,
8979                            /*integral_constant_expression_p=*/false);
8980         max = fold_decl_constant_value (max);
8981
8982         if (TREE_CODE (max) != INTEGER_CST
8983             && !at_function_scope_p ()
8984             && !value_dependent_expression_p (max))
8985           {
8986             if (complain & tf_error)
8987               error ("array bound is not an integer constant");
8988             return error_mark_node;
8989           }
8990
8991         /* [temp.deduct]
8992
8993            Type deduction may fail for any of the following
8994            reasons:
8995
8996              Attempting to create an array with a size that is
8997              zero or negative.  */
8998         if (integer_zerop (max) && !(complain & tf_error))
8999           /* We must fail if performing argument deduction (as
9000              indicated by the state of complain), so that
9001              another substitution can be found.  */
9002           return error_mark_node;
9003         else if (TREE_CODE (max) == INTEGER_CST
9004                  && INT_CST_LT (max, integer_zero_node))
9005           {
9006             if (complain & tf_error)
9007               error ("creating array with negative size (%qE)", max);
9008
9009             return error_mark_node;
9010           }
9011
9012         return compute_array_index_type (NULL_TREE, max);
9013       }
9014
9015     case TEMPLATE_TYPE_PARM:
9016     case TEMPLATE_TEMPLATE_PARM:
9017     case BOUND_TEMPLATE_TEMPLATE_PARM:
9018     case TEMPLATE_PARM_INDEX:
9019       {
9020         int idx;
9021         int level;
9022         int levels;
9023         tree arg = NULL_TREE;
9024
9025         r = NULL_TREE;
9026
9027         gcc_assert (TREE_VEC_LENGTH (args) > 0);
9028         template_parm_level_and_index (t, &level, &idx); 
9029
9030         levels = TMPL_ARGS_DEPTH (args);
9031         if (level <= levels)
9032           {
9033             arg = TMPL_ARG (args, level, idx);
9034
9035             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
9036               /* See through ARGUMENT_PACK_SELECT arguments. */
9037               arg = ARGUMENT_PACK_SELECT_ARG (arg);
9038           }
9039
9040         if (arg == error_mark_node)
9041           return error_mark_node;
9042         else if (arg != NULL_TREE)
9043           {
9044             if (ARGUMENT_PACK_P (arg))
9045               /* If ARG is an argument pack, we don't actually want to
9046                  perform a substitution here, because substitutions
9047                  for argument packs are only done
9048                  element-by-element. We can get to this point when
9049                  substituting the type of a non-type template
9050                  parameter pack, when that type actually contains
9051                  template parameter packs from an outer template, e.g.,
9052
9053                  template<typename... Types> struct A {
9054                    template<Types... Values> struct B { };
9055                  };  */
9056               return t;
9057
9058             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
9059               {
9060                 int quals;
9061                 gcc_assert (TYPE_P (arg));
9062
9063                 /* cv-quals from the template are discarded when
9064                    substituting in a function or reference type.  */
9065                 if (TREE_CODE (arg) == FUNCTION_TYPE
9066                     || TREE_CODE (arg) == METHOD_TYPE
9067                     || TREE_CODE (arg) == REFERENCE_TYPE)
9068                   quals = cp_type_quals (arg);
9069                 else
9070                   quals = cp_type_quals (arg) | cp_type_quals (t);
9071                   
9072                 return cp_build_qualified_type_real
9073                   (arg, quals, complain | tf_ignore_bad_quals);
9074               }
9075             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9076               {
9077                 /* We are processing a type constructed from a
9078                    template template parameter.  */
9079                 tree argvec = tsubst (TYPE_TI_ARGS (t),
9080                                       args, complain, in_decl);
9081                 if (argvec == error_mark_node)
9082                   return error_mark_node;
9083
9084                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
9085                    are resolving nested-types in the signature of a
9086                    member function templates.  Otherwise ARG is a
9087                    TEMPLATE_DECL and is the real template to be
9088                    instantiated.  */
9089                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
9090                   arg = TYPE_NAME (arg);
9091
9092                 r = lookup_template_class (arg,
9093                                            argvec, in_decl,
9094                                            DECL_CONTEXT (arg),
9095                                             /*entering_scope=*/0,
9096                                            complain);
9097                 return cp_build_qualified_type_real
9098                   (r, TYPE_QUALS (t), complain);
9099               }
9100             else
9101               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9102               return arg;
9103           }
9104
9105         if (level == 1)
9106           /* This can happen during the attempted tsubst'ing in
9107              unify.  This means that we don't yet have any information
9108              about the template parameter in question.  */
9109           return t;
9110
9111         /* If we get here, we must have been looking at a parm for a
9112            more deeply nested template.  Make a new version of this
9113            template parameter, but with a lower level.  */
9114         switch (TREE_CODE (t))
9115           {
9116           case TEMPLATE_TYPE_PARM:
9117           case TEMPLATE_TEMPLATE_PARM:
9118           case BOUND_TEMPLATE_TEMPLATE_PARM:
9119             if (cp_type_quals (t))
9120               {
9121                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9122                 r = cp_build_qualified_type_real
9123                   (r, cp_type_quals (t),
9124                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9125                                ? tf_ignore_bad_quals : 0));
9126               }
9127             else
9128               {
9129                 r = copy_type (t);
9130                 TEMPLATE_TYPE_PARM_INDEX (r)
9131                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9132                                                 r, levels, args, complain);
9133                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9134                 TYPE_MAIN_VARIANT (r) = r;
9135                 TYPE_POINTER_TO (r) = NULL_TREE;
9136                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9137
9138                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9139                   /* We have reduced the level of the template
9140                      template parameter, but not the levels of its
9141                      template parameters, so canonical_type_parameter
9142                      will not be able to find the canonical template
9143                      template parameter for this level. Thus, we
9144                      require structural equality checking to compare
9145                      TEMPLATE_TEMPLATE_PARMs. */
9146                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9147                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9148                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9149                 else
9150                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9151
9152                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9153                   {
9154                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9155                                           complain, in_decl);
9156                     if (argvec == error_mark_node)
9157                       return error_mark_node;
9158
9159                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9160                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9161                   }
9162               }
9163             break;
9164
9165           case TEMPLATE_PARM_INDEX:
9166             r = reduce_template_parm_level (t, type, levels, args, complain);
9167             break;
9168
9169           default:
9170             gcc_unreachable ();
9171           }
9172
9173         return r;
9174       }
9175
9176     case TREE_LIST:
9177       {
9178         tree purpose, value, chain;
9179
9180         if (t == void_list_node)
9181           return t;
9182
9183         purpose = TREE_PURPOSE (t);
9184         if (purpose)
9185           {
9186             purpose = tsubst (purpose, args, complain, in_decl);
9187             if (purpose == error_mark_node)
9188               return error_mark_node;
9189           }
9190         value = TREE_VALUE (t);
9191         if (value)
9192           {
9193             value = tsubst (value, args, complain, in_decl);
9194             if (value == error_mark_node)
9195               return error_mark_node;
9196           }
9197         chain = TREE_CHAIN (t);
9198         if (chain && chain != void_type_node)
9199           {
9200             chain = tsubst (chain, args, complain, in_decl);
9201             if (chain == error_mark_node)
9202               return error_mark_node;
9203           }
9204         if (purpose == TREE_PURPOSE (t)
9205             && value == TREE_VALUE (t)
9206             && chain == TREE_CHAIN (t))
9207           return t;
9208         return hash_tree_cons (purpose, value, chain);
9209       }
9210
9211     case TREE_BINFO:
9212       /* We should never be tsubsting a binfo.  */
9213       gcc_unreachable ();
9214
9215     case TREE_VEC:
9216       /* A vector of template arguments.  */
9217       gcc_assert (!type);
9218       return tsubst_template_args (t, args, complain, in_decl);
9219
9220     case POINTER_TYPE:
9221     case REFERENCE_TYPE:
9222       {
9223         enum tree_code code;
9224
9225         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9226           return t;
9227
9228         code = TREE_CODE (t);
9229
9230
9231         /* [temp.deduct]
9232
9233            Type deduction may fail for any of the following
9234            reasons:
9235
9236            -- Attempting to create a pointer to reference type.
9237            -- Attempting to create a reference to a reference type or
9238               a reference to void.
9239
9240           Core issue 106 says that creating a reference to a reference
9241           during instantiation is no longer a cause for failure. We
9242           only enforce this check in strict C++98 mode.  */
9243         if ((TREE_CODE (type) == REFERENCE_TYPE
9244              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9245             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9246           {
9247             static location_t last_loc;
9248
9249             /* We keep track of the last time we issued this error
9250                message to avoid spewing a ton of messages during a
9251                single bad template instantiation.  */
9252             if (complain & tf_error
9253                 && last_loc != input_location)
9254               {
9255                 if (TREE_CODE (type) == VOID_TYPE)
9256                   error ("forming reference to void");
9257                 else
9258                   error ("forming %s to reference type %qT",
9259                          (code == POINTER_TYPE) ? "pointer" : "reference",
9260                          type);
9261                 last_loc = input_location;
9262               }
9263
9264             return error_mark_node;
9265           }
9266         else if (code == POINTER_TYPE)
9267           {
9268             r = build_pointer_type (type);
9269             if (TREE_CODE (type) == METHOD_TYPE)
9270               r = build_ptrmemfunc_type (r);
9271           }
9272         else if (TREE_CODE (type) == REFERENCE_TYPE)
9273           /* In C++0x, during template argument substitution, when there is an
9274              attempt to create a reference to a reference type, reference
9275              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9276
9277              "If a template-argument for a template-parameter T names a type
9278              that is a reference to a type A, an attempt to create the type
9279              'lvalue reference to cv T' creates the type 'lvalue reference to
9280              A,' while an attempt to create the type type rvalue reference to
9281              cv T' creates the type T"
9282           */
9283           r = cp_build_reference_type
9284               (TREE_TYPE (type),
9285                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9286         else
9287           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9288         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9289
9290         if (r != error_mark_node)
9291           /* Will this ever be needed for TYPE_..._TO values?  */
9292           layout_type (r);
9293
9294         return r;
9295       }
9296     case OFFSET_TYPE:
9297       {
9298         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9299         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
9300           {
9301             /* [temp.deduct]
9302
9303                Type deduction may fail for any of the following
9304                reasons:
9305
9306                -- Attempting to create "pointer to member of T" when T
9307                   is not a class type.  */
9308             if (complain & tf_error)
9309               error ("creating pointer to member of non-class type %qT", r);
9310             return error_mark_node;
9311           }
9312         if (TREE_CODE (type) == REFERENCE_TYPE)
9313           {
9314             if (complain & tf_error)
9315               error ("creating pointer to member reference type %qT", type);
9316             return error_mark_node;
9317           }
9318         if (TREE_CODE (type) == VOID_TYPE)
9319           {
9320             if (complain & tf_error)
9321               error ("creating pointer to member of type void");
9322             return error_mark_node;
9323           }
9324         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9325         if (TREE_CODE (type) == FUNCTION_TYPE)
9326           {
9327             /* The type of the implicit object parameter gets its
9328                cv-qualifiers from the FUNCTION_TYPE. */
9329             tree method_type;
9330             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9331                                                       cp_type_quals (type));
9332             tree memptr;
9333             method_type = build_method_type_directly (this_type,
9334                                                       TREE_TYPE (type),
9335                                                       TYPE_ARG_TYPES (type));
9336             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9337             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9338                                                  complain);
9339           }
9340         else
9341           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9342                                                TYPE_QUALS (t),
9343                                                complain);
9344       }
9345     case FUNCTION_TYPE:
9346     case METHOD_TYPE:
9347       {
9348         tree fntype;
9349         tree specs;
9350         fntype = tsubst_function_type (t, args, complain, in_decl);
9351         if (fntype == error_mark_node)
9352           return error_mark_node;
9353
9354         /* Substitute the exception specification.  */
9355         specs = tsubst_exception_specification (t, args, complain,
9356                                                 in_decl);
9357         if (specs == error_mark_node)
9358           return error_mark_node;
9359         if (specs)
9360           fntype = build_exception_variant (fntype, specs);
9361         return fntype;
9362       }
9363     case ARRAY_TYPE:
9364       {
9365         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9366         if (domain == error_mark_node)
9367           return error_mark_node;
9368
9369         /* As an optimization, we avoid regenerating the array type if
9370            it will obviously be the same as T.  */
9371         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9372           return t;
9373
9374         /* These checks should match the ones in grokdeclarator.
9375
9376            [temp.deduct]
9377
9378            The deduction may fail for any of the following reasons:
9379
9380            -- Attempting to create an array with an element type that
9381               is void, a function type, or a reference type, or [DR337]
9382               an abstract class type.  */
9383         if (TREE_CODE (type) == VOID_TYPE
9384             || TREE_CODE (type) == FUNCTION_TYPE
9385             || TREE_CODE (type) == REFERENCE_TYPE)
9386           {
9387             if (complain & tf_error)
9388               error ("creating array of %qT", type);
9389             return error_mark_node;
9390           }
9391         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9392           {
9393             if (complain & tf_error)
9394               error ("creating array of %qT, which is an abstract class type",
9395                      type);
9396             return error_mark_node;
9397           }
9398
9399         r = build_cplus_array_type (type, domain);
9400
9401         if (TYPE_USER_ALIGN (t))
9402           {
9403             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9404             TYPE_USER_ALIGN (r) = 1;
9405           }
9406
9407         return r;
9408       }
9409
9410     case PLUS_EXPR:
9411     case MINUS_EXPR:
9412       {
9413         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9414         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9415
9416         if (e1 == error_mark_node || e2 == error_mark_node)
9417           return error_mark_node;
9418
9419         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9420       }
9421
9422     case NEGATE_EXPR:
9423     case NOP_EXPR:
9424       {
9425         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9426         if (e == error_mark_node)
9427           return error_mark_node;
9428
9429         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9430       }
9431
9432     case TYPENAME_TYPE:
9433       {
9434         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9435                                      in_decl, /*entering_scope=*/1);
9436         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9437                               complain, in_decl);
9438
9439         if (ctx == error_mark_node || f == error_mark_node)
9440           return error_mark_node;
9441
9442         if (!MAYBE_CLASS_TYPE_P (ctx))
9443           {
9444             if (complain & tf_error)
9445               error ("%qT is not a class, struct, or union type", ctx);
9446             return error_mark_node;
9447           }
9448         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9449           {
9450             /* Normally, make_typename_type does not require that the CTX
9451                have complete type in order to allow things like:
9452
9453                  template <class T> struct S { typename S<T>::X Y; };
9454
9455                But, such constructs have already been resolved by this
9456                point, so here CTX really should have complete type, unless
9457                it's a partial instantiation.  */
9458             ctx = complete_type (ctx);
9459             if (!COMPLETE_TYPE_P (ctx))
9460               {
9461                 if (complain & tf_error)
9462                   cxx_incomplete_type_error (NULL_TREE, ctx);
9463                 return error_mark_node;
9464               }
9465           }
9466
9467         f = make_typename_type (ctx, f, typename_type,
9468                                 (complain & tf_error) | tf_keep_type_decl);
9469         if (f == error_mark_node)
9470           return f;
9471         if (TREE_CODE (f) == TYPE_DECL)
9472           {
9473             complain |= tf_ignore_bad_quals;
9474             f = TREE_TYPE (f);
9475           }
9476
9477         if (TREE_CODE (f) != TYPENAME_TYPE)
9478           {
9479             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9480               error ("%qT resolves to %qT, which is not an enumeration type",
9481                      t, f);
9482             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9483               error ("%qT resolves to %qT, which is is not a class type",
9484                      t, f);
9485           }
9486
9487         return cp_build_qualified_type_real
9488           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9489       }
9490
9491     case UNBOUND_CLASS_TEMPLATE:
9492       {
9493         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9494                                      in_decl, /*entering_scope=*/1);
9495         tree name = TYPE_IDENTIFIER (t);
9496         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9497
9498         if (ctx == error_mark_node || name == error_mark_node)
9499           return error_mark_node;
9500
9501         if (parm_list)
9502           parm_list = tsubst_template_parms (parm_list, args, complain);
9503         return make_unbound_class_template (ctx, name, parm_list, complain);
9504       }
9505
9506     case INDIRECT_REF:
9507     case ADDR_EXPR:
9508     case CALL_EXPR:
9509       gcc_unreachable ();
9510
9511     case ARRAY_REF:
9512       {
9513         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9514         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9515                                /*integral_constant_expression_p=*/false);
9516         if (e1 == error_mark_node || e2 == error_mark_node)
9517           return error_mark_node;
9518
9519         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9520       }
9521
9522     case SCOPE_REF:
9523       {
9524         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9525         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9526         if (e1 == error_mark_node || e2 == error_mark_node)
9527           return error_mark_node;
9528
9529         return build_qualified_name (/*type=*/NULL_TREE,
9530                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9531       }
9532
9533     case TYPEOF_TYPE:
9534       {
9535         tree type;
9536
9537         type = finish_typeof (tsubst_expr 
9538                               (TYPEOF_TYPE_EXPR (t), args,
9539                                complain, in_decl,
9540                                /*integral_constant_expression_p=*/false));
9541         return cp_build_qualified_type_real (type,
9542                                              cp_type_quals (t)
9543                                              | cp_type_quals (type),
9544                                              complain);
9545       }
9546
9547     case DECLTYPE_TYPE:
9548       {
9549         tree type;
9550
9551         type = 
9552           finish_decltype_type (tsubst_expr 
9553                                 (DECLTYPE_TYPE_EXPR (t), args,
9554                                  complain, in_decl,
9555                                  /*integral_constant_expression_p=*/false),
9556                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9557         return cp_build_qualified_type_real (type,
9558                                              cp_type_quals (t)
9559                                              | cp_type_quals (type),
9560                                              complain);
9561       }
9562
9563     case TYPE_ARGUMENT_PACK:
9564     case NONTYPE_ARGUMENT_PACK:
9565       {
9566         tree r = make_node (TREE_CODE (t));
9567         tree packed_out = 
9568           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9569                                 args,
9570                                 complain,
9571                                 in_decl);
9572         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9573
9574         /* For template nontype argument packs, also substitute into
9575            the type.  */
9576         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9577           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9578
9579         return r;
9580       }
9581       break;
9582
9583     default:
9584       sorry ("use of %qs in template",
9585              tree_code_name [(int) TREE_CODE (t)]);
9586       return error_mark_node;
9587     }
9588 }
9589
9590 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9591    type of the expression on the left-hand side of the "." or "->"
9592    operator.  */
9593
9594 static tree
9595 tsubst_baselink (tree baselink, tree object_type,
9596                  tree args, tsubst_flags_t complain, tree in_decl)
9597 {
9598     tree name;
9599     tree qualifying_scope;
9600     tree fns;
9601     tree optype;
9602     tree template_args = 0;
9603     bool template_id_p = false;
9604
9605     /* A baselink indicates a function from a base class.  Both the
9606        BASELINK_ACCESS_BINFO and the base class referenced may
9607        indicate bases of the template class, rather than the
9608        instantiated class.  In addition, lookups that were not
9609        ambiguous before may be ambiguous now.  Therefore, we perform
9610        the lookup again.  */
9611     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9612     qualifying_scope = tsubst (qualifying_scope, args,
9613                                complain, in_decl);
9614     fns = BASELINK_FUNCTIONS (baselink);
9615     optype = BASELINK_OPTYPE (baselink);
9616     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9617       {
9618         template_id_p = true;
9619         template_args = TREE_OPERAND (fns, 1);
9620         fns = TREE_OPERAND (fns, 0);
9621         if (template_args)
9622           template_args = tsubst_template_args (template_args, args,
9623                                                 complain, in_decl);
9624       }
9625     name = DECL_NAME (get_first_fn (fns));
9626     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9627
9628     /* If lookup found a single function, mark it as used at this
9629        point.  (If it lookup found multiple functions the one selected
9630        later by overload resolution will be marked as used at that
9631        point.)  */
9632     if (BASELINK_P (baselink))
9633       fns = BASELINK_FUNCTIONS (baselink);
9634     if (!template_id_p && !really_overloaded_fn (fns))
9635       mark_used (OVL_CURRENT (fns));
9636
9637     /* Add back the template arguments, if present.  */
9638     if (BASELINK_P (baselink) && template_id_p)
9639       BASELINK_FUNCTIONS (baselink)
9640         = build_nt (TEMPLATE_ID_EXPR,
9641                     BASELINK_FUNCTIONS (baselink),
9642                     template_args);
9643     /* Update the conversion operator type.  */
9644     BASELINK_OPTYPE (baselink) 
9645       = tsubst (optype, args, complain, in_decl);
9646
9647     if (!object_type)
9648       object_type = current_class_type;
9649     return adjust_result_of_qualified_name_lookup (baselink,
9650                                                    qualifying_scope,
9651                                                    object_type);
9652 }
9653
9654 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9655    true if the qualified-id will be a postfix-expression in-and-of
9656    itself; false if more of the postfix-expression follows the
9657    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9658    of "&".  */
9659
9660 static tree
9661 tsubst_qualified_id (tree qualified_id, tree args,
9662                      tsubst_flags_t complain, tree in_decl,
9663                      bool done, bool address_p)
9664 {
9665   tree expr;
9666   tree scope;
9667   tree name;
9668   bool is_template;
9669   tree template_args;
9670
9671   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9672
9673   /* Figure out what name to look up.  */
9674   name = TREE_OPERAND (qualified_id, 1);
9675   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9676     {
9677       is_template = true;
9678       template_args = TREE_OPERAND (name, 1);
9679       if (template_args)
9680         template_args = tsubst_template_args (template_args, args,
9681                                               complain, in_decl);
9682       name = TREE_OPERAND (name, 0);
9683     }
9684   else
9685     {
9686       is_template = false;
9687       template_args = NULL_TREE;
9688     }
9689
9690   /* Substitute into the qualifying scope.  When there are no ARGS, we
9691      are just trying to simplify a non-dependent expression.  In that
9692      case the qualifying scope may be dependent, and, in any case,
9693      substituting will not help.  */
9694   scope = TREE_OPERAND (qualified_id, 0);
9695   if (args)
9696     {
9697       scope = tsubst (scope, args, complain, in_decl);
9698       expr = tsubst_copy (name, args, complain, in_decl);
9699     }
9700   else
9701     expr = name;
9702
9703   if (dependent_type_p (scope))
9704     return build_qualified_name (/*type=*/NULL_TREE,
9705                                  scope, expr,
9706                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9707
9708   if (!BASELINK_P (name) && !DECL_P (expr))
9709     {
9710       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9711         /* If this were actually a destructor call, it would have been
9712            parsed as such by the parser.  */
9713         expr = error_mark_node;
9714       else
9715         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9716       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9717                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9718         {
9719           if (complain & tf_error)
9720             {
9721               error ("dependent-name %qE is parsed as a non-type, but "
9722                      "instantiation yields a type", qualified_id);
9723               inform ("say %<typename %E%> if a type is meant", qualified_id);
9724             }
9725           return error_mark_node;
9726         }
9727     }
9728
9729   if (DECL_P (expr))
9730     {
9731       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9732                                            scope);
9733       /* Remember that there was a reference to this entity.  */
9734       mark_used (expr);
9735     }
9736
9737   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9738     {
9739       if (complain & tf_error)
9740         qualified_name_lookup_error (scope,
9741                                      TREE_OPERAND (qualified_id, 1),
9742                                      expr, input_location);
9743       return error_mark_node;
9744     }
9745
9746   if (is_template)
9747     expr = lookup_template_function (expr, template_args);
9748
9749   if (expr == error_mark_node && complain & tf_error)
9750     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9751                                  expr, input_location);
9752   else if (TYPE_P (scope))
9753     {
9754       expr = (adjust_result_of_qualified_name_lookup
9755               (expr, scope, current_class_type));
9756       expr = (finish_qualified_id_expr
9757               (scope, expr, done, address_p,
9758                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9759                /*template_arg_p=*/false));
9760     }
9761
9762   /* Expressions do not generally have reference type.  */
9763   if (TREE_CODE (expr) != SCOPE_REF
9764       /* However, if we're about to form a pointer-to-member, we just
9765          want the referenced member referenced.  */
9766       && TREE_CODE (expr) != OFFSET_REF)
9767     expr = convert_from_reference (expr);
9768
9769   return expr;
9770 }
9771
9772 /* Like tsubst, but deals with expressions.  This function just replaces
9773    template parms; to finish processing the resultant expression, use
9774    tsubst_expr.  */
9775
9776 static tree
9777 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9778 {
9779   enum tree_code code;
9780   tree r;
9781
9782   if (t == NULL_TREE || t == error_mark_node)
9783     return t;
9784
9785   code = TREE_CODE (t);
9786
9787   switch (code)
9788     {
9789     case PARM_DECL:
9790       r = retrieve_local_specialization (t);
9791       gcc_assert (r != NULL);
9792       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9793         r = ARGUMENT_PACK_SELECT_ARG (r);
9794       mark_used (r);
9795       return r;
9796
9797     case CONST_DECL:
9798       {
9799         tree enum_type;
9800         tree v;
9801
9802         if (DECL_TEMPLATE_PARM_P (t))
9803           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9804         /* There is no need to substitute into namespace-scope
9805            enumerators.  */
9806         if (DECL_NAMESPACE_SCOPE_P (t))
9807           return t;
9808         /* If ARGS is NULL, then T is known to be non-dependent.  */
9809         if (args == NULL_TREE)
9810           return integral_constant_value (t);
9811
9812         /* Unfortunately, we cannot just call lookup_name here.
9813            Consider:
9814
9815              template <int I> int f() {
9816              enum E { a = I };
9817              struct S { void g() { E e = a; } };
9818              };
9819
9820            When we instantiate f<7>::S::g(), say, lookup_name is not
9821            clever enough to find f<7>::a.  */
9822         enum_type
9823           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9824                               /*entering_scope=*/0);
9825
9826         for (v = TYPE_VALUES (enum_type);
9827              v != NULL_TREE;
9828              v = TREE_CHAIN (v))
9829           if (TREE_PURPOSE (v) == DECL_NAME (t))
9830             return TREE_VALUE (v);
9831
9832           /* We didn't find the name.  That should never happen; if
9833              name-lookup found it during preliminary parsing, we
9834              should find it again here during instantiation.  */
9835         gcc_unreachable ();
9836       }
9837       return t;
9838
9839     case FIELD_DECL:
9840       if (DECL_CONTEXT (t))
9841         {
9842           tree ctx;
9843
9844           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9845                                   /*entering_scope=*/1);
9846           if (ctx != DECL_CONTEXT (t))
9847             {
9848               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9849               if (!r)
9850                 {
9851                   if (complain & tf_error)
9852                     error ("using invalid field %qD", t);
9853                   return error_mark_node;
9854                 }
9855               return r;
9856             }
9857         }
9858
9859       return t;
9860
9861     case VAR_DECL:
9862     case FUNCTION_DECL:
9863       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9864           || local_variable_p (t))
9865         t = tsubst (t, args, complain, in_decl);
9866       mark_used (t);
9867       return t;
9868
9869     case BASELINK:
9870       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9871
9872     case TEMPLATE_DECL:
9873       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9874         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9875                        args, complain, in_decl);
9876       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9877         return tsubst (t, args, complain, in_decl);
9878       else if (DECL_CLASS_SCOPE_P (t)
9879                && uses_template_parms (DECL_CONTEXT (t)))
9880         {
9881           /* Template template argument like the following example need
9882              special treatment:
9883
9884                template <template <class> class TT> struct C {};
9885                template <class T> struct D {
9886                  template <class U> struct E {};
9887                  C<E> c;                                // #1
9888                };
9889                D<int> d;                                // #2
9890
9891              We are processing the template argument `E' in #1 for
9892              the template instantiation #2.  Originally, `E' is a
9893              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9894              have to substitute this with one having context `D<int>'.  */
9895
9896           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9897           return lookup_field (context, DECL_NAME(t), 0, false);
9898         }
9899       else
9900         /* Ordinary template template argument.  */
9901         return t;
9902
9903     case CAST_EXPR:
9904     case REINTERPRET_CAST_EXPR:
9905     case CONST_CAST_EXPR:
9906     case STATIC_CAST_EXPR:
9907     case DYNAMIC_CAST_EXPR:
9908     case NOP_EXPR:
9909       return build1
9910         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9911          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9912
9913     case SIZEOF_EXPR:
9914       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9915         {
9916           /* We only want to compute the number of arguments.  */
9917           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9918                                                 complain, in_decl);
9919           int len = 0;
9920
9921           if (TREE_CODE (expanded) == TREE_VEC)
9922             len = TREE_VEC_LENGTH (expanded);
9923
9924           if (expanded == error_mark_node)
9925             return error_mark_node;
9926           else if (PACK_EXPANSION_P (expanded)
9927                    || (TREE_CODE (expanded) == TREE_VEC
9928                        && len > 0
9929                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
9930             {
9931               if (TREE_CODE (expanded) == TREE_VEC)
9932                 expanded = TREE_VEC_ELT (expanded, len - 1);
9933
9934               if (TYPE_P (expanded))
9935                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
9936                                                    complain & tf_error);
9937               else
9938                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
9939                                                    complain & tf_error);
9940             }
9941           else
9942             return build_int_cst (size_type_node, len);
9943         }
9944       /* Fall through */
9945
9946     case INDIRECT_REF:
9947     case NEGATE_EXPR:
9948     case TRUTH_NOT_EXPR:
9949     case BIT_NOT_EXPR:
9950     case ADDR_EXPR:
9951     case UNARY_PLUS_EXPR:      /* Unary + */
9952     case ALIGNOF_EXPR:
9953     case ARROW_EXPR:
9954     case THROW_EXPR:
9955     case TYPEID_EXPR:
9956     case REALPART_EXPR:
9957     case IMAGPART_EXPR:
9958       return build1
9959         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9960          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9961
9962     case COMPONENT_REF:
9963       {
9964         tree object;
9965         tree name;
9966
9967         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9968         name = TREE_OPERAND (t, 1);
9969         if (TREE_CODE (name) == BIT_NOT_EXPR)
9970           {
9971             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9972                                 complain, in_decl);
9973             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9974           }
9975         else if (TREE_CODE (name) == SCOPE_REF
9976                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9977           {
9978             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9979                                      complain, in_decl);
9980             name = TREE_OPERAND (name, 1);
9981             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9982                                 complain, in_decl);
9983             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9984             name = build_qualified_name (/*type=*/NULL_TREE,
9985                                          base, name,
9986                                          /*template_p=*/false);
9987           }
9988         else if (TREE_CODE (name) == BASELINK)
9989           name = tsubst_baselink (name,
9990                                   non_reference (TREE_TYPE (object)),
9991                                   args, complain,
9992                                   in_decl);
9993         else
9994           name = tsubst_copy (name, args, complain, in_decl);
9995         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9996       }
9997
9998     case PLUS_EXPR:
9999     case MINUS_EXPR:
10000     case MULT_EXPR:
10001     case TRUNC_DIV_EXPR:
10002     case CEIL_DIV_EXPR:
10003     case FLOOR_DIV_EXPR:
10004     case ROUND_DIV_EXPR:
10005     case EXACT_DIV_EXPR:
10006     case BIT_AND_EXPR:
10007     case BIT_IOR_EXPR:
10008     case BIT_XOR_EXPR:
10009     case TRUNC_MOD_EXPR:
10010     case FLOOR_MOD_EXPR:
10011     case TRUTH_ANDIF_EXPR:
10012     case TRUTH_ORIF_EXPR:
10013     case TRUTH_AND_EXPR:
10014     case TRUTH_OR_EXPR:
10015     case RSHIFT_EXPR:
10016     case LSHIFT_EXPR:
10017     case RROTATE_EXPR:
10018     case LROTATE_EXPR:
10019     case EQ_EXPR:
10020     case NE_EXPR:
10021     case MAX_EXPR:
10022     case MIN_EXPR:
10023     case LE_EXPR:
10024     case GE_EXPR:
10025     case LT_EXPR:
10026     case GT_EXPR:
10027     case COMPOUND_EXPR:
10028     case DOTSTAR_EXPR:
10029     case MEMBER_REF:
10030     case PREDECREMENT_EXPR:
10031     case PREINCREMENT_EXPR:
10032     case POSTDECREMENT_EXPR:
10033     case POSTINCREMENT_EXPR:
10034       return build_nt
10035         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10036          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10037
10038     case SCOPE_REF:
10039       return build_qualified_name (/*type=*/NULL_TREE,
10040                                    tsubst_copy (TREE_OPERAND (t, 0),
10041                                                 args, complain, in_decl),
10042                                    tsubst_copy (TREE_OPERAND (t, 1),
10043                                                 args, complain, in_decl),
10044                                    QUALIFIED_NAME_IS_TEMPLATE (t));
10045
10046     case ARRAY_REF:
10047       return build_nt
10048         (ARRAY_REF,
10049          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10050          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10051          NULL_TREE, NULL_TREE);
10052
10053     case CALL_EXPR:
10054       {
10055         int n = VL_EXP_OPERAND_LENGTH (t);
10056         tree result = build_vl_exp (CALL_EXPR, n);
10057         int i;
10058         for (i = 0; i < n; i++)
10059           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
10060                                              complain, in_decl);
10061         return result;
10062       }
10063
10064     case COND_EXPR:
10065     case MODOP_EXPR:
10066     case PSEUDO_DTOR_EXPR:
10067       {
10068         r = build_nt
10069           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10070            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10071            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10072         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10073         return r;
10074       }
10075
10076     case NEW_EXPR:
10077       {
10078         r = build_nt
10079         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10080          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
10081          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
10082         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
10083         return r;
10084       }
10085
10086     case DELETE_EXPR:
10087       {
10088         r = build_nt
10089         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
10090          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
10091         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
10092         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
10093         return r;
10094       }
10095
10096     case TEMPLATE_ID_EXPR:
10097       {
10098         /* Substituted template arguments */
10099         tree fn = TREE_OPERAND (t, 0);
10100         tree targs = TREE_OPERAND (t, 1);
10101
10102         fn = tsubst_copy (fn, args, complain, in_decl);
10103         if (targs)
10104           targs = tsubst_template_args (targs, args, complain, in_decl);
10105
10106         return lookup_template_function (fn, targs);
10107       }
10108
10109     case TREE_LIST:
10110       {
10111         tree purpose, value, chain;
10112
10113         if (t == void_list_node)
10114           return t;
10115
10116         purpose = TREE_PURPOSE (t);
10117         if (purpose)
10118           purpose = tsubst_copy (purpose, args, complain, in_decl);
10119         value = TREE_VALUE (t);
10120         if (value)
10121           value = tsubst_copy (value, args, complain, in_decl);
10122         chain = TREE_CHAIN (t);
10123         if (chain && chain != void_type_node)
10124           chain = tsubst_copy (chain, args, complain, in_decl);
10125         if (purpose == TREE_PURPOSE (t)
10126             && value == TREE_VALUE (t)
10127             && chain == TREE_CHAIN (t))
10128           return t;
10129         return tree_cons (purpose, value, chain);
10130       }
10131
10132     case RECORD_TYPE:
10133     case UNION_TYPE:
10134     case ENUMERAL_TYPE:
10135     case INTEGER_TYPE:
10136     case TEMPLATE_TYPE_PARM:
10137     case TEMPLATE_TEMPLATE_PARM:
10138     case BOUND_TEMPLATE_TEMPLATE_PARM:
10139     case TEMPLATE_PARM_INDEX:
10140     case POINTER_TYPE:
10141     case REFERENCE_TYPE:
10142     case OFFSET_TYPE:
10143     case FUNCTION_TYPE:
10144     case METHOD_TYPE:
10145     case ARRAY_TYPE:
10146     case TYPENAME_TYPE:
10147     case UNBOUND_CLASS_TEMPLATE:
10148     case TYPEOF_TYPE:
10149     case DECLTYPE_TYPE:
10150     case TYPE_DECL:
10151       return tsubst (t, args, complain, in_decl);
10152
10153     case IDENTIFIER_NODE:
10154       if (IDENTIFIER_TYPENAME_P (t))
10155         {
10156           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10157           return mangle_conv_op_name_for_type (new_type);
10158         }
10159       else
10160         return t;
10161
10162     case CONSTRUCTOR:
10163       /* This is handled by tsubst_copy_and_build.  */
10164       gcc_unreachable ();
10165
10166     case VA_ARG_EXPR:
10167       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10168                                           in_decl),
10169                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10170
10171     case CLEANUP_POINT_EXPR:
10172       /* We shouldn't have built any of these during initial template
10173          generation.  Instead, they should be built during instantiation
10174          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10175       gcc_unreachable ();
10176
10177     case OFFSET_REF:
10178       mark_used (TREE_OPERAND (t, 1));
10179       return t;
10180
10181     case EXPR_PACK_EXPANSION:
10182       error ("invalid use of pack expansion expression");
10183       return error_mark_node;
10184
10185     case NONTYPE_ARGUMENT_PACK:
10186       error ("use %<...%> to expand argument pack");
10187       return error_mark_node;
10188
10189     default:
10190       return t;
10191     }
10192 }
10193
10194 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10195
10196 static tree
10197 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10198                     tree in_decl)
10199 {
10200   tree new_clauses = NULL, nc, oc;
10201
10202   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10203     {
10204       nc = copy_node (oc);
10205       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10206       new_clauses = nc;
10207
10208       switch (OMP_CLAUSE_CODE (nc))
10209         {
10210         case OMP_CLAUSE_LASTPRIVATE:
10211           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
10212             {
10213               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
10214               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
10215                            in_decl, /*integral_constant_expression_p=*/false);
10216               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
10217                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
10218             }
10219           /* FALLTHRU */
10220         case OMP_CLAUSE_PRIVATE:
10221         case OMP_CLAUSE_SHARED:
10222         case OMP_CLAUSE_FIRSTPRIVATE:
10223         case OMP_CLAUSE_REDUCTION:
10224         case OMP_CLAUSE_COPYIN:
10225         case OMP_CLAUSE_COPYPRIVATE:
10226         case OMP_CLAUSE_IF:
10227         case OMP_CLAUSE_NUM_THREADS:
10228         case OMP_CLAUSE_SCHEDULE:
10229         case OMP_CLAUSE_COLLAPSE:
10230           OMP_CLAUSE_OPERAND (nc, 0)
10231             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10232                            in_decl, /*integral_constant_expression_p=*/false);
10233           break;
10234         case OMP_CLAUSE_NOWAIT:
10235         case OMP_CLAUSE_ORDERED:
10236         case OMP_CLAUSE_DEFAULT:
10237         case OMP_CLAUSE_UNTIED:
10238           break;
10239         default:
10240           gcc_unreachable ();
10241         }
10242     }
10243
10244   return finish_omp_clauses (nreverse (new_clauses));
10245 }
10246
10247 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10248
10249 static tree
10250 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10251                           tree in_decl)
10252 {
10253 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10254
10255   tree purpose, value, chain;
10256
10257   if (t == NULL)
10258     return t;
10259
10260   if (TREE_CODE (t) != TREE_LIST)
10261     return tsubst_copy_and_build (t, args, complain, in_decl,
10262                                   /*function_p=*/false,
10263                                   /*integral_constant_expression_p=*/false);
10264
10265   if (t == void_list_node)
10266     return t;
10267
10268   purpose = TREE_PURPOSE (t);
10269   if (purpose)
10270     purpose = RECUR (purpose);
10271   value = TREE_VALUE (t);
10272   if (value)
10273     value = RECUR (value);
10274   chain = TREE_CHAIN (t);
10275   if (chain && chain != void_type_node)
10276     chain = RECUR (chain);
10277   return tree_cons (purpose, value, chain);
10278 #undef RECUR
10279 }
10280
10281 /* Substitute one OMP_FOR iterator.  */
10282
10283 static void
10284 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
10285                          tree condv, tree incrv, tree *clauses,
10286                          tree args, tsubst_flags_t complain, tree in_decl,
10287                          bool integral_constant_expression_p)
10288 {
10289 #define RECUR(NODE)                             \
10290   tsubst_expr ((NODE), args, complain, in_decl, \
10291                integral_constant_expression_p)
10292   tree decl, init, cond, incr;
10293
10294   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
10295   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10296   decl = RECUR (TREE_OPERAND (init, 0));
10297   init = TREE_OPERAND (init, 1);
10298   gcc_assert (!type_dependent_expression_p (decl));
10299
10300   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
10301     {
10302       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
10303       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10304       if (TREE_CODE (incr) == MODIFY_EXPR)
10305         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
10306                                     RECUR (TREE_OPERAND (incr, 1)),
10307                                     complain);
10308       else
10309         incr = RECUR (incr);
10310       TREE_VEC_ELT (declv, i) = decl;
10311       TREE_VEC_ELT (initv, i) = init;
10312       TREE_VEC_ELT (condv, i) = cond;
10313       TREE_VEC_ELT (incrv, i) = incr;
10314       return;
10315     }
10316
10317   if (init && TREE_CODE (init) != DECL_EXPR)
10318     {
10319       tree c;
10320       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
10321         {
10322           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
10323                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
10324               && OMP_CLAUSE_DECL (c) == decl)
10325             break;
10326           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
10327                    && OMP_CLAUSE_DECL (c) == decl)
10328             error ("iteration variable %qD should not be firstprivate", decl);
10329           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
10330                    && OMP_CLAUSE_DECL (c) == decl)
10331             error ("iteration variable %qD should not be reduction", decl);
10332         }
10333       if (c == NULL)
10334         {
10335           c = build_omp_clause (OMP_CLAUSE_PRIVATE);
10336           OMP_CLAUSE_DECL (c) = decl;
10337           c = finish_omp_clauses (c);
10338           if (c)
10339             {
10340               OMP_CLAUSE_CHAIN (c) = *clauses;
10341               *clauses = c;
10342             }
10343         }
10344     }
10345   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
10346   if (COMPARISON_CLASS_P (cond))
10347     cond = build2 (TREE_CODE (cond), boolean_type_node,
10348                    RECUR (TREE_OPERAND (cond, 0)),
10349                    RECUR (TREE_OPERAND (cond, 1)));
10350   else
10351     cond = RECUR (cond);
10352   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
10353   switch (TREE_CODE (incr))
10354     {
10355     case PREINCREMENT_EXPR:
10356     case PREDECREMENT_EXPR:
10357     case POSTINCREMENT_EXPR:
10358     case POSTDECREMENT_EXPR:
10359       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
10360                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
10361       break;
10362     case MODIFY_EXPR:
10363       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10364           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10365         {
10366           tree rhs = TREE_OPERAND (incr, 1);
10367           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10368                          RECUR (TREE_OPERAND (incr, 0)),
10369                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10370                                  RECUR (TREE_OPERAND (rhs, 0)),
10371                                  RECUR (TREE_OPERAND (rhs, 1))));
10372         }
10373       else
10374         incr = RECUR (incr);
10375       break;
10376     case MODOP_EXPR:
10377       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
10378           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
10379         {
10380           tree lhs = RECUR (TREE_OPERAND (incr, 0));
10381           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
10382                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
10383                                  TREE_TYPE (decl), lhs,
10384                                  RECUR (TREE_OPERAND (incr, 2))));
10385         }
10386       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
10387                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
10388                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
10389         {
10390           tree rhs = TREE_OPERAND (incr, 2);
10391           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
10392                          RECUR (TREE_OPERAND (incr, 0)),
10393                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
10394                                  RECUR (TREE_OPERAND (rhs, 0)),
10395                                  RECUR (TREE_OPERAND (rhs, 1))));
10396         }
10397       else
10398         incr = RECUR (incr);
10399       break;
10400     default:
10401       incr = RECUR (incr);
10402       break;
10403     }
10404
10405   TREE_VEC_ELT (declv, i) = decl;
10406   TREE_VEC_ELT (initv, i) = init;
10407   TREE_VEC_ELT (condv, i) = cond;
10408   TREE_VEC_ELT (incrv, i) = incr;
10409 #undef RECUR
10410 }
10411
10412 /* Like tsubst_copy for expressions, etc. but also does semantic
10413    processing.  */
10414
10415 static tree
10416 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10417              bool integral_constant_expression_p)
10418 {
10419 #define RECUR(NODE)                             \
10420   tsubst_expr ((NODE), args, complain, in_decl, \
10421                integral_constant_expression_p)
10422
10423   tree stmt, tmp;
10424
10425   if (t == NULL_TREE || t == error_mark_node)
10426     return t;
10427
10428   if (EXPR_HAS_LOCATION (t))
10429     input_location = EXPR_LOCATION (t);
10430   if (STATEMENT_CODE_P (TREE_CODE (t)))
10431     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10432
10433   switch (TREE_CODE (t))
10434     {
10435     case STATEMENT_LIST:
10436       {
10437         tree_stmt_iterator i;
10438         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10439           RECUR (tsi_stmt (i));
10440         break;
10441       }
10442
10443     case CTOR_INITIALIZER:
10444       finish_mem_initializers (tsubst_initializer_list
10445                                (TREE_OPERAND (t, 0), args));
10446       break;
10447
10448     case RETURN_EXPR:
10449       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10450       break;
10451
10452     case EXPR_STMT:
10453       tmp = RECUR (EXPR_STMT_EXPR (t));
10454       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10455         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10456       else
10457         finish_expr_stmt (tmp);
10458       break;
10459
10460     case USING_STMT:
10461       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10462       break;
10463
10464     case DECL_EXPR:
10465       {
10466         tree decl;
10467         tree init;
10468
10469         decl = DECL_EXPR_DECL (t);
10470         if (TREE_CODE (decl) == LABEL_DECL)
10471           finish_label_decl (DECL_NAME (decl));
10472         else if (TREE_CODE (decl) == USING_DECL)
10473           {
10474             tree scope = USING_DECL_SCOPE (decl);
10475             tree name = DECL_NAME (decl);
10476             tree decl;
10477
10478             scope = RECUR (scope);
10479             decl = lookup_qualified_name (scope, name,
10480                                           /*is_type_p=*/false,
10481                                           /*complain=*/false);
10482             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10483               qualified_name_lookup_error (scope, name, decl, input_location);
10484             else
10485               do_local_using_decl (decl, scope, name);
10486           }
10487         else
10488           {
10489             init = DECL_INITIAL (decl);
10490             decl = tsubst (decl, args, complain, in_decl);
10491             if (decl != error_mark_node)
10492               {
10493                 /* By marking the declaration as instantiated, we avoid
10494                    trying to instantiate it.  Since instantiate_decl can't
10495                    handle local variables, and since we've already done
10496                    all that needs to be done, that's the right thing to
10497                    do.  */
10498                 if (TREE_CODE (decl) == VAR_DECL)
10499                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10500                 if (TREE_CODE (decl) == VAR_DECL
10501                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10502                   /* Anonymous aggregates are a special case.  */
10503                   finish_anon_union (decl);
10504                 else
10505                   {
10506                     maybe_push_decl (decl);
10507                     if (TREE_CODE (decl) == VAR_DECL
10508                         && DECL_PRETTY_FUNCTION_P (decl))
10509                       {
10510                         /* For __PRETTY_FUNCTION__ we have to adjust the
10511                            initializer.  */
10512                         const char *const name
10513                           = cxx_printable_name (current_function_decl, 2);
10514                         init = cp_fname_init (name, &TREE_TYPE (decl));
10515                       }
10516                     else
10517                       {
10518                         tree t = RECUR (init);
10519
10520                         if (init && !t)
10521                           /* If we had an initializer but it
10522                              instantiated to nothing,
10523                              value-initialize the object.  This will
10524                              only occur when the initializer was a
10525                              pack expansion where the parameter packs
10526                              used in that expansion were of length
10527                              zero.  */
10528                           init = build_default_init (TREE_TYPE (decl),
10529                                                      NULL_TREE);
10530                         else
10531                           init = t;
10532                       }
10533
10534                     finish_decl (decl, init, NULL_TREE);
10535                   }
10536               }
10537           }
10538
10539         /* A DECL_EXPR can also be used as an expression, in the condition
10540            clause of an if/for/while construct.  */
10541         return decl;
10542       }
10543
10544     case FOR_STMT:
10545       stmt = begin_for_stmt ();
10546                           RECUR (FOR_INIT_STMT (t));
10547       finish_for_init_stmt (stmt);
10548       tmp = RECUR (FOR_COND (t));
10549       finish_for_cond (tmp, stmt);
10550       tmp = RECUR (FOR_EXPR (t));
10551       finish_for_expr (tmp, stmt);
10552       RECUR (FOR_BODY (t));
10553       finish_for_stmt (stmt);
10554       break;
10555
10556     case WHILE_STMT:
10557       stmt = begin_while_stmt ();
10558       tmp = RECUR (WHILE_COND (t));
10559       finish_while_stmt_cond (tmp, stmt);
10560       RECUR (WHILE_BODY (t));
10561       finish_while_stmt (stmt);
10562       break;
10563
10564     case DO_STMT:
10565       stmt = begin_do_stmt ();
10566       RECUR (DO_BODY (t));
10567       finish_do_body (stmt);
10568       tmp = RECUR (DO_COND (t));
10569       finish_do_stmt (tmp, stmt);
10570       break;
10571
10572     case IF_STMT:
10573       stmt = begin_if_stmt ();
10574       tmp = RECUR (IF_COND (t));
10575       finish_if_stmt_cond (tmp, stmt);
10576       RECUR (THEN_CLAUSE (t));
10577       finish_then_clause (stmt);
10578
10579       if (ELSE_CLAUSE (t))
10580         {
10581           begin_else_clause (stmt);
10582           RECUR (ELSE_CLAUSE (t));
10583           finish_else_clause (stmt);
10584         }
10585
10586       finish_if_stmt (stmt);
10587       break;
10588
10589     case BIND_EXPR:
10590       if (BIND_EXPR_BODY_BLOCK (t))
10591         stmt = begin_function_body ();
10592       else
10593         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10594                                     ? BCS_TRY_BLOCK : 0);
10595
10596       RECUR (BIND_EXPR_BODY (t));
10597
10598       if (BIND_EXPR_BODY_BLOCK (t))
10599         finish_function_body (stmt);
10600       else
10601         finish_compound_stmt (stmt);
10602       break;
10603
10604     case BREAK_STMT:
10605       finish_break_stmt ();
10606       break;
10607
10608     case CONTINUE_STMT:
10609       finish_continue_stmt ();
10610       break;
10611
10612     case SWITCH_STMT:
10613       stmt = begin_switch_stmt ();
10614       tmp = RECUR (SWITCH_STMT_COND (t));
10615       finish_switch_cond (tmp, stmt);
10616       RECUR (SWITCH_STMT_BODY (t));
10617       finish_switch_stmt (stmt);
10618       break;
10619
10620     case CASE_LABEL_EXPR:
10621       finish_case_label (RECUR (CASE_LOW (t)),
10622                          RECUR (CASE_HIGH (t)));
10623       break;
10624
10625     case LABEL_EXPR:
10626       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10627       break;
10628
10629     case GOTO_EXPR:
10630       tmp = GOTO_DESTINATION (t);
10631       if (TREE_CODE (tmp) != LABEL_DECL)
10632         /* Computed goto's must be tsubst'd into.  On the other hand,
10633            non-computed gotos must not be; the identifier in question
10634            will have no binding.  */
10635         tmp = RECUR (tmp);
10636       else
10637         tmp = DECL_NAME (tmp);
10638       finish_goto_stmt (tmp);
10639       break;
10640
10641     case ASM_EXPR:
10642       tmp = finish_asm_stmt
10643         (ASM_VOLATILE_P (t),
10644          RECUR (ASM_STRING (t)),
10645          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10646          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10647          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10648       {
10649         tree asm_expr = tmp;
10650         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10651           asm_expr = TREE_OPERAND (asm_expr, 0);
10652         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10653       }
10654       break;
10655
10656     case TRY_BLOCK:
10657       if (CLEANUP_P (t))
10658         {
10659           stmt = begin_try_block ();
10660           RECUR (TRY_STMTS (t));
10661           finish_cleanup_try_block (stmt);
10662           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10663         }
10664       else
10665         {
10666           tree compound_stmt = NULL_TREE;
10667
10668           if (FN_TRY_BLOCK_P (t))
10669             stmt = begin_function_try_block (&compound_stmt);
10670           else
10671             stmt = begin_try_block ();
10672
10673           RECUR (TRY_STMTS (t));
10674
10675           if (FN_TRY_BLOCK_P (t))
10676             finish_function_try_block (stmt);
10677           else
10678             finish_try_block (stmt);
10679
10680           RECUR (TRY_HANDLERS (t));
10681           if (FN_TRY_BLOCK_P (t))
10682             finish_function_handler_sequence (stmt, compound_stmt);
10683           else
10684             finish_handler_sequence (stmt);
10685         }
10686       break;
10687
10688     case HANDLER:
10689       {
10690         tree decl = HANDLER_PARMS (t);
10691
10692         if (decl)
10693           {
10694             decl = tsubst (decl, args, complain, in_decl);
10695             /* Prevent instantiate_decl from trying to instantiate
10696                this variable.  We've already done all that needs to be
10697                done.  */
10698             if (decl != error_mark_node)
10699               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10700           }
10701         stmt = begin_handler ();
10702         finish_handler_parms (decl, stmt);
10703         RECUR (HANDLER_BODY (t));
10704         finish_handler (stmt);
10705       }
10706       break;
10707
10708     case TAG_DEFN:
10709       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10710       break;
10711
10712     case STATIC_ASSERT:
10713       {
10714         tree condition = 
10715           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10716                        args,
10717                        complain, in_decl,
10718                        /*integral_constant_expression_p=*/true);
10719         finish_static_assert (condition,
10720                               STATIC_ASSERT_MESSAGE (t),
10721                               STATIC_ASSERT_SOURCE_LOCATION (t),
10722                               /*member_p=*/false);
10723       }
10724       break;
10725
10726     case OMP_PARALLEL:
10727       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10728                                 args, complain, in_decl);
10729       stmt = begin_omp_parallel ();
10730       RECUR (OMP_PARALLEL_BODY (t));
10731       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10732         = OMP_PARALLEL_COMBINED (t);
10733       break;
10734
10735     case OMP_TASK:
10736       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
10737                                 args, complain, in_decl);
10738       stmt = begin_omp_task ();
10739       RECUR (OMP_TASK_BODY (t));
10740       finish_omp_task (tmp, stmt);
10741       break;
10742
10743     case OMP_FOR:
10744       {
10745         tree clauses, body, pre_body;
10746         tree declv, initv, condv, incrv;
10747         int i;
10748
10749         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10750                                       args, complain, in_decl);
10751         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10752         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10753         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10754         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
10755
10756         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
10757           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
10758                                    &clauses, args, complain, in_decl,
10759                                    integral_constant_expression_p);
10760
10761         stmt = begin_omp_structured_block ();
10762
10763         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
10764           if (TREE_VEC_ELT (initv, i) == NULL
10765               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
10766             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
10767           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
10768             {
10769               tree init = RECUR (TREE_VEC_ELT (initv, i));
10770               gcc_assert (init == TREE_VEC_ELT (declv, i));
10771               TREE_VEC_ELT (initv, i) = NULL_TREE;
10772             }
10773           else
10774             {
10775               tree decl_expr = TREE_VEC_ELT (initv, i);
10776               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
10777               gcc_assert (init != NULL);
10778               TREE_VEC_ELT (initv, i) = RECUR (init);
10779               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
10780               RECUR (decl_expr);
10781               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
10782             }
10783
10784         pre_body = push_stmt_list ();
10785         RECUR (OMP_FOR_PRE_BODY (t));
10786         pre_body = pop_stmt_list (pre_body);
10787
10788         body = push_stmt_list ();
10789         RECUR (OMP_FOR_BODY (t));
10790         body = pop_stmt_list (body);
10791
10792         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
10793                             body, pre_body, clauses);
10794
10795         add_stmt (finish_omp_structured_block (stmt));
10796       }
10797       break;
10798
10799     case OMP_SECTIONS:
10800     case OMP_SINGLE:
10801       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10802       stmt = push_stmt_list ();
10803       RECUR (OMP_BODY (t));
10804       stmt = pop_stmt_list (stmt);
10805
10806       t = copy_node (t);
10807       OMP_BODY (t) = stmt;
10808       OMP_CLAUSES (t) = tmp;
10809       add_stmt (t);
10810       break;
10811
10812     case OMP_SECTION:
10813     case OMP_CRITICAL:
10814     case OMP_MASTER:
10815     case OMP_ORDERED:
10816       stmt = push_stmt_list ();
10817       RECUR (OMP_BODY (t));
10818       stmt = pop_stmt_list (stmt);
10819
10820       t = copy_node (t);
10821       OMP_BODY (t) = stmt;
10822       add_stmt (t);
10823       break;
10824
10825     case OMP_ATOMIC:
10826       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10827       {
10828         tree op1 = TREE_OPERAND (t, 1);
10829         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10830         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10831         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10832       }
10833       break;
10834
10835     case EXPR_PACK_EXPANSION:
10836       error ("invalid use of pack expansion expression");
10837       return error_mark_node;
10838
10839     case NONTYPE_ARGUMENT_PACK:
10840       error ("use %<...%> to expand argument pack");
10841       return error_mark_node;
10842
10843     default:
10844       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10845
10846       return tsubst_copy_and_build (t, args, complain, in_decl,
10847                                     /*function_p=*/false,
10848                                     integral_constant_expression_p);
10849     }
10850
10851   return NULL_TREE;
10852 #undef RECUR
10853 }
10854
10855 /* T is a postfix-expression that is not being used in a function
10856    call.  Return the substituted version of T.  */
10857
10858 static tree
10859 tsubst_non_call_postfix_expression (tree t, tree args,
10860                                     tsubst_flags_t complain,
10861                                     tree in_decl)
10862 {
10863   if (TREE_CODE (t) == SCOPE_REF)
10864     t = tsubst_qualified_id (t, args, complain, in_decl,
10865                              /*done=*/false, /*address_p=*/false);
10866   else
10867     t = tsubst_copy_and_build (t, args, complain, in_decl,
10868                                /*function_p=*/false,
10869                                /*integral_constant_expression_p=*/false);
10870
10871   return t;
10872 }
10873
10874 /* Like tsubst but deals with expressions and performs semantic
10875    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10876
10877 tree
10878 tsubst_copy_and_build (tree t,
10879                        tree args,
10880                        tsubst_flags_t complain,
10881                        tree in_decl,
10882                        bool function_p,
10883                        bool integral_constant_expression_p)
10884 {
10885 #define RECUR(NODE)                                             \
10886   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10887                          /*function_p=*/false,                  \
10888                          integral_constant_expression_p)
10889
10890   tree op1;
10891
10892   if (t == NULL_TREE || t == error_mark_node)
10893     return t;
10894
10895   switch (TREE_CODE (t))
10896     {
10897     case USING_DECL:
10898       t = DECL_NAME (t);
10899       /* Fall through.  */
10900     case IDENTIFIER_NODE:
10901       {
10902         tree decl;
10903         cp_id_kind idk;
10904         bool non_integral_constant_expression_p;
10905         const char *error_msg;
10906
10907         if (IDENTIFIER_TYPENAME_P (t))
10908           {
10909             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10910             t = mangle_conv_op_name_for_type (new_type);
10911           }
10912
10913         /* Look up the name.  */
10914         decl = lookup_name (t);
10915
10916         /* By convention, expressions use ERROR_MARK_NODE to indicate
10917            failure, not NULL_TREE.  */
10918         if (decl == NULL_TREE)
10919           decl = error_mark_node;
10920
10921         decl = finish_id_expression (t, decl, NULL_TREE,
10922                                      &idk,
10923                                      integral_constant_expression_p,
10924                                      /*allow_non_integral_constant_expression_p=*/false,
10925                                      &non_integral_constant_expression_p,
10926                                      /*template_p=*/false,
10927                                      /*done=*/true,
10928                                      /*address_p=*/false,
10929                                      /*template_arg_p=*/false,
10930                                      &error_msg,
10931                                      input_location);
10932         if (error_msg)
10933           error (error_msg);
10934         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10935           decl = unqualified_name_lookup_error (decl);
10936         return decl;
10937       }
10938
10939     case TEMPLATE_ID_EXPR:
10940       {
10941         tree object;
10942         tree templ = RECUR (TREE_OPERAND (t, 0));
10943         tree targs = TREE_OPERAND (t, 1);
10944
10945         if (targs)
10946           targs = tsubst_template_args (targs, args, complain, in_decl);
10947
10948         if (TREE_CODE (templ) == COMPONENT_REF)
10949           {
10950             object = TREE_OPERAND (templ, 0);
10951             templ = TREE_OPERAND (templ, 1);
10952           }
10953         else
10954           object = NULL_TREE;
10955         templ = lookup_template_function (templ, targs);
10956
10957         if (object)
10958           return build3 (COMPONENT_REF, TREE_TYPE (templ),
10959                          object, templ, NULL_TREE);
10960         else
10961           return baselink_for_fns (templ);
10962       }
10963
10964     case INDIRECT_REF:
10965       {
10966         tree r = RECUR (TREE_OPERAND (t, 0));
10967
10968         if (REFERENCE_REF_P (t))
10969           {
10970             /* A type conversion to reference type will be enclosed in
10971                such an indirect ref, but the substitution of the cast
10972                will have also added such an indirect ref.  */
10973             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10974               r = convert_from_reference (r);
10975           }
10976         else
10977           r = build_x_indirect_ref (r, "unary *", complain);
10978         return r;
10979       }
10980
10981     case NOP_EXPR:
10982       return build_nop
10983         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10984          RECUR (TREE_OPERAND (t, 0)));
10985
10986     case CAST_EXPR:
10987     case REINTERPRET_CAST_EXPR:
10988     case CONST_CAST_EXPR:
10989     case DYNAMIC_CAST_EXPR:
10990     case STATIC_CAST_EXPR:
10991       {
10992         tree type;
10993         tree op;
10994
10995         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10996         if (integral_constant_expression_p
10997             && !cast_valid_in_integral_constant_expression_p (type))
10998           {
10999             if (complain & tf_error)
11000               error ("a cast to a type other than an integral or "
11001                      "enumeration type cannot appear in a constant-expression");
11002             return error_mark_node; 
11003           }
11004
11005         op = RECUR (TREE_OPERAND (t, 0));
11006
11007         switch (TREE_CODE (t))
11008           {
11009           case CAST_EXPR:
11010             return build_functional_cast (type, op, complain);
11011           case REINTERPRET_CAST_EXPR:
11012             return build_reinterpret_cast (type, op, complain);
11013           case CONST_CAST_EXPR:
11014             return build_const_cast (type, op, complain);
11015           case DYNAMIC_CAST_EXPR:
11016             return build_dynamic_cast (type, op, complain);
11017           case STATIC_CAST_EXPR:
11018             return build_static_cast (type, op, complain);
11019           default:
11020             gcc_unreachable ();
11021           }
11022       }
11023
11024     case POSTDECREMENT_EXPR:
11025     case POSTINCREMENT_EXPR:
11026       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11027                                                 args, complain, in_decl);
11028       return build_x_unary_op (TREE_CODE (t), op1, complain);
11029
11030     case PREDECREMENT_EXPR:
11031     case PREINCREMENT_EXPR:
11032     case NEGATE_EXPR:
11033     case BIT_NOT_EXPR:
11034     case ABS_EXPR:
11035     case TRUTH_NOT_EXPR:
11036     case UNARY_PLUS_EXPR:  /* Unary + */
11037     case REALPART_EXPR:
11038     case IMAGPART_EXPR:
11039       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
11040                                complain);
11041
11042     case ADDR_EXPR:
11043       op1 = TREE_OPERAND (t, 0);
11044       if (TREE_CODE (op1) == SCOPE_REF)
11045         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
11046                                    /*done=*/true, /*address_p=*/true);
11047       else
11048         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
11049                                                   in_decl);
11050       if (TREE_CODE (op1) == LABEL_DECL)
11051         return finish_label_address_expr (DECL_NAME (op1));
11052       return build_x_unary_op (ADDR_EXPR, op1, complain);
11053
11054     case PLUS_EXPR:
11055     case MINUS_EXPR:
11056     case MULT_EXPR:
11057     case TRUNC_DIV_EXPR:
11058     case CEIL_DIV_EXPR:
11059     case FLOOR_DIV_EXPR:
11060     case ROUND_DIV_EXPR:
11061     case EXACT_DIV_EXPR:
11062     case BIT_AND_EXPR:
11063     case BIT_IOR_EXPR:
11064     case BIT_XOR_EXPR:
11065     case TRUNC_MOD_EXPR:
11066     case FLOOR_MOD_EXPR:
11067     case TRUTH_ANDIF_EXPR:
11068     case TRUTH_ORIF_EXPR:
11069     case TRUTH_AND_EXPR:
11070     case TRUTH_OR_EXPR:
11071     case RSHIFT_EXPR:
11072     case LSHIFT_EXPR:
11073     case RROTATE_EXPR:
11074     case LROTATE_EXPR:
11075     case EQ_EXPR:
11076     case NE_EXPR:
11077     case MAX_EXPR:
11078     case MIN_EXPR:
11079     case LE_EXPR:
11080     case GE_EXPR:
11081     case LT_EXPR:
11082     case GT_EXPR:
11083     case MEMBER_REF:
11084     case DOTSTAR_EXPR:
11085       return build_x_binary_op
11086         (TREE_CODE (t),
11087          RECUR (TREE_OPERAND (t, 0)),
11088          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11089           ? ERROR_MARK
11090           : TREE_CODE (TREE_OPERAND (t, 0))),
11091          RECUR (TREE_OPERAND (t, 1)),
11092          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11093           ? ERROR_MARK
11094           : TREE_CODE (TREE_OPERAND (t, 1))),
11095          /*overloaded_p=*/NULL,
11096          complain);
11097
11098     case SCOPE_REF:
11099       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
11100                                   /*address_p=*/false);
11101     case ARRAY_REF:
11102       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11103                                                 args, complain, in_decl);
11104       return build_x_binary_op (ARRAY_REF, op1,
11105                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
11106                                  ? ERROR_MARK
11107                                  : TREE_CODE (TREE_OPERAND (t, 0))),
11108                                 RECUR (TREE_OPERAND (t, 1)),
11109                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
11110                                  ? ERROR_MARK
11111                                  : TREE_CODE (TREE_OPERAND (t, 1))),
11112                                 /*overloaded_p=*/NULL,
11113                                 complain);
11114
11115     case SIZEOF_EXPR:
11116       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11117         return tsubst_copy (t, args, complain, in_decl);
11118       /* Fall through */
11119       
11120     case ALIGNOF_EXPR:
11121       op1 = TREE_OPERAND (t, 0);
11122       if (!args)
11123         {
11124           /* When there are no ARGS, we are trying to evaluate a
11125              non-dependent expression from the parser.  Trying to do
11126              the substitutions may not work.  */
11127           if (!TYPE_P (op1))
11128             op1 = TREE_TYPE (op1);
11129         }
11130       else
11131         {
11132           ++skip_evaluation;
11133           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
11134                                        /*function_p=*/false,
11135                                        /*integral_constant_expression_p=*/false);
11136           --skip_evaluation;
11137         }
11138       if (TYPE_P (op1))
11139         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
11140                                            complain & tf_error);
11141       else
11142         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
11143                                            complain & tf_error);
11144
11145     case MODOP_EXPR:
11146       {
11147         tree r = build_x_modify_expr
11148           (RECUR (TREE_OPERAND (t, 0)),
11149            TREE_CODE (TREE_OPERAND (t, 1)),
11150            RECUR (TREE_OPERAND (t, 2)),
11151            complain);
11152         /* TREE_NO_WARNING must be set if either the expression was
11153            parenthesized or it uses an operator such as >>= rather
11154            than plain assignment.  In the former case, it was already
11155            set and must be copied.  In the latter case,
11156            build_x_modify_expr sets it and it must not be reset
11157            here.  */
11158         if (TREE_NO_WARNING (t))
11159           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
11160         return r;
11161       }
11162
11163     case ARROW_EXPR:
11164       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11165                                                 args, complain, in_decl);
11166       /* Remember that there was a reference to this entity.  */
11167       if (DECL_P (op1))
11168         mark_used (op1);
11169       return build_x_arrow (op1);
11170
11171     case NEW_EXPR:
11172       {
11173         tree init = RECUR (TREE_OPERAND (t, 3));
11174
11175         if (TREE_OPERAND (t, 3) && !init)
11176           /* If there was an initializer in the original tree, but
11177              it instantiated to an empty list, then we should pass on
11178              VOID_ZERO_NODE to tell build_new that it was an empty
11179              initializer () rather than no initializer.  This can only
11180              happen when the initializer is a pack expansion whose
11181              parameter packs are of length zero.  */
11182           init = void_zero_node;
11183
11184         return build_new
11185           (RECUR (TREE_OPERAND (t, 0)),
11186            RECUR (TREE_OPERAND (t, 1)),
11187            RECUR (TREE_OPERAND (t, 2)),
11188            init,
11189            NEW_EXPR_USE_GLOBAL (t),
11190            complain);
11191       }
11192
11193     case DELETE_EXPR:
11194      return delete_sanity
11195        (RECUR (TREE_OPERAND (t, 0)),
11196         RECUR (TREE_OPERAND (t, 1)),
11197         DELETE_EXPR_USE_VEC (t),
11198         DELETE_EXPR_USE_GLOBAL (t));
11199
11200     case COMPOUND_EXPR:
11201       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
11202                                     RECUR (TREE_OPERAND (t, 1)),
11203                                     complain);
11204
11205     case CALL_EXPR:
11206       {
11207         tree function;
11208         tree call_args;
11209         bool qualified_p;
11210         bool koenig_p;
11211
11212         function = CALL_EXPR_FN (t);
11213         /* When we parsed the expression,  we determined whether or
11214            not Koenig lookup should be performed.  */
11215         koenig_p = KOENIG_LOOKUP_P (t);
11216         if (TREE_CODE (function) == SCOPE_REF)
11217           {
11218             qualified_p = true;
11219             function = tsubst_qualified_id (function, args, complain, in_decl,
11220                                             /*done=*/false,
11221                                             /*address_p=*/false);
11222           }
11223         else
11224           {
11225             if (TREE_CODE (function) == COMPONENT_REF)
11226               {
11227                 tree op = TREE_OPERAND (function, 1);
11228
11229                 qualified_p = (TREE_CODE (op) == SCOPE_REF
11230                                || (BASELINK_P (op)
11231                                    && BASELINK_QUALIFIED_P (op)));
11232               }
11233             else
11234               qualified_p = false;
11235
11236             function = tsubst_copy_and_build (function, args, complain,
11237                                               in_decl,
11238                                               !qualified_p,
11239                                               integral_constant_expression_p);
11240
11241             if (BASELINK_P (function))
11242               qualified_p = true;
11243           }
11244
11245         /* FIXME:  Rewrite this so as not to construct an arglist.  */
11246         call_args = RECUR (CALL_EXPR_ARGS (t));
11247
11248         /* We do not perform argument-dependent lookup if normal
11249            lookup finds a non-function, in accordance with the
11250            expected resolution of DR 218.  */
11251         if (koenig_p
11252             && ((is_overloaded_fn (function)
11253                  /* If lookup found a member function, the Koenig lookup is
11254                     not appropriate, even if an unqualified-name was used
11255                     to denote the function.  */
11256                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
11257                 || TREE_CODE (function) == IDENTIFIER_NODE))
11258           function = perform_koenig_lookup (function, call_args);
11259
11260         if (TREE_CODE (function) == IDENTIFIER_NODE)
11261           {
11262             unqualified_name_lookup_error (function);
11263             return error_mark_node;
11264           }
11265
11266         /* Remember that there was a reference to this entity.  */
11267         if (DECL_P (function))
11268           mark_used (function);
11269
11270         if (TREE_CODE (function) == OFFSET_REF)
11271           return build_offset_ref_call_from_tree (function, call_args);
11272         if (TREE_CODE (function) == COMPONENT_REF)
11273           {
11274             if (!BASELINK_P (TREE_OPERAND (function, 1)))
11275               return finish_call_expr (function, call_args,
11276                                        /*disallow_virtual=*/false,
11277                                        /*koenig_p=*/false,
11278                                        complain);
11279             else
11280               return (build_new_method_call
11281                       (TREE_OPERAND (function, 0),
11282                        TREE_OPERAND (function, 1),
11283                        call_args, NULL_TREE,
11284                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
11285                        /*fn_p=*/NULL,
11286                        complain));
11287           }
11288         return finish_call_expr (function, call_args,
11289                                  /*disallow_virtual=*/qualified_p,
11290                                  koenig_p,
11291                                  complain);
11292       }
11293
11294     case COND_EXPR:
11295       return build_x_conditional_expr
11296         (RECUR (TREE_OPERAND (t, 0)),
11297          RECUR (TREE_OPERAND (t, 1)),
11298          RECUR (TREE_OPERAND (t, 2)),
11299          complain);
11300
11301     case PSEUDO_DTOR_EXPR:
11302       return finish_pseudo_destructor_expr
11303         (RECUR (TREE_OPERAND (t, 0)),
11304          RECUR (TREE_OPERAND (t, 1)),
11305          RECUR (TREE_OPERAND (t, 2)));
11306
11307     case TREE_LIST:
11308       {
11309         tree purpose, value, chain;
11310
11311         if (t == void_list_node)
11312           return t;
11313
11314         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11315             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11316           {
11317             /* We have pack expansions, so expand those and
11318                create a new list out of it.  */
11319             tree purposevec = NULL_TREE;
11320             tree valuevec = NULL_TREE;
11321             tree chain;
11322             int i, len = -1;
11323
11324             /* Expand the argument expressions.  */
11325             if (TREE_PURPOSE (t))
11326               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11327                                                  complain, in_decl);
11328             if (TREE_VALUE (t))
11329               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11330                                                complain, in_decl);
11331
11332             /* Build the rest of the list.  */
11333             chain = TREE_CHAIN (t);
11334             if (chain && chain != void_type_node)
11335               chain = RECUR (chain);
11336
11337             /* Determine the number of arguments.  */
11338             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11339               {
11340                 len = TREE_VEC_LENGTH (purposevec);
11341                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11342               }
11343             else if (TREE_CODE (valuevec) == TREE_VEC)
11344               len = TREE_VEC_LENGTH (valuevec);
11345             else
11346               {
11347                 /* Since we only performed a partial substitution into
11348                    the argument pack, we only return a single list
11349                    node.  */
11350                 if (purposevec == TREE_PURPOSE (t)
11351                     && valuevec == TREE_VALUE (t)
11352                     && chain == TREE_CHAIN (t))
11353                   return t;
11354
11355                 return tree_cons (purposevec, valuevec, chain);
11356               }
11357             
11358             /* Convert the argument vectors into a TREE_LIST */
11359             i = len;
11360             while (i > 0)
11361               {
11362                 /* Grab the Ith values.  */
11363                 i--;
11364                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11365                                      : NULL_TREE;
11366                 value 
11367                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11368                              : NULL_TREE;
11369
11370                 /* Build the list (backwards).  */
11371                 chain = tree_cons (purpose, value, chain);
11372               }
11373
11374             return chain;
11375           }
11376
11377         purpose = TREE_PURPOSE (t);
11378         if (purpose)
11379           purpose = RECUR (purpose);
11380         value = TREE_VALUE (t);
11381         if (value)
11382           value = RECUR (value);
11383         chain = TREE_CHAIN (t);
11384         if (chain && chain != void_type_node)
11385           chain = RECUR (chain);
11386         if (purpose == TREE_PURPOSE (t)
11387             && value == TREE_VALUE (t)
11388             && chain == TREE_CHAIN (t))
11389           return t;
11390         return tree_cons (purpose, value, chain);
11391       }
11392
11393     case COMPONENT_REF:
11394       {
11395         tree object;
11396         tree object_type;
11397         tree member;
11398
11399         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11400                                                      args, complain, in_decl);
11401         /* Remember that there was a reference to this entity.  */
11402         if (DECL_P (object))
11403           mark_used (object);
11404         object_type = TREE_TYPE (object);
11405
11406         member = TREE_OPERAND (t, 1);
11407         if (BASELINK_P (member))
11408           member = tsubst_baselink (member,
11409                                     non_reference (TREE_TYPE (object)),
11410                                     args, complain, in_decl);
11411         else
11412           member = tsubst_copy (member, args, complain, in_decl);
11413         if (member == error_mark_node)
11414           return error_mark_node;
11415
11416         if (object_type && !CLASS_TYPE_P (object_type))
11417           {
11418             if (SCALAR_TYPE_P (object_type))
11419               {
11420                 tree s = NULL_TREE;
11421                 tree dtor = member;
11422
11423                 if (TREE_CODE (dtor) == SCOPE_REF)
11424                   {
11425                     s = TREE_OPERAND (dtor, 0);
11426                     dtor = TREE_OPERAND (dtor, 1);
11427                   }
11428                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11429                   {
11430                     dtor = TREE_OPERAND (dtor, 0);
11431                     if (TYPE_P (dtor))
11432                       return finish_pseudo_destructor_expr (object, s, dtor);
11433                   }
11434               }
11435           }
11436         else if (TREE_CODE (member) == SCOPE_REF
11437                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11438           {
11439             tree tmpl;
11440             tree args;
11441
11442             /* Lookup the template functions now that we know what the
11443                scope is.  */
11444             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11445             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11446             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11447                                             /*is_type_p=*/false,
11448                                             /*complain=*/false);
11449             if (BASELINK_P (member))
11450               {
11451                 BASELINK_FUNCTIONS (member)
11452                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11453                               args);
11454                 member = (adjust_result_of_qualified_name_lookup
11455                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11456                            object_type));
11457               }
11458             else
11459               {
11460                 qualified_name_lookup_error (object_type, tmpl, member,
11461                                              input_location);
11462                 return error_mark_node;
11463               }
11464           }
11465         else if (TREE_CODE (member) == SCOPE_REF
11466                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11467                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11468           {
11469             if (complain & tf_error)
11470               {
11471                 if (TYPE_P (TREE_OPERAND (member, 0)))
11472                   error ("%qT is not a class or namespace",
11473                          TREE_OPERAND (member, 0));
11474                 else
11475                   error ("%qD is not a class or namespace",
11476                          TREE_OPERAND (member, 0));
11477               }
11478             return error_mark_node;
11479           }
11480         else if (TREE_CODE (member) == FIELD_DECL)
11481           return finish_non_static_data_member (member, object, NULL_TREE);
11482
11483         return finish_class_member_access_expr (object, member,
11484                                                 /*template_p=*/false,
11485                                                 complain);
11486       }
11487
11488     case THROW_EXPR:
11489       return build_throw
11490         (RECUR (TREE_OPERAND (t, 0)));
11491
11492     case CONSTRUCTOR:
11493       {
11494         VEC(constructor_elt,gc) *n;
11495         constructor_elt *ce;
11496         unsigned HOST_WIDE_INT idx;
11497         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11498         bool process_index_p;
11499         int newlen;
11500         bool need_copy_p = false;
11501         tree r;
11502
11503         if (type == error_mark_node)
11504           return error_mark_node;
11505
11506         /* digest_init will do the wrong thing if we let it.  */
11507         if (type && TYPE_PTRMEMFUNC_P (type))
11508           return t;
11509
11510         /* We do not want to process the index of aggregate
11511            initializers as they are identifier nodes which will be
11512            looked up by digest_init.  */
11513         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
11514
11515         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11516         newlen = VEC_length (constructor_elt, n);
11517         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11518           {
11519             if (ce->index && process_index_p)
11520               ce->index = RECUR (ce->index);
11521
11522             if (PACK_EXPANSION_P (ce->value))
11523               {
11524                 /* Substitute into the pack expansion.  */
11525                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11526                                                   in_decl);
11527
11528                 if (ce->value == error_mark_node)
11529                   ;
11530                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11531                   /* Just move the argument into place.  */
11532                   ce->value = TREE_VEC_ELT (ce->value, 0);
11533                 else
11534                   {
11535                     /* Update the length of the final CONSTRUCTOR
11536                        arguments vector, and note that we will need to
11537                        copy.*/
11538                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11539                     need_copy_p = true;
11540                   }
11541               }
11542             else
11543               ce->value = RECUR (ce->value);
11544           }
11545
11546         if (need_copy_p)
11547           {
11548             VEC(constructor_elt,gc) *old_n = n;
11549
11550             n = VEC_alloc (constructor_elt, gc, newlen);
11551             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11552                  idx++)
11553               {
11554                 if (TREE_CODE (ce->value) == TREE_VEC)
11555                   {
11556                     int i, len = TREE_VEC_LENGTH (ce->value);
11557                     for (i = 0; i < len; ++i)
11558                       CONSTRUCTOR_APPEND_ELT (n, 0,
11559                                               TREE_VEC_ELT (ce->value, i));
11560                   }
11561                 else
11562                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11563               }
11564           }
11565
11566         r = build_constructor (init_list_type_node, n);
11567
11568         if (TREE_HAS_CONSTRUCTOR (t))
11569           return finish_compound_literal (type, r);
11570
11571         return r;
11572       }
11573
11574     case TYPEID_EXPR:
11575       {
11576         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11577         if (TYPE_P (operand_0))
11578           return get_typeid (operand_0);
11579         return build_typeid (operand_0);
11580       }
11581
11582     case VAR_DECL:
11583       if (!args)
11584         return t;
11585       /* Fall through */
11586
11587     case PARM_DECL:
11588       {
11589         tree r = tsubst_copy (t, args, complain, in_decl);
11590
11591         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11592           /* If the original type was a reference, we'll be wrapped in
11593              the appropriate INDIRECT_REF.  */
11594           r = convert_from_reference (r);
11595         return r;
11596       }
11597
11598     case VA_ARG_EXPR:
11599       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11600                              tsubst_copy (TREE_TYPE (t), args, complain,
11601                                           in_decl));
11602
11603     case OFFSETOF_EXPR:
11604       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11605
11606     case TRAIT_EXPR:
11607       {
11608         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11609                                   complain, in_decl);
11610
11611         tree type2 = TRAIT_EXPR_TYPE2 (t);
11612         if (type2)
11613           type2 = tsubst_copy (type2, args, complain, in_decl);
11614         
11615         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11616       }
11617
11618     case STMT_EXPR:
11619       {
11620         tree old_stmt_expr = cur_stmt_expr;
11621         tree stmt_expr = begin_stmt_expr ();
11622
11623         cur_stmt_expr = stmt_expr;
11624         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11625                      integral_constant_expression_p);
11626         stmt_expr = finish_stmt_expr (stmt_expr, false);
11627         cur_stmt_expr = old_stmt_expr;
11628
11629         return stmt_expr;
11630       }
11631
11632     case CONST_DECL:
11633       t = tsubst_copy (t, args, complain, in_decl);
11634       /* As in finish_id_expression, we resolve enumeration constants
11635          to their underlying values.  */
11636       if (TREE_CODE (t) == CONST_DECL)
11637         {
11638           used_types_insert (TREE_TYPE (t));
11639           return DECL_INITIAL (t);
11640         }
11641       return t;
11642
11643     default:
11644       /* Handle Objective-C++ constructs, if appropriate.  */
11645       {
11646         tree subst
11647           = objcp_tsubst_copy_and_build (t, args, complain,
11648                                          in_decl, /*function_p=*/false);
11649         if (subst)
11650           return subst;
11651       }
11652       return tsubst_copy (t, args, complain, in_decl);
11653     }
11654
11655 #undef RECUR
11656 }
11657
11658 /* Verify that the instantiated ARGS are valid. For type arguments,
11659    make sure that the type's linkage is ok. For non-type arguments,
11660    make sure they are constants if they are integral or enumerations.
11661    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11662
11663 static bool
11664 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11665 {
11666   int ix, len = DECL_NTPARMS (tmpl);
11667   bool result = false;
11668
11669   for (ix = 0; ix != len; ix++)
11670     {
11671       tree t = TREE_VEC_ELT (args, ix);
11672
11673       if (TYPE_P (t))
11674         {
11675           /* [basic.link]: A name with no linkage (notably, the name
11676              of a class or enumeration declared in a local scope)
11677              shall not be used to declare an entity with linkage.
11678              This implies that names with no linkage cannot be used as
11679              template arguments.  */
11680           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11681
11682           if (nt)
11683             {
11684               /* DR 488 makes use of a type with no linkage cause
11685                  type deduction to fail.  */
11686               if (complain & tf_error)
11687                 {
11688                   if (TYPE_ANONYMOUS_P (nt))
11689                     error ("%qT is/uses anonymous type", t);
11690                   else
11691                     error ("template argument for %qD uses local type %qT",
11692                            tmpl, t);
11693                 }
11694               result = true;
11695             }
11696           /* In order to avoid all sorts of complications, we do not
11697              allow variably-modified types as template arguments.  */
11698           else if (variably_modified_type_p (t, NULL_TREE))
11699             {
11700               if (complain & tf_error)
11701                 error ("%qT is a variably modified type", t);
11702               result = true;
11703             }
11704         }
11705       /* A non-type argument of integral or enumerated type must be a
11706          constant.  */
11707       else if (TREE_TYPE (t)
11708                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11709                && !TREE_CONSTANT (t))
11710         {
11711           if (complain & tf_error)
11712             error ("integral expression %qE is not constant", t);
11713           result = true;
11714         }
11715     }
11716   if (result && (complain & tf_error))
11717     error ("  trying to instantiate %qD", tmpl);
11718   return result;
11719 }
11720
11721 /* Instantiate the indicated variable or function template TMPL with
11722    the template arguments in TARG_PTR.  */
11723
11724 tree
11725 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11726 {
11727   tree fndecl;
11728   tree gen_tmpl;
11729   tree spec;
11730   HOST_WIDE_INT saved_processing_template_decl;
11731
11732   if (tmpl == error_mark_node)
11733     return error_mark_node;
11734
11735   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11736
11737   /* If this function is a clone, handle it specially.  */
11738   if (DECL_CLONED_FUNCTION_P (tmpl))
11739     {
11740       tree spec;
11741       tree clone;
11742
11743       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11744                                    complain);
11745       if (spec == error_mark_node)
11746         return error_mark_node;
11747
11748       /* Look for the clone.  */
11749       FOR_EACH_CLONE (clone, spec)
11750         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11751           return clone;
11752       /* We should always have found the clone by now.  */
11753       gcc_unreachable ();
11754       return NULL_TREE;
11755     }
11756
11757   /* Check to see if we already have this specialization.  */
11758   spec = retrieve_specialization (tmpl, targ_ptr,
11759                                   /*class_specializations_p=*/false);
11760   if (spec != NULL_TREE)
11761     return spec;
11762
11763   gen_tmpl = most_general_template (tmpl);
11764   if (tmpl != gen_tmpl)
11765     {
11766       /* The TMPL is a partial instantiation.  To get a full set of
11767          arguments we must add the arguments used to perform the
11768          partial instantiation.  */
11769       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11770                                               targ_ptr);
11771
11772       /* Check to see if we already have this specialization.  */
11773       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11774                                       /*class_specializations_p=*/false);
11775       if (spec != NULL_TREE)
11776         return spec;
11777     }
11778
11779   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11780                                complain))
11781     return error_mark_node;
11782
11783   /* We are building a FUNCTION_DECL, during which the access of its
11784      parameters and return types have to be checked.  However this
11785      FUNCTION_DECL which is the desired context for access checking
11786      is not built yet.  We solve this chicken-and-egg problem by
11787      deferring all checks until we have the FUNCTION_DECL.  */
11788   push_deferring_access_checks (dk_deferred);
11789
11790   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11791      (because, for example, we have encountered a non-dependent
11792      function call in the body of a template function and must now
11793      determine which of several overloaded functions will be called),
11794      within the instantiation itself we are not processing a
11795      template.  */  
11796   saved_processing_template_decl = processing_template_decl;
11797   processing_template_decl = 0;
11798   /* Substitute template parameters to obtain the specialization.  */
11799   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11800                    targ_ptr, complain, gen_tmpl);
11801   processing_template_decl = saved_processing_template_decl;
11802   if (fndecl == error_mark_node)
11803     return error_mark_node;
11804
11805   /* Now we know the specialization, compute access previously
11806      deferred.  */
11807   push_access_scope (fndecl);
11808   perform_deferred_access_checks ();
11809   pop_access_scope (fndecl);
11810   pop_deferring_access_checks ();
11811
11812   /* The DECL_TI_TEMPLATE should always be the immediate parent
11813      template, not the most general template.  */
11814   DECL_TI_TEMPLATE (fndecl) = tmpl;
11815
11816   /* If we've just instantiated the main entry point for a function,
11817      instantiate all the alternate entry points as well.  We do this
11818      by cloning the instantiation of the main entry point, not by
11819      instantiating the template clones.  */
11820   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11821     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11822
11823   return fndecl;
11824 }
11825
11826 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11827    arguments that are being used when calling it.  TARGS is a vector
11828    into which the deduced template arguments are placed.
11829
11830    Return zero for success, 2 for an incomplete match that doesn't resolve
11831    all the types, and 1 for complete failure.  An error message will be
11832    printed only for an incomplete match.
11833
11834    If FN is a conversion operator, or we are trying to produce a specific
11835    specialization, RETURN_TYPE is the return type desired.
11836
11837    The EXPLICIT_TARGS are explicit template arguments provided via a
11838    template-id.
11839
11840    The parameter STRICT is one of:
11841
11842    DEDUCE_CALL:
11843      We are deducing arguments for a function call, as in
11844      [temp.deduct.call].
11845
11846    DEDUCE_CONV:
11847      We are deducing arguments for a conversion function, as in
11848      [temp.deduct.conv].
11849
11850    DEDUCE_EXACT:
11851      We are deducing arguments when doing an explicit instantiation
11852      as in [temp.explicit], when determining an explicit specialization
11853      as in [temp.expl.spec], or when taking the address of a function
11854      template, as in [temp.deduct.funcaddr].  */
11855
11856 int
11857 fn_type_unification (tree fn,
11858                      tree explicit_targs,
11859                      tree targs,
11860                      tree args,
11861                      tree return_type,
11862                      unification_kind_t strict,
11863                      int flags)
11864 {
11865   tree parms;
11866   tree fntype;
11867   int result;
11868   bool incomplete_argument_packs_p = false;
11869
11870   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11871
11872   fntype = TREE_TYPE (fn);
11873   if (explicit_targs)
11874     {
11875       /* [temp.deduct]
11876
11877          The specified template arguments must match the template
11878          parameters in kind (i.e., type, nontype, template), and there
11879          must not be more arguments than there are parameters;
11880          otherwise type deduction fails.
11881
11882          Nontype arguments must match the types of the corresponding
11883          nontype template parameters, or must be convertible to the
11884          types of the corresponding nontype parameters as specified in
11885          _temp.arg.nontype_, otherwise type deduction fails.
11886
11887          All references in the function type of the function template
11888          to the corresponding template parameters are replaced by the
11889          specified template argument values.  If a substitution in a
11890          template parameter or in the function type of the function
11891          template results in an invalid type, type deduction fails.  */
11892       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11893       int i, len = TREE_VEC_LENGTH (tparms);
11894       tree converted_args;
11895       bool incomplete = false;
11896
11897       if (explicit_targs == error_mark_node)
11898         return 1;
11899
11900       converted_args
11901         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11902                                   /*require_all_args=*/false,
11903                                   /*use_default_args=*/false));
11904       if (converted_args == error_mark_node)
11905         return 1;
11906
11907       /* Substitute the explicit args into the function type.  This is
11908          necessary so that, for instance, explicitly declared function
11909          arguments can match null pointed constants.  If we were given
11910          an incomplete set of explicit args, we must not do semantic
11911          processing during substitution as we could create partial
11912          instantiations.  */
11913       for (i = 0; i < len; i++)
11914         {
11915           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11916           bool parameter_pack = false;
11917
11918           /* Dig out the actual parm.  */
11919           if (TREE_CODE (parm) == TYPE_DECL
11920               || TREE_CODE (parm) == TEMPLATE_DECL)
11921             {
11922               parm = TREE_TYPE (parm);
11923               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11924             }
11925           else if (TREE_CODE (parm) == PARM_DECL)
11926             {
11927               parm = DECL_INITIAL (parm);
11928               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11929             }
11930
11931           if (parameter_pack)
11932             {
11933               int level, idx;
11934               tree targ;
11935               template_parm_level_and_index (parm, &level, &idx);
11936
11937               /* Mark the argument pack as "incomplete". We could
11938                  still deduce more arguments during unification.  */
11939               targ = TMPL_ARG (converted_args, level, idx);
11940               if (targ)
11941                 {
11942                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11943                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11944                     = ARGUMENT_PACK_ARGS (targ);
11945                 }
11946
11947               /* We have some incomplete argument packs.  */
11948               incomplete_argument_packs_p = true;
11949             }
11950         }
11951
11952       if (incomplete_argument_packs_p)
11953         /* Any substitution is guaranteed to be incomplete if there
11954            are incomplete argument packs, because we can still deduce
11955            more arguments.  */
11956         incomplete = 1;
11957       else
11958         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11959
11960       processing_template_decl += incomplete;
11961       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11962       processing_template_decl -= incomplete;
11963
11964       if (fntype == error_mark_node)
11965         return 1;
11966
11967       /* Place the explicitly specified arguments in TARGS.  */
11968       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11969         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11970     }
11971
11972   /* Never do unification on the 'this' parameter.  */
11973   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11974
11975   if (return_type)
11976     {
11977       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11978       args = tree_cons (NULL_TREE, return_type, args);
11979     }
11980
11981   /* We allow incomplete unification without an error message here
11982      because the standard doesn't seem to explicitly prohibit it.  Our
11983      callers must be ready to deal with unification failures in any
11984      event.  */
11985   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11986                                   targs, parms, args, /*subr=*/0,
11987                                   strict, flags);
11988
11989   if (result == 0 && incomplete_argument_packs_p)
11990     {
11991       int i, len = NUM_TMPL_ARGS (targs);
11992
11993       /* Clear the "incomplete" flags on all argument packs.  */
11994       for (i = 0; i < len; i++)
11995         {
11996           tree arg = TREE_VEC_ELT (targs, i);
11997           if (ARGUMENT_PACK_P (arg))
11998             {
11999               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
12000               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
12001             }
12002         }
12003     }
12004
12005   /* Now that we have bindings for all of the template arguments,
12006      ensure that the arguments deduced for the template template
12007      parameters have compatible template parameter lists.  We cannot
12008      check this property before we have deduced all template
12009      arguments, because the template parameter types of a template
12010      template parameter might depend on prior template parameters
12011      deduced after the template template parameter.  The following
12012      ill-formed example illustrates this issue:
12013
12014        template<typename T, template<T> class C> void f(C<5>, T);
12015
12016        template<int N> struct X {};
12017
12018        void g() {
12019          f(X<5>(), 5l); // error: template argument deduction fails
12020        }
12021
12022      The template parameter list of 'C' depends on the template type
12023      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
12024      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
12025      time that we deduce 'C'.  */
12026   if (result == 0
12027       && !template_template_parm_bindings_ok_p 
12028            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
12029     return 1;
12030
12031   if (result == 0)
12032     /* All is well so far.  Now, check:
12033
12034        [temp.deduct]
12035
12036        When all template arguments have been deduced, all uses of
12037        template parameters in nondeduced contexts are replaced with
12038        the corresponding deduced argument values.  If the
12039        substitution results in an invalid type, as described above,
12040        type deduction fails.  */
12041     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
12042         == error_mark_node)
12043       return 1;
12044
12045   return result;
12046 }
12047
12048 /* Adjust types before performing type deduction, as described in
12049    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
12050    sections are symmetric.  PARM is the type of a function parameter
12051    or the return type of the conversion function.  ARG is the type of
12052    the argument passed to the call, or the type of the value
12053    initialized with the result of the conversion function.
12054    ARG_EXPR is the original argument expression, which may be null.  */
12055
12056 static int
12057 maybe_adjust_types_for_deduction (unification_kind_t strict,
12058                                   tree* parm,
12059                                   tree* arg,
12060                                   tree arg_expr)
12061 {
12062   int result = 0;
12063
12064   switch (strict)
12065     {
12066     case DEDUCE_CALL:
12067       break;
12068
12069     case DEDUCE_CONV:
12070       {
12071         /* Swap PARM and ARG throughout the remainder of this
12072            function; the handling is precisely symmetric since PARM
12073            will initialize ARG rather than vice versa.  */
12074         tree* temp = parm;
12075         parm = arg;
12076         arg = temp;
12077         break;
12078       }
12079
12080     case DEDUCE_EXACT:
12081       /* There is nothing to do in this case.  */
12082       return 0;
12083
12084     default:
12085       gcc_unreachable ();
12086     }
12087
12088   if (TREE_CODE (*parm) != REFERENCE_TYPE)
12089     {
12090       /* [temp.deduct.call]
12091
12092          If P is not a reference type:
12093
12094          --If A is an array type, the pointer type produced by the
12095          array-to-pointer standard conversion (_conv.array_) is
12096          used in place of A for type deduction; otherwise,
12097
12098          --If A is a function type, the pointer type produced by
12099          the function-to-pointer standard conversion
12100          (_conv.func_) is used in place of A for type deduction;
12101          otherwise,
12102
12103          --If A is a cv-qualified type, the top level
12104          cv-qualifiers of A's type are ignored for type
12105          deduction.  */
12106       if (TREE_CODE (*arg) == ARRAY_TYPE)
12107         *arg = build_pointer_type (TREE_TYPE (*arg));
12108       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
12109         *arg = build_pointer_type (*arg);
12110       else
12111         *arg = TYPE_MAIN_VARIANT (*arg);
12112     }
12113
12114   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
12115      of the form T&&, where T is a template parameter, and the argument
12116      is an lvalue, T is deduced as A& */
12117   if (TREE_CODE (*parm) == REFERENCE_TYPE
12118       && TYPE_REF_IS_RVALUE (*parm)
12119       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
12120       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
12121       && arg_expr && real_lvalue_p (arg_expr))
12122     *arg = build_reference_type (*arg);
12123
12124   /* [temp.deduct.call]
12125
12126      If P is a cv-qualified type, the top level cv-qualifiers
12127      of P's type are ignored for type deduction.  If P is a
12128      reference type, the type referred to by P is used for
12129      type deduction.  */
12130   *parm = TYPE_MAIN_VARIANT (*parm);
12131   if (TREE_CODE (*parm) == REFERENCE_TYPE)
12132     {
12133       *parm = TREE_TYPE (*parm);
12134       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12135     }
12136
12137   /* DR 322. For conversion deduction, remove a reference type on parm
12138      too (which has been swapped into ARG).  */
12139   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
12140     *arg = TREE_TYPE (*arg);
12141
12142   return result;
12143 }
12144
12145 /* Most parms like fn_type_unification.
12146
12147    If SUBR is 1, we're being called recursively (to unify the
12148    arguments of a function or method parameter of a function
12149    template). */
12150
12151 static int
12152 type_unification_real (tree tparms,
12153                        tree targs,
12154                        tree xparms,
12155                        tree xargs,
12156                        int subr,
12157                        unification_kind_t strict,
12158                        int flags)
12159 {
12160   tree parm, arg, arg_expr;
12161   int i;
12162   int ntparms = TREE_VEC_LENGTH (tparms);
12163   int sub_strict;
12164   int saw_undeduced = 0;
12165   tree parms, args;
12166
12167   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
12168   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
12169   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
12170   gcc_assert (ntparms > 0);
12171
12172   switch (strict)
12173     {
12174     case DEDUCE_CALL:
12175       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
12176                     | UNIFY_ALLOW_DERIVED);
12177       break;
12178
12179     case DEDUCE_CONV:
12180       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12181       break;
12182
12183     case DEDUCE_EXACT:
12184       sub_strict = UNIFY_ALLOW_NONE;
12185       break;
12186
12187     default:
12188       gcc_unreachable ();
12189     }
12190
12191  again:
12192   parms = xparms;
12193   args = xargs;
12194
12195   while (parms && parms != void_list_node
12196          && args && args != void_list_node)
12197     {
12198       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12199         break;
12200
12201       parm = TREE_VALUE (parms);
12202       parms = TREE_CHAIN (parms);
12203       arg = TREE_VALUE (args);
12204       args = TREE_CHAIN (args);
12205       arg_expr = NULL;
12206
12207       if (arg == error_mark_node)
12208         return 1;
12209       if (arg == unknown_type_node)
12210         /* We can't deduce anything from this, but we might get all the
12211            template args from other function args.  */
12212         continue;
12213
12214       /* Conversions will be performed on a function argument that
12215          corresponds with a function parameter that contains only
12216          non-deducible template parameters and explicitly specified
12217          template parameters.  */
12218       if (!uses_template_parms (parm))
12219         {
12220           tree type;
12221
12222           if (!TYPE_P (arg))
12223             type = TREE_TYPE (arg);
12224           else
12225             type = arg;
12226
12227           if (same_type_p (parm, type))
12228             continue;
12229           if (strict != DEDUCE_EXACT
12230               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
12231                                   flags))
12232             continue;
12233
12234           return 1;
12235         }
12236
12237       if (!TYPE_P (arg))
12238         {
12239           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12240           if (type_unknown_p (arg))
12241             {
12242               /* [temp.deduct.type] 
12243
12244                  A template-argument can be deduced from a pointer to
12245                  function or pointer to member function argument if
12246                  the set of overloaded functions does not contain
12247                  function templates and at most one of a set of
12248                  overloaded functions provides a unique match.  */
12249               if (resolve_overloaded_unification
12250                   (tparms, targs, parm, arg, strict, sub_strict))
12251                 continue;
12252
12253               return 1;
12254             }
12255           arg_expr = arg;
12256           arg = unlowered_expr_type (arg);
12257           if (arg == error_mark_node)
12258             return 1;
12259         }
12260
12261       {
12262         int arg_strict = sub_strict;
12263
12264         if (!subr)
12265           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
12266                                                           arg_expr);
12267
12268         if (arg == init_list_type_node && arg_expr)
12269           arg = arg_expr;
12270         if (unify (tparms, targs, parm, arg, arg_strict))
12271           return 1;
12272       }
12273     }
12274
12275
12276   if (parms 
12277       && parms != void_list_node
12278       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
12279     {
12280       /* Unify the remaining arguments with the pack expansion type.  */
12281       tree argvec;
12282       tree parmvec = make_tree_vec (1);
12283       int len = 0;
12284       tree t;
12285
12286       /* Count the number of arguments that remain.  */
12287       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
12288         len++;
12289         
12290       /* Allocate a TREE_VEC and copy in all of the arguments */ 
12291       argvec = make_tree_vec (len);
12292       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
12293         {
12294           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
12295           ++i;
12296         }
12297
12298       /* Copy the parameter into parmvec.  */
12299       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
12300       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
12301                                 /*call_args_p=*/true, /*subr=*/subr))
12302         return 1;
12303
12304       /* Advance to the end of the list of parameters.  */
12305       parms = TREE_CHAIN (parms);
12306     }
12307
12308   /* Fail if we've reached the end of the parm list, and more args
12309      are present, and the parm list isn't variadic.  */
12310   if (args && args != void_list_node && parms == void_list_node)
12311     return 1;
12312   /* Fail if parms are left and they don't have default values.  */
12313   if (parms && parms != void_list_node
12314       && TREE_PURPOSE (parms) == NULL_TREE)
12315     return 1;
12316
12317   if (!subr)
12318     for (i = 0; i < ntparms; i++)
12319       if (!TREE_VEC_ELT (targs, i))
12320         {
12321           tree tparm;
12322
12323           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12324             continue;
12325
12326           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12327
12328           /* If this is an undeduced nontype parameter that depends on
12329              a type parameter, try another pass; its type may have been
12330              deduced from a later argument than the one from which
12331              this parameter can be deduced.  */
12332           if (TREE_CODE (tparm) == PARM_DECL
12333               && uses_template_parms (TREE_TYPE (tparm))
12334               && !saw_undeduced++)
12335             goto again;
12336
12337           /* Core issue #226 (C++0x) [temp.deduct]:
12338
12339                If a template argument has not been deduced, its
12340                default template argument, if any, is used. 
12341
12342              When we are in C++98 mode, TREE_PURPOSE will either
12343              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12344              to explicitly check cxx_dialect here.  */
12345           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12346             {
12347               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12348                                  targs, tf_none, NULL_TREE);
12349               if (arg == error_mark_node)
12350                 return 1;
12351               else
12352                 {
12353                   TREE_VEC_ELT (targs, i) = arg;
12354                   continue;
12355                 }
12356             }
12357
12358           /* If the type parameter is a parameter pack, then it will
12359              be deduced to an empty parameter pack.  */
12360           if (template_parameter_pack_p (tparm))
12361             {
12362               tree arg;
12363
12364               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12365                 {
12366                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12367                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12368                   TREE_CONSTANT (arg) = 1;
12369                 }
12370               else
12371                 arg = make_node (TYPE_ARGUMENT_PACK);
12372
12373               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12374
12375               TREE_VEC_ELT (targs, i) = arg;
12376               continue;
12377             }
12378
12379           return 2;
12380         }
12381
12382   return 0;
12383 }
12384
12385 /* Subroutine of type_unification_real.  Args are like the variables
12386    at the call site.  ARG is an overloaded function (or template-id);
12387    we try deducing template args from each of the overloads, and if
12388    only one succeeds, we go with that.  Modifies TARGS and returns
12389    true on success.  */
12390
12391 static bool
12392 resolve_overloaded_unification (tree tparms,
12393                                 tree targs,
12394                                 tree parm,
12395                                 tree arg,
12396                                 unification_kind_t strict,
12397                                 int sub_strict)
12398 {
12399   tree tempargs = copy_node (targs);
12400   int good = 0;
12401   bool addr_p;
12402
12403   if (TREE_CODE (arg) == ADDR_EXPR)
12404     {
12405       arg = TREE_OPERAND (arg, 0);
12406       addr_p = true;
12407     }
12408   else
12409     addr_p = false;
12410
12411   if (TREE_CODE (arg) == COMPONENT_REF)
12412     /* Handle `&x' where `x' is some static or non-static member
12413        function name.  */
12414     arg = TREE_OPERAND (arg, 1);
12415
12416   if (TREE_CODE (arg) == OFFSET_REF)
12417     arg = TREE_OPERAND (arg, 1);
12418
12419   /* Strip baselink information.  */
12420   if (BASELINK_P (arg))
12421     arg = BASELINK_FUNCTIONS (arg);
12422
12423   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12424     {
12425       /* If we got some explicit template args, we need to plug them into
12426          the affected templates before we try to unify, in case the
12427          explicit args will completely resolve the templates in question.  */
12428
12429       tree expl_subargs = TREE_OPERAND (arg, 1);
12430       arg = TREE_OPERAND (arg, 0);
12431
12432       for (; arg; arg = OVL_NEXT (arg))
12433         {
12434           tree fn = OVL_CURRENT (arg);
12435           tree subargs, elem;
12436
12437           if (TREE_CODE (fn) != TEMPLATE_DECL)
12438             continue;
12439
12440           ++processing_template_decl;
12441           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12442                                   expl_subargs, /*check_ret=*/false);
12443           if (subargs)
12444             {
12445               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12446               good += try_one_overload (tparms, targs, tempargs, parm,
12447                                         elem, strict, sub_strict, addr_p);
12448             }
12449           --processing_template_decl;
12450         }
12451     }
12452   else if (TREE_CODE (arg) != OVERLOAD
12453            && TREE_CODE (arg) != FUNCTION_DECL)
12454     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12455        -- but the deduction does not succeed because the expression is
12456        not just the function on its own.  */
12457     return false;
12458   else
12459     for (; arg; arg = OVL_NEXT (arg))
12460       good += try_one_overload (tparms, targs, tempargs, parm,
12461                                 TREE_TYPE (OVL_CURRENT (arg)),
12462                                 strict, sub_strict, addr_p);
12463
12464   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12465      to function or pointer to member function argument if the set of
12466      overloaded functions does not contain function templates and at most
12467      one of a set of overloaded functions provides a unique match.
12468
12469      So if we found multiple possibilities, we return success but don't
12470      deduce anything.  */
12471
12472   if (good == 1)
12473     {
12474       int i = TREE_VEC_LENGTH (targs);
12475       for (; i--; )
12476         if (TREE_VEC_ELT (tempargs, i))
12477           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12478     }
12479   if (good)
12480     return true;
12481
12482   return false;
12483 }
12484
12485 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12486    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12487    different overloads deduce different arguments for a given parm.
12488    ADDR_P is true if the expression for which deduction is being
12489    performed was of the form "& fn" rather than simply "fn".
12490
12491    Returns 1 on success.  */
12492
12493 static int
12494 try_one_overload (tree tparms,
12495                   tree orig_targs,
12496                   tree targs,
12497                   tree parm,
12498                   tree arg,
12499                   unification_kind_t strict,
12500                   int sub_strict,
12501                   bool addr_p)
12502 {
12503   int nargs;
12504   tree tempargs;
12505   int i;
12506
12507   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12508      to function or pointer to member function argument if the set of
12509      overloaded functions does not contain function templates and at most
12510      one of a set of overloaded functions provides a unique match.
12511
12512      So if this is a template, just return success.  */
12513
12514   if (uses_template_parms (arg))
12515     return 1;
12516
12517   if (TREE_CODE (arg) == METHOD_TYPE)
12518     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12519   else if (addr_p)
12520     arg = build_pointer_type (arg);
12521
12522   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12523
12524   /* We don't copy orig_targs for this because if we have already deduced
12525      some template args from previous args, unify would complain when we
12526      try to deduce a template parameter for the same argument, even though
12527      there isn't really a conflict.  */
12528   nargs = TREE_VEC_LENGTH (targs);
12529   tempargs = make_tree_vec (nargs);
12530
12531   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12532     return 0;
12533
12534   /* First make sure we didn't deduce anything that conflicts with
12535      explicitly specified args.  */
12536   for (i = nargs; i--; )
12537     {
12538       tree elt = TREE_VEC_ELT (tempargs, i);
12539       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12540
12541       if (!elt)
12542         /*NOP*/;
12543       else if (uses_template_parms (elt))
12544         /* Since we're unifying against ourselves, we will fill in
12545            template args used in the function parm list with our own
12546            template parms.  Discard them.  */
12547         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12548       else if (oldelt && !template_args_equal (oldelt, elt))
12549         return 0;
12550     }
12551
12552   for (i = nargs; i--; )
12553     {
12554       tree elt = TREE_VEC_ELT (tempargs, i);
12555
12556       if (elt)
12557         TREE_VEC_ELT (targs, i) = elt;
12558     }
12559
12560   return 1;
12561 }
12562
12563 /* PARM is a template class (perhaps with unbound template
12564    parameters).  ARG is a fully instantiated type.  If ARG can be
12565    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12566    TARGS are as for unify.  */
12567
12568 static tree
12569 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12570 {
12571   tree copy_of_targs;
12572
12573   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12574       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12575           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12576     return NULL_TREE;
12577
12578   /* We need to make a new template argument vector for the call to
12579      unify.  If we used TARGS, we'd clutter it up with the result of
12580      the attempted unification, even if this class didn't work out.
12581      We also don't want to commit ourselves to all the unifications
12582      we've already done, since unification is supposed to be done on
12583      an argument-by-argument basis.  In other words, consider the
12584      following pathological case:
12585
12586        template <int I, int J, int K>
12587        struct S {};
12588
12589        template <int I, int J>
12590        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12591
12592        template <int I, int J, int K>
12593        void f(S<I, J, K>, S<I, I, I>);
12594
12595        void g() {
12596          S<0, 0, 0> s0;
12597          S<0, 1, 2> s2;
12598
12599          f(s0, s2);
12600        }
12601
12602      Now, by the time we consider the unification involving `s2', we
12603      already know that we must have `f<0, 0, 0>'.  But, even though
12604      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12605      because there are two ways to unify base classes of S<0, 1, 2>
12606      with S<I, I, I>.  If we kept the already deduced knowledge, we
12607      would reject the possibility I=1.  */
12608   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12609
12610   /* If unification failed, we're done.  */
12611   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12612              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12613     return NULL_TREE;
12614
12615   return arg;
12616 }
12617
12618 /* Given a template type PARM and a class type ARG, find the unique
12619    base type in ARG that is an instance of PARM.  We do not examine
12620    ARG itself; only its base-classes.  If there is not exactly one
12621    appropriate base class, return NULL_TREE.  PARM may be the type of
12622    a partial specialization, as well as a plain template type.  Used
12623    by unify.  */
12624
12625 static tree
12626 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12627 {
12628   tree rval = NULL_TREE;
12629   tree binfo;
12630
12631   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
12632
12633   binfo = TYPE_BINFO (complete_type (arg));
12634   if (!binfo)
12635     /* The type could not be completed.  */
12636     return NULL_TREE;
12637
12638   /* Walk in inheritance graph order.  The search order is not
12639      important, and this avoids multiple walks of virtual bases.  */
12640   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12641     {
12642       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12643
12644       if (r)
12645         {
12646           /* If there is more than one satisfactory baseclass, then:
12647
12648                [temp.deduct.call]
12649
12650               If they yield more than one possible deduced A, the type
12651               deduction fails.
12652
12653              applies.  */
12654           if (rval && !same_type_p (r, rval))
12655             return NULL_TREE;
12656
12657           rval = r;
12658         }
12659     }
12660
12661   return rval;
12662 }
12663
12664 /* Returns the level of DECL, which declares a template parameter.  */
12665
12666 static int
12667 template_decl_level (tree decl)
12668 {
12669   switch (TREE_CODE (decl))
12670     {
12671     case TYPE_DECL:
12672     case TEMPLATE_DECL:
12673       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12674
12675     case PARM_DECL:
12676       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12677
12678     default:
12679       gcc_unreachable ();
12680     }
12681   return 0;
12682 }
12683
12684 /* Decide whether ARG can be unified with PARM, considering only the
12685    cv-qualifiers of each type, given STRICT as documented for unify.
12686    Returns nonzero iff the unification is OK on that basis.  */
12687
12688 static int
12689 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12690 {
12691   int arg_quals = cp_type_quals (arg);
12692   int parm_quals = cp_type_quals (parm);
12693
12694   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12695       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12696     {
12697       /*  Although a CVR qualifier is ignored when being applied to a
12698           substituted template parameter ([8.3.2]/1 for example), that
12699           does not apply during deduction [14.8.2.4]/1, (even though
12700           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12701           this).  Except when we're allowing additional CV qualifiers
12702           at the outer level [14.8.2.1]/3,1st bullet.  */
12703       if ((TREE_CODE (arg) == REFERENCE_TYPE
12704            || TREE_CODE (arg) == FUNCTION_TYPE
12705            || TREE_CODE (arg) == METHOD_TYPE)
12706           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12707         return 0;
12708
12709       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12710           && (parm_quals & TYPE_QUAL_RESTRICT))
12711         return 0;
12712     }
12713
12714   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12715       && (arg_quals & parm_quals) != parm_quals)
12716     return 0;
12717
12718   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12719       && (parm_quals & arg_quals) != arg_quals)
12720     return 0;
12721
12722   return 1;
12723 }
12724
12725 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12726 void 
12727 template_parm_level_and_index (tree parm, int* level, int* index)
12728 {
12729   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12730       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12731       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12732     {
12733       *index = TEMPLATE_TYPE_IDX (parm);
12734       *level = TEMPLATE_TYPE_LEVEL (parm);
12735     }
12736   else
12737     {
12738       *index = TEMPLATE_PARM_IDX (parm);
12739       *level = TEMPLATE_PARM_LEVEL (parm);
12740     }
12741 }
12742
12743 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12744    expansion at the end of PACKED_PARMS. Returns 0 if the type
12745    deduction succeeds, 1 otherwise. STRICT is the same as in
12746    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12747    call argument list. We'll need to adjust the arguments to make them
12748    types. SUBR tells us if this is from a recursive call to
12749    type_unification_real.  */
12750 int
12751 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12752                       tree packed_args, int strict, bool call_args_p,
12753                       bool subr)
12754 {
12755   tree parm 
12756     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12757   tree pattern = PACK_EXPANSION_PATTERN (parm);
12758   tree pack, packs = NULL_TREE;
12759   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12760   int len = TREE_VEC_LENGTH (packed_args);
12761
12762   /* Determine the parameter packs we will be deducing from the
12763      pattern, and record their current deductions.  */
12764   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12765        pack; pack = TREE_CHAIN (pack))
12766     {
12767       tree parm_pack = TREE_VALUE (pack);
12768       int idx, level;
12769
12770       /* Determine the index and level of this parameter pack.  */
12771       template_parm_level_and_index (parm_pack, &level, &idx);
12772
12773       /* Keep track of the parameter packs and their corresponding
12774          argument packs.  */
12775       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12776       TREE_TYPE (packs) = make_tree_vec (len - start);
12777     }
12778   
12779   /* Loop through all of the arguments that have not yet been
12780      unified and unify each with the pattern.  */
12781   for (i = start; i < len; i++)
12782     {
12783       tree parm = pattern;
12784
12785       /* For each parameter pack, clear out the deduced value so that
12786          we can deduce it again.  */
12787       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12788         {
12789           int idx, level;
12790           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12791
12792           TMPL_ARG (targs, level, idx) = NULL_TREE;
12793         }
12794
12795       /* Unify the pattern with the current argument.  */
12796       {
12797         tree arg = TREE_VEC_ELT (packed_args, i);
12798         tree arg_expr = NULL_TREE;
12799         int arg_strict = strict;
12800         bool skip_arg_p = false;
12801
12802         if (call_args_p)
12803           {
12804             int sub_strict;
12805
12806             /* This mirrors what we do in type_unification_real.  */
12807             switch (strict)
12808               {
12809               case DEDUCE_CALL:
12810                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12811                               | UNIFY_ALLOW_MORE_CV_QUAL
12812                               | UNIFY_ALLOW_DERIVED);
12813                 break;
12814                 
12815               case DEDUCE_CONV:
12816                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12817                 break;
12818                 
12819               case DEDUCE_EXACT:
12820                 sub_strict = UNIFY_ALLOW_NONE;
12821                 break;
12822                 
12823               default:
12824                 gcc_unreachable ();
12825               }
12826
12827             if (!TYPE_P (arg))
12828               {
12829                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12830                 if (type_unknown_p (arg))
12831                   {
12832                     /* [temp.deduct.type] A template-argument can be
12833                        deduced from a pointer to function or pointer
12834                        to member function argument if the set of
12835                        overloaded functions does not contain function
12836                        templates and at most one of a set of
12837                        overloaded functions provides a unique
12838                        match.  */
12839
12840                     if (resolve_overloaded_unification
12841                         (tparms, targs, parm, arg, strict, sub_strict)
12842                         != 0)
12843                       return 1;
12844                     skip_arg_p = true;
12845                   }
12846
12847                 if (!skip_arg_p)
12848                   {
12849                     arg_expr = arg;
12850                     arg = unlowered_expr_type (arg);
12851                     if (arg == error_mark_node)
12852                       return 1;
12853                   }
12854               }
12855       
12856             arg_strict = sub_strict;
12857
12858             if (!subr)
12859               arg_strict |= 
12860                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12861                                                   arg_expr);
12862           }
12863
12864         if (!skip_arg_p)
12865           {
12866             if (unify (tparms, targs, parm, arg, arg_strict))
12867               return 1;
12868           }
12869       }
12870
12871       /* For each parameter pack, collect the deduced value.  */
12872       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12873         {
12874           int idx, level;
12875           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12876
12877           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12878             TMPL_ARG (targs, level, idx);
12879         }
12880     }
12881
12882   /* Verify that the results of unification with the parameter packs
12883      produce results consistent with what we've seen before, and make
12884      the deduced argument packs available.  */
12885   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12886     {
12887       tree old_pack = TREE_VALUE (pack);
12888       tree new_args = TREE_TYPE (pack);
12889       int i, len = TREE_VEC_LENGTH (new_args);
12890       bool nondeduced_p = false;
12891
12892       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12893          actually deduce anything.  */
12894       for (i = 0; i < len && !nondeduced_p; ++i)
12895         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12896           nondeduced_p = true;
12897       if (nondeduced_p)
12898         continue;
12899
12900       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12901         {
12902           /* Prepend the explicit arguments onto NEW_ARGS.  */
12903           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12904           tree old_args = new_args;
12905           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12906           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12907
12908           /* Copy the explicit arguments.  */
12909           new_args = make_tree_vec (len);
12910           for (i = 0; i < explicit_len; i++)
12911             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12912
12913           /* Copy the deduced arguments.  */
12914           for (; i < len; i++)
12915             TREE_VEC_ELT (new_args, i) =
12916               TREE_VEC_ELT (old_args, i - explicit_len);
12917         }
12918
12919       if (!old_pack)
12920         {
12921           tree result;
12922           int idx, level;
12923           
12924           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12925
12926           /* Build the deduced *_ARGUMENT_PACK.  */
12927           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12928             {
12929               result = make_node (NONTYPE_ARGUMENT_PACK);
12930               TREE_TYPE (result) = 
12931                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12932               TREE_CONSTANT (result) = 1;
12933             }
12934           else
12935             result = make_node (TYPE_ARGUMENT_PACK);
12936
12937           SET_ARGUMENT_PACK_ARGS (result, new_args);
12938
12939           /* Note the deduced argument packs for this parameter
12940              pack.  */
12941           TMPL_ARG (targs, level, idx) = result;
12942         }
12943       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12944                && (ARGUMENT_PACK_ARGS (old_pack) 
12945                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12946         {
12947           /* We only had the explicitly-provided arguments before, but
12948              now we have a complete set of arguments.  */
12949           int idx, level;
12950           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12951           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12952
12953           /* Keep the original deduced argument pack.  */
12954           TMPL_ARG (targs, level, idx) = old_pack;
12955
12956           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12957           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12958           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12959         }
12960       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12961                                     new_args))
12962         /* Inconsistent unification of this parameter pack.  */
12963         return 1;
12964       else
12965         {
12966           int idx, level;
12967           
12968           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12969
12970           /* Keep the original deduced argument pack.  */
12971           TMPL_ARG (targs, level, idx) = old_pack;
12972         }
12973     }
12974
12975   return 0;
12976 }
12977
12978 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12979    set of template parameters to a template.  TARGS is the bindings
12980    for those template parameters, as determined thus far; TARGS may
12981    include template arguments for outer levels of template parameters
12982    as well.  PARM is a parameter to a template function, or a
12983    subcomponent of that parameter; ARG is the corresponding argument.
12984    This function attempts to match PARM with ARG in a manner
12985    consistent with the existing assignments in TARGS.  If more values
12986    are deduced, then TARGS is updated.
12987
12988    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12989    parameter STRICT is a bitwise or of the following flags:
12990
12991      UNIFY_ALLOW_NONE:
12992        Require an exact match between PARM and ARG.
12993      UNIFY_ALLOW_MORE_CV_QUAL:
12994        Allow the deduced ARG to be more cv-qualified (by qualification
12995        conversion) than ARG.
12996      UNIFY_ALLOW_LESS_CV_QUAL:
12997        Allow the deduced ARG to be less cv-qualified than ARG.
12998      UNIFY_ALLOW_DERIVED:
12999        Allow the deduced ARG to be a template base class of ARG,
13000        or a pointer to a template base class of the type pointed to by
13001        ARG.
13002      UNIFY_ALLOW_INTEGER:
13003        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
13004        case for more information.
13005      UNIFY_ALLOW_OUTER_LEVEL:
13006        This is the outermost level of a deduction. Used to determine validity
13007        of qualification conversions. A valid qualification conversion must
13008        have const qualified pointers leading up to the inner type which
13009        requires additional CV quals, except at the outer level, where const
13010        is not required [conv.qual]. It would be normal to set this flag in
13011        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
13012      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
13013        This is the outermost level of a deduction, and PARM can be more CV
13014        qualified at this point.
13015      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
13016        This is the outermost level of a deduction, and PARM can be less CV
13017        qualified at this point.  */
13018
13019 static int
13020 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
13021 {
13022   int idx;
13023   tree targ;
13024   tree tparm;
13025   int strict_in = strict;
13026
13027   /* I don't think this will do the right thing with respect to types.
13028      But the only case I've seen it in so far has been array bounds, where
13029      signedness is the only information lost, and I think that will be
13030      okay.  */
13031   while (TREE_CODE (parm) == NOP_EXPR)
13032     parm = TREE_OPERAND (parm, 0);
13033
13034   if (arg == error_mark_node)
13035     return 1;
13036   if (arg == unknown_type_node
13037       || arg == init_list_type_node)
13038     /* We can't deduce anything from this, but we might get all the
13039        template args from other function args.  */
13040     return 0;
13041
13042   /* If PARM uses template parameters, then we can't bail out here,
13043      even if ARG == PARM, since we won't record unifications for the
13044      template parameters.  We might need them if we're trying to
13045      figure out which of two things is more specialized.  */
13046   if (arg == parm && !uses_template_parms (parm))
13047     return 0;
13048
13049   /* Handle init lists early, so the rest of the function can assume
13050      we're dealing with a type. */
13051   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
13052     {
13053       tree elt, elttype;
13054       unsigned i;
13055
13056       if (!is_std_init_list (parm))
13057         /* We can only deduce from an initializer list argument if the
13058            parameter is std::initializer_list; otherwise this is a
13059            non-deduced context. */
13060         return 0;
13061
13062       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
13063
13064       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
13065         {
13066           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
13067             elt = TREE_TYPE (elt);
13068           if (unify (tparms, targs, elttype, elt, UNIFY_ALLOW_NONE))
13069             return 1;
13070         }
13071       return 0;
13072     }
13073
13074   /* Immediately reject some pairs that won't unify because of
13075      cv-qualification mismatches.  */
13076   if (TREE_CODE (arg) == TREE_CODE (parm)
13077       && TYPE_P (arg)
13078       /* It is the elements of the array which hold the cv quals of an array
13079          type, and the elements might be template type parms. We'll check
13080          when we recurse.  */
13081       && TREE_CODE (arg) != ARRAY_TYPE
13082       /* We check the cv-qualifiers when unifying with template type
13083          parameters below.  We want to allow ARG `const T' to unify with
13084          PARM `T' for example, when computing which of two templates
13085          is more specialized, for example.  */
13086       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
13087       && !check_cv_quals_for_unify (strict_in, arg, parm))
13088     return 1;
13089
13090   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
13091       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
13092     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
13093   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
13094   strict &= ~UNIFY_ALLOW_DERIVED;
13095   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
13096   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
13097
13098   switch (TREE_CODE (parm))
13099     {
13100     case TYPENAME_TYPE:
13101     case SCOPE_REF:
13102     case UNBOUND_CLASS_TEMPLATE:
13103       /* In a type which contains a nested-name-specifier, template
13104          argument values cannot be deduced for template parameters used
13105          within the nested-name-specifier.  */
13106       return 0;
13107
13108     case TEMPLATE_TYPE_PARM:
13109     case TEMPLATE_TEMPLATE_PARM:
13110     case BOUND_TEMPLATE_TEMPLATE_PARM:
13111       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13112       if (tparm == error_mark_node)
13113         return 1;
13114
13115       if (TEMPLATE_TYPE_LEVEL (parm)
13116           != template_decl_level (tparm))
13117         /* The PARM is not one we're trying to unify.  Just check
13118            to see if it matches ARG.  */
13119         return (TREE_CODE (arg) == TREE_CODE (parm)
13120                 && same_type_p (parm, arg)) ? 0 : 1;
13121       idx = TEMPLATE_TYPE_IDX (parm);
13122       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13123       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
13124
13125       /* Check for mixed types and values.  */
13126       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
13127            && TREE_CODE (tparm) != TYPE_DECL)
13128           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13129               && TREE_CODE (tparm) != TEMPLATE_DECL))
13130         return 1;
13131
13132       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13133         {
13134           /* ARG must be constructed from a template class or a template
13135              template parameter.  */
13136           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
13137               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
13138             return 1;
13139
13140           {
13141             tree parmvec = TYPE_TI_ARGS (parm);
13142             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
13143             tree parm_parms 
13144               = DECL_INNERMOST_TEMPLATE_PARMS
13145                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
13146             int i, len;
13147             int parm_variadic_p = 0;
13148
13149             /* The resolution to DR150 makes clear that default
13150                arguments for an N-argument may not be used to bind T
13151                to a template template parameter with fewer than N
13152                parameters.  It is not safe to permit the binding of
13153                default arguments as an extension, as that may change
13154                the meaning of a conforming program.  Consider:
13155
13156                   struct Dense { static const unsigned int dim = 1; };
13157
13158                   template <template <typename> class View,
13159                             typename Block>
13160                   void operator+(float, View<Block> const&);
13161
13162                   template <typename Block,
13163                             unsigned int Dim = Block::dim>
13164                   struct Lvalue_proxy { operator float() const; };
13165
13166                   void
13167                   test_1d (void) {
13168                     Lvalue_proxy<Dense> p;
13169                     float b;
13170                     b + p;
13171                   }
13172
13173               Here, if Lvalue_proxy is permitted to bind to View, then
13174               the global operator+ will be used; if they are not, the
13175               Lvalue_proxy will be converted to float.  */
13176             if (coerce_template_parms (parm_parms,
13177                                        argvec,
13178                                        TYPE_TI_TEMPLATE (parm),
13179                                        tf_none,
13180                                        /*require_all_args=*/true,
13181                                        /*use_default_args=*/false)
13182                 == error_mark_node)
13183               return 1;
13184
13185             /* Deduce arguments T, i from TT<T> or TT<i>.
13186                We check each element of PARMVEC and ARGVEC individually
13187                rather than the whole TREE_VEC since they can have
13188                different number of elements.  */
13189
13190             parmvec = expand_template_argument_pack (parmvec);
13191             argvec = expand_template_argument_pack (argvec);
13192
13193             len = TREE_VEC_LENGTH (parmvec);
13194
13195             /* Check if the parameters end in a pack, making them
13196                variadic.  */
13197             if (len > 0
13198                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
13199               parm_variadic_p = 1;
13200             
13201             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
13202               return 1;
13203
13204              for (i = 0; i < len - parm_variadic_p; ++i)
13205               {
13206                 if (unify (tparms, targs,
13207                            TREE_VEC_ELT (parmvec, i),
13208                            TREE_VEC_ELT (argvec, i),
13209                            UNIFY_ALLOW_NONE))
13210                   return 1;
13211               }
13212
13213             if (parm_variadic_p
13214                 && unify_pack_expansion (tparms, targs,
13215                                          parmvec, argvec,
13216                                          UNIFY_ALLOW_NONE,
13217                                          /*call_args_p=*/false,
13218                                          /*subr=*/false))
13219               return 1;
13220           }
13221           arg = TYPE_TI_TEMPLATE (arg);
13222
13223           /* Fall through to deduce template name.  */
13224         }
13225
13226       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
13227           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
13228         {
13229           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
13230
13231           /* Simple cases: Value already set, does match or doesn't.  */
13232           if (targ != NULL_TREE && template_args_equal (targ, arg))
13233             return 0;
13234           else if (targ)
13235             return 1;
13236         }
13237       else
13238         {
13239           /* If PARM is `const T' and ARG is only `int', we don't have
13240              a match unless we are allowing additional qualification.
13241              If ARG is `const int' and PARM is just `T' that's OK;
13242              that binds `const int' to `T'.  */
13243           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
13244                                          arg, parm))
13245             return 1;
13246
13247           /* Consider the case where ARG is `const volatile int' and
13248              PARM is `const T'.  Then, T should be `volatile int'.  */
13249           arg = cp_build_qualified_type_real
13250             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
13251           if (arg == error_mark_node)
13252             return 1;
13253
13254           /* Simple cases: Value already set, does match or doesn't.  */
13255           if (targ != NULL_TREE && same_type_p (targ, arg))
13256             return 0;
13257           else if (targ)
13258             return 1;
13259
13260           /* Make sure that ARG is not a variable-sized array.  (Note
13261              that were talking about variable-sized arrays (like
13262              `int[n]'), rather than arrays of unknown size (like
13263              `int[]').)  We'll get very confused by such a type since
13264              the bound of the array will not be computable in an
13265              instantiation.  Besides, such types are not allowed in
13266              ISO C++, so we can do as we please here.  */
13267           if (variably_modified_type_p (arg, NULL_TREE))
13268             return 1;
13269         }
13270
13271       /* If ARG is a parameter pack or an expansion, we cannot unify
13272          against it unless PARM is also a parameter pack.  */
13273       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13274           && !template_parameter_pack_p (parm))
13275         return 1;
13276
13277       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13278       return 0;
13279
13280     case TEMPLATE_PARM_INDEX:
13281       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
13282       if (tparm == error_mark_node)
13283         return 1;
13284
13285       if (TEMPLATE_PARM_LEVEL (parm)
13286           != template_decl_level (tparm))
13287         /* The PARM is not one we're trying to unify.  Just check
13288            to see if it matches ARG.  */
13289         return !(TREE_CODE (arg) == TREE_CODE (parm)
13290                  && cp_tree_equal (parm, arg));
13291
13292       idx = TEMPLATE_PARM_IDX (parm);
13293       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
13294
13295       if (targ)
13296         return !cp_tree_equal (targ, arg);
13297
13298       /* [temp.deduct.type] If, in the declaration of a function template
13299          with a non-type template-parameter, the non-type
13300          template-parameter is used in an expression in the function
13301          parameter-list and, if the corresponding template-argument is
13302          deduced, the template-argument type shall match the type of the
13303          template-parameter exactly, except that a template-argument
13304          deduced from an array bound may be of any integral type.
13305          The non-type parameter might use already deduced type parameters.  */
13306       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
13307       if (!TREE_TYPE (arg))
13308         /* Template-parameter dependent expression.  Just accept it for now.
13309            It will later be processed in convert_template_argument.  */
13310         ;
13311       else if (same_type_p (TREE_TYPE (arg), tparm))
13312         /* OK */;
13313       else if ((strict & UNIFY_ALLOW_INTEGER)
13314                && (TREE_CODE (tparm) == INTEGER_TYPE
13315                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
13316         /* Convert the ARG to the type of PARM; the deduced non-type
13317            template argument must exactly match the types of the
13318            corresponding parameter.  */
13319         arg = fold (build_nop (TREE_TYPE (parm), arg));
13320       else if (uses_template_parms (tparm))
13321         /* We haven't deduced the type of this parameter yet.  Try again
13322            later.  */
13323         return 0;
13324       else
13325         return 1;
13326
13327       /* If ARG is a parameter pack or an expansion, we cannot unify
13328          against it unless PARM is also a parameter pack.  */
13329       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
13330           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
13331         return 1;
13332
13333       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13334       return 0;
13335
13336     case PTRMEM_CST:
13337      {
13338         /* A pointer-to-member constant can be unified only with
13339          another constant.  */
13340       if (TREE_CODE (arg) != PTRMEM_CST)
13341         return 1;
13342
13343       /* Just unify the class member. It would be useless (and possibly
13344          wrong, depending on the strict flags) to unify also
13345          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13346          arg refer to the same variable, even if through different
13347          classes. For instance:
13348
13349          struct A { int x; };
13350          struct B : A { };
13351
13352          Unification of &A::x and &B::x must succeed.  */
13353       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13354                     PTRMEM_CST_MEMBER (arg), strict);
13355      }
13356
13357     case POINTER_TYPE:
13358       {
13359         if (TREE_CODE (arg) != POINTER_TYPE)
13360           return 1;
13361
13362         /* [temp.deduct.call]
13363
13364            A can be another pointer or pointer to member type that can
13365            be converted to the deduced A via a qualification
13366            conversion (_conv.qual_).
13367
13368            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13369            This will allow for additional cv-qualification of the
13370            pointed-to types if appropriate.  */
13371
13372         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13373           /* The derived-to-base conversion only persists through one
13374              level of pointers.  */
13375           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13376
13377         return unify (tparms, targs, TREE_TYPE (parm),
13378                       TREE_TYPE (arg), strict);
13379       }
13380
13381     case REFERENCE_TYPE:
13382       if (TREE_CODE (arg) != REFERENCE_TYPE)
13383         return 1;
13384       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13385                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13386
13387     case ARRAY_TYPE:
13388       if (TREE_CODE (arg) != ARRAY_TYPE)
13389         return 1;
13390       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13391           != (TYPE_DOMAIN (arg) == NULL_TREE))
13392         return 1;
13393       if (TYPE_DOMAIN (parm) != NULL_TREE)
13394         {
13395           tree parm_max;
13396           tree arg_max;
13397           bool parm_cst;
13398           bool arg_cst;
13399
13400           /* Our representation of array types uses "N - 1" as the
13401              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13402              not an integer constant.  We cannot unify arbitrarily
13403              complex expressions, so we eliminate the MINUS_EXPRs
13404              here.  */
13405           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13406           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13407           if (!parm_cst)
13408             {
13409               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13410               parm_max = TREE_OPERAND (parm_max, 0);
13411             }
13412           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13413           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13414           if (!arg_cst)
13415             {
13416               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13417                  trying to unify the type of a variable with the type
13418                  of a template parameter.  For example:
13419
13420                    template <unsigned int N>
13421                    void f (char (&) [N]);
13422                    int g(); 
13423                    void h(int i) {
13424                      char a[g(i)];
13425                      f(a); 
13426                    }
13427
13428                 Here, the type of the ARG will be "int [g(i)]", and
13429                 may be a SAVE_EXPR, etc.  */
13430               if (TREE_CODE (arg_max) != MINUS_EXPR)
13431                 return 1;
13432               arg_max = TREE_OPERAND (arg_max, 0);
13433             }
13434
13435           /* If only one of the bounds used a MINUS_EXPR, compensate
13436              by adding one to the other bound.  */
13437           if (parm_cst && !arg_cst)
13438             parm_max = fold_build2 (PLUS_EXPR,
13439                                     integer_type_node,
13440                                     parm_max,
13441                                     integer_one_node);
13442           else if (arg_cst && !parm_cst)
13443             arg_max = fold_build2 (PLUS_EXPR,
13444                                    integer_type_node,
13445                                    arg_max,
13446                                    integer_one_node);
13447
13448           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13449             return 1;
13450         }
13451       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13452                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13453
13454     case REAL_TYPE:
13455     case COMPLEX_TYPE:
13456     case VECTOR_TYPE:
13457     case INTEGER_TYPE:
13458     case BOOLEAN_TYPE:
13459     case ENUMERAL_TYPE:
13460     case VOID_TYPE:
13461       if (TREE_CODE (arg) != TREE_CODE (parm))
13462         return 1;
13463
13464       /* We have already checked cv-qualification at the top of the
13465          function.  */
13466       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13467         return 1;
13468
13469       /* As far as unification is concerned, this wins.  Later checks
13470          will invalidate it if necessary.  */
13471       return 0;
13472
13473       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13474       /* Type INTEGER_CST can come from ordinary constant template args.  */
13475     case INTEGER_CST:
13476       while (TREE_CODE (arg) == NOP_EXPR)
13477         arg = TREE_OPERAND (arg, 0);
13478
13479       if (TREE_CODE (arg) != INTEGER_CST)
13480         return 1;
13481       return !tree_int_cst_equal (parm, arg);
13482
13483     case TREE_VEC:
13484       {
13485         int i;
13486         if (TREE_CODE (arg) != TREE_VEC)
13487           return 1;
13488         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13489           return 1;
13490         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13491           if (unify (tparms, targs,
13492                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13493                      UNIFY_ALLOW_NONE))
13494             return 1;
13495         return 0;
13496       }
13497
13498     case RECORD_TYPE:
13499     case UNION_TYPE:
13500       if (TREE_CODE (arg) != TREE_CODE (parm))
13501         return 1;
13502
13503       if (TYPE_PTRMEMFUNC_P (parm))
13504         {
13505           if (!TYPE_PTRMEMFUNC_P (arg))
13506             return 1;
13507
13508           return unify (tparms, targs,
13509                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13510                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13511                         strict);
13512         }
13513
13514       if (CLASSTYPE_TEMPLATE_INFO (parm))
13515         {
13516           tree t = NULL_TREE;
13517
13518           if (strict_in & UNIFY_ALLOW_DERIVED)
13519             {
13520               /* First, we try to unify the PARM and ARG directly.  */
13521               t = try_class_unification (tparms, targs,
13522                                          parm, arg);
13523
13524               if (!t)
13525                 {
13526                   /* Fallback to the special case allowed in
13527                      [temp.deduct.call]:
13528
13529                        If P is a class, and P has the form
13530                        template-id, then A can be a derived class of
13531                        the deduced A.  Likewise, if P is a pointer to
13532                        a class of the form template-id, A can be a
13533                        pointer to a derived class pointed to by the
13534                        deduced A.  */
13535                   t = get_template_base (tparms, targs, parm, arg);
13536
13537                   if (!t)
13538                     return 1;
13539                 }
13540             }
13541           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13542                    && (CLASSTYPE_TI_TEMPLATE (parm)
13543                        == CLASSTYPE_TI_TEMPLATE (arg)))
13544             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13545                Then, we should unify `int' and `U'.  */
13546             t = arg;
13547           else
13548             /* There's no chance of unification succeeding.  */
13549             return 1;
13550
13551           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13552                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13553         }
13554       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13555         return 1;
13556       return 0;
13557
13558     case METHOD_TYPE:
13559     case FUNCTION_TYPE:
13560       if (TREE_CODE (arg) != TREE_CODE (parm))
13561         return 1;
13562
13563       /* CV qualifications for methods can never be deduced, they must
13564          match exactly.  We need to check them explicitly here,
13565          because type_unification_real treats them as any other
13566          cv-qualified parameter.  */
13567       if (TREE_CODE (parm) == METHOD_TYPE
13568           && (!check_cv_quals_for_unify
13569               (UNIFY_ALLOW_NONE,
13570                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13571                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13572         return 1;
13573
13574       if (unify (tparms, targs, TREE_TYPE (parm),
13575                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13576         return 1;
13577       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13578                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13579                                     LOOKUP_NORMAL);
13580
13581     case OFFSET_TYPE:
13582       /* Unify a pointer to member with a pointer to member function, which
13583          deduces the type of the member as a function type. */
13584       if (TYPE_PTRMEMFUNC_P (arg))
13585         {
13586           tree method_type;
13587           tree fntype;
13588           cp_cv_quals cv_quals;
13589
13590           /* Check top-level cv qualifiers */
13591           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13592             return 1;
13593
13594           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13595                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13596             return 1;
13597
13598           /* Determine the type of the function we are unifying against. */
13599           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13600           fntype =
13601             build_function_type (TREE_TYPE (method_type),
13602                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13603
13604           /* Extract the cv-qualifiers of the member function from the
13605              implicit object parameter and place them on the function
13606              type to be restored later. */
13607           cv_quals =
13608             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13609           fntype = build_qualified_type (fntype, cv_quals);
13610           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13611         }
13612
13613       if (TREE_CODE (arg) != OFFSET_TYPE)
13614         return 1;
13615       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13616                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13617         return 1;
13618       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13619                     strict);
13620
13621     case CONST_DECL:
13622       if (DECL_TEMPLATE_PARM_P (parm))
13623         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13624       if (arg != integral_constant_value (parm))
13625         return 1;
13626       return 0;
13627
13628     case FIELD_DECL:
13629     case TEMPLATE_DECL:
13630       /* Matched cases are handled by the ARG == PARM test above.  */
13631       return 1;
13632
13633     case TYPE_ARGUMENT_PACK:
13634     case NONTYPE_ARGUMENT_PACK:
13635       {
13636         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13637         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13638         int i, len = TREE_VEC_LENGTH (packed_parms);
13639         int argslen = TREE_VEC_LENGTH (packed_args);
13640         int parm_variadic_p = 0;
13641
13642         for (i = 0; i < len; ++i)
13643           {
13644             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13645               {
13646                 if (i == len - 1)
13647                   /* We can unify against something with a trailing
13648                      parameter pack.  */
13649                   parm_variadic_p = 1;
13650                 else
13651                   /* Since there is something following the pack
13652                      expansion, we cannot unify this template argument
13653                      list.  */
13654                   return 0;
13655               }
13656           }
13657           
13658
13659         /* If we don't have enough arguments to satisfy the parameters
13660            (not counting the pack expression at the end), or we have
13661            too many arguments for a parameter list that doesn't end in
13662            a pack expression, we can't unify.  */
13663         if (argslen < (len - parm_variadic_p)
13664             || (argslen > len && !parm_variadic_p))
13665           return 1;
13666
13667         /* Unify all of the parameters that precede the (optional)
13668            pack expression.  */
13669         for (i = 0; i < len - parm_variadic_p; ++i)
13670           {
13671             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13672                        TREE_VEC_ELT (packed_args, i), strict))
13673               return 1;
13674           }
13675
13676         if (parm_variadic_p)
13677           return unify_pack_expansion (tparms, targs, 
13678                                        packed_parms, packed_args,
13679                                        strict, /*call_args_p=*/false,
13680                                        /*subr=*/false);
13681         return 0;
13682       }
13683
13684       break;
13685
13686     case TYPEOF_TYPE:
13687     case DECLTYPE_TYPE:
13688       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13689          nodes.  */
13690       return 0;
13691
13692     case ERROR_MARK:
13693       /* Unification fails if we hit an error node.  */
13694       return 1;
13695
13696     default:
13697       gcc_assert (EXPR_P (parm));
13698
13699       /* We must be looking at an expression.  This can happen with
13700          something like:
13701
13702            template <int I>
13703            void foo(S<I>, S<I + 2>);
13704
13705          This is a "nondeduced context":
13706
13707            [deduct.type]
13708
13709            The nondeduced contexts are:
13710
13711            --A type that is a template-id in which one or more of
13712              the template-arguments is an expression that references
13713              a template-parameter.
13714
13715          In these cases, we assume deduction succeeded, but don't
13716          actually infer any unifications.  */
13717
13718       if (!uses_template_parms (parm)
13719           && !template_args_equal (parm, arg))
13720         return 1;
13721       else
13722         return 0;
13723     }
13724 }
13725 \f
13726 /* Note that DECL can be defined in this translation unit, if
13727    required.  */
13728
13729 static void
13730 mark_definable (tree decl)
13731 {
13732   tree clone;
13733   DECL_NOT_REALLY_EXTERN (decl) = 1;
13734   FOR_EACH_CLONE (clone, decl)
13735     DECL_NOT_REALLY_EXTERN (clone) = 1;
13736 }
13737
13738 /* Called if RESULT is explicitly instantiated, or is a member of an
13739    explicitly instantiated class.  */
13740
13741 void
13742 mark_decl_instantiated (tree result, int extern_p)
13743 {
13744   SET_DECL_EXPLICIT_INSTANTIATION (result);
13745
13746   /* If this entity has already been written out, it's too late to
13747      make any modifications.  */
13748   if (TREE_ASM_WRITTEN (result))
13749     return;
13750
13751   if (TREE_CODE (result) != FUNCTION_DECL)
13752     /* The TREE_PUBLIC flag for function declarations will have been
13753        set correctly by tsubst.  */
13754     TREE_PUBLIC (result) = 1;
13755
13756   /* This might have been set by an earlier implicit instantiation.  */
13757   DECL_COMDAT (result) = 0;
13758
13759   if (extern_p)
13760     DECL_NOT_REALLY_EXTERN (result) = 0;
13761   else
13762     {
13763       mark_definable (result);
13764       /* Always make artificials weak.  */
13765       if (DECL_ARTIFICIAL (result) && flag_weak)
13766         comdat_linkage (result);
13767       /* For WIN32 we also want to put explicit instantiations in
13768          linkonce sections.  */
13769       else if (TREE_PUBLIC (result))
13770         maybe_make_one_only (result);
13771     }
13772
13773   /* If EXTERN_P, then this function will not be emitted -- unless
13774      followed by an explicit instantiation, at which point its linkage
13775      will be adjusted.  If !EXTERN_P, then this function will be
13776      emitted here.  In neither circumstance do we want
13777      import_export_decl to adjust the linkage.  */
13778   DECL_INTERFACE_KNOWN (result) = 1;
13779 }
13780
13781 /* Given two function templates PAT1 and PAT2, return:
13782
13783    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13784    -1 if PAT2 is more specialized than PAT1.
13785    0 if neither is more specialized.
13786
13787    LEN indicates the number of parameters we should consider
13788    (defaulted parameters should not be considered).
13789
13790    The 1998 std underspecified function template partial ordering, and
13791    DR214 addresses the issue.  We take pairs of arguments, one from
13792    each of the templates, and deduce them against each other.  One of
13793    the templates will be more specialized if all the *other*
13794    template's arguments deduce against its arguments and at least one
13795    of its arguments *does* *not* deduce against the other template's
13796    corresponding argument.  Deduction is done as for class templates.
13797    The arguments used in deduction have reference and top level cv
13798    qualifiers removed.  Iff both arguments were originally reference
13799    types *and* deduction succeeds in both directions, the template
13800    with the more cv-qualified argument wins for that pairing (if
13801    neither is more cv-qualified, they both are equal).  Unlike regular
13802    deduction, after all the arguments have been deduced in this way,
13803    we do *not* verify the deduced template argument values can be
13804    substituted into non-deduced contexts, nor do we have to verify
13805    that all template arguments have been deduced.  */
13806
13807 int
13808 more_specialized_fn (tree pat1, tree pat2, int len)
13809 {
13810   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13811   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13812   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13813   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13814   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13815   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13816   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13817   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13818   int better1 = 0;
13819   int better2 = 0;
13820
13821   /* Remove the this parameter from non-static member functions.  If
13822      one is a non-static member function and the other is not a static
13823      member function, remove the first parameter from that function
13824      also.  This situation occurs for operator functions where we
13825      locate both a member function (with this pointer) and non-member
13826      operator (with explicit first operand).  */
13827   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13828     {
13829       len--; /* LEN is the number of significant arguments for DECL1 */
13830       args1 = TREE_CHAIN (args1);
13831       if (!DECL_STATIC_FUNCTION_P (decl2))
13832         args2 = TREE_CHAIN (args2);
13833     }
13834   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13835     {
13836       args2 = TREE_CHAIN (args2);
13837       if (!DECL_STATIC_FUNCTION_P (decl1))
13838         {
13839           len--;
13840           args1 = TREE_CHAIN (args1);
13841         }
13842     }
13843
13844   /* If only one is a conversion operator, they are unordered.  */
13845   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13846     return 0;
13847
13848   /* Consider the return type for a conversion function */
13849   if (DECL_CONV_FN_P (decl1))
13850     {
13851       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13852       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13853       len++;
13854     }
13855
13856   processing_template_decl++;
13857
13858   while (len--
13859          /* Stop when an ellipsis is seen.  */
13860          && args1 != NULL_TREE && args2 != NULL_TREE)
13861     {
13862       tree arg1 = TREE_VALUE (args1);
13863       tree arg2 = TREE_VALUE (args2);
13864       int deduce1, deduce2;
13865       int quals1 = -1;
13866       int quals2 = -1;
13867
13868       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13869           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13870         {
13871           /* When both arguments are pack expansions, we need only
13872              unify the patterns themselves.  */
13873           arg1 = PACK_EXPANSION_PATTERN (arg1);
13874           arg2 = PACK_EXPANSION_PATTERN (arg2);
13875
13876           /* This is the last comparison we need to do.  */
13877           len = 0;
13878         }
13879
13880       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13881         {
13882           arg1 = TREE_TYPE (arg1);
13883           quals1 = cp_type_quals (arg1);
13884         }
13885
13886       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13887         {
13888           arg2 = TREE_TYPE (arg2);
13889           quals2 = cp_type_quals (arg2);
13890         }
13891
13892       if ((quals1 < 0) != (quals2 < 0))
13893         {
13894           /* Only of the args is a reference, see if we should apply
13895              array/function pointer decay to it.  This is not part of
13896              DR214, but is, IMHO, consistent with the deduction rules
13897              for the function call itself, and with our earlier
13898              implementation of the underspecified partial ordering
13899              rules.  (nathan).  */
13900           if (quals1 >= 0)
13901             {
13902               switch (TREE_CODE (arg1))
13903                 {
13904                 case ARRAY_TYPE:
13905                   arg1 = TREE_TYPE (arg1);
13906                   /* FALLTHROUGH. */
13907                 case FUNCTION_TYPE:
13908                   arg1 = build_pointer_type (arg1);
13909                   break;
13910
13911                 default:
13912                   break;
13913                 }
13914             }
13915           else
13916             {
13917               switch (TREE_CODE (arg2))
13918                 {
13919                 case ARRAY_TYPE:
13920                   arg2 = TREE_TYPE (arg2);
13921                   /* FALLTHROUGH. */
13922                 case FUNCTION_TYPE:
13923                   arg2 = build_pointer_type (arg2);
13924                   break;
13925
13926                 default:
13927                   break;
13928                 }
13929             }
13930         }
13931
13932       arg1 = TYPE_MAIN_VARIANT (arg1);
13933       arg2 = TYPE_MAIN_VARIANT (arg2);
13934
13935       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13936         {
13937           int i, len2 = list_length (args2);
13938           tree parmvec = make_tree_vec (1);
13939           tree argvec = make_tree_vec (len2);
13940           tree ta = args2;
13941
13942           /* Setup the parameter vector, which contains only ARG1.  */
13943           TREE_VEC_ELT (parmvec, 0) = arg1;
13944
13945           /* Setup the argument vector, which contains the remaining
13946              arguments.  */
13947           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13948             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13949
13950           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13951                                            argvec, UNIFY_ALLOW_NONE, 
13952                                            /*call_args_p=*/false, 
13953                                            /*subr=*/0);
13954
13955           /* We cannot deduce in the other direction, because ARG1 is
13956              a pack expansion but ARG2 is not.  */
13957           deduce2 = 0;
13958         }
13959       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13960         {
13961           int i, len1 = list_length (args1);
13962           tree parmvec = make_tree_vec (1);
13963           tree argvec = make_tree_vec (len1);
13964           tree ta = args1;
13965
13966           /* Setup the parameter vector, which contains only ARG1.  */
13967           TREE_VEC_ELT (parmvec, 0) = arg2;
13968
13969           /* Setup the argument vector, which contains the remaining
13970              arguments.  */
13971           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13972             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13973
13974           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13975                                            argvec, UNIFY_ALLOW_NONE, 
13976                                            /*call_args_p=*/false, 
13977                                            /*subr=*/0);
13978
13979           /* We cannot deduce in the other direction, because ARG2 is
13980              a pack expansion but ARG1 is not.*/
13981           deduce1 = 0;
13982         }
13983
13984       else
13985         {
13986           /* The normal case, where neither argument is a pack
13987              expansion.  */
13988           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13989           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13990         }
13991
13992       if (!deduce1)
13993         better2 = -1;
13994       if (!deduce2)
13995         better1 = -1;
13996       if (better1 < 0 && better2 < 0)
13997         /* We've failed to deduce something in either direction.
13998            These must be unordered.  */
13999         break;
14000
14001       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
14002         {
14003           /* Deduces in both directions, see if quals can
14004              disambiguate.  Pretend the worse one failed to deduce. */
14005           if ((quals1 & quals2) == quals2)
14006             deduce1 = 0;
14007           if ((quals1 & quals2) == quals1)
14008             deduce2 = 0;
14009         }
14010       if (deduce1 && !deduce2 && !better2)
14011         better2 = 1;
14012       if (deduce2 && !deduce1 && !better1)
14013         better1 = 1;
14014
14015       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
14016           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
14017         /* We have already processed all of the arguments in our
14018            handing of the pack expansion type.  */
14019         len = 0;
14020
14021       args1 = TREE_CHAIN (args1);
14022       args2 = TREE_CHAIN (args2);
14023     }
14024
14025   processing_template_decl--;
14026
14027   /* All things being equal, if the next argument is a pack expansion
14028      for one function but not for the other, prefer the
14029      non-variadic function.  */
14030   if ((better1 > 0) - (better2 > 0) == 0
14031       && args1 && TREE_VALUE (args1)
14032       && args2 && TREE_VALUE (args2))
14033     {
14034       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
14035         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
14036       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
14037         return 1;
14038     }
14039
14040   return (better1 > 0) - (better2 > 0);
14041 }
14042
14043 /* Determine which of two partial specializations is more specialized.
14044
14045    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
14046    to the first partial specialization.  The TREE_VALUE is the
14047    innermost set of template parameters for the partial
14048    specialization.  PAT2 is similar, but for the second template.
14049
14050    Return 1 if the first partial specialization is more specialized;
14051    -1 if the second is more specialized; 0 if neither is more
14052    specialized.
14053
14054    See [temp.class.order] for information about determining which of
14055    two templates is more specialized.  */
14056
14057 static int
14058 more_specialized_class (tree pat1, tree pat2)
14059 {
14060   tree targs;
14061   tree tmpl1, tmpl2;
14062   int winner = 0;
14063   bool any_deductions = false;
14064
14065   tmpl1 = TREE_TYPE (pat1);
14066   tmpl2 = TREE_TYPE (pat2);
14067
14068   /* Just like what happens for functions, if we are ordering between
14069      different class template specializations, we may encounter dependent
14070      types in the arguments, and we need our dependency check functions
14071      to behave correctly.  */
14072   ++processing_template_decl;
14073   targs = get_class_bindings (TREE_VALUE (pat1),
14074                               CLASSTYPE_TI_ARGS (tmpl1),
14075                               CLASSTYPE_TI_ARGS (tmpl2));
14076   if (targs)
14077     {
14078       --winner;
14079       any_deductions = true;
14080     }
14081
14082   targs = get_class_bindings (TREE_VALUE (pat2),
14083                               CLASSTYPE_TI_ARGS (tmpl2),
14084                               CLASSTYPE_TI_ARGS (tmpl1));
14085   if (targs)
14086     {
14087       ++winner;
14088       any_deductions = true;
14089     }
14090   --processing_template_decl;
14091
14092   /* In the case of a tie where at least one of the class templates
14093      has a parameter pack at the end, the template with the most
14094      non-packed parameters wins.  */
14095   if (winner == 0
14096       && any_deductions
14097       && (template_args_variadic_p (TREE_PURPOSE (pat1))
14098           || template_args_variadic_p (TREE_PURPOSE (pat2))))
14099     {
14100       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
14101       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
14102       int len1 = TREE_VEC_LENGTH (args1);
14103       int len2 = TREE_VEC_LENGTH (args2);
14104
14105       /* We don't count the pack expansion at the end.  */
14106       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
14107         --len1;
14108       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
14109         --len2;
14110
14111       if (len1 > len2)
14112         return 1;
14113       else if (len1 < len2)
14114         return -1;
14115     }
14116
14117   return winner;
14118 }
14119
14120 /* Return the template arguments that will produce the function signature
14121    DECL from the function template FN, with the explicit template
14122    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
14123    also match.  Return NULL_TREE if no satisfactory arguments could be
14124    found.  */
14125
14126 static tree
14127 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
14128 {
14129   int ntparms = DECL_NTPARMS (fn);
14130   tree targs = make_tree_vec (ntparms);
14131   tree decl_type;
14132   tree decl_arg_types;
14133
14134   /* Substitute the explicit template arguments into the type of DECL.
14135      The call to fn_type_unification will handle substitution into the
14136      FN.  */
14137   decl_type = TREE_TYPE (decl);
14138   if (explicit_args && uses_template_parms (decl_type))
14139     {
14140       tree tmpl;
14141       tree converted_args;
14142
14143       if (DECL_TEMPLATE_INFO (decl))
14144         tmpl = DECL_TI_TEMPLATE (decl);
14145       else
14146         /* We can get here for some invalid specializations.  */
14147         return NULL_TREE;
14148
14149       converted_args
14150         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
14151                                  explicit_args, NULL_TREE,
14152                                  tf_none,
14153                                  /*require_all_args=*/false,
14154                                  /*use_default_args=*/false);
14155       if (converted_args == error_mark_node)
14156         return NULL_TREE;
14157
14158       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
14159       if (decl_type == error_mark_node)
14160         return NULL_TREE;
14161     }
14162
14163   /* Never do unification on the 'this' parameter.  */
14164   decl_arg_types = skip_artificial_parms_for (decl, 
14165                                               TYPE_ARG_TYPES (decl_type));
14166
14167   if (fn_type_unification (fn, explicit_args, targs,
14168                            decl_arg_types,
14169                            (check_rettype || DECL_CONV_FN_P (fn)
14170                             ? TREE_TYPE (decl_type) : NULL_TREE),
14171                            DEDUCE_EXACT, LOOKUP_NORMAL))
14172     return NULL_TREE;
14173
14174   return targs;
14175 }
14176
14177 /* Return the innermost template arguments that, when applied to a
14178    template specialization whose innermost template parameters are
14179    TPARMS, and whose specialization arguments are PARMS, yield the
14180    ARGS.
14181
14182    For example, suppose we have:
14183
14184      template <class T, class U> struct S {};
14185      template <class T> struct S<T*, int> {};
14186
14187    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
14188    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
14189    int}.  The resulting vector will be {double}, indicating that `T'
14190    is bound to `double'.  */
14191
14192 static tree
14193 get_class_bindings (tree tparms, tree spec_args, tree args)
14194 {
14195   int i, ntparms = TREE_VEC_LENGTH (tparms);
14196   tree deduced_args;
14197   tree innermost_deduced_args;
14198
14199   innermost_deduced_args = make_tree_vec (ntparms);
14200   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14201     {
14202       deduced_args = copy_node (args);
14203       SET_TMPL_ARGS_LEVEL (deduced_args,
14204                            TMPL_ARGS_DEPTH (deduced_args),
14205                            innermost_deduced_args);
14206     }
14207   else
14208     deduced_args = innermost_deduced_args;
14209
14210   if (unify (tparms, deduced_args,
14211              INNERMOST_TEMPLATE_ARGS (spec_args),
14212              INNERMOST_TEMPLATE_ARGS (args),
14213              UNIFY_ALLOW_NONE))
14214     return NULL_TREE;
14215
14216   for (i =  0; i < ntparms; ++i)
14217     if (! TREE_VEC_ELT (innermost_deduced_args, i))
14218       return NULL_TREE;
14219
14220   /* Verify that nondeduced template arguments agree with the type
14221      obtained from argument deduction.
14222
14223      For example:
14224
14225        struct A { typedef int X; };
14226        template <class T, class U> struct C {};
14227        template <class T> struct C<T, typename T::X> {};
14228
14229      Then with the instantiation `C<A, int>', we can deduce that
14230      `T' is `A' but unify () does not check whether `typename T::X'
14231      is `int'.  */
14232   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
14233   if (spec_args == error_mark_node
14234       /* We only need to check the innermost arguments; the other
14235          arguments will always agree.  */
14236       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
14237                               INNERMOST_TEMPLATE_ARGS (args)))
14238     return NULL_TREE;
14239
14240   /* Now that we have bindings for all of the template arguments,
14241      ensure that the arguments deduced for the template template
14242      parameters have compatible template parameter lists.  See the use
14243      of template_template_parm_bindings_ok_p in fn_type_unification
14244      for more information.  */
14245   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
14246     return NULL_TREE;
14247
14248   return deduced_args;
14249 }
14250
14251 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
14252    Return the TREE_LIST node with the most specialized template, if
14253    any.  If there is no most specialized template, the error_mark_node
14254    is returned.
14255
14256    Note that this function does not look at, or modify, the
14257    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
14258    returned is one of the elements of INSTANTIATIONS, callers may
14259    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
14260    and retrieve it from the value returned.  */
14261
14262 tree
14263 most_specialized_instantiation (tree templates)
14264 {
14265   tree fn, champ;
14266
14267   ++processing_template_decl;
14268
14269   champ = templates;
14270   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
14271     {
14272       int fate = 0;
14273
14274       if (get_bindings (TREE_VALUE (champ),
14275                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14276                         NULL_TREE, /*check_ret=*/false))
14277         fate--;
14278
14279       if (get_bindings (TREE_VALUE (fn),
14280                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14281                         NULL_TREE, /*check_ret=*/false))
14282         fate++;
14283
14284       if (fate == -1)
14285         champ = fn;
14286       else if (!fate)
14287         {
14288           /* Equally specialized, move to next function.  If there
14289              is no next function, nothing's most specialized.  */
14290           fn = TREE_CHAIN (fn);
14291           champ = fn;
14292           if (!fn)
14293             break;
14294         }
14295     }
14296
14297   if (champ)
14298     /* Now verify that champ is better than everything earlier in the
14299        instantiation list.  */
14300     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
14301       if (get_bindings (TREE_VALUE (champ),
14302                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
14303                         NULL_TREE, /*check_ret=*/false)
14304           || !get_bindings (TREE_VALUE (fn),
14305                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
14306                             NULL_TREE, /*check_ret=*/false))
14307         {
14308           champ = NULL_TREE;
14309           break;
14310         }
14311
14312   processing_template_decl--;
14313
14314   if (!champ)
14315     return error_mark_node;
14316
14317   return champ;
14318 }
14319
14320 /* If DECL is a specialization of some template, return the most
14321    general such template.  Otherwise, returns NULL_TREE.
14322
14323    For example, given:
14324
14325      template <class T> struct S { template <class U> void f(U); };
14326
14327    if TMPL is `template <class U> void S<int>::f(U)' this will return
14328    the full template.  This function will not trace past partial
14329    specializations, however.  For example, given in addition:
14330
14331      template <class T> struct S<T*> { template <class U> void f(U); };
14332
14333    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14334    `template <class T> template <class U> S<T*>::f(U)'.  */
14335
14336 tree
14337 most_general_template (tree decl)
14338 {
14339   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14340      an immediate specialization.  */
14341   if (TREE_CODE (decl) == FUNCTION_DECL)
14342     {
14343       if (DECL_TEMPLATE_INFO (decl)) {
14344         decl = DECL_TI_TEMPLATE (decl);
14345
14346         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14347            template friend.  */
14348         if (TREE_CODE (decl) != TEMPLATE_DECL)
14349           return NULL_TREE;
14350       } else
14351         return NULL_TREE;
14352     }
14353
14354   /* Look for more and more general templates.  */
14355   while (DECL_TEMPLATE_INFO (decl))
14356     {
14357       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14358          (See cp-tree.h for details.)  */
14359       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14360         break;
14361
14362       if (CLASS_TYPE_P (TREE_TYPE (decl))
14363           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14364         break;
14365
14366       /* Stop if we run into an explicitly specialized class template.  */
14367       if (!DECL_NAMESPACE_SCOPE_P (decl)
14368           && DECL_CONTEXT (decl)
14369           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14370         break;
14371
14372       decl = DECL_TI_TEMPLATE (decl);
14373     }
14374
14375   return decl;
14376 }
14377
14378 /* Return the most specialized of the class template partial
14379    specializations of TMPL which can produce TYPE, a specialization of
14380    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14381    a _TYPE node corresponding to the partial specialization, while the
14382    TREE_PURPOSE is the set of template arguments that must be
14383    substituted into the TREE_TYPE in order to generate TYPE.
14384
14385    If the choice of partial specialization is ambiguous, a diagnostic
14386    is issued, and the error_mark_node is returned.  If there are no
14387    partial specializations of TMPL matching TYPE, then NULL_TREE is
14388    returned.  */
14389
14390 static tree
14391 most_specialized_class (tree type, tree tmpl)
14392 {
14393   tree list = NULL_TREE;
14394   tree t;
14395   tree champ;
14396   int fate;
14397   bool ambiguous_p;
14398   tree args;
14399   tree outer_args = NULL_TREE;
14400
14401   tmpl = most_general_template (tmpl);
14402   args = CLASSTYPE_TI_ARGS (type);
14403
14404   /* For determining which partial specialization to use, only the
14405      innermost args are interesting.  */
14406   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14407     {
14408       outer_args = strip_innermost_template_args (args, 1);
14409       args = INNERMOST_TEMPLATE_ARGS (args);
14410     }
14411
14412   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14413     {
14414       tree partial_spec_args;
14415       tree spec_args;
14416       tree parms = TREE_VALUE (t);
14417
14418       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14419       if (outer_args)
14420         {
14421           int i;
14422
14423           ++processing_template_decl;
14424
14425           /* Discard the outer levels of args, and then substitute in the
14426              template args from the enclosing class.  */
14427           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14428           partial_spec_args = tsubst_template_args
14429             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14430
14431           /* PARMS already refers to just the innermost parms, but the
14432              template parms in partial_spec_args had their levels lowered
14433              by tsubst, so we need to do the same for the parm list.  We
14434              can't just tsubst the TREE_VEC itself, as tsubst wants to
14435              treat a TREE_VEC as an argument vector.  */
14436           parms = copy_node (parms);
14437           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14438             TREE_VEC_ELT (parms, i) =
14439               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14440
14441           --processing_template_decl;
14442         }
14443       spec_args = get_class_bindings (parms,
14444                                       partial_spec_args,
14445                                       args);
14446       if (spec_args)
14447         {
14448           if (outer_args)
14449             spec_args = add_to_template_args (outer_args, spec_args);
14450           list = tree_cons (spec_args, TREE_VALUE (t), list);
14451           TREE_TYPE (list) = TREE_TYPE (t);
14452         }
14453     }
14454
14455   if (! list)
14456     return NULL_TREE;
14457
14458   ambiguous_p = false;
14459   t = list;
14460   champ = t;
14461   t = TREE_CHAIN (t);
14462   for (; t; t = TREE_CHAIN (t))
14463     {
14464       fate = more_specialized_class (champ, t);
14465       if (fate == 1)
14466         ;
14467       else
14468         {
14469           if (fate == 0)
14470             {
14471               t = TREE_CHAIN (t);
14472               if (! t)
14473                 {
14474                   ambiguous_p = true;
14475                   break;
14476                 }
14477             }
14478           champ = t;
14479         }
14480     }
14481
14482   if (!ambiguous_p)
14483     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14484       {
14485         fate = more_specialized_class (champ, t);
14486         if (fate != 1)
14487           {
14488             ambiguous_p = true;
14489             break;
14490           }
14491       }
14492
14493   if (ambiguous_p)
14494     {
14495       const char *str = "candidates are:";
14496       error ("ambiguous class template instantiation for %q#T", type);
14497       for (t = list; t; t = TREE_CHAIN (t))
14498         {
14499           error ("%s %+#T", str, TREE_TYPE (t));
14500           str = "               ";
14501         }
14502       return error_mark_node;
14503     }
14504
14505   return champ;
14506 }
14507
14508 /* Explicitly instantiate DECL.  */
14509
14510 void
14511 do_decl_instantiation (tree decl, tree storage)
14512 {
14513   tree result = NULL_TREE;
14514   int extern_p = 0;
14515
14516   if (!decl || decl == error_mark_node)
14517     /* An error occurred, for which grokdeclarator has already issued
14518        an appropriate message.  */
14519     return;
14520   else if (! DECL_LANG_SPECIFIC (decl))
14521     {
14522       error ("explicit instantiation of non-template %q#D", decl);
14523       return;
14524     }
14525   else if (TREE_CODE (decl) == VAR_DECL)
14526     {
14527       /* There is an asymmetry here in the way VAR_DECLs and
14528          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14529          the latter, the DECL we get back will be marked as a
14530          template instantiation, and the appropriate
14531          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14532          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14533          should handle VAR_DECLs as it currently handles
14534          FUNCTION_DECLs.  */
14535       if (!DECL_CLASS_SCOPE_P (decl))
14536         {
14537           error ("%qD is not a static data member of a class template", decl);
14538           return;
14539         }
14540       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14541       if (!result || TREE_CODE (result) != VAR_DECL)
14542         {
14543           error ("no matching template for %qD found", decl);
14544           return;
14545         }
14546       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14547         {
14548           error ("type %qT for explicit instantiation %qD does not match "
14549                  "declared type %qT", TREE_TYPE (result), decl,
14550                  TREE_TYPE (decl));
14551           return;
14552         }
14553     }
14554   else if (TREE_CODE (decl) != FUNCTION_DECL)
14555     {
14556       error ("explicit instantiation of %q#D", decl);
14557       return;
14558     }
14559   else
14560     result = decl;
14561
14562   /* Check for various error cases.  Note that if the explicit
14563      instantiation is valid the RESULT will currently be marked as an
14564      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14565      until we get here.  */
14566
14567   if (DECL_TEMPLATE_SPECIALIZATION (result))
14568     {
14569       /* DR 259 [temp.spec].
14570
14571          Both an explicit instantiation and a declaration of an explicit
14572          specialization shall not appear in a program unless the explicit
14573          instantiation follows a declaration of the explicit specialization.
14574
14575          For a given set of template parameters, if an explicit
14576          instantiation of a template appears after a declaration of an
14577          explicit specialization for that template, the explicit
14578          instantiation has no effect.  */
14579       return;
14580     }
14581   else if (DECL_EXPLICIT_INSTANTIATION (result))
14582     {
14583       /* [temp.spec]
14584
14585          No program shall explicitly instantiate any template more
14586          than once.
14587
14588          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14589          the first instantiation was `extern' and the second is not,
14590          and EXTERN_P for the opposite case.  */
14591       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14592         permerror ("duplicate explicit instantiation of %q#D", result);
14593       /* If an "extern" explicit instantiation follows an ordinary
14594          explicit instantiation, the template is instantiated.  */
14595       if (extern_p)
14596         return;
14597     }
14598   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14599     {
14600       error ("no matching template for %qD found", result);
14601       return;
14602     }
14603   else if (!DECL_TEMPLATE_INFO (result))
14604     {
14605       permerror ("explicit instantiation of non-template %q#D", result);
14606       return;
14607     }
14608
14609   if (storage == NULL_TREE)
14610     ;
14611   else if (storage == ridpointers[(int) RID_EXTERN])
14612     {
14613       if (pedantic && !in_system_header && (cxx_dialect == cxx98))
14614         pedwarn ("ISO C++ 1998 forbids the use of %<extern%> on explicit "
14615                  "instantiations");
14616       extern_p = 1;
14617     }
14618   else
14619     error ("storage class %qD applied to template instantiation", storage);
14620
14621   check_explicit_instantiation_namespace (result);
14622   mark_decl_instantiated (result, extern_p);
14623   if (! extern_p)
14624     instantiate_decl (result, /*defer_ok=*/1,
14625                       /*expl_inst_class_mem_p=*/false);
14626 }
14627
14628 static void
14629 mark_class_instantiated (tree t, int extern_p)
14630 {
14631   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14632   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14633   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14634   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14635   if (! extern_p)
14636     {
14637       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14638       rest_of_type_compilation (t, 1);
14639     }
14640 }
14641
14642 /* Called from do_type_instantiation through binding_table_foreach to
14643    do recursive instantiation for the type bound in ENTRY.  */
14644 static void
14645 bt_instantiate_type_proc (binding_entry entry, void *data)
14646 {
14647   tree storage = *(tree *) data;
14648
14649   if (MAYBE_CLASS_TYPE_P (entry->type)
14650       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14651     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14652 }
14653
14654 /* Called from do_type_instantiation to instantiate a member
14655    (a member function or a static member variable) of an
14656    explicitly instantiated class template.  */
14657 static void
14658 instantiate_class_member (tree decl, int extern_p)
14659 {
14660   mark_decl_instantiated (decl, extern_p);
14661   if (! extern_p)
14662     instantiate_decl (decl, /*defer_ok=*/1,
14663                       /*expl_inst_class_mem_p=*/true);
14664 }
14665
14666 /* Perform an explicit instantiation of template class T.  STORAGE, if
14667    non-null, is the RID for extern, inline or static.  COMPLAIN is
14668    nonzero if this is called from the parser, zero if called recursively,
14669    since the standard is unclear (as detailed below).  */
14670
14671 void
14672 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14673 {
14674   int extern_p = 0;
14675   int nomem_p = 0;
14676   int static_p = 0;
14677   int previous_instantiation_extern_p = 0;
14678
14679   if (TREE_CODE (t) == TYPE_DECL)
14680     t = TREE_TYPE (t);
14681
14682   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14683     {
14684       error ("explicit instantiation of non-template type %qT", t);
14685       return;
14686     }
14687
14688   complete_type (t);
14689
14690   if (!COMPLETE_TYPE_P (t))
14691     {
14692       if (complain & tf_error)
14693         error ("explicit instantiation of %q#T before definition of template",
14694                t);
14695       return;
14696     }
14697
14698   if (storage != NULL_TREE)
14699     {
14700       if (pedantic && !in_system_header)
14701         {
14702           if (storage == ridpointers[(int) RID_EXTERN])
14703             {
14704               if (cxx_dialect == cxx98)
14705                 pedwarn("ISO C++ 1998 forbids the use of %<extern%> on "
14706                         "explicit instantiations");
14707             }
14708           else
14709             pedwarn("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       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14923         DECL_INLINE (decl) = 1;
14924     }
14925   else if (TREE_CODE (decl) == VAR_DECL)
14926     DECL_INITIAL (decl) =
14927       tsubst_expr (DECL_INITIAL (code_pattern), args,
14928                    tf_error, DECL_TI_TEMPLATE (decl),
14929                    /*integral_constant_expression_p=*/false);
14930   else
14931     gcc_unreachable ();
14932
14933   pop_access_scope (decl);
14934 }
14935
14936 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14937    substituted to get DECL.  */
14938
14939 tree
14940 template_for_substitution (tree decl)
14941 {
14942   tree tmpl = DECL_TI_TEMPLATE (decl);
14943
14944   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14945      for the instantiation.  This is not always the most general
14946      template.  Consider, for example:
14947
14948         template <class T>
14949         struct S { template <class U> void f();
14950                    template <> void f<int>(); };
14951
14952      and an instantiation of S<double>::f<int>.  We want TD to be the
14953      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14954   while (/* An instantiation cannot have a definition, so we need a
14955             more general template.  */
14956          DECL_TEMPLATE_INSTANTIATION (tmpl)
14957            /* We must also deal with friend templates.  Given:
14958
14959                 template <class T> struct S {
14960                   template <class U> friend void f() {};
14961                 };
14962
14963               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14964               so far as the language is concerned, but that's still
14965               where we get the pattern for the instantiation from.  On
14966               other hand, if the definition comes outside the class, say:
14967
14968                 template <class T> struct S {
14969                   template <class U> friend void f();
14970                 };
14971                 template <class U> friend void f() {}
14972
14973               we don't need to look any further.  That's what the check for
14974               DECL_INITIAL is for.  */
14975           || (TREE_CODE (decl) == FUNCTION_DECL
14976               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14977               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14978     {
14979       /* The present template, TD, should not be a definition.  If it
14980          were a definition, we should be using it!  Note that we
14981          cannot restructure the loop to just keep going until we find
14982          a template with a definition, since that might go too far if
14983          a specialization was declared, but not defined.  */
14984       gcc_assert (TREE_CODE (decl) != VAR_DECL
14985                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14986
14987       /* Fetch the more general template.  */
14988       tmpl = DECL_TI_TEMPLATE (tmpl);
14989     }
14990
14991   return tmpl;
14992 }
14993
14994 /* Produce the definition of D, a _DECL generated from a template.  If
14995    DEFER_OK is nonzero, then we don't have to actually do the
14996    instantiation now; we just have to do it sometime.  Normally it is
14997    an error if this is an explicit instantiation but D is undefined.
14998    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14999    explicitly instantiated class template.  */
15000
15001 tree
15002 instantiate_decl (tree d, int defer_ok,
15003                   bool expl_inst_class_mem_p)
15004 {
15005   tree tmpl = DECL_TI_TEMPLATE (d);
15006   tree gen_args;
15007   tree args;
15008   tree td;
15009   tree code_pattern;
15010   tree spec;
15011   tree gen_tmpl;
15012   bool pattern_defined;
15013   int need_push;
15014   location_t saved_loc = input_location;
15015   bool external_p;
15016
15017   /* This function should only be used to instantiate templates for
15018      functions and static member variables.  */
15019   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
15020               || TREE_CODE (d) == VAR_DECL);
15021
15022   /* Variables are never deferred; if instantiation is required, they
15023      are instantiated right away.  That allows for better code in the
15024      case that an expression refers to the value of the variable --
15025      if the variable has a constant value the referring expression can
15026      take advantage of that fact.  */
15027   if (TREE_CODE (d) == VAR_DECL)
15028     defer_ok = 0;
15029
15030   /* Don't instantiate cloned functions.  Instead, instantiate the
15031      functions they cloned.  */
15032   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
15033     d = DECL_CLONED_FUNCTION (d);
15034
15035   if (DECL_TEMPLATE_INSTANTIATED (d))
15036     /* D has already been instantiated.  It might seem reasonable to
15037        check whether or not D is an explicit instantiation, and, if so,
15038        stop here.  But when an explicit instantiation is deferred
15039        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
15040        is set, even though we still need to do the instantiation.  */
15041     return d;
15042
15043   /* If we already have a specialization of this declaration, then
15044      there's no reason to instantiate it.  Note that
15045      retrieve_specialization gives us both instantiations and
15046      specializations, so we must explicitly check
15047      DECL_TEMPLATE_SPECIALIZATION.  */
15048   gen_tmpl = most_general_template (tmpl);
15049   gen_args = DECL_TI_ARGS (d);
15050   spec = retrieve_specialization (gen_tmpl, gen_args,
15051                                   /*class_specializations_p=*/false);
15052   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
15053     return spec;
15054
15055   /* This needs to happen before any tsubsting.  */
15056   if (! push_tinst_level (d))
15057     return d;
15058
15059   timevar_push (TV_PARSE);
15060
15061   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
15062      for the instantiation.  */
15063   td = template_for_substitution (d);
15064   code_pattern = DECL_TEMPLATE_RESULT (td);
15065
15066   /* We should never be trying to instantiate a member of a class
15067      template or partial specialization.  */
15068   gcc_assert (d != code_pattern);
15069
15070   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
15071       || DECL_TEMPLATE_SPECIALIZATION (td))
15072     /* In the case of a friend template whose definition is provided
15073        outside the class, we may have too many arguments.  Drop the
15074        ones we don't need.  The same is true for specializations.  */
15075     args = get_innermost_template_args
15076       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
15077   else
15078     args = gen_args;
15079
15080   if (TREE_CODE (d) == FUNCTION_DECL)
15081     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
15082   else
15083     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
15084
15085   /* We may be in the middle of deferred access check.  Disable it now.  */
15086   push_deferring_access_checks (dk_no_deferred);
15087
15088   /* Unless an explicit instantiation directive has already determined
15089      the linkage of D, remember that a definition is available for
15090      this entity.  */
15091   if (pattern_defined
15092       && !DECL_INTERFACE_KNOWN (d)
15093       && !DECL_NOT_REALLY_EXTERN (d))
15094     mark_definable (d);
15095
15096   input_location = DECL_SOURCE_LOCATION (d);
15097
15098   /* If D is a member of an explicitly instantiated class template,
15099      and no definition is available, treat it like an implicit
15100      instantiation.  */
15101   if (!pattern_defined && expl_inst_class_mem_p
15102       && DECL_EXPLICIT_INSTANTIATION (d))
15103     {
15104       DECL_NOT_REALLY_EXTERN (d) = 0;
15105       DECL_INTERFACE_KNOWN (d) = 0;
15106       SET_DECL_IMPLICIT_INSTANTIATION (d);
15107     }
15108
15109   if (!defer_ok)
15110     {
15111       /* Recheck the substitutions to obtain any warning messages
15112          about ignoring cv qualifiers.  */
15113       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
15114       tree type = TREE_TYPE (gen);
15115
15116       /* Make sure that we can see identifiers, and compute access
15117          correctly.  D is already the target FUNCTION_DECL with the
15118          right context.  */
15119       push_access_scope (d);
15120
15121       if (TREE_CODE (gen) == FUNCTION_DECL)
15122         {
15123           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
15124           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
15125                                           d);
15126           /* Don't simply tsubst the function type, as that will give
15127              duplicate warnings about poor parameter qualifications.
15128              The function arguments are the same as the decl_arguments
15129              without the top level cv qualifiers.  */
15130           type = TREE_TYPE (type);
15131         }
15132       tsubst (type, gen_args, tf_warning_or_error, d);
15133
15134       pop_access_scope (d);
15135     }
15136
15137   /* Check to see whether we know that this template will be
15138      instantiated in some other file, as with "extern template"
15139      extension.  */
15140   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
15141   /* In general, we do not instantiate such templates...  */
15142   if (external_p
15143       /* ... but we instantiate inline functions so that we can inline
15144          them and ... */
15145       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
15146       /* ... we instantiate static data members whose values are
15147          needed in integral constant expressions.  */
15148       && ! (TREE_CODE (d) == VAR_DECL
15149             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
15150     goto out;
15151   /* Defer all other templates, unless we have been explicitly
15152      forbidden from doing so.  */
15153   if (/* If there is no definition, we cannot instantiate the
15154          template.  */
15155       ! pattern_defined
15156       /* If it's OK to postpone instantiation, do so.  */
15157       || defer_ok
15158       /* If this is a static data member that will be defined
15159          elsewhere, we don't want to instantiate the entire data
15160          member, but we do want to instantiate the initializer so that
15161          we can substitute that elsewhere.  */
15162       || (external_p && TREE_CODE (d) == VAR_DECL))
15163     {
15164       /* The definition of the static data member is now required so
15165          we must substitute the initializer.  */
15166       if (TREE_CODE (d) == VAR_DECL
15167           && !DECL_INITIAL (d)
15168           && DECL_INITIAL (code_pattern))
15169         {
15170           tree ns;
15171           tree init;
15172
15173           ns = decl_namespace_context (d);
15174           push_nested_namespace (ns);
15175           push_nested_class (DECL_CONTEXT (d));
15176           init = tsubst_expr (DECL_INITIAL (code_pattern),
15177                               args,
15178                               tf_warning_or_error, NULL_TREE,
15179                               /*integral_constant_expression_p=*/false);
15180           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
15181                           /*asmspec_tree=*/NULL_TREE,
15182                           LOOKUP_ONLYCONVERTING);
15183           pop_nested_class ();
15184           pop_nested_namespace (ns);
15185         }
15186
15187       /* We restore the source position here because it's used by
15188          add_pending_template.  */
15189       input_location = saved_loc;
15190
15191       if (at_eof && !pattern_defined
15192           && DECL_EXPLICIT_INSTANTIATION (d))
15193         /* [temp.explicit]
15194
15195            The definition of a non-exported function template, a
15196            non-exported member function template, or a non-exported
15197            member function or static data member of a class template
15198            shall be present in every translation unit in which it is
15199            explicitly instantiated.  */
15200         permerror
15201           ("explicit instantiation of %qD but no definition available", d);
15202
15203       /* ??? Historically, we have instantiated inline functions, even
15204          when marked as "extern template".  */
15205       if (!(external_p && TREE_CODE (d) == VAR_DECL))
15206         add_pending_template (d);
15207       goto out;
15208     }
15209   /* Tell the repository that D is available in this translation unit
15210      -- and see if it is supposed to be instantiated here.  */
15211   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
15212     {
15213       /* In a PCH file, despite the fact that the repository hasn't
15214          requested instantiation in the PCH it is still possible that
15215          an instantiation will be required in a file that includes the
15216          PCH.  */
15217       if (pch_file)
15218         add_pending_template (d);
15219       /* Instantiate inline functions so that the inliner can do its
15220          job, even though we'll not be emitting a copy of this
15221          function.  */
15222       if (!(TREE_CODE (d) == FUNCTION_DECL
15223             && flag_inline_trees
15224             && DECL_DECLARED_INLINE_P (d)))
15225         goto out;
15226     }
15227
15228   need_push = !cfun || !global_bindings_p ();
15229   if (need_push)
15230     push_to_top_level ();
15231
15232   /* Mark D as instantiated so that recursive calls to
15233      instantiate_decl do not try to instantiate it again.  */
15234   DECL_TEMPLATE_INSTANTIATED (d) = 1;
15235
15236   /* Regenerate the declaration in case the template has been modified
15237      by a subsequent redeclaration.  */
15238   regenerate_decl_from_template (d, td);
15239
15240   /* We already set the file and line above.  Reset them now in case
15241      they changed as a result of calling regenerate_decl_from_template.  */
15242   input_location = DECL_SOURCE_LOCATION (d);
15243
15244   if (TREE_CODE (d) == VAR_DECL)
15245     {
15246       tree init;
15247
15248       /* Clear out DECL_RTL; whatever was there before may not be right
15249          since we've reset the type of the declaration.  */
15250       SET_DECL_RTL (d, NULL_RTX);
15251       DECL_IN_AGGR_P (d) = 0;
15252
15253       /* The initializer is placed in DECL_INITIAL by
15254          regenerate_decl_from_template.  Pull it out so that
15255          finish_decl can process it.  */
15256       init = DECL_INITIAL (d);
15257       DECL_INITIAL (d) = NULL_TREE;
15258       DECL_INITIALIZED_P (d) = 0;
15259
15260       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
15261          initializer.  That function will defer actual emission until
15262          we have a chance to determine linkage.  */
15263       DECL_EXTERNAL (d) = 0;
15264
15265       /* Enter the scope of D so that access-checking works correctly.  */
15266       push_nested_class (DECL_CONTEXT (d));
15267       finish_decl (d, init, NULL_TREE);
15268       pop_nested_class ();
15269     }
15270   else if (TREE_CODE (d) == FUNCTION_DECL)
15271     {
15272       htab_t saved_local_specializations;
15273       tree subst_decl;
15274       tree tmpl_parm;
15275       tree spec_parm;
15276
15277       /* Save away the current list, in case we are instantiating one
15278          template from within the body of another.  */
15279       saved_local_specializations = local_specializations;
15280
15281       /* Set up the list of local specializations.  */
15282       local_specializations = htab_create (37,
15283                                            hash_local_specialization,
15284                                            eq_local_specializations,
15285                                            NULL);
15286
15287       /* Set up context.  */
15288       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
15289
15290       /* Create substitution entries for the parameters.  */
15291       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
15292       tmpl_parm = DECL_ARGUMENTS (subst_decl);
15293       spec_parm = DECL_ARGUMENTS (d);
15294       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
15295         {
15296           register_local_specialization (spec_parm, tmpl_parm);
15297           spec_parm = skip_artificial_parms_for (d, spec_parm);
15298           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
15299         }
15300       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15301         {
15302           register_local_specialization (spec_parm, tmpl_parm);
15303           tmpl_parm = TREE_CHAIN (tmpl_parm);
15304           spec_parm = TREE_CHAIN (spec_parm);
15305         }
15306       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
15307         {
15308           /* Collect all of the extra "packed" parameters into an
15309              argument pack.  */
15310           tree parmvec;
15311           tree parmtypevec;
15312           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
15313           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
15314           int i, len = 0;
15315           tree t;
15316           
15317           /* Count how many parameters remain.  */
15318           for (t = spec_parm; t; t = TREE_CHAIN (t))
15319             len++;
15320
15321           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
15322           parmvec = make_tree_vec (len);
15323           parmtypevec = make_tree_vec (len);
15324           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
15325             {
15326               TREE_VEC_ELT (parmvec, i) = spec_parm;
15327               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
15328             }
15329
15330           /* Build the argument packs.  */
15331           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
15332           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
15333           TREE_TYPE (argpack) = argtypepack;
15334           
15335           /* Register the (value) argument pack as a specialization of
15336              TMPL_PARM, then move on.  */
15337           register_local_specialization (argpack, tmpl_parm);
15338           tmpl_parm = TREE_CHAIN (tmpl_parm);
15339         }
15340       gcc_assert (!spec_parm);
15341
15342       /* Substitute into the body of the function.  */
15343       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15344                    tf_warning_or_error, tmpl,
15345                    /*integral_constant_expression_p=*/false);
15346
15347       /* Set the current input_location to the end of the function
15348          so that finish_function knows where we are.  */
15349       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15350
15351       /* We don't need the local specializations any more.  */
15352       htab_delete (local_specializations);
15353       local_specializations = saved_local_specializations;
15354
15355       /* Finish the function.  */
15356       d = finish_function (0);
15357       expand_or_defer_fn (d);
15358     }
15359
15360   /* We're not deferring instantiation any more.  */
15361   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15362
15363   if (need_push)
15364     pop_from_top_level ();
15365
15366 out:
15367   input_location = saved_loc;
15368   pop_deferring_access_checks ();
15369   pop_tinst_level ();
15370
15371   timevar_pop (TV_PARSE);
15372
15373   return d;
15374 }
15375
15376 /* Run through the list of templates that we wish we could
15377    instantiate, and instantiate any we can.  RETRIES is the
15378    number of times we retry pending template instantiation.  */
15379
15380 void
15381 instantiate_pending_templates (int retries)
15382 {
15383   int reconsider;
15384   location_t saved_loc = input_location;
15385
15386   /* Instantiating templates may trigger vtable generation.  This in turn
15387      may require further template instantiations.  We place a limit here
15388      to avoid infinite loop.  */
15389   if (pending_templates && retries >= max_tinst_depth)
15390     {
15391       tree decl = pending_templates->tinst->decl;
15392
15393       error ("template instantiation depth exceeds maximum of %d"
15394              " instantiating %q+D, possibly from virtual table generation"
15395              " (use -ftemplate-depth-NN to increase the maximum)",
15396              max_tinst_depth, decl);
15397       if (TREE_CODE (decl) == FUNCTION_DECL)
15398         /* Pretend that we defined it.  */
15399         DECL_INITIAL (decl) = error_mark_node;
15400       return;
15401     }
15402
15403   do
15404     {
15405       struct pending_template **t = &pending_templates;
15406       struct pending_template *last = NULL;
15407       reconsider = 0;
15408       while (*t)
15409         {
15410           tree instantiation = reopen_tinst_level ((*t)->tinst);
15411           bool complete = false;
15412
15413           if (TYPE_P (instantiation))
15414             {
15415               tree fn;
15416
15417               if (!COMPLETE_TYPE_P (instantiation))
15418                 {
15419                   instantiate_class_template (instantiation);
15420                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15421                     for (fn = TYPE_METHODS (instantiation);
15422                          fn;
15423                          fn = TREE_CHAIN (fn))
15424                       if (! DECL_ARTIFICIAL (fn))
15425                         instantiate_decl (fn,
15426                                           /*defer_ok=*/0,
15427                                           /*expl_inst_class_mem_p=*/false);
15428                   if (COMPLETE_TYPE_P (instantiation))
15429                     reconsider = 1;
15430                 }
15431
15432               complete = COMPLETE_TYPE_P (instantiation);
15433             }
15434           else
15435             {
15436               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15437                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15438                 {
15439                   instantiation
15440                     = instantiate_decl (instantiation,
15441                                         /*defer_ok=*/0,
15442                                         /*expl_inst_class_mem_p=*/false);
15443                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15444                     reconsider = 1;
15445                 }
15446
15447               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15448                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15449             }
15450
15451           if (complete)
15452             /* If INSTANTIATION has been instantiated, then we don't
15453                need to consider it again in the future.  */
15454             *t = (*t)->next;
15455           else
15456             {
15457               last = *t;
15458               t = &(*t)->next;
15459             }
15460           tinst_depth = 0;
15461           current_tinst_level = NULL;
15462         }
15463       last_pending_template = last;
15464     }
15465   while (reconsider);
15466
15467   input_location = saved_loc;
15468 }
15469
15470 /* Substitute ARGVEC into T, which is a list of initializers for
15471    either base class or a non-static data member.  The TREE_PURPOSEs
15472    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15473    instantiate_decl.  */
15474
15475 static tree
15476 tsubst_initializer_list (tree t, tree argvec)
15477 {
15478   tree inits = NULL_TREE;
15479
15480   for (; t; t = TREE_CHAIN (t))
15481     {
15482       tree decl;
15483       tree init;
15484       tree expanded_bases = NULL_TREE;
15485       tree expanded_arguments = NULL_TREE;
15486       int i, len = 1;
15487
15488       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15489         {
15490           tree expr;
15491           tree arg;
15492
15493           /* Expand the base class expansion type into separate base
15494              classes.  */
15495           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15496                                                  tf_warning_or_error,
15497                                                  NULL_TREE);
15498           if (expanded_bases == error_mark_node)
15499             continue;
15500           
15501           /* We'll be building separate TREE_LISTs of arguments for
15502              each base.  */
15503           len = TREE_VEC_LENGTH (expanded_bases);
15504           expanded_arguments = make_tree_vec (len);
15505           for (i = 0; i < len; i++)
15506             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15507
15508           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15509              expand each argument in the TREE_VALUE of t.  */
15510           expr = make_node (EXPR_PACK_EXPANSION);
15511           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15512             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15513
15514           if (TREE_VALUE (t) == void_type_node)
15515             /* VOID_TYPE_NODE is used to indicate
15516                value-initialization.  */
15517             {
15518               for (i = 0; i < len; i++)
15519                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
15520             }
15521           else
15522             {
15523               /* Substitute parameter packs into each argument in the
15524                  TREE_LIST.  */
15525               in_base_initializer = 1;
15526               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15527                 {
15528                   tree expanded_exprs;
15529
15530                   /* Expand the argument.  */
15531                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15532                   expanded_exprs 
15533                     = tsubst_pack_expansion (expr, argvec,
15534                                              tf_warning_or_error,
15535                                              NULL_TREE);
15536                   if (expanded_exprs == error_mark_node)
15537                     continue;
15538
15539                   /* Prepend each of the expanded expressions to the
15540                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15541                   for (i = 0; i < len; i++)
15542                     {
15543                       TREE_VEC_ELT (expanded_arguments, i) = 
15544                         tree_cons (NULL_TREE, 
15545                                    TREE_VEC_ELT (expanded_exprs, i),
15546                                    TREE_VEC_ELT (expanded_arguments, i));
15547                     }
15548                 }
15549               in_base_initializer = 0;
15550
15551               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15552                  since we built them backwards.  */
15553               for (i = 0; i < len; i++)
15554                 {
15555                   TREE_VEC_ELT (expanded_arguments, i) = 
15556                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
15557                 }
15558             }
15559         }
15560
15561       for (i = 0; i < len; ++i)
15562         {
15563           if (expanded_bases)
15564             {
15565               decl = TREE_VEC_ELT (expanded_bases, i);
15566               decl = expand_member_init (decl);
15567               init = TREE_VEC_ELT (expanded_arguments, i);
15568             }
15569           else
15570             {
15571               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15572                                   tf_warning_or_error, NULL_TREE);
15573
15574               decl = expand_member_init (decl);
15575               if (decl && !DECL_P (decl))
15576                 in_base_initializer = 1;
15577
15578               init = tsubst_expr (TREE_VALUE (t), argvec, 
15579                                   tf_warning_or_error, NULL_TREE,
15580                                   /*integral_constant_expression_p=*/false);
15581               in_base_initializer = 0;
15582             }
15583
15584           if (decl)
15585             {
15586               init = build_tree_list (decl, init);
15587               TREE_CHAIN (init) = inits;
15588               inits = init;
15589             }
15590         }
15591     }
15592   return inits;
15593 }
15594
15595 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15596
15597 static void
15598 set_current_access_from_decl (tree decl)
15599 {
15600   if (TREE_PRIVATE (decl))
15601     current_access_specifier = access_private_node;
15602   else if (TREE_PROTECTED (decl))
15603     current_access_specifier = access_protected_node;
15604   else
15605     current_access_specifier = access_public_node;
15606 }
15607
15608 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15609    is the instantiation (which should have been created with
15610    start_enum) and ARGS are the template arguments to use.  */
15611
15612 static void
15613 tsubst_enum (tree tag, tree newtag, tree args)
15614 {
15615   tree e;
15616
15617   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15618     {
15619       tree value;
15620       tree decl;
15621
15622       decl = TREE_VALUE (e);
15623       /* Note that in a template enum, the TREE_VALUE is the
15624          CONST_DECL, not the corresponding INTEGER_CST.  */
15625       value = tsubst_expr (DECL_INITIAL (decl),
15626                            args, tf_warning_or_error, NULL_TREE,
15627                            /*integral_constant_expression_p=*/true);
15628
15629       /* Give this enumeration constant the correct access.  */
15630       set_current_access_from_decl (decl);
15631
15632       /* Actually build the enumerator itself.  */
15633       build_enumerator (DECL_NAME (decl), value, newtag);
15634     }
15635
15636   finish_enum (newtag);
15637   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15638     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15639 }
15640
15641 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15642    its type -- but without substituting the innermost set of template
15643    arguments.  So, innermost set of template parameters will appear in
15644    the type.  */
15645
15646 tree
15647 get_mostly_instantiated_function_type (tree decl)
15648 {
15649   tree fn_type;
15650   tree tmpl;
15651   tree targs;
15652   tree tparms;
15653   int parm_depth;
15654
15655   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15656   targs = DECL_TI_ARGS (decl);
15657   tparms = DECL_TEMPLATE_PARMS (tmpl);
15658   parm_depth = TMPL_PARMS_DEPTH (tparms);
15659
15660   /* There should be as many levels of arguments as there are levels
15661      of parameters.  */
15662   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15663
15664   fn_type = TREE_TYPE (tmpl);
15665
15666   if (parm_depth == 1)
15667     /* No substitution is necessary.  */
15668     ;
15669   else
15670     {
15671       int i, save_access_control;
15672       tree partial_args;
15673
15674       /* Replace the innermost level of the TARGS with NULL_TREEs to
15675          let tsubst know not to substitute for those parameters.  */
15676       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15677       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15678         SET_TMPL_ARGS_LEVEL (partial_args, i,
15679                              TMPL_ARGS_LEVEL (targs, i));
15680       SET_TMPL_ARGS_LEVEL (partial_args,
15681                            TMPL_ARGS_DEPTH (targs),
15682                            make_tree_vec (DECL_NTPARMS (tmpl)));
15683
15684       /* Disable access control as this function is used only during
15685          name-mangling.  */
15686       save_access_control = flag_access_control;
15687       flag_access_control = 0;
15688
15689       ++processing_template_decl;
15690       /* Now, do the (partial) substitution to figure out the
15691          appropriate function type.  */
15692       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15693       --processing_template_decl;
15694
15695       /* Substitute into the template parameters to obtain the real
15696          innermost set of parameters.  This step is important if the
15697          innermost set of template parameters contains value
15698          parameters whose types depend on outer template parameters.  */
15699       TREE_VEC_LENGTH (partial_args)--;
15700       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15701
15702       flag_access_control = save_access_control;
15703     }
15704
15705   return fn_type;
15706 }
15707
15708 /* Return truthvalue if we're processing a template different from
15709    the last one involved in diagnostics.  */
15710 int
15711 problematic_instantiation_changed (void)
15712 {
15713   return last_template_error_tick != tinst_level_tick;
15714 }
15715
15716 /* Remember current template involved in diagnostics.  */
15717 void
15718 record_last_problematic_instantiation (void)
15719 {
15720   last_template_error_tick = tinst_level_tick;
15721 }
15722
15723 struct tinst_level *
15724 current_instantiation (void)
15725 {
15726   return current_tinst_level;
15727 }
15728
15729 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15730    type. Return zero for ok, nonzero for disallowed. Issue error and
15731    warning messages under control of COMPLAIN.  */
15732
15733 static int
15734 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15735 {
15736   if (INTEGRAL_TYPE_P (type))
15737     return 0;
15738   else if (POINTER_TYPE_P (type))
15739     return 0;
15740   else if (TYPE_PTR_TO_MEMBER_P (type))
15741     return 0;
15742   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15743     return 0;
15744   else if (TREE_CODE (type) == TYPENAME_TYPE)
15745     return 0;
15746
15747   if (complain & tf_error)
15748     error ("%q#T is not a valid type for a template constant parameter", type);
15749   return 1;
15750 }
15751
15752 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15753    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15754
15755 static bool
15756 dependent_type_p_r (tree type)
15757 {
15758   tree scope;
15759
15760   /* [temp.dep.type]
15761
15762      A type is dependent if it is:
15763
15764      -- a template parameter. Template template parameters are types
15765         for us (since TYPE_P holds true for them) so we handle
15766         them here.  */
15767   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15768       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15769     return true;
15770   /* -- a qualified-id with a nested-name-specifier which contains a
15771         class-name that names a dependent type or whose unqualified-id
15772         names a dependent type.  */
15773   if (TREE_CODE (type) == TYPENAME_TYPE)
15774     return true;
15775   /* -- a cv-qualified type where the cv-unqualified type is
15776         dependent.  */
15777   type = TYPE_MAIN_VARIANT (type);
15778   /* -- a compound type constructed from any dependent type.  */
15779   if (TYPE_PTR_TO_MEMBER_P (type))
15780     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15781             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15782                                            (type)));
15783   else if (TREE_CODE (type) == POINTER_TYPE
15784            || TREE_CODE (type) == REFERENCE_TYPE)
15785     return dependent_type_p (TREE_TYPE (type));
15786   else if (TREE_CODE (type) == FUNCTION_TYPE
15787            || TREE_CODE (type) == METHOD_TYPE)
15788     {
15789       tree arg_type;
15790
15791       if (dependent_type_p (TREE_TYPE (type)))
15792         return true;
15793       for (arg_type = TYPE_ARG_TYPES (type);
15794            arg_type;
15795            arg_type = TREE_CHAIN (arg_type))
15796         if (dependent_type_p (TREE_VALUE (arg_type)))
15797           return true;
15798       return false;
15799     }
15800   /* -- an array type constructed from any dependent type or whose
15801         size is specified by a constant expression that is
15802         value-dependent.  */
15803   if (TREE_CODE (type) == ARRAY_TYPE)
15804     {
15805       if (TYPE_DOMAIN (type)
15806           && dependent_type_p (TYPE_DOMAIN (type)))
15807         return true;
15808       return dependent_type_p (TREE_TYPE (type));
15809     }
15810   else if (TREE_CODE (type) == INTEGER_TYPE
15811            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15812     {
15813       /* If this is the TYPE_DOMAIN of an array type, consider it
15814          dependent.  */
15815       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15816               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15817     }
15818
15819   /* -- a template-id in which either the template name is a template
15820      parameter ...  */
15821   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15822     return true;
15823   /* ... or any of the template arguments is a dependent type or
15824         an expression that is type-dependent or value-dependent.  */
15825   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15826            && (any_dependent_template_arguments_p
15827                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15828     return true;
15829
15830   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15831      argument of the `typeof' expression is not type-dependent, then
15832      it should already been have resolved.  */
15833   if (TREE_CODE (type) == TYPEOF_TYPE
15834       || TREE_CODE (type) == DECLTYPE_TYPE)
15835     return true;
15836
15837   /* A template argument pack is dependent if any of its packed
15838      arguments are.  */
15839   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15840     {
15841       tree args = ARGUMENT_PACK_ARGS (type);
15842       int i, len = TREE_VEC_LENGTH (args);
15843       for (i = 0; i < len; ++i)
15844         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15845           return true;
15846     }
15847
15848   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15849      be template parameters.  */
15850   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15851     return true;
15852
15853   /* The standard does not specifically mention types that are local
15854      to template functions or local classes, but they should be
15855      considered dependent too.  For example:
15856
15857        template <int I> void f() {
15858          enum E { a = I };
15859          S<sizeof (E)> s;
15860        }
15861
15862      The size of `E' cannot be known until the value of `I' has been
15863      determined.  Therefore, `E' must be considered dependent.  */
15864   scope = TYPE_CONTEXT (type);
15865   if (scope && TYPE_P (scope))
15866     return dependent_type_p (scope);
15867   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15868     return type_dependent_expression_p (scope);
15869
15870   /* Other types are non-dependent.  */
15871   return false;
15872 }
15873
15874 /* Returns TRUE if TYPE is dependent, in the sense of
15875    [temp.dep.type].  */
15876
15877 bool
15878 dependent_type_p (tree type)
15879 {
15880   /* If there are no template parameters in scope, then there can't be
15881      any dependent types.  */
15882   if (!processing_template_decl)
15883     {
15884       /* If we are not processing a template, then nobody should be
15885          providing us with a dependent type.  */
15886       gcc_assert (type);
15887       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15888       return false;
15889     }
15890
15891   /* If the type is NULL, we have not computed a type for the entity
15892      in question; in that case, the type is dependent.  */
15893   if (!type)
15894     return true;
15895
15896   /* Erroneous types can be considered non-dependent.  */
15897   if (type == error_mark_node)
15898     return false;
15899
15900   /* If we have not already computed the appropriate value for TYPE,
15901      do so now.  */
15902   if (!TYPE_DEPENDENT_P_VALID (type))
15903     {
15904       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15905       TYPE_DEPENDENT_P_VALID (type) = 1;
15906     }
15907
15908   return TYPE_DEPENDENT_P (type);
15909 }
15910
15911 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15912
15913 static bool
15914 dependent_scope_ref_p (tree expression, bool criterion (tree))
15915 {
15916   tree scope;
15917   tree name;
15918
15919   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15920
15921   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15922     return true;
15923
15924   scope = TREE_OPERAND (expression, 0);
15925   name = TREE_OPERAND (expression, 1);
15926
15927   /* [temp.dep.expr]
15928
15929      An id-expression is type-dependent if it contains a
15930      nested-name-specifier that contains a class-name that names a
15931      dependent type.  */
15932   /* The suggested resolution to Core Issue 2 implies that if the
15933      qualifying type is the current class, then we must peek
15934      inside it.  */
15935   if (DECL_P (name)
15936       && currently_open_class (scope)
15937       && !criterion (name))
15938     return false;
15939   if (dependent_type_p (scope))
15940     return true;
15941
15942   return false;
15943 }
15944
15945 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15946    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15947    expression.  */
15948
15949 bool
15950 value_dependent_expression_p (tree expression)
15951 {
15952   if (!processing_template_decl)
15953     return false;
15954
15955   /* A name declared with a dependent type.  */
15956   if (DECL_P (expression) && type_dependent_expression_p (expression))
15957     return true;
15958
15959   switch (TREE_CODE (expression))
15960     {
15961     case IDENTIFIER_NODE:
15962       /* A name that has not been looked up -- must be dependent.  */
15963       return true;
15964
15965     case TEMPLATE_PARM_INDEX:
15966       /* A non-type template parm.  */
15967       return true;
15968
15969     case CONST_DECL:
15970       /* A non-type template parm.  */
15971       if (DECL_TEMPLATE_PARM_P (expression))
15972         return true;
15973       return value_dependent_expression_p (DECL_INITIAL (expression));
15974
15975     case VAR_DECL:
15976        /* A constant with integral or enumeration type and is initialized
15977           with an expression that is value-dependent.  */
15978       if (DECL_INITIAL (expression)
15979           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15980           && value_dependent_expression_p (DECL_INITIAL (expression)))
15981         return true;
15982       return false;
15983
15984     case DYNAMIC_CAST_EXPR:
15985     case STATIC_CAST_EXPR:
15986     case CONST_CAST_EXPR:
15987     case REINTERPRET_CAST_EXPR:
15988     case CAST_EXPR:
15989       /* These expressions are value-dependent if the type to which
15990          the cast occurs is dependent or the expression being casted
15991          is value-dependent.  */
15992       {
15993         tree type = TREE_TYPE (expression);
15994
15995         if (dependent_type_p (type))
15996           return true;
15997
15998         /* A functional cast has a list of operands.  */
15999         expression = TREE_OPERAND (expression, 0);
16000         if (!expression)
16001           {
16002             /* If there are no operands, it must be an expression such
16003                as "int()". This should not happen for aggregate types
16004                because it would form non-constant expressions.  */
16005             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
16006
16007             return false;
16008           }
16009
16010         if (TREE_CODE (expression) == TREE_LIST)
16011           return any_value_dependent_elements_p (expression);
16012
16013         return value_dependent_expression_p (expression);
16014       }
16015
16016     case SIZEOF_EXPR:
16017     case ALIGNOF_EXPR:
16018       /* A `sizeof' expression is value-dependent if the operand is
16019          type-dependent or is a pack expansion.  */
16020       expression = TREE_OPERAND (expression, 0);
16021       if (PACK_EXPANSION_P (expression))
16022         return true;
16023       else if (TYPE_P (expression))
16024         return dependent_type_p (expression);
16025       return type_dependent_expression_p (expression);
16026
16027     case SCOPE_REF:
16028       return dependent_scope_ref_p (expression, value_dependent_expression_p);
16029
16030     case COMPONENT_REF:
16031       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
16032               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
16033
16034     case CALL_EXPR:
16035       /* A CALL_EXPR may appear in a constant expression if it is a
16036          call to a builtin function, e.g., __builtin_constant_p.  All
16037          such calls are value-dependent.  */
16038       return true;
16039
16040     case NONTYPE_ARGUMENT_PACK:
16041       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
16042          is value-dependent.  */
16043       {
16044         tree values = ARGUMENT_PACK_ARGS (expression);
16045         int i, len = TREE_VEC_LENGTH (values);
16046         
16047         for (i = 0; i < len; ++i)
16048           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
16049             return true;
16050         
16051         return false;
16052       }
16053
16054     case TRAIT_EXPR:
16055       {
16056         tree type2 = TRAIT_EXPR_TYPE2 (expression);
16057         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
16058                 || (type2 ? dependent_type_p (type2) : false));
16059       }
16060
16061     case MODOP_EXPR:
16062       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
16063               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
16064
16065     default:
16066       /* A constant expression is value-dependent if any subexpression is
16067          value-dependent.  */
16068       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
16069         {
16070         case tcc_reference:
16071         case tcc_unary:
16072           return (value_dependent_expression_p
16073                   (TREE_OPERAND (expression, 0)));
16074
16075         case tcc_comparison:
16076         case tcc_binary:
16077           return ((value_dependent_expression_p
16078                    (TREE_OPERAND (expression, 0)))
16079                   || (value_dependent_expression_p
16080                       (TREE_OPERAND (expression, 1))));
16081
16082         case tcc_expression:
16083         case tcc_vl_exp:
16084           {
16085             int i;
16086             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
16087               /* In some cases, some of the operands may be missing.
16088                  (For example, in the case of PREDECREMENT_EXPR, the
16089                  amount to increment by may be missing.)  That doesn't
16090                  make the expression dependent.  */
16091               if (TREE_OPERAND (expression, i)
16092                   && (value_dependent_expression_p
16093                       (TREE_OPERAND (expression, i))))
16094                 return true;
16095             return false;
16096           }
16097
16098         default:
16099           break;
16100         }
16101     }
16102
16103   /* The expression is not value-dependent.  */
16104   return false;
16105 }
16106
16107 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
16108    [temp.dep.expr].  */
16109
16110 bool
16111 type_dependent_expression_p (tree expression)
16112 {
16113   if (!processing_template_decl)
16114     return false;
16115
16116   if (expression == error_mark_node)
16117     return false;
16118
16119   /* An unresolved name is always dependent.  */
16120   if (TREE_CODE (expression) == IDENTIFIER_NODE
16121       || TREE_CODE (expression) == USING_DECL)
16122     return true;
16123
16124   /* Some expression forms are never type-dependent.  */
16125   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
16126       || TREE_CODE (expression) == SIZEOF_EXPR
16127       || TREE_CODE (expression) == ALIGNOF_EXPR
16128       || TREE_CODE (expression) == TRAIT_EXPR
16129       || TREE_CODE (expression) == TYPEID_EXPR
16130       || TREE_CODE (expression) == DELETE_EXPR
16131       || TREE_CODE (expression) == VEC_DELETE_EXPR
16132       || TREE_CODE (expression) == THROW_EXPR)
16133     return false;
16134
16135   /* The types of these expressions depends only on the type to which
16136      the cast occurs.  */
16137   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
16138       || TREE_CODE (expression) == STATIC_CAST_EXPR
16139       || TREE_CODE (expression) == CONST_CAST_EXPR
16140       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
16141       || TREE_CODE (expression) == CAST_EXPR)
16142     return dependent_type_p (TREE_TYPE (expression));
16143
16144   /* The types of these expressions depends only on the type created
16145      by the expression.  */
16146   if (TREE_CODE (expression) == NEW_EXPR
16147       || TREE_CODE (expression) == VEC_NEW_EXPR)
16148     {
16149       /* For NEW_EXPR tree nodes created inside a template, either
16150          the object type itself or a TREE_LIST may appear as the
16151          operand 1.  */
16152       tree type = TREE_OPERAND (expression, 1);
16153       if (TREE_CODE (type) == TREE_LIST)
16154         /* This is an array type.  We need to check array dimensions
16155            as well.  */
16156         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
16157                || value_dependent_expression_p
16158                     (TREE_OPERAND (TREE_VALUE (type), 1));
16159       else
16160         return dependent_type_p (type);
16161     }
16162
16163   if (TREE_CODE (expression) == SCOPE_REF
16164       && dependent_scope_ref_p (expression,
16165                                 type_dependent_expression_p))
16166     return true;
16167
16168   if (TREE_CODE (expression) == FUNCTION_DECL
16169       && DECL_LANG_SPECIFIC (expression)
16170       && DECL_TEMPLATE_INFO (expression)
16171       && (any_dependent_template_arguments_p
16172           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
16173     return true;
16174
16175   if (TREE_CODE (expression) == TEMPLATE_DECL
16176       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
16177     return false;
16178
16179   if (TREE_CODE (expression) == STMT_EXPR)
16180     expression = stmt_expr_value_expr (expression);
16181
16182   if (TREE_TYPE (expression) == unknown_type_node)
16183     {
16184       if (TREE_CODE (expression) == ADDR_EXPR)
16185         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
16186       if (TREE_CODE (expression) == COMPONENT_REF
16187           || TREE_CODE (expression) == OFFSET_REF)
16188         {
16189           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
16190             return true;
16191           expression = TREE_OPERAND (expression, 1);
16192           if (TREE_CODE (expression) == IDENTIFIER_NODE)
16193             return false;
16194         }
16195       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
16196       if (TREE_CODE (expression) == SCOPE_REF)
16197         return false;
16198
16199       if (TREE_CODE (expression) == BASELINK)
16200         expression = BASELINK_FUNCTIONS (expression);
16201
16202       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
16203         {
16204           if (any_dependent_template_arguments_p
16205               (TREE_OPERAND (expression, 1)))
16206             return true;
16207           expression = TREE_OPERAND (expression, 0);
16208         }
16209       gcc_assert (TREE_CODE (expression) == OVERLOAD
16210                   || TREE_CODE (expression) == FUNCTION_DECL);
16211
16212       while (expression)
16213         {
16214           if (type_dependent_expression_p (OVL_CURRENT (expression)))
16215             return true;
16216           expression = OVL_NEXT (expression);
16217         }
16218       return false;
16219     }
16220
16221   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
16222
16223   return (dependent_type_p (TREE_TYPE (expression)));
16224 }
16225
16226 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
16227    contains a type-dependent expression.  */
16228
16229 bool
16230 any_type_dependent_arguments_p (const_tree args)
16231 {
16232   while (args)
16233     {
16234       tree arg = TREE_VALUE (args);
16235
16236       if (type_dependent_expression_p (arg))
16237         return true;
16238       args = TREE_CHAIN (args);
16239     }
16240   return false;
16241 }
16242
16243 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
16244    expressions) contains any value-dependent expressions.  */
16245
16246 bool
16247 any_value_dependent_elements_p (const_tree list)
16248 {
16249   for (; list; list = TREE_CHAIN (list))
16250     if (value_dependent_expression_p (TREE_VALUE (list)))
16251       return true;
16252
16253   return false;
16254 }
16255
16256 /* Returns TRUE if the ARG (a template argument) is dependent.  */
16257
16258 bool
16259 dependent_template_arg_p (tree arg)
16260 {
16261   if (!processing_template_decl)
16262     return false;
16263
16264   if (TREE_CODE (arg) == TEMPLATE_DECL
16265       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16266     return dependent_template_p (arg);
16267   else if (ARGUMENT_PACK_P (arg))
16268     {
16269       tree args = ARGUMENT_PACK_ARGS (arg);
16270       int i, len = TREE_VEC_LENGTH (args);
16271       for (i = 0; i < len; ++i)
16272         {
16273           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
16274             return true;
16275         }
16276
16277       return false;
16278     }
16279   else if (TYPE_P (arg))
16280     return dependent_type_p (arg);
16281   else
16282     return (type_dependent_expression_p (arg)
16283             || value_dependent_expression_p (arg));
16284 }
16285
16286 /* Returns true if ARGS (a collection of template arguments) contains
16287    any types that require structural equality testing.  */
16288
16289 bool
16290 any_template_arguments_need_structural_equality_p (tree args)
16291 {
16292   int i;
16293   int j;
16294
16295   if (!args)
16296     return false;
16297   if (args == error_mark_node)
16298     return true;
16299
16300   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16301     {
16302       tree level = TMPL_ARGS_LEVEL (args, i + 1);
16303       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16304         {
16305           tree arg = TREE_VEC_ELT (level, j);
16306           tree packed_args = NULL_TREE;
16307           int k, len = 1;
16308
16309           if (ARGUMENT_PACK_P (arg))
16310             {
16311               /* Look inside the argument pack.  */
16312               packed_args = ARGUMENT_PACK_ARGS (arg);
16313               len = TREE_VEC_LENGTH (packed_args);
16314             }
16315
16316           for (k = 0; k < len; ++k)
16317             {
16318               if (packed_args)
16319                 arg = TREE_VEC_ELT (packed_args, k);
16320
16321               if (error_operand_p (arg))
16322                 return true;
16323               else if (TREE_CODE (arg) == TEMPLATE_DECL
16324                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
16325                 continue;
16326               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
16327                 return true;
16328               else if (!TYPE_P (arg) && TREE_TYPE (arg)
16329                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
16330                 return true;
16331             }
16332         }
16333     }
16334
16335   return false;
16336 }
16337
16338 /* Returns true if ARGS (a collection of template arguments) contains
16339    any dependent arguments.  */
16340
16341 bool
16342 any_dependent_template_arguments_p (const_tree args)
16343 {
16344   int i;
16345   int j;
16346
16347   if (!args)
16348     return false;
16349   if (args == error_mark_node)
16350     return true;
16351
16352   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16353     {
16354       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16355       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16356         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16357           return true;
16358     }
16359
16360   return false;
16361 }
16362
16363 /* Returns TRUE if the template TMPL is dependent.  */
16364
16365 bool
16366 dependent_template_p (tree tmpl)
16367 {
16368   if (TREE_CODE (tmpl) == OVERLOAD)
16369     {
16370       while (tmpl)
16371         {
16372           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16373             return true;
16374           tmpl = OVL_CHAIN (tmpl);
16375         }
16376       return false;
16377     }
16378
16379   /* Template template parameters are dependent.  */
16380   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16381       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16382     return true;
16383   /* So are names that have not been looked up.  */
16384   if (TREE_CODE (tmpl) == SCOPE_REF
16385       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16386     return true;
16387   /* So are member templates of dependent classes.  */
16388   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16389     return dependent_type_p (DECL_CONTEXT (tmpl));
16390   return false;
16391 }
16392
16393 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16394
16395 bool
16396 dependent_template_id_p (tree tmpl, tree args)
16397 {
16398   return (dependent_template_p (tmpl)
16399           || any_dependent_template_arguments_p (args));
16400 }
16401
16402 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
16403    is dependent.  */
16404
16405 bool
16406 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
16407 {
16408   int i;
16409
16410   if (!processing_template_decl)
16411     return false;
16412
16413   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
16414     {
16415       tree decl = TREE_VEC_ELT (declv, i);
16416       tree init = TREE_VEC_ELT (initv, i);
16417       tree cond = TREE_VEC_ELT (condv, i);
16418       tree incr = TREE_VEC_ELT (incrv, i);
16419
16420       if (type_dependent_expression_p (decl))
16421         return true;
16422
16423       if (init && type_dependent_expression_p (init))
16424         return true;
16425
16426       if (type_dependent_expression_p (cond))
16427         return true;
16428
16429       if (COMPARISON_CLASS_P (cond)
16430           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
16431               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
16432         return true;
16433
16434       if (TREE_CODE (incr) == MODOP_EXPR)
16435         {
16436           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
16437               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
16438             return true;
16439         }
16440       else if (type_dependent_expression_p (incr))
16441         return true;
16442       else if (TREE_CODE (incr) == MODIFY_EXPR)
16443         {
16444           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
16445             return true;
16446           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
16447             {
16448               tree t = TREE_OPERAND (incr, 1);
16449               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
16450                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
16451                 return true;
16452             }
16453         }
16454     }
16455
16456   return false;
16457 }
16458
16459 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16460    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16461    no such TYPE can be found.  Note that this function peers inside
16462    uninstantiated templates and therefore should be used only in
16463    extremely limited situations.  ONLY_CURRENT_P restricts this
16464    peering to the currently open classes hierarchy (which is required
16465    when comparing types).  */
16466
16467 tree
16468 resolve_typename_type (tree type, bool only_current_p)
16469 {
16470   tree scope;
16471   tree name;
16472   tree decl;
16473   int quals;
16474   tree pushed_scope;
16475   tree result;
16476
16477   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16478
16479   scope = TYPE_CONTEXT (type);
16480   name = TYPE_IDENTIFIER (type);
16481
16482   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16483      it first before we can figure out what NAME refers to.  */
16484   if (TREE_CODE (scope) == TYPENAME_TYPE)
16485     scope = resolve_typename_type (scope, only_current_p);
16486   /* If we don't know what SCOPE refers to, then we cannot resolve the
16487      TYPENAME_TYPE.  */
16488   if (TREE_CODE (scope) == TYPENAME_TYPE)
16489     return type;
16490   /* If the SCOPE is a template type parameter, we have no way of
16491      resolving the name.  */
16492   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16493     return type;
16494   /* If the SCOPE is not the current instantiation, there's no reason
16495      to look inside it.  */
16496   if (only_current_p && !currently_open_class (scope))
16497     return type;
16498   /* If SCOPE isn't the template itself, it will not have a valid
16499      TYPE_FIELDS list.  */
16500   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16501     /* scope is either the template itself or a compatible instantiation
16502        like X<T>, so look up the name in the original template.  */
16503     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16504   else
16505     /* scope is a partial instantiation, so we can't do the lookup or we
16506        will lose the template arguments.  */
16507     return type;
16508   /* Enter the SCOPE so that name lookup will be resolved as if we
16509      were in the class definition.  In particular, SCOPE will no
16510      longer be considered a dependent type.  */
16511   pushed_scope = push_scope (scope);
16512   /* Look up the declaration.  */
16513   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16514
16515   result = NULL_TREE;
16516   
16517   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16518      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16519   if (!decl)
16520     /*nop*/;
16521   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16522            && TREE_CODE (decl) == TYPE_DECL)
16523     {
16524       result = TREE_TYPE (decl);
16525       if (result == error_mark_node)
16526         result = NULL_TREE;
16527     }
16528   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16529            && DECL_CLASS_TEMPLATE_P (decl))
16530     {
16531       tree tmpl;
16532       tree args;
16533       /* Obtain the template and the arguments.  */
16534       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16535       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16536       /* Instantiate the template.  */
16537       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16538                                       /*entering_scope=*/0,
16539                                       tf_error | tf_user);
16540       if (result == error_mark_node)
16541         result = NULL_TREE;
16542     }
16543   
16544   /* Leave the SCOPE.  */
16545   if (pushed_scope)
16546     pop_scope (pushed_scope);
16547
16548   /* If we failed to resolve it, return the original typename.  */
16549   if (!result)
16550     return type;
16551   
16552   /* If lookup found a typename type, resolve that too.  */
16553   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16554     {
16555       /* Ill-formed programs can cause infinite recursion here, so we
16556          must catch that.  */
16557       TYPENAME_IS_RESOLVING_P (type) = 1;
16558       result = resolve_typename_type (result, only_current_p);
16559       TYPENAME_IS_RESOLVING_P (type) = 0;
16560     }
16561   
16562   /* Qualify the resulting type.  */
16563   quals = cp_type_quals (type);
16564   if (quals)
16565     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16566
16567   return result;
16568 }
16569
16570 /* EXPR is an expression which is not type-dependent.  Return a proxy
16571    for EXPR that can be used to compute the types of larger
16572    expressions containing EXPR.  */
16573
16574 tree
16575 build_non_dependent_expr (tree expr)
16576 {
16577   tree inner_expr;
16578
16579   /* Preserve null pointer constants so that the type of things like
16580      "p == 0" where "p" is a pointer can be determined.  */
16581   if (null_ptr_cst_p (expr))
16582     return expr;
16583   /* Preserve OVERLOADs; the functions must be available to resolve
16584      types.  */
16585   inner_expr = expr;
16586   if (TREE_CODE (inner_expr) == STMT_EXPR)
16587     inner_expr = stmt_expr_value_expr (inner_expr);
16588   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16589     inner_expr = TREE_OPERAND (inner_expr, 0);
16590   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16591     inner_expr = TREE_OPERAND (inner_expr, 1);
16592   if (is_overloaded_fn (inner_expr)
16593       || TREE_CODE (inner_expr) == OFFSET_REF)
16594     return expr;
16595   /* There is no need to return a proxy for a variable.  */
16596   if (TREE_CODE (expr) == VAR_DECL)
16597     return expr;
16598   /* Preserve string constants; conversions from string constants to
16599      "char *" are allowed, even though normally a "const char *"
16600      cannot be used to initialize a "char *".  */
16601   if (TREE_CODE (expr) == STRING_CST)
16602     return expr;
16603   /* Preserve arithmetic constants, as an optimization -- there is no
16604      reason to create a new node.  */
16605   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16606     return expr;
16607   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16608      There is at least one place where we want to know that a
16609      particular expression is a throw-expression: when checking a ?:
16610      expression, there are special rules if the second or third
16611      argument is a throw-expression.  */
16612   if (TREE_CODE (expr) == THROW_EXPR)
16613     return expr;
16614
16615   if (TREE_CODE (expr) == COND_EXPR)
16616     return build3 (COND_EXPR,
16617                    TREE_TYPE (expr),
16618                    TREE_OPERAND (expr, 0),
16619                    (TREE_OPERAND (expr, 1)
16620                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16621                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16622                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16623   if (TREE_CODE (expr) == COMPOUND_EXPR
16624       && !COMPOUND_EXPR_OVERLOADED (expr))
16625     return build2 (COMPOUND_EXPR,
16626                    TREE_TYPE (expr),
16627                    TREE_OPERAND (expr, 0),
16628                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16629
16630   /* If the type is unknown, it can't really be non-dependent */
16631   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16632
16633   /* Otherwise, build a NON_DEPENDENT_EXPR.
16634
16635      REFERENCE_TYPEs are not stripped for expressions in templates
16636      because doing so would play havoc with mangling.  Consider, for
16637      example:
16638
16639        template <typename T> void f<T& g>() { g(); }
16640
16641      In the body of "f", the expression for "g" will have
16642      REFERENCE_TYPE, even though the standard says that it should
16643      not.  The reason is that we must preserve the syntactic form of
16644      the expression so that mangling (say) "f<g>" inside the body of
16645      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16646      stripped here.  */
16647   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16648 }
16649
16650 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16651    Return a new TREE_LIST with the various arguments replaced with
16652    equivalent non-dependent expressions.  */
16653
16654 tree
16655 build_non_dependent_args (tree args)
16656 {
16657   tree a;
16658   tree new_args;
16659
16660   new_args = NULL_TREE;
16661   for (a = args; a; a = TREE_CHAIN (a))
16662     new_args = tree_cons (NULL_TREE,
16663                           build_non_dependent_expr (TREE_VALUE (a)),
16664                           new_args);
16665   return nreverse (new_args);
16666 }
16667
16668 #include "gt-cp-pt.h"