OSDN Git Service

2008-01-04 Paolo Carlini <pcarlini@suse.de>
[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  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*);
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 (IS_AGGR_TYPE (type)
240           && CLASSTYPE_TEMPLATE_INFO (type)
241           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
242         {
243           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
244           check_member_template (tmpl);
245           return tmpl;
246         }
247       return NULL_TREE;
248     }
249   else if (TREE_CODE (decl) == FIELD_DECL)
250     error ("data member %qD cannot be a member template", decl);
251   else if (DECL_TEMPLATE_INFO (decl))
252     {
253       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
254         {
255           check_member_template (DECL_TI_TEMPLATE (decl));
256           return DECL_TI_TEMPLATE (decl);
257         }
258       else
259         return decl;
260     }
261   else
262     error ("invalid member template declaration %qD", decl);
263
264   return error_mark_node;
265 }
266
267 /* Return the template info node corresponding to T, whatever T is.  */
268
269 tree
270 get_template_info (tree t)
271 {
272   tree tinfo = NULL_TREE;
273
274   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
275     tinfo = DECL_TEMPLATE_INFO (t);
276
277   if (!tinfo && TREE_CODE (t) == TYPE_DECL)
278     t = TREE_TYPE (t);
279
280   if (TAGGED_TYPE_P (t))
281     tinfo = TYPE_TEMPLATE_INFO (t);
282
283   return tinfo;
284 }
285
286 /* Returns the template nesting level of the indicated class TYPE.
287
288    For example, in:
289      template <class T>
290      struct A
291      {
292        template <class U>
293        struct B {};
294      };
295
296    A<T>::B<U> has depth two, while A<T> has depth one.
297    Both A<T>::B<int> and A<int>::B<U> have depth one, if
298    they are instantiations, not specializations.
299
300    This function is guaranteed to return 0 if passed NULL_TREE so
301    that, for example, `template_class_depth (current_class_type)' is
302    always safe.  */
303
304 int
305 template_class_depth (tree type)
306 {
307   int depth;
308
309   for (depth = 0;
310        type && TREE_CODE (type) != NAMESPACE_DECL;
311        type = (TREE_CODE (type) == FUNCTION_DECL)
312          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
313     {
314       tree tinfo = get_template_info (type);
315
316       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
317           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
318         ++depth;
319     }
320
321   return depth;
322 }
323
324 /* Subroutine of maybe_begin_member_template_processing.
325    Returns true if processing DECL needs us to push template parms.  */
326
327 static bool
328 inline_needs_template_parms (tree decl)
329 {
330   if (! DECL_TEMPLATE_INFO (decl))
331     return false;
332
333   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
334           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
335 }
336
337 /* Subroutine of maybe_begin_member_template_processing.
338    Push the template parms in PARMS, starting from LEVELS steps into the
339    chain, and ending at the beginning, since template parms are listed
340    innermost first.  */
341
342 static void
343 push_inline_template_parms_recursive (tree parmlist, int levels)
344 {
345   tree parms = TREE_VALUE (parmlist);
346   int i;
347
348   if (levels > 1)
349     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
350
351   ++processing_template_decl;
352   current_template_parms
353     = tree_cons (size_int (processing_template_decl),
354                  parms, current_template_parms);
355   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
356
357   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
358                NULL);
359   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
360     {
361       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
362
363       if (parm == error_mark_node)
364         continue;
365
366       gcc_assert (DECL_P (parm));
367
368       switch (TREE_CODE (parm))
369         {
370         case TYPE_DECL:
371         case TEMPLATE_DECL:
372           pushdecl (parm);
373           break;
374
375         case PARM_DECL:
376           {
377             /* Make a CONST_DECL as is done in process_template_parm.
378                It is ugly that we recreate this here; the original
379                version built in process_template_parm is no longer
380                available.  */
381             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
382                                     TREE_TYPE (parm));
383             DECL_ARTIFICIAL (decl) = 1;
384             TREE_CONSTANT (decl) = 1;
385             TREE_INVARIANT (decl) = 1;
386             TREE_READONLY (decl) = 1;
387             DECL_INITIAL (decl) = DECL_INITIAL (parm);
388             SET_DECL_TEMPLATE_PARM_P (decl);
389             pushdecl (decl);
390           }
391           break;
392
393         default:
394           gcc_unreachable ();
395         }
396     }
397 }
398
399 /* Restore the template parameter context for a member template or
400    a friend template defined in a class definition.  */
401
402 void
403 maybe_begin_member_template_processing (tree decl)
404 {
405   tree parms;
406   int levels = 0;
407
408   if (inline_needs_template_parms (decl))
409     {
410       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
411       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
412
413       if (DECL_TEMPLATE_SPECIALIZATION (decl))
414         {
415           --levels;
416           parms = TREE_CHAIN (parms);
417         }
418
419       push_inline_template_parms_recursive (parms, levels);
420     }
421
422   /* Remember how many levels of template parameters we pushed so that
423      we can pop them later.  */
424   VEC_safe_push (int, heap, inline_parm_levels, levels);
425 }
426
427 /* Undo the effects of maybe_begin_member_template_processing.  */
428
429 void
430 maybe_end_member_template_processing (void)
431 {
432   int i;
433   int last;
434
435   if (VEC_length (int, inline_parm_levels) == 0)
436     return;
437
438   last = VEC_pop (int, inline_parm_levels);
439   for (i = 0; i < last; ++i)
440     {
441       --processing_template_decl;
442       current_template_parms = TREE_CHAIN (current_template_parms);
443       poplevel (0, 0, 0);
444     }
445 }
446
447 /* Return a new template argument vector which contains all of ARGS,
448    but has as its innermost set of arguments the EXTRA_ARGS.  */
449
450 static tree
451 add_to_template_args (tree args, tree extra_args)
452 {
453   tree new_args;
454   int extra_depth;
455   int i;
456   int j;
457
458   extra_depth = TMPL_ARGS_DEPTH (extra_args);
459   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
460
461   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
462     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
463
464   for (j = 1; j <= extra_depth; ++j, ++i)
465     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
466
467   return new_args;
468 }
469
470 /* Like add_to_template_args, but only the outermost ARGS are added to
471    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
472    (EXTRA_ARGS) levels are added.  This function is used to combine
473    the template arguments from a partial instantiation with the
474    template arguments used to attain the full instantiation from the
475    partial instantiation.  */
476
477 static tree
478 add_outermost_template_args (tree args, tree extra_args)
479 {
480   tree new_args;
481
482   /* If there are more levels of EXTRA_ARGS than there are ARGS,
483      something very fishy is going on.  */
484   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
485
486   /* If *all* the new arguments will be the EXTRA_ARGS, just return
487      them.  */
488   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
489     return extra_args;
490
491   /* For the moment, we make ARGS look like it contains fewer levels.  */
492   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
493
494   new_args = add_to_template_args (args, extra_args);
495
496   /* Now, we restore ARGS to its full dimensions.  */
497   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
498
499   return new_args;
500 }
501
502 /* Return the N levels of innermost template arguments from the ARGS.  */
503
504 tree
505 get_innermost_template_args (tree args, int n)
506 {
507   tree new_args;
508   int extra_levels;
509   int i;
510
511   gcc_assert (n >= 0);
512
513   /* If N is 1, just return the innermost set of template arguments.  */
514   if (n == 1)
515     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
516
517   /* If we're not removing anything, just return the arguments we were
518      given.  */
519   extra_levels = TMPL_ARGS_DEPTH (args) - n;
520   gcc_assert (extra_levels >= 0);
521   if (extra_levels == 0)
522     return args;
523
524   /* Make a new set of arguments, not containing the outer arguments.  */
525   new_args = make_tree_vec (n);
526   for (i = 1; i <= n; ++i)
527     SET_TMPL_ARGS_LEVEL (new_args, i,
528                          TMPL_ARGS_LEVEL (args, i + extra_levels));
529
530   return new_args;
531 }
532
533 /* The inverse of get_innermost_template_args: Return all but the innermost
534    EXTRA_LEVELS levels of template arguments from the ARGS.  */
535
536 static tree
537 strip_innermost_template_args (tree args, int extra_levels)
538 {
539   tree new_args;
540   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
541   int i;
542
543   gcc_assert (n >= 0);
544
545   /* If N is 1, just return the outermost set of template arguments.  */
546   if (n == 1)
547     return TMPL_ARGS_LEVEL (args, 1);
548
549   /* If we're not removing anything, just return the arguments we were
550      given.  */
551   gcc_assert (extra_levels >= 0);
552   if (extra_levels == 0)
553     return args;
554
555   /* Make a new set of arguments, not containing the inner arguments.  */
556   new_args = make_tree_vec (n);
557   for (i = 1; i <= n; ++i)
558     SET_TMPL_ARGS_LEVEL (new_args, i,
559                          TMPL_ARGS_LEVEL (args, i));
560
561   return new_args;
562 }
563
564 /* We've got a template header coming up; push to a new level for storing
565    the parms.  */
566
567 void
568 begin_template_parm_list (void)
569 {
570   /* We use a non-tag-transparent scope here, which causes pushtag to
571      put tags in this scope, rather than in the enclosing class or
572      namespace scope.  This is the right thing, since we want
573      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
574      global template class, push_template_decl handles putting the
575      TEMPLATE_DECL into top-level scope.  For a nested template class,
576      e.g.:
577
578        template <class T> struct S1 {
579          template <class T> struct S2 {};
580        };
581
582      pushtag contains special code to call pushdecl_with_scope on the
583      TEMPLATE_DECL for S2.  */
584   begin_scope (sk_template_parms, NULL);
585   ++processing_template_decl;
586   ++processing_template_parmlist;
587   note_template_header (0);
588 }
589
590 /* This routine is called when a specialization is declared.  If it is
591    invalid to declare a specialization here, an error is reported and
592    false is returned, otherwise this routine will return true.  */
593
594 static bool
595 check_specialization_scope (void)
596 {
597   tree scope = current_scope ();
598
599   /* [temp.expl.spec]
600
601      An explicit specialization shall be declared in the namespace of
602      which the template is a member, or, for member templates, in the
603      namespace of which the enclosing class or enclosing class
604      template is a member.  An explicit specialization of a member
605      function, member class or static data member of a class template
606      shall be declared in the namespace of which the class template
607      is a member.  */
608   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
609     {
610       error ("explicit specialization in non-namespace scope %qD", scope);
611       return false;
612     }
613
614   /* [temp.expl.spec]
615
616      In an explicit specialization declaration for a member of a class
617      template or a member template that appears in namespace scope,
618      the member template and some of its enclosing class templates may
619      remain unspecialized, except that the declaration shall not
620      explicitly specialize a class member template if its enclosing
621      class templates are not explicitly specialized as well.  */
622   if (current_template_parms)
623     {
624       error ("enclosing class templates are not explicitly specialized");
625       return false;
626     }
627
628   return true;
629 }
630
631 /* We've just seen template <>.  */
632
633 bool
634 begin_specialization (void)
635 {
636   begin_scope (sk_template_spec, NULL);
637   note_template_header (1);
638   return check_specialization_scope ();
639 }
640
641 /* Called at then end of processing a declaration preceded by
642    template<>.  */
643
644 void
645 end_specialization (void)
646 {
647   finish_scope ();
648   reset_specialization ();
649 }
650
651 /* Any template <>'s that we have seen thus far are not referring to a
652    function specialization.  */
653
654 void
655 reset_specialization (void)
656 {
657   processing_specialization = 0;
658   template_header_count = 0;
659 }
660
661 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
662    it was of the form template <>.  */
663
664 static void
665 note_template_header (int specialization)
666 {
667   processing_specialization = specialization;
668   template_header_count++;
669 }
670
671 /* We're beginning an explicit instantiation.  */
672
673 void
674 begin_explicit_instantiation (void)
675 {
676   gcc_assert (!processing_explicit_instantiation);
677   processing_explicit_instantiation = true;
678 }
679
680
681 void
682 end_explicit_instantiation (void)
683 {
684   gcc_assert (processing_explicit_instantiation);
685   processing_explicit_instantiation = false;
686 }
687
688 /* An explicit specialization or partial specialization TMPL is being
689    declared.  Check that the namespace in which the specialization is
690    occurring is permissible.  Returns false iff it is invalid to
691    specialize TMPL in the current namespace.  */
692
693 static bool
694 check_specialization_namespace (tree tmpl)
695 {
696   tree tpl_ns = decl_namespace_context (tmpl);
697
698   /* [tmpl.expl.spec]
699
700      An explicit specialization shall be declared in the namespace of
701      which the template is a member, or, for member templates, in the
702      namespace of which the enclosing class or enclosing class
703      template is a member.  An explicit specialization of a member
704      function, member class or static data member of a class template
705      shall be declared in the namespace of which the class template is
706      a member.  */
707   if (is_associated_namespace (current_namespace, tpl_ns))
708     /* Same or super-using namespace.  */
709     return true;
710   else
711     {
712       pedwarn ("specialization of %qD in different namespace", tmpl);
713       pedwarn ("  from definition of %q+#D", tmpl);
714       return false;
715     }
716 }
717
718 /* SPEC is an explicit instantiation.  Check that it is valid to
719    perform this explicit instantiation in the current namespace.  */
720
721 static void
722 check_explicit_instantiation_namespace (tree spec)
723 {
724   tree ns;
725
726   /* DR 275: An explicit instantiation shall appear in an enclosing
727      namespace of its template.  */
728   ns = decl_namespace_context (spec);
729   if (!is_ancestor (current_namespace, ns))
730     pedwarn ("explicit instantiation of %qD in namespace %qD "
731              "(which does not enclose namespace %qD)",
732              spec, current_namespace, ns);
733 }
734
735 /* The TYPE is being declared.  If it is a template type, that means it
736    is a partial specialization.  Do appropriate error-checking.  */
737
738 tree
739 maybe_process_partial_specialization (tree type)
740 {
741   tree context;
742
743   if (type == error_mark_node)
744     return error_mark_node;
745
746   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
747     {
748       error ("name of class shadows template template parameter %qD",
749              TYPE_NAME (type));
750       return error_mark_node;
751     }
752
753   context = TYPE_CONTEXT (type);
754
755   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
756     {
757       /* This is for ordinary explicit specialization and partial
758          specialization of a template class such as:
759
760            template <> class C<int>;
761
762          or:
763
764            template <class T> class C<T*>;
765
766          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
767
768       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
769           && !COMPLETE_TYPE_P (type))
770         {
771           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
772           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
773           if (processing_template_decl)
774             push_template_decl (TYPE_MAIN_DECL (type));
775         }
776       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
777         error ("specialization of %qT after instantiation", type);
778     }
779   else if (CLASS_TYPE_P (type)
780            && !CLASSTYPE_USE_TEMPLATE (type)
781            && CLASSTYPE_TEMPLATE_INFO (type)
782            && context && CLASS_TYPE_P (context)
783            && CLASSTYPE_TEMPLATE_INFO (context))
784     {
785       /* This is for an explicit specialization of member class
786          template according to [temp.expl.spec/18]:
787
788            template <> template <class U> class C<int>::D;
789
790          The context `C<int>' must be an implicit instantiation.
791          Otherwise this is just a member class template declared
792          earlier like:
793
794            template <> class C<int> { template <class U> class D; };
795            template <> template <class U> class C<int>::D;
796
797          In the first case, `C<int>::D' is a specialization of `C<T>::D'
798          while in the second case, `C<int>::D' is a primary template
799          and `C<T>::D' may not exist.  */
800
801       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
802           && !COMPLETE_TYPE_P (type))
803         {
804           tree t;
805
806           if (current_namespace
807               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
808             {
809               pedwarn ("specializing %q#T in different namespace", type);
810               pedwarn ("  from definition of %q+#D",
811                        CLASSTYPE_TI_TEMPLATE (type));
812             }
813
814           /* Check for invalid specialization after instantiation:
815
816                template <> template <> class C<int>::D<int>;
817                template <> template <class U> class C<int>::D;  */
818
819           for (t = DECL_TEMPLATE_INSTANTIATIONS
820                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
821                t; t = TREE_CHAIN (t))
822             if (TREE_VALUE (t) != type
823                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
824               error ("specialization %qT after instantiation %qT",
825                      type, TREE_VALUE (t));
826
827           /* Mark TYPE as a specialization.  And as a result, we only
828              have one level of template argument for the innermost
829              class template.  */
830           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
831           CLASSTYPE_TI_ARGS (type)
832             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
833         }
834     }
835   else if (processing_specialization)
836     {
837       error ("explicit specialization of non-template %qT", type);
838       return error_mark_node;
839     }
840
841   return type;
842 }
843
844 /* Returns nonzero if we can optimize the retrieval of specializations
845    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
846    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
847
848 static inline bool
849 optimize_specialization_lookup_p (tree tmpl)
850 {
851   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
852           && DECL_CLASS_SCOPE_P (tmpl)
853           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
854              parameter.  */
855           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
856           /* The optimized lookup depends on the fact that the
857              template arguments for the member function template apply
858              purely to the containing class, which is not true if the
859              containing class is an explicit or partial
860              specialization.  */
861           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
862           && !DECL_MEMBER_TEMPLATE_P (tmpl)
863           && !DECL_CONV_FN_P (tmpl)
864           /* It is possible to have a template that is not a member
865              template and is not a member of a template class:
866
867              template <typename T>
868              struct S { friend A::f(); };
869
870              Here, the friend function is a template, but the context does
871              not have template information.  The optimized lookup relies
872              on having ARGS be the template arguments for both the class
873              and the function template.  */
874           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
875 }
876
877 /* Retrieve the specialization (in the sense of [temp.spec] - a
878    specialization is either an instantiation or an explicit
879    specialization) of TMPL for the given template ARGS.  If there is
880    no such specialization, return NULL_TREE.  The ARGS are a vector of
881    arguments, or a vector of vectors of arguments, in the case of
882    templates with more than one level of parameters.
883
884    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
885    then we search for a partial specialization matching ARGS.  This
886    parameter is ignored if TMPL is not a class template.  */
887
888 static tree
889 retrieve_specialization (tree tmpl, tree args,
890                          bool class_specializations_p)
891 {
892   if (args == error_mark_node)
893     return NULL_TREE;
894
895   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
896
897   /* There should be as many levels of arguments as there are
898      levels of parameters.  */
899   gcc_assert (TMPL_ARGS_DEPTH (args)
900               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
901
902   if (optimize_specialization_lookup_p (tmpl))
903     {
904       tree class_template;
905       tree class_specialization;
906       VEC(tree,gc) *methods;
907       tree fns;
908       int idx;
909
910       /* The template arguments actually apply to the containing
911          class.  Find the class specialization with those
912          arguments.  */
913       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
914       class_specialization
915         = retrieve_specialization (class_template, args,
916                                    /*class_specializations_p=*/false);
917       if (!class_specialization)
918         return NULL_TREE;
919       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
920          for the specialization.  */
921       idx = class_method_index_for_fn (class_specialization, tmpl);
922       if (idx == -1)
923         return NULL_TREE;
924       /* Iterate through the methods with the indicated name, looking
925          for the one that has an instance of TMPL.  */
926       methods = CLASSTYPE_METHOD_VEC (class_specialization);
927       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
928         {
929           tree fn = OVL_CURRENT (fns);
930           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
931             return fn;
932         }
933       return NULL_TREE;
934     }
935   else
936     {
937       tree *sp;
938       tree *head;
939
940       /* Class templates store their instantiations on the
941          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
942          DECL_TEMPLATE_SPECIALIZATIONS list.  */
943       if (!class_specializations_p
944           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL
945           && TAGGED_TYPE_P (TREE_TYPE (tmpl)))
946         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
947       else
948         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
949       head = sp;
950       /* Iterate through the list until we find a matching template.  */
951       while (*sp != NULL_TREE)
952         {
953           tree spec = *sp;
954
955           if (comp_template_args (TREE_PURPOSE (spec), args))
956             {
957               /* Use the move-to-front heuristic to speed up future
958                  searches.  */
959               if (spec != *head)
960                 {
961                   *sp = TREE_CHAIN (*sp);
962                   TREE_CHAIN (spec) = *head;
963                   *head = spec;
964                 }
965               return TREE_VALUE (spec);
966             }
967           sp = &TREE_CHAIN (spec);
968         }
969     }
970
971   return NULL_TREE;
972 }
973
974 /* Like retrieve_specialization, but for local declarations.  */
975
976 static tree
977 retrieve_local_specialization (tree tmpl)
978 {
979   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
980                                           htab_hash_pointer (tmpl));
981   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
982 }
983
984 /* Returns nonzero iff DECL is a specialization of TMPL.  */
985
986 int
987 is_specialization_of (tree decl, tree tmpl)
988 {
989   tree t;
990
991   if (TREE_CODE (decl) == FUNCTION_DECL)
992     {
993       for (t = decl;
994            t != NULL_TREE;
995            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
996         if (t == tmpl)
997           return 1;
998     }
999   else
1000     {
1001       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1002
1003       for (t = TREE_TYPE (decl);
1004            t != NULL_TREE;
1005            t = CLASSTYPE_USE_TEMPLATE (t)
1006              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1007         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1008           return 1;
1009     }
1010
1011   return 0;
1012 }
1013
1014 /* Returns nonzero iff DECL is a specialization of friend declaration
1015    FRIEND according to [temp.friend].  */
1016
1017 bool
1018 is_specialization_of_friend (tree decl, tree friend)
1019 {
1020   bool need_template = true;
1021   int template_depth;
1022
1023   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1024               || TREE_CODE (decl) == TYPE_DECL);
1025
1026   /* For [temp.friend/6] when FRIEND is an ordinary member function
1027      of a template class, we want to check if DECL is a specialization
1028      if this.  */
1029   if (TREE_CODE (friend) == FUNCTION_DECL
1030       && DECL_TEMPLATE_INFO (friend)
1031       && !DECL_USE_TEMPLATE (friend))
1032     {
1033       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1034       friend = DECL_TI_TEMPLATE (friend);
1035       need_template = false;
1036     }
1037   else if (TREE_CODE (friend) == TEMPLATE_DECL
1038            && !PRIMARY_TEMPLATE_P (friend))
1039     need_template = false;
1040
1041   /* There is nothing to do if this is not a template friend.  */
1042   if (TREE_CODE (friend) != TEMPLATE_DECL)
1043     return false;
1044
1045   if (is_specialization_of (decl, friend))
1046     return true;
1047
1048   /* [temp.friend/6]
1049      A member of a class template may be declared to be a friend of a
1050      non-template class.  In this case, the corresponding member of
1051      every specialization of the class template is a friend of the
1052      class granting friendship.
1053
1054      For example, given a template friend declaration
1055
1056        template <class T> friend void A<T>::f();
1057
1058      the member function below is considered a friend
1059
1060        template <> struct A<int> {
1061          void f();
1062        };
1063
1064      For this type of template friend, TEMPLATE_DEPTH below will be
1065      nonzero.  To determine if DECL is a friend of FRIEND, we first
1066      check if the enclosing class is a specialization of another.  */
1067
1068   template_depth = template_class_depth (DECL_CONTEXT (friend));
1069   if (template_depth
1070       && DECL_CLASS_SCOPE_P (decl)
1071       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1072                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1073     {
1074       /* Next, we check the members themselves.  In order to handle
1075          a few tricky cases, such as when FRIEND's are
1076
1077            template <class T> friend void A<T>::g(T t);
1078            template <class T> template <T t> friend void A<T>::h();
1079
1080          and DECL's are
1081
1082            void A<int>::g(int);
1083            template <int> void A<int>::h();
1084
1085          we need to figure out ARGS, the template arguments from
1086          the context of DECL.  This is required for template substitution
1087          of `T' in the function parameter of `g' and template parameter
1088          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1089
1090       tree context = DECL_CONTEXT (decl);
1091       tree args = NULL_TREE;
1092       int current_depth = 0;
1093
1094       while (current_depth < template_depth)
1095         {
1096           if (CLASSTYPE_TEMPLATE_INFO (context))
1097             {
1098               if (current_depth == 0)
1099                 args = TYPE_TI_ARGS (context);
1100               else
1101                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1102               current_depth++;
1103             }
1104           context = TYPE_CONTEXT (context);
1105         }
1106
1107       if (TREE_CODE (decl) == FUNCTION_DECL)
1108         {
1109           bool is_template;
1110           tree friend_type;
1111           tree decl_type;
1112           tree friend_args_type;
1113           tree decl_args_type;
1114
1115           /* Make sure that both DECL and FRIEND are templates or
1116              non-templates.  */
1117           is_template = DECL_TEMPLATE_INFO (decl)
1118                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1119           if (need_template ^ is_template)
1120             return false;
1121           else if (is_template)
1122             {
1123               /* If both are templates, check template parameter list.  */
1124               tree friend_parms
1125                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1126                                          args, tf_none);
1127               if (!comp_template_parms
1128                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1129                       friend_parms))
1130                 return false;
1131
1132               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1133             }
1134           else
1135             decl_type = TREE_TYPE (decl);
1136
1137           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1138                                               tf_none, NULL_TREE);
1139           if (friend_type == error_mark_node)
1140             return false;
1141
1142           /* Check if return types match.  */
1143           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1144             return false;
1145
1146           /* Check if function parameter types match, ignoring the
1147              `this' parameter.  */
1148           friend_args_type = TYPE_ARG_TYPES (friend_type);
1149           decl_args_type = TYPE_ARG_TYPES (decl_type);
1150           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1151             friend_args_type = TREE_CHAIN (friend_args_type);
1152           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1153             decl_args_type = TREE_CHAIN (decl_args_type);
1154
1155           return compparms (decl_args_type, friend_args_type);
1156         }
1157       else
1158         {
1159           /* DECL is a TYPE_DECL */
1160           bool is_template;
1161           tree decl_type = TREE_TYPE (decl);
1162
1163           /* Make sure that both DECL and FRIEND are templates or
1164              non-templates.  */
1165           is_template
1166             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1167               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1168
1169           if (need_template ^ is_template)
1170             return false;
1171           else if (is_template)
1172             {
1173               tree friend_parms;
1174               /* If both are templates, check the name of the two
1175                  TEMPLATE_DECL's first because is_friend didn't.  */
1176               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1177                   != DECL_NAME (friend))
1178                 return false;
1179
1180               /* Now check template parameter list.  */
1181               friend_parms
1182                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1183                                          args, tf_none);
1184               return comp_template_parms
1185                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1186                  friend_parms);
1187             }
1188           else
1189             return (DECL_NAME (decl)
1190                     == DECL_NAME (friend));
1191         }
1192     }
1193   return false;
1194 }
1195
1196 /* Register the specialization SPEC as a specialization of TMPL with
1197    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1198    is actually just a friend declaration.  Returns SPEC, or an
1199    equivalent prior declaration, if available.  */
1200
1201 static tree
1202 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1203 {
1204   tree fn;
1205
1206   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1207
1208   if (TREE_CODE (spec) == FUNCTION_DECL
1209       && uses_template_parms (DECL_TI_ARGS (spec)))
1210     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1211        register it; we want the corresponding TEMPLATE_DECL instead.
1212        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1213        the more obvious `uses_template_parms (spec)' to avoid problems
1214        with default function arguments.  In particular, given
1215        something like this:
1216
1217           template <class T> void f(T t1, T t = T())
1218
1219        the default argument expression is not substituted for in an
1220        instantiation unless and until it is actually needed.  */
1221     return spec;
1222
1223   fn = retrieve_specialization (tmpl, args,
1224                                 /*class_specializations_p=*/false);
1225   /* We can sometimes try to re-register a specialization that we've
1226      already got.  In particular, regenerate_decl_from_template calls
1227      duplicate_decls which will update the specialization list.  But,
1228      we'll still get called again here anyhow.  It's more convenient
1229      to simply allow this than to try to prevent it.  */
1230   if (fn == spec)
1231     return spec;
1232   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1233     {
1234       if (DECL_TEMPLATE_INSTANTIATION (fn))
1235         {
1236           if (TREE_USED (fn)
1237               || DECL_EXPLICIT_INSTANTIATION (fn))
1238             {
1239               error ("specialization of %qD after instantiation",
1240                      fn);
1241               return error_mark_node;
1242             }
1243           else
1244             {
1245               tree clone;
1246               /* This situation should occur only if the first
1247                  specialization is an implicit instantiation, the
1248                  second is an explicit specialization, and the
1249                  implicit instantiation has not yet been used.  That
1250                  situation can occur if we have implicitly
1251                  instantiated a member function and then specialized
1252                  it later.
1253
1254                  We can also wind up here if a friend declaration that
1255                  looked like an instantiation turns out to be a
1256                  specialization:
1257
1258                    template <class T> void foo(T);
1259                    class S { friend void foo<>(int) };
1260                    template <> void foo(int);
1261
1262                  We transform the existing DECL in place so that any
1263                  pointers to it become pointers to the updated
1264                  declaration.
1265
1266                  If there was a definition for the template, but not
1267                  for the specialization, we want this to look as if
1268                  there were no definition, and vice versa.  */
1269               DECL_INITIAL (fn) = NULL_TREE;
1270               duplicate_decls (spec, fn, is_friend);
1271               /* The call to duplicate_decls will have applied
1272                  [temp.expl.spec]:
1273
1274                    An explicit specialization of a function template
1275                    is inline only if it is explicitly declared to be,
1276                    and independently of whether its function template
1277                    is.
1278
1279                 to the primary function; now copy the inline bits to
1280                 the various clones.  */
1281               FOR_EACH_CLONE (clone, fn)
1282                 {
1283                   DECL_DECLARED_INLINE_P (clone)
1284                     = DECL_DECLARED_INLINE_P (fn);
1285                   DECL_INLINE (clone)
1286                     = DECL_INLINE (fn);
1287                 }
1288               check_specialization_namespace (fn);
1289
1290               return fn;
1291             }
1292         }
1293       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1294         {
1295           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1296             /* Dup decl failed, but this is a new definition. Set the
1297                line number so any errors match this new
1298                definition.  */
1299             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1300
1301           return fn;
1302         }
1303     }
1304
1305   /* A specialization must be declared in the same namespace as the
1306      template it is specializing.  */
1307   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1308       && !check_specialization_namespace (tmpl))
1309     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1310
1311   if (!optimize_specialization_lookup_p (tmpl))
1312     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1313       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1314
1315   return spec;
1316 }
1317
1318 /* Unregister the specialization SPEC as a specialization of TMPL.
1319    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1320    if the SPEC was listed as a specialization of TMPL.  */
1321
1322 bool
1323 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1324 {
1325   tree* s;
1326
1327   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1328        *s != NULL_TREE;
1329        s = &TREE_CHAIN (*s))
1330     if (TREE_VALUE (*s) == spec)
1331       {
1332         if (!new_spec)
1333           *s = TREE_CHAIN (*s);
1334         else
1335           TREE_VALUE (*s) = new_spec;
1336         return 1;
1337       }
1338
1339   return 0;
1340 }
1341
1342 /* Compare an entry in the local specializations hash table P1 (which
1343    is really a pointer to a TREE_LIST) with P2 (which is really a
1344    DECL).  */
1345
1346 static int
1347 eq_local_specializations (const void *p1, const void *p2)
1348 {
1349   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1350 }
1351
1352 /* Hash P1, an entry in the local specializations table.  */
1353
1354 static hashval_t
1355 hash_local_specialization (const void* p1)
1356 {
1357   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1358 }
1359
1360 /* Like register_specialization, but for local declarations.  We are
1361    registering SPEC, an instantiation of TMPL.  */
1362
1363 static void
1364 register_local_specialization (tree spec, tree tmpl)
1365 {
1366   void **slot;
1367
1368   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1369                                    htab_hash_pointer (tmpl), INSERT);
1370   *slot = build_tree_list (spec, tmpl);
1371 }
1372
1373 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1374    specialized class.  */
1375
1376 bool
1377 explicit_class_specialization_p (tree type)
1378 {
1379   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1380     return false;
1381   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1382 }
1383
1384 /* Print the list of candidate FNS in an error message.  */
1385
1386 void
1387 print_candidates (tree fns)
1388 {
1389   tree fn;
1390
1391   const char *str = "candidates are:";
1392
1393   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1394     {
1395       tree f;
1396
1397       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1398         error ("%s %+#D", str, OVL_CURRENT (f));
1399       str = "               ";
1400     }
1401 }
1402
1403 /* Returns the template (one of the functions given by TEMPLATE_ID)
1404    which can be specialized to match the indicated DECL with the
1405    explicit template args given in TEMPLATE_ID.  The DECL may be
1406    NULL_TREE if none is available.  In that case, the functions in
1407    TEMPLATE_ID are non-members.
1408
1409    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1410    specialization of a member template.
1411
1412    The TEMPLATE_COUNT is the number of references to qualifying
1413    template classes that appeared in the name of the function. See
1414    check_explicit_specialization for a more accurate description.
1415
1416    TSK indicates what kind of template declaration (if any) is being
1417    declared.  TSK_TEMPLATE indicates that the declaration given by
1418    DECL, though a FUNCTION_DECL, has template parameters, and is
1419    therefore a template function.
1420
1421    The template args (those explicitly specified and those deduced)
1422    are output in a newly created vector *TARGS_OUT.
1423
1424    If it is impossible to determine the result, an error message is
1425    issued.  The error_mark_node is returned to indicate failure.  */
1426
1427 static tree
1428 determine_specialization (tree template_id,
1429                           tree decl,
1430                           tree* targs_out,
1431                           int need_member_template,
1432                           int template_count,
1433                           tmpl_spec_kind tsk)
1434 {
1435   tree fns;
1436   tree targs;
1437   tree explicit_targs;
1438   tree candidates = NULL_TREE;
1439   /* A TREE_LIST of templates of which DECL may be a specialization.
1440      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1441      corresponding TREE_PURPOSE is the set of template arguments that,
1442      when used to instantiate the template, would produce a function
1443      with the signature of DECL.  */
1444   tree templates = NULL_TREE;
1445   int header_count;
1446   struct cp_binding_level *b;
1447
1448   *targs_out = NULL_TREE;
1449
1450   if (template_id == error_mark_node || decl == error_mark_node)
1451     return error_mark_node;
1452
1453   fns = TREE_OPERAND (template_id, 0);
1454   explicit_targs = TREE_OPERAND (template_id, 1);
1455
1456   if (fns == error_mark_node)
1457     return error_mark_node;
1458
1459   /* Check for baselinks.  */
1460   if (BASELINK_P (fns))
1461     fns = BASELINK_FUNCTIONS (fns);
1462
1463   if (!is_overloaded_fn (fns))
1464     {
1465       error ("%qD is not a function template", fns);
1466       return error_mark_node;
1467     }
1468
1469   /* Count the number of template headers specified for this
1470      specialization.  */
1471   header_count = 0;
1472   for (b = current_binding_level;
1473        b->kind == sk_template_parms;
1474        b = b->level_chain)
1475     ++header_count;
1476
1477   for (; fns; fns = OVL_NEXT (fns))
1478     {
1479       tree fn = OVL_CURRENT (fns);
1480
1481       if (TREE_CODE (fn) == TEMPLATE_DECL)
1482         {
1483           tree decl_arg_types;
1484           tree fn_arg_types;
1485
1486           /* In case of explicit specialization, we need to check if
1487              the number of template headers appearing in the specialization
1488              is correct. This is usually done in check_explicit_specialization,
1489              but the check done there cannot be exhaustive when specializing
1490              member functions. Consider the following code:
1491
1492              template <> void A<int>::f(int);
1493              template <> template <> void A<int>::f(int);
1494
1495              Assuming that A<int> is not itself an explicit specialization
1496              already, the first line specializes "f" which is a non-template
1497              member function, whilst the second line specializes "f" which
1498              is a template member function. So both lines are syntactically
1499              correct, and check_explicit_specialization does not reject
1500              them.
1501
1502              Here, we can do better, as we are matching the specialization
1503              against the declarations. We count the number of template
1504              headers, and we check if they match TEMPLATE_COUNT + 1
1505              (TEMPLATE_COUNT is the number of qualifying template classes,
1506              plus there must be another header for the member template
1507              itself).
1508
1509              Notice that if header_count is zero, this is not a
1510              specialization but rather a template instantiation, so there
1511              is no check we can perform here.  */
1512           if (header_count && header_count != template_count + 1)
1513             continue;
1514
1515           /* Check that the number of template arguments at the
1516              innermost level for DECL is the same as for FN.  */
1517           if (current_binding_level->kind == sk_template_parms
1518               && !current_binding_level->explicit_spec_p
1519               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1520                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1521                                       (current_template_parms))))
1522             continue;
1523
1524           /* DECL might be a specialization of FN.  */
1525           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1526           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1527
1528           /* For a non-static member function, we need to make sure
1529              that the const qualification is the same.  Since
1530              get_bindings does not try to merge the "this" parameter,
1531              we must do the comparison explicitly.  */
1532           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1533               && !same_type_p (TREE_VALUE (fn_arg_types),
1534                                TREE_VALUE (decl_arg_types)))
1535             continue;
1536
1537           /* Skip the "this" parameter and, for constructors of
1538              classes with virtual bases, the VTT parameter.  A
1539              full specialization of a constructor will have a VTT
1540              parameter, but a template never will.  */ 
1541           decl_arg_types 
1542             = skip_artificial_parms_for (decl, decl_arg_types);
1543           fn_arg_types 
1544             = skip_artificial_parms_for (fn, fn_arg_types);
1545
1546           /* Check that the number of function parameters matches.
1547              For example,
1548                template <class T> void f(int i = 0);
1549                template <> void f<int>();
1550              The specialization f<int> is invalid but is not caught
1551              by get_bindings below.  */
1552           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1553             continue;
1554
1555           /* Function templates cannot be specializations; there are
1556              no partial specializations of functions.  Therefore, if
1557              the type of DECL does not match FN, there is no
1558              match.  */
1559           if (tsk == tsk_template)
1560             {
1561               if (compparms (fn_arg_types, decl_arg_types))
1562                 candidates = tree_cons (NULL_TREE, fn, candidates);
1563               continue;
1564             }
1565
1566           /* See whether this function might be a specialization of this
1567              template.  */
1568           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1569
1570           if (!targs)
1571             /* We cannot deduce template arguments that when used to
1572                specialize TMPL will produce DECL.  */
1573             continue;
1574
1575           /* Save this template, and the arguments deduced.  */
1576           templates = tree_cons (targs, fn, templates);
1577         }
1578       else if (need_member_template)
1579         /* FN is an ordinary member function, and we need a
1580            specialization of a member template.  */
1581         ;
1582       else if (TREE_CODE (fn) != FUNCTION_DECL)
1583         /* We can get IDENTIFIER_NODEs here in certain erroneous
1584            cases.  */
1585         ;
1586       else if (!DECL_FUNCTION_MEMBER_P (fn))
1587         /* This is just an ordinary non-member function.  Nothing can
1588            be a specialization of that.  */
1589         ;
1590       else if (DECL_ARTIFICIAL (fn))
1591         /* Cannot specialize functions that are created implicitly.  */
1592         ;
1593       else
1594         {
1595           tree decl_arg_types;
1596
1597           /* This is an ordinary member function.  However, since
1598              we're here, we can assume it's enclosing class is a
1599              template class.  For example,
1600
1601                template <typename T> struct S { void f(); };
1602                template <> void S<int>::f() {}
1603
1604              Here, S<int>::f is a non-template, but S<int> is a
1605              template class.  If FN has the same type as DECL, we
1606              might be in business.  */
1607
1608           if (!DECL_TEMPLATE_INFO (fn))
1609             /* Its enclosing class is an explicit specialization
1610                of a template class.  This is not a candidate.  */
1611             continue;
1612
1613           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1614                             TREE_TYPE (TREE_TYPE (fn))))
1615             /* The return types differ.  */
1616             continue;
1617
1618           /* Adjust the type of DECL in case FN is a static member.  */
1619           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1620           if (DECL_STATIC_FUNCTION_P (fn)
1621               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1622             decl_arg_types = TREE_CHAIN (decl_arg_types);
1623
1624           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1625                          decl_arg_types))
1626             /* They match!  */
1627             candidates = tree_cons (NULL_TREE, fn, candidates);
1628         }
1629     }
1630
1631   if (templates && TREE_CHAIN (templates))
1632     {
1633       /* We have:
1634
1635            [temp.expl.spec]
1636
1637            It is possible for a specialization with a given function
1638            signature to be instantiated from more than one function
1639            template.  In such cases, explicit specification of the
1640            template arguments must be used to uniquely identify the
1641            function template specialization being specialized.
1642
1643          Note that here, there's no suggestion that we're supposed to
1644          determine which of the candidate templates is most
1645          specialized.  However, we, also have:
1646
1647            [temp.func.order]
1648
1649            Partial ordering of overloaded function template
1650            declarations is used in the following contexts to select
1651            the function template to which a function template
1652            specialization refers:
1653
1654            -- when an explicit specialization refers to a function
1655               template.
1656
1657          So, we do use the partial ordering rules, at least for now.
1658          This extension can only serve to make invalid programs valid,
1659          so it's safe.  And, there is strong anecdotal evidence that
1660          the committee intended the partial ordering rules to apply;
1661          the EDG front end has that behavior, and John Spicer claims
1662          that the committee simply forgot to delete the wording in
1663          [temp.expl.spec].  */
1664       tree tmpl = most_specialized_instantiation (templates);
1665       if (tmpl != error_mark_node)
1666         {
1667           templates = tmpl;
1668           TREE_CHAIN (templates) = NULL_TREE;
1669         }
1670     }
1671
1672   if (templates == NULL_TREE && candidates == NULL_TREE)
1673     {
1674       error ("template-id %qD for %q+D does not match any template "
1675              "declaration", template_id, decl);
1676       return error_mark_node;
1677     }
1678   else if ((templates && TREE_CHAIN (templates))
1679            || (candidates && TREE_CHAIN (candidates))
1680            || (templates && candidates))
1681     {
1682       error ("ambiguous template specialization %qD for %q+D",
1683              template_id, decl);
1684       chainon (candidates, templates);
1685       print_candidates (candidates);
1686       return error_mark_node;
1687     }
1688
1689   /* We have one, and exactly one, match.  */
1690   if (candidates)
1691     {
1692       tree fn = TREE_VALUE (candidates);
1693       /* DECL is a re-declaration of a template function.  */
1694       if (TREE_CODE (fn) == TEMPLATE_DECL)
1695         return fn;
1696       /* It was a specialization of an ordinary member function in a
1697          template class.  */
1698       *targs_out = copy_node (DECL_TI_ARGS (fn));
1699       return DECL_TI_TEMPLATE (fn);
1700     }
1701
1702   /* It was a specialization of a template.  */
1703   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1704   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1705     {
1706       *targs_out = copy_node (targs);
1707       SET_TMPL_ARGS_LEVEL (*targs_out,
1708                            TMPL_ARGS_DEPTH (*targs_out),
1709                            TREE_PURPOSE (templates));
1710     }
1711   else
1712     *targs_out = TREE_PURPOSE (templates);
1713   return TREE_VALUE (templates);
1714 }
1715
1716 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1717    but with the default argument values filled in from those in the
1718    TMPL_TYPES.  */
1719
1720 static tree
1721 copy_default_args_to_explicit_spec_1 (tree spec_types,
1722                                       tree tmpl_types)
1723 {
1724   tree new_spec_types;
1725
1726   if (!spec_types)
1727     return NULL_TREE;
1728
1729   if (spec_types == void_list_node)
1730     return void_list_node;
1731
1732   /* Substitute into the rest of the list.  */
1733   new_spec_types =
1734     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1735                                           TREE_CHAIN (tmpl_types));
1736
1737   /* Add the default argument for this parameter.  */
1738   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1739                          TREE_VALUE (spec_types),
1740                          new_spec_types);
1741 }
1742
1743 /* DECL is an explicit specialization.  Replicate default arguments
1744    from the template it specializes.  (That way, code like:
1745
1746      template <class T> void f(T = 3);
1747      template <> void f(double);
1748      void g () { f (); }
1749
1750    works, as required.)  An alternative approach would be to look up
1751    the correct default arguments at the call-site, but this approach
1752    is consistent with how implicit instantiations are handled.  */
1753
1754 static void
1755 copy_default_args_to_explicit_spec (tree decl)
1756 {
1757   tree tmpl;
1758   tree spec_types;
1759   tree tmpl_types;
1760   tree new_spec_types;
1761   tree old_type;
1762   tree new_type;
1763   tree t;
1764   tree object_type = NULL_TREE;
1765   tree in_charge = NULL_TREE;
1766   tree vtt = NULL_TREE;
1767
1768   /* See if there's anything we need to do.  */
1769   tmpl = DECL_TI_TEMPLATE (decl);
1770   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1771   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1772     if (TREE_PURPOSE (t))
1773       break;
1774   if (!t)
1775     return;
1776
1777   old_type = TREE_TYPE (decl);
1778   spec_types = TYPE_ARG_TYPES (old_type);
1779
1780   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1781     {
1782       /* Remove the this pointer, but remember the object's type for
1783          CV quals.  */
1784       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1785       spec_types = TREE_CHAIN (spec_types);
1786       tmpl_types = TREE_CHAIN (tmpl_types);
1787
1788       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1789         {
1790           /* DECL may contain more parameters than TMPL due to the extra
1791              in-charge parameter in constructors and destructors.  */
1792           in_charge = spec_types;
1793           spec_types = TREE_CHAIN (spec_types);
1794         }
1795       if (DECL_HAS_VTT_PARM_P (decl))
1796         {
1797           vtt = spec_types;
1798           spec_types = TREE_CHAIN (spec_types);
1799         }
1800     }
1801
1802   /* Compute the merged default arguments.  */
1803   new_spec_types =
1804     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1805
1806   /* Compute the new FUNCTION_TYPE.  */
1807   if (object_type)
1808     {
1809       if (vtt)
1810         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1811                                          TREE_VALUE (vtt),
1812                                          new_spec_types);
1813
1814       if (in_charge)
1815         /* Put the in-charge parameter back.  */
1816         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1817                                          TREE_VALUE (in_charge),
1818                                          new_spec_types);
1819
1820       new_type = build_method_type_directly (object_type,
1821                                              TREE_TYPE (old_type),
1822                                              new_spec_types);
1823     }
1824   else
1825     new_type = build_function_type (TREE_TYPE (old_type),
1826                                     new_spec_types);
1827   new_type = cp_build_type_attribute_variant (new_type,
1828                                               TYPE_ATTRIBUTES (old_type));
1829   new_type = build_exception_variant (new_type,
1830                                       TYPE_RAISES_EXCEPTIONS (old_type));
1831   TREE_TYPE (decl) = new_type;
1832 }
1833
1834 /* Check to see if the function just declared, as indicated in
1835    DECLARATOR, and in DECL, is a specialization of a function
1836    template.  We may also discover that the declaration is an explicit
1837    instantiation at this point.
1838
1839    Returns DECL, or an equivalent declaration that should be used
1840    instead if all goes well.  Issues an error message if something is
1841    amiss.  Returns error_mark_node if the error is not easily
1842    recoverable.
1843
1844    FLAGS is a bitmask consisting of the following flags:
1845
1846    2: The function has a definition.
1847    4: The function is a friend.
1848
1849    The TEMPLATE_COUNT is the number of references to qualifying
1850    template classes that appeared in the name of the function.  For
1851    example, in
1852
1853      template <class T> struct S { void f(); };
1854      void S<int>::f();
1855
1856    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1857    classes are not counted in the TEMPLATE_COUNT, so that in
1858
1859      template <class T> struct S {};
1860      template <> struct S<int> { void f(); }
1861      template <> void S<int>::f();
1862
1863    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1864    invalid; there should be no template <>.)
1865
1866    If the function is a specialization, it is marked as such via
1867    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1868    is set up correctly, and it is added to the list of specializations
1869    for that template.  */
1870
1871 tree
1872 check_explicit_specialization (tree declarator,
1873                                tree decl,
1874                                int template_count,
1875                                int flags)
1876 {
1877   int have_def = flags & 2;
1878   int is_friend = flags & 4;
1879   int specialization = 0;
1880   int explicit_instantiation = 0;
1881   int member_specialization = 0;
1882   tree ctype = DECL_CLASS_CONTEXT (decl);
1883   tree dname = DECL_NAME (decl);
1884   tmpl_spec_kind tsk;
1885
1886   if (is_friend)
1887     {
1888       if (!processing_specialization)
1889         tsk = tsk_none;
1890       else
1891         tsk = tsk_excessive_parms;
1892     }
1893   else
1894     tsk = current_tmpl_spec_kind (template_count);
1895
1896   switch (tsk)
1897     {
1898     case tsk_none:
1899       if (processing_specialization)
1900         {
1901           specialization = 1;
1902           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1903         }
1904       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1905         {
1906           if (is_friend)
1907             /* This could be something like:
1908
1909                template <class T> void f(T);
1910                class S { friend void f<>(int); }  */
1911             specialization = 1;
1912           else
1913             {
1914               /* This case handles bogus declarations like template <>
1915                  template <class T> void f<int>(); */
1916
1917               error ("template-id %qD in declaration of primary template",
1918                      declarator);
1919               return decl;
1920             }
1921         }
1922       break;
1923
1924     case tsk_invalid_member_spec:
1925       /* The error has already been reported in
1926          check_specialization_scope.  */
1927       return error_mark_node;
1928
1929     case tsk_invalid_expl_inst:
1930       error ("template parameter list used in explicit instantiation");
1931
1932       /* Fall through.  */
1933
1934     case tsk_expl_inst:
1935       if (have_def)
1936         error ("definition provided for explicit instantiation");
1937
1938       explicit_instantiation = 1;
1939       break;
1940
1941     case tsk_excessive_parms:
1942     case tsk_insufficient_parms:
1943       if (tsk == tsk_excessive_parms)
1944         error ("too many template parameter lists in declaration of %qD",
1945                decl);
1946       else if (template_header_count)
1947         error("too few template parameter lists in declaration of %qD", decl);
1948       else
1949         error("explicit specialization of %qD must be introduced by "
1950               "%<template <>%>", decl);
1951
1952       /* Fall through.  */
1953     case tsk_expl_spec:
1954       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1955       if (ctype)
1956         member_specialization = 1;
1957       else
1958         specialization = 1;
1959       break;
1960
1961     case tsk_template:
1962       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1963         {
1964           /* This case handles bogus declarations like template <>
1965              template <class T> void f<int>(); */
1966
1967           if (uses_template_parms (declarator))
1968             error ("function template partial specialization %qD "
1969                    "is not allowed", declarator);
1970           else
1971             error ("template-id %qD in declaration of primary template",
1972                    declarator);
1973           return decl;
1974         }
1975
1976       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1977         /* This is a specialization of a member template, without
1978            specialization the containing class.  Something like:
1979
1980              template <class T> struct S {
1981                template <class U> void f (U);
1982              };
1983              template <> template <class U> void S<int>::f(U) {}
1984
1985            That's a specialization -- but of the entire template.  */
1986         specialization = 1;
1987       break;
1988
1989     default:
1990       gcc_unreachable ();
1991     }
1992
1993   if (specialization || member_specialization)
1994     {
1995       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1996       for (; t; t = TREE_CHAIN (t))
1997         if (TREE_PURPOSE (t))
1998           {
1999             pedwarn
2000               ("default argument specified in explicit specialization");
2001             break;
2002           }
2003     }
2004
2005   if (specialization || member_specialization || explicit_instantiation)
2006     {
2007       tree tmpl = NULL_TREE;
2008       tree targs = NULL_TREE;
2009
2010       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2011       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2012         {
2013           tree fns;
2014
2015           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2016           if (ctype)
2017             fns = dname;
2018           else
2019             {
2020               /* If there is no class context, the explicit instantiation
2021                  must be at namespace scope.  */
2022               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2023
2024               /* Find the namespace binding, using the declaration
2025                  context.  */
2026               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2027                                            false, true);
2028               if (fns == error_mark_node || !is_overloaded_fn (fns))
2029                 {
2030                   error ("%qD is not a template function", dname);
2031                   fns = error_mark_node;
2032                 }
2033               else
2034                 {
2035                   tree fn = OVL_CURRENT (fns);
2036                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2037                                                 CP_DECL_CONTEXT (fn)))
2038                     error ("%qD is not declared in %qD",
2039                            decl, current_namespace);
2040                 }
2041             }
2042
2043           declarator = lookup_template_function (fns, NULL_TREE);
2044         }
2045
2046       if (declarator == error_mark_node)
2047         return error_mark_node;
2048
2049       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2050         {
2051           if (!explicit_instantiation)
2052             /* A specialization in class scope.  This is invalid,
2053                but the error will already have been flagged by
2054                check_specialization_scope.  */
2055             return error_mark_node;
2056           else
2057             {
2058               /* It's not valid to write an explicit instantiation in
2059                  class scope, e.g.:
2060
2061                    class C { template void f(); }
2062
2063                    This case is caught by the parser.  However, on
2064                    something like:
2065
2066                    template class C { void f(); };
2067
2068                    (which is invalid) we can get here.  The error will be
2069                    issued later.  */
2070               ;
2071             }
2072
2073           return decl;
2074         }
2075       else if (ctype != NULL_TREE
2076                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2077                    IDENTIFIER_NODE))
2078         {
2079           /* Find the list of functions in ctype that have the same
2080              name as the declared function.  */
2081           tree name = TREE_OPERAND (declarator, 0);
2082           tree fns = NULL_TREE;
2083           int idx;
2084
2085           if (constructor_name_p (name, ctype))
2086             {
2087               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2088
2089               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2090                   : !CLASSTYPE_DESTRUCTORS (ctype))
2091                 {
2092                   /* From [temp.expl.spec]:
2093
2094                      If such an explicit specialization for the member
2095                      of a class template names an implicitly-declared
2096                      special member function (clause _special_), the
2097                      program is ill-formed.
2098
2099                      Similar language is found in [temp.explicit].  */
2100                   error ("specialization of implicitly-declared special member function");
2101                   return error_mark_node;
2102                 }
2103
2104               name = is_constructor ? ctor_identifier : dtor_identifier;
2105             }
2106
2107           if (!DECL_CONV_FN_P (decl))
2108             {
2109               idx = lookup_fnfields_1 (ctype, name);
2110               if (idx >= 0)
2111                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2112             }
2113           else
2114             {
2115               VEC(tree,gc) *methods;
2116               tree ovl;
2117
2118               /* For a type-conversion operator, we cannot do a
2119                  name-based lookup.  We might be looking for `operator
2120                  int' which will be a specialization of `operator T'.
2121                  So, we find *all* the conversion operators, and then
2122                  select from them.  */
2123               fns = NULL_TREE;
2124
2125               methods = CLASSTYPE_METHOD_VEC (ctype);
2126               if (methods)
2127                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2128                      VEC_iterate (tree, methods, idx, ovl);
2129                      ++idx)
2130                   {
2131                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2132                       /* There are no more conversion functions.  */
2133                       break;
2134
2135                     /* Glue all these conversion functions together
2136                        with those we already have.  */
2137                     for (; ovl; ovl = OVL_NEXT (ovl))
2138                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2139                   }
2140             }
2141
2142           if (fns == NULL_TREE)
2143             {
2144               error ("no member function %qD declared in %qT", name, ctype);
2145               return error_mark_node;
2146             }
2147           else
2148             TREE_OPERAND (declarator, 0) = fns;
2149         }
2150
2151       /* Figure out what exactly is being specialized at this point.
2152          Note that for an explicit instantiation, even one for a
2153          member function, we cannot tell apriori whether the
2154          instantiation is for a member template, or just a member
2155          function of a template class.  Even if a member template is
2156          being instantiated, the member template arguments may be
2157          elided if they can be deduced from the rest of the
2158          declaration.  */
2159       tmpl = determine_specialization (declarator, decl,
2160                                        &targs,
2161                                        member_specialization,
2162                                        template_count,
2163                                        tsk);
2164
2165       if (!tmpl || tmpl == error_mark_node)
2166         /* We couldn't figure out what this declaration was
2167            specializing.  */
2168         return error_mark_node;
2169       else
2170         {
2171           tree gen_tmpl = most_general_template (tmpl);
2172
2173           if (explicit_instantiation)
2174             {
2175               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2176                  is done by do_decl_instantiation later.  */
2177
2178               int arg_depth = TMPL_ARGS_DEPTH (targs);
2179               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2180
2181               if (arg_depth > parm_depth)
2182                 {
2183                   /* If TMPL is not the most general template (for
2184                      example, if TMPL is a friend template that is
2185                      injected into namespace scope), then there will
2186                      be too many levels of TARGS.  Remove some of them
2187                      here.  */
2188                   int i;
2189                   tree new_targs;
2190
2191                   new_targs = make_tree_vec (parm_depth);
2192                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2193                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2194                       = TREE_VEC_ELT (targs, i);
2195                   targs = new_targs;
2196                 }
2197
2198               return instantiate_template (tmpl, targs, tf_error);
2199             }
2200
2201           /* If we thought that the DECL was a member function, but it
2202              turns out to be specializing a static member function,
2203              make DECL a static member function as well.  */
2204           if (DECL_STATIC_FUNCTION_P (tmpl)
2205               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2206             revert_static_member_fn (decl);
2207
2208           /* If this is a specialization of a member template of a
2209              template class, we want to return the TEMPLATE_DECL, not
2210              the specialization of it.  */
2211           if (tsk == tsk_template)
2212             {
2213               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2214               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2215               if (have_def)
2216                 {
2217                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2218                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2219                     = DECL_SOURCE_LOCATION (decl);
2220                   /* We want to use the argument list specified in the
2221                      definition, not in the original declaration.  */
2222                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2223                     = DECL_ARGUMENTS (decl);
2224                 }
2225               return tmpl;
2226             }
2227
2228           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2229           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2230
2231           /* Inherit default function arguments from the template
2232              DECL is specializing.  */
2233           copy_default_args_to_explicit_spec (decl);
2234
2235           /* This specialization has the same protection as the
2236              template it specializes.  */
2237           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2238           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2239
2240           /* 7.1.1-1 [dcl.stc]
2241
2242              A storage-class-specifier shall not be specified in an
2243              explicit specialization...
2244
2245              The parser rejects these, so unless action is taken here,
2246              explicit function specializations will always appear with
2247              global linkage.
2248
2249              The action recommended by the C++ CWG in response to C++
2250              defect report 605 is to make the storage class and linkage
2251              of the explicit specialization match the templated function:
2252
2253              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2254            */
2255           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2256             {
2257               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2258               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2259
2260               /* This specialization has the same linkage and visibility as
2261                  the function template it specializes.  */
2262               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2263               if (! TREE_PUBLIC (decl))
2264                 {
2265                   DECL_INTERFACE_KNOWN (decl) = 1;
2266                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2267                 }
2268               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2269               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2270                 {
2271                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2272                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2273                 }
2274             }
2275
2276           /* If DECL is a friend declaration, declared using an
2277              unqualified name, the namespace associated with DECL may
2278              have been set incorrectly.  For example, in:
2279
2280                template <typename T> void f(T);
2281                namespace N {
2282                  struct S { friend void f<int>(int); }
2283                }
2284
2285              we will have set the DECL_CONTEXT for the friend
2286              declaration to N, rather than to the global namespace.  */
2287           if (DECL_NAMESPACE_SCOPE_P (decl))
2288             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2289
2290           if (is_friend && !have_def)
2291             /* This is not really a declaration of a specialization.
2292                It's just the name of an instantiation.  But, it's not
2293                a request for an instantiation, either.  */
2294             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2295           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2296             /* This is indeed a specialization.  In case of constructors
2297                and destructors, we need in-charge and not-in-charge
2298                versions in V3 ABI.  */
2299             clone_function_decl (decl, /*update_method_vec_p=*/0);
2300
2301           /* Register this specialization so that we can find it
2302              again.  */
2303           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2304         }
2305     }
2306
2307   return decl;
2308 }
2309
2310 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2311    parameters.  These are represented in the same format used for
2312    DECL_TEMPLATE_PARMS.  */
2313
2314 int
2315 comp_template_parms (const_tree parms1, const_tree parms2)
2316 {
2317   const_tree p1;
2318   const_tree p2;
2319
2320   if (parms1 == parms2)
2321     return 1;
2322
2323   for (p1 = parms1, p2 = parms2;
2324        p1 != NULL_TREE && p2 != NULL_TREE;
2325        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2326     {
2327       tree t1 = TREE_VALUE (p1);
2328       tree t2 = TREE_VALUE (p2);
2329       int i;
2330
2331       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2332       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2333
2334       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2335         return 0;
2336
2337       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2338         {
2339           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2340           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2341
2342           /* If either of the template parameters are invalid, assume
2343              they match for the sake of error recovery. */
2344           if (parm1 == error_mark_node || parm2 == error_mark_node)
2345             return 1;
2346
2347           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2348             return 0;
2349
2350           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2351               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2352                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2353             continue;
2354           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2355             return 0;
2356         }
2357     }
2358
2359   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2360     /* One set of parameters has more parameters lists than the
2361        other.  */
2362     return 0;
2363
2364   return 1;
2365 }
2366
2367 /* Determine whether PARM is a parameter pack.  */
2368 bool 
2369 template_parameter_pack_p (const_tree parm)
2370 {
2371   /* Determine if we have a non-type template parameter pack.  */
2372   if (TREE_CODE (parm) == PARM_DECL)
2373     return (DECL_TEMPLATE_PARM_P (parm) 
2374             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2375
2376   /* If this is a list of template parameters, we could get a
2377      TYPE_DECL or a TEMPLATE_DECL.  */ 
2378   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2379     parm = TREE_TYPE (parm);
2380
2381   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2382            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2383           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2384 }
2385
2386 /* Determine whether ARGS describes a variadic template args list,
2387    i.e., one that is terminated by a template argument pack.  */
2388 static bool 
2389 template_args_variadic_p (tree args)
2390 {
2391   int nargs;
2392   tree last_parm;
2393
2394   if (args == NULL_TREE)
2395     return false;
2396
2397   args = INNERMOST_TEMPLATE_ARGS (args);
2398   nargs = TREE_VEC_LENGTH (args);
2399
2400   if (nargs == 0)
2401     return false;
2402
2403   last_parm = TREE_VEC_ELT (args, nargs - 1);
2404
2405   return ARGUMENT_PACK_P (last_parm);
2406 }
2407
2408 /* Generate a new name for the parameter pack name NAME (an
2409    IDENTIFIER_NODE) that incorporates its */
2410 static tree
2411 make_ith_pack_parameter_name (tree name, int i)
2412 {
2413   /* Munge the name to include the parameter index.  */
2414   char numbuf[128];
2415   char* newname;
2416   
2417   sprintf(numbuf, "%i", i);
2418   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2419   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2420   return get_identifier (newname);
2421 }
2422
2423 /* Structure used to track the progress of find_parameter_packs_r.  */
2424 struct find_parameter_pack_data 
2425 {
2426   /* TREE_LIST that will contain all of the parameter packs found by
2427      the traversal.  */
2428   tree* parameter_packs;
2429
2430   /* Set of AST nodes that have been visited by the traversal.  */
2431   struct pointer_set_t *visited;
2432
2433   /* Whether we should replace parameter packs with
2434      ERROR_MARK_NODE. Used by check_for_bare_parameter_packs.  */
2435   bool set_packs_to_error;
2436 };
2437
2438 /* Identifies all of the argument packs that occur in a template
2439    argument and appends them to the TREE_LIST inside DATA, which is a
2440    find_parameter_pack_data structure. This is a subroutine of
2441    make_pack_expansion and uses_parameter_packs.  */
2442 static tree
2443 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2444 {
2445   tree t = *tp;
2446   struct find_parameter_pack_data* ppd = 
2447     (struct find_parameter_pack_data*)data;
2448   bool parameter_pack_p = false;
2449
2450   /* Don't visit nodes twice, except when we're clearing out parameter
2451      packs.  */
2452   if (pointer_set_contains (ppd->visited, *tp))
2453     {
2454       *walk_subtrees = 0;
2455       return NULL_TREE;
2456     }
2457
2458 recheck:
2459   /* Identify whether this is a parameter pack or not.  */
2460   switch (TREE_CODE (t))
2461     {
2462     case TEMPLATE_PARM_INDEX:
2463       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2464         parameter_pack_p = true;
2465       break;
2466
2467     case TEMPLATE_TYPE_PARM:
2468     case TEMPLATE_TEMPLATE_PARM:
2469       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2470         parameter_pack_p = true;
2471       break;
2472
2473     case PARM_DECL:
2474       if (FUNCTION_PARAMETER_PACK_P (t))
2475         {
2476           /* We don't want to walk into the type of a PARM_DECL,
2477              because we don't want to see the type parameter pack.  */
2478           *walk_subtrees = 0;
2479           parameter_pack_p = true;
2480         }
2481       break;
2482
2483     case POINTER_TYPE:
2484       if (ppd->set_packs_to_error)
2485         /* Pointer types are shared, set in that case the outermost
2486            POINTER_TYPE to error_mark_node rather than the parameter pack.  */
2487         {
2488           t = TREE_TYPE (t);
2489           goto recheck;
2490         }
2491       break;
2492
2493     default:
2494       /* Not a parameter pack.  */
2495       break;
2496     }
2497
2498   if (parameter_pack_p)
2499     {
2500       /* Add this parameter pack to the list.  */
2501       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2502
2503       if (ppd->set_packs_to_error)
2504         /* The caller requested that we set the parameter packs to
2505            ERROR_MARK_NODE so that they will not trip up the compiler
2506            later.  The caller is responsible for emitting an error.  */
2507         *tp = error_mark_node;
2508       else
2509         /* Make sure we do not visit this node again.  */
2510         pointer_set_insert (ppd->visited, *tp);
2511     }
2512   else
2513     /* Make sure we do not visit this node again.  */
2514     pointer_set_insert (ppd->visited, *tp);
2515
2516   if (TYPE_P (t))
2517     cp_walk_tree (&TYPE_CONTEXT (t), 
2518                   &find_parameter_packs_r, ppd, NULL);
2519
2520   /* This switch statement will return immediately if we don't find a
2521      parameter pack.  */
2522   switch (TREE_CODE (t)) 
2523     {
2524     case TEMPLATE_PARM_INDEX:
2525       return NULL_TREE;
2526
2527     case BOUND_TEMPLATE_TEMPLATE_PARM:
2528       /* Check the template itself.  */
2529       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
2530                     &find_parameter_packs_r, ppd, NULL);
2531       /* Check the template arguments.  */
2532       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2533                     NULL);
2534       *walk_subtrees = 0;
2535       return NULL_TREE;
2536
2537     case TEMPLATE_TYPE_PARM:
2538     case TEMPLATE_TEMPLATE_PARM:
2539       return NULL_TREE;
2540
2541     case PARM_DECL:
2542       return NULL_TREE;
2543
2544     case RECORD_TYPE:
2545       if (TYPE_PTRMEMFUNC_P (t))
2546         return NULL_TREE;
2547       /* Fall through.  */
2548
2549     case UNION_TYPE:
2550     case ENUMERAL_TYPE:
2551       if (TYPE_TEMPLATE_INFO (t))
2552         cp_walk_tree (&TREE_VALUE (TYPE_TEMPLATE_INFO (t)), 
2553                       &find_parameter_packs_r, ppd, NULL);
2554
2555       *walk_subtrees = 0;
2556       return NULL_TREE;
2557
2558     case TEMPLATE_DECL:
2559       cp_walk_tree (&TREE_TYPE (t),
2560                     &find_parameter_packs_r, ppd, NULL);
2561       return NULL_TREE;
2562  
2563     case TYPENAME_TYPE:
2564       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
2565                    ppd, NULL);
2566       *walk_subtrees = 0;
2567       return NULL_TREE;
2568       
2569     case TYPE_PACK_EXPANSION:
2570     case EXPR_PACK_EXPANSION:
2571       *walk_subtrees = 0;
2572       return NULL_TREE;
2573
2574     case INTEGER_TYPE:
2575       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2576                     ppd, NULL);
2577       *walk_subtrees = 0;
2578       return NULL_TREE;
2579
2580     default:
2581       return NULL_TREE;
2582     }
2583
2584   return NULL_TREE;
2585 }
2586
2587 /* Determines if the expression or type T uses any parameter packs.  */
2588 bool
2589 uses_parameter_packs (tree t)
2590 {
2591   tree parameter_packs = NULL_TREE;
2592   struct find_parameter_pack_data ppd;
2593   ppd.parameter_packs = &parameter_packs;
2594   ppd.visited = pointer_set_create ();
2595   ppd.set_packs_to_error = false;
2596   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, NULL);
2597   pointer_set_destroy (ppd.visited);
2598   return parameter_packs != NULL_TREE;
2599 }
2600
2601 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2602    representation a base-class initializer into a parameter pack
2603    expansion. If all goes well, the resulting node will be an
2604    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2605    respectively.  */
2606 tree 
2607 make_pack_expansion (tree arg)
2608 {
2609   tree result;
2610   tree parameter_packs = NULL_TREE;
2611   bool for_types = false;
2612   struct find_parameter_pack_data ppd;
2613
2614   ppd.set_packs_to_error = false;
2615
2616   if (!arg || arg == error_mark_node)
2617     return arg;
2618
2619   if (TREE_CODE (arg) == TREE_LIST)
2620     {
2621       /* The only time we will see a TREE_LIST here is for a base
2622          class initializer.  In this case, the TREE_PURPOSE will be a
2623          _TYPE node (representing the base class expansion we're
2624          initializing) and the TREE_VALUE will be a TREE_LIST
2625          containing the initialization arguments. 
2626
2627          The resulting expansion looks somewhat different from most
2628          expansions. Rather than returning just one _EXPANSION, we
2629          return a TREE_LIST whose TREE_PURPOSE is a
2630          TYPE_PACK_EXPANSION containing the bases that will be
2631          initialized.  The TREE_VALUE will be identical to the
2632          original TREE_VALUE, which is a list of arguments that will
2633          be passed to each base.  We do not introduce any new pack
2634          expansion nodes into the TREE_VALUE (although it is possible
2635          that some already exist), because the TREE_PURPOSE and
2636          TREE_VALUE all need to be expanded together with the same
2637          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2638          resulting TREE_PURPOSE will mention the parameter packs in
2639          both the bases and the arguments to the bases.  */
2640       tree purpose;
2641       tree value;
2642       tree parameter_packs = NULL_TREE;
2643
2644       /* Determine which parameter packs will be used by the base
2645          class expansion.  */
2646       ppd.visited = pointer_set_create ();
2647       ppd.parameter_packs = &parameter_packs;
2648       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2649                     &ppd, NULL);
2650
2651       if (parameter_packs == NULL_TREE)
2652         {
2653           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2654           pointer_set_destroy (ppd.visited);
2655           return error_mark_node;
2656         }
2657
2658       if (TREE_VALUE (arg) != void_type_node)
2659         {
2660           /* Collect the sets of parameter packs used in each of the
2661              initialization arguments.  */
2662           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2663             {
2664               /* Determine which parameter packs will be expanded in this
2665                  argument.  */
2666               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2667                             &ppd, NULL);
2668             }
2669         }
2670
2671       pointer_set_destroy (ppd.visited);
2672
2673       /* Create the pack expansion type for the base type.  */
2674       purpose = make_node (TYPE_PACK_EXPANSION);
2675       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2676       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2677
2678       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2679          they will rarely be compared to anything.  */
2680       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2681
2682       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2683     }
2684
2685   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2686     for_types = true;
2687
2688   /* Build the PACK_EXPANSION_* node.  */
2689   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2690   SET_PACK_EXPANSION_PATTERN (result, arg);
2691   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2692     {
2693       /* Propagate type and const-expression information.  */
2694       TREE_TYPE (result) = TREE_TYPE (arg);
2695       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2696     }
2697   else
2698     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2699        they will rarely be compared to anything.  */
2700     SET_TYPE_STRUCTURAL_EQUALITY (result);
2701
2702   /* Determine which parameter packs will be expanded.  */
2703   ppd.parameter_packs = &parameter_packs;
2704   ppd.visited = pointer_set_create ();
2705   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, NULL);
2706   pointer_set_destroy (ppd.visited);
2707
2708   /* Make sure we found some parameter packs.  */
2709   if (parameter_packs == NULL_TREE)
2710     {
2711       if (TYPE_P (arg))
2712         error ("expansion pattern %<%T%> contains no argument packs", arg);
2713       else
2714         error ("expansion pattern %<%E%> contains no argument packs", arg);
2715       return error_mark_node;
2716     }
2717   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2718
2719   return result;
2720 }
2721
2722 /* Checks T for any "bare" parameter packs, which have not yet been
2723    expanded, and issues an error if any are found. This operation can
2724    only be done on full expressions or types (e.g., an expression
2725    statement, "if" condition, etc.), because we could have expressions like:
2726
2727      foo(f(g(h(args)))...)
2728
2729    where "args" is a parameter pack. check_for_bare_parameter_packs
2730    should not be called for the subexpressions args, h(args),
2731    g(h(args)), or f(g(h(args))), because we would produce erroneous
2732    error messages. 
2733
2734    Returns TRUE if there were no bare parameter packs, returns FALSE
2735    (and emits an error) if there were bare parameter packs.*/
2736 bool 
2737 check_for_bare_parameter_packs (tree* t)
2738 {
2739   tree parameter_packs = NULL_TREE;
2740   struct find_parameter_pack_data ppd;
2741
2742   if (!processing_template_decl || !t || !*t || *t == error_mark_node)
2743     return true;
2744
2745   if (TREE_CODE (*t) == TYPE_DECL)
2746     t = &TREE_TYPE (*t);
2747
2748   ppd.parameter_packs = &parameter_packs;
2749   ppd.visited = pointer_set_create ();
2750   ppd.set_packs_to_error = false;
2751   cp_walk_tree (t, &find_parameter_packs_r, &ppd, NULL);
2752   pointer_set_destroy (ppd.visited);
2753
2754   if (parameter_packs) 
2755     {
2756       error ("parameter packs not expanded with `...':");
2757       while (parameter_packs)
2758         {
2759           tree pack = TREE_VALUE (parameter_packs);
2760           tree name = NULL_TREE;
2761
2762           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2763               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2764             name = TYPE_NAME (pack);
2765           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2766             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2767           else
2768             name = DECL_NAME (pack);
2769
2770           if (name)
2771             inform ("        %qD", name);
2772           else
2773             inform ("        <anonymous>");
2774
2775           parameter_packs = TREE_CHAIN (parameter_packs);
2776         }
2777
2778       /* Clean up any references to these parameter packs within the
2779          tree.  */
2780       ppd.parameter_packs = &parameter_packs;
2781       ppd.visited = pointer_set_create ();
2782       ppd.set_packs_to_error = true;
2783       cp_walk_tree (t, &find_parameter_packs_r, &ppd, NULL);
2784       pointer_set_destroy (ppd.visited);
2785
2786       return false;
2787     }
2788
2789   return true;
2790 }
2791
2792 /* Expand any parameter packs that occur in the template arguments in
2793    ARGS.  */
2794 tree
2795 expand_template_argument_pack (tree args)
2796 {
2797   tree result_args = NULL_TREE;
2798   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2799   int num_result_args = -1;
2800
2801   /* First, determine if we need to expand anything, and the number of
2802      slots we'll need.  */
2803   for (in_arg = 0; in_arg < nargs; ++in_arg)
2804     {
2805       tree arg = TREE_VEC_ELT (args, in_arg);
2806       if (ARGUMENT_PACK_P (arg))
2807         {
2808           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2809           if (num_result_args < 0)
2810             num_result_args = in_arg + num_packed;
2811           else
2812             num_result_args += num_packed;
2813         }
2814       else
2815         {
2816           if (num_result_args >= 0)
2817             num_result_args++;
2818         }
2819     }
2820
2821   /* If no expansion is necessary, we're done.  */
2822   if (num_result_args < 0)
2823     return args;
2824
2825   /* Expand arguments.  */
2826   result_args = make_tree_vec (num_result_args);
2827   for (in_arg = 0; in_arg < nargs; ++in_arg)
2828     {
2829       tree arg = TREE_VEC_ELT (args, in_arg);
2830       if (ARGUMENT_PACK_P (arg))
2831         {
2832           tree packed = ARGUMENT_PACK_ARGS (arg);
2833           int i, num_packed = TREE_VEC_LENGTH (packed);
2834           for (i = 0; i < num_packed; ++i, ++out_arg)
2835             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2836         }
2837       else
2838         {
2839           TREE_VEC_ELT (result_args, out_arg) = arg;
2840           ++out_arg;
2841         }
2842     }
2843
2844   return result_args;
2845 }
2846
2847 /* Complain if DECL shadows a template parameter.
2848
2849    [temp.local]: A template-parameter shall not be redeclared within its
2850    scope (including nested scopes).  */
2851
2852 void
2853 check_template_shadow (tree decl)
2854 {
2855   tree olddecl;
2856
2857   /* If we're not in a template, we can't possibly shadow a template
2858      parameter.  */
2859   if (!current_template_parms)
2860     return;
2861
2862   /* Figure out what we're shadowing.  */
2863   if (TREE_CODE (decl) == OVERLOAD)
2864     decl = OVL_CURRENT (decl);
2865   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2866
2867   /* If there's no previous binding for this name, we're not shadowing
2868      anything, let alone a template parameter.  */
2869   if (!olddecl)
2870     return;
2871
2872   /* If we're not shadowing a template parameter, we're done.  Note
2873      that OLDDECL might be an OVERLOAD (or perhaps even an
2874      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2875      node.  */
2876   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2877     return;
2878
2879   /* We check for decl != olddecl to avoid bogus errors for using a
2880      name inside a class.  We check TPFI to avoid duplicate errors for
2881      inline member templates.  */
2882   if (decl == olddecl
2883       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2884     return;
2885
2886   error ("declaration of %q+#D", decl);
2887   error (" shadows template parm %q+#D", olddecl);
2888 }
2889
2890 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2891    ORIG_LEVEL, DECL, and TYPE.  */
2892
2893 static tree
2894 build_template_parm_index (int index,
2895                            int level,
2896                            int orig_level,
2897                            tree decl,
2898                            tree type)
2899 {
2900   tree t = make_node (TEMPLATE_PARM_INDEX);
2901   TEMPLATE_PARM_IDX (t) = index;
2902   TEMPLATE_PARM_LEVEL (t) = level;
2903   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2904   TEMPLATE_PARM_DECL (t) = decl;
2905   TREE_TYPE (t) = type;
2906   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2907   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2908   TREE_READONLY (t) = TREE_READONLY (decl);
2909
2910   return t;
2911 }
2912
2913 /* Find the canonical type parameter for the given template type
2914    parameter.  Returns the canonical type parameter, which may be TYPE
2915    if no such parameter existed.  */
2916 static tree
2917 canonical_type_parameter (tree type)
2918 {
2919   tree list;
2920   int idx = TEMPLATE_TYPE_IDX (type);
2921   if (!canonical_template_parms)
2922     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2923
2924   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2925     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2926
2927   list = VEC_index (tree, canonical_template_parms, idx);
2928   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2929     list = TREE_CHAIN (list);
2930
2931   if (list)
2932     return TREE_VALUE (list);
2933   else
2934     {
2935       VEC_replace(tree, canonical_template_parms, idx,
2936                   tree_cons (NULL_TREE, type, 
2937                              VEC_index (tree, canonical_template_parms, idx)));
2938       return type;
2939     }
2940 }
2941
2942 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2943    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2944    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2945    new one is created.  */
2946
2947 static tree
2948 reduce_template_parm_level (tree index, tree type, int levels, tree args,
2949                             tsubst_flags_t complain)
2950 {
2951   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2952       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2953           != TEMPLATE_PARM_LEVEL (index) - levels))
2954     {
2955       tree orig_decl = TEMPLATE_PARM_DECL (index);
2956       tree decl, t;
2957
2958       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2959       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2960       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2961       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2962       DECL_ARTIFICIAL (decl) = 1;
2963       SET_DECL_TEMPLATE_PARM_P (decl);
2964
2965       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2966                                      TEMPLATE_PARM_LEVEL (index) - levels,
2967                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2968                                      decl, type);
2969       TEMPLATE_PARM_DESCENDANTS (index) = t;
2970       TEMPLATE_PARM_PARAMETER_PACK (t) 
2971         = TEMPLATE_PARM_PARAMETER_PACK (index);
2972
2973         /* Template template parameters need this.  */
2974       if (TREE_CODE (decl) == TEMPLATE_DECL)
2975         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
2976           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
2977            args, complain);
2978     }
2979
2980   return TEMPLATE_PARM_DESCENDANTS (index);
2981 }
2982
2983 /* Process information from new template parameter PARM and append it to the
2984    LIST being built.  This new parameter is a non-type parameter iff
2985    IS_NON_TYPE is true. This new parameter is a parameter
2986    pack iff IS_PARAMETER_PACK is true.  */
2987
2988 tree
2989 process_template_parm (tree list, tree parm, bool is_non_type, 
2990                        bool is_parameter_pack)
2991 {
2992   tree decl = 0;
2993   tree defval;
2994   tree err_parm_list;
2995   int idx = 0;
2996
2997   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2998   defval = TREE_PURPOSE (parm);
2999
3000   if (list)
3001     {
3002       tree p = tree_last (list);
3003
3004       if (p && TREE_VALUE (p) != error_mark_node)
3005         {
3006           p = TREE_VALUE (p);
3007           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3008             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3009           else
3010             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3011         }
3012
3013       ++idx;
3014     }
3015   else
3016     idx = 0;
3017
3018   if (is_non_type)
3019     {
3020       parm = TREE_VALUE (parm);
3021
3022       SET_DECL_TEMPLATE_PARM_P (parm);
3023
3024       if (TREE_TYPE (parm) == error_mark_node)
3025         {
3026           err_parm_list = build_tree_list (defval, parm);
3027           TREE_VALUE (err_parm_list) = error_mark_node;
3028            return chainon (list, err_parm_list);
3029         }
3030       else
3031       {
3032         /* [temp.param]
3033
3034            The top-level cv-qualifiers on the template-parameter are
3035            ignored when determining its type.  */
3036         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3037         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3038           {
3039             err_parm_list = build_tree_list (defval, parm);
3040             TREE_VALUE (err_parm_list) = error_mark_node;
3041              return chainon (list, err_parm_list);
3042           }
3043
3044         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3045           {
3046             /* This template parameter is not a parameter pack, but it
3047                should be. Complain about "bare" parameter packs.  */
3048             check_for_bare_parameter_packs (&TREE_TYPE (parm));
3049             
3050             /* Recover by calling this a parameter pack.  */
3051             is_parameter_pack = true;
3052           }
3053       }
3054
3055       /* A template parameter is not modifiable.  */
3056       TREE_CONSTANT (parm) = 1;
3057       TREE_INVARIANT (parm) = 1;
3058       TREE_READONLY (parm) = 1;
3059       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3060       TREE_CONSTANT (decl) = 1;
3061       TREE_INVARIANT (decl) = 1;
3062       TREE_READONLY (decl) = 1;
3063       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3064         = build_template_parm_index (idx, processing_template_decl,
3065                                      processing_template_decl,
3066                                      decl, TREE_TYPE (parm));
3067
3068       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3069         = is_parameter_pack;
3070     }
3071   else
3072     {
3073       tree t;
3074       parm = TREE_VALUE (TREE_VALUE (parm));
3075
3076       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3077         {
3078           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
3079           /* This is for distinguishing between real templates and template
3080              template parameters */
3081           TREE_TYPE (parm) = t;
3082           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3083           decl = parm;
3084         }
3085       else
3086         {
3087           t = make_aggr_type (TEMPLATE_TYPE_PARM);
3088           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3089           decl = build_decl (TYPE_DECL, parm, t);
3090         }
3091
3092       TYPE_NAME (t) = decl;
3093       TYPE_STUB_DECL (t) = decl;
3094       parm = decl;
3095       TEMPLATE_TYPE_PARM_INDEX (t)
3096         = build_template_parm_index (idx, processing_template_decl,
3097                                      processing_template_decl,
3098                                      decl, TREE_TYPE (parm));
3099       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3100       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3101     }
3102   DECL_ARTIFICIAL (decl) = 1;
3103   SET_DECL_TEMPLATE_PARM_P (decl);
3104   pushdecl (decl);
3105   parm = build_tree_list (defval, parm);
3106   return chainon (list, parm);
3107 }
3108
3109 /* The end of a template parameter list has been reached.  Process the
3110    tree list into a parameter vector, converting each parameter into a more
3111    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3112    as PARM_DECLs.  */
3113
3114 tree
3115 end_template_parm_list (tree parms)
3116 {
3117   int nparms;
3118   tree parm, next;
3119   tree saved_parmlist = make_tree_vec (list_length (parms));
3120
3121   current_template_parms
3122     = tree_cons (size_int (processing_template_decl),
3123                  saved_parmlist, current_template_parms);
3124
3125   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3126     {
3127       next = TREE_CHAIN (parm);
3128       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3129       TREE_CHAIN (parm) = NULL_TREE;
3130     }
3131
3132   --processing_template_parmlist;
3133
3134   return saved_parmlist;
3135 }
3136
3137 /* end_template_decl is called after a template declaration is seen.  */
3138
3139 void
3140 end_template_decl (void)
3141 {
3142   reset_specialization ();
3143
3144   if (! processing_template_decl)
3145     return;
3146
3147   /* This matches the pushlevel in begin_template_parm_list.  */
3148   finish_scope ();
3149
3150   --processing_template_decl;
3151   current_template_parms = TREE_CHAIN (current_template_parms);
3152 }
3153
3154 /* Within the declaration of a template, return all levels of template
3155    parameters that apply.  The template parameters are represented as
3156    a TREE_VEC, in the form documented in cp-tree.h for template
3157    arguments.  */
3158
3159 static tree
3160 current_template_args (void)
3161 {
3162   tree header;
3163   tree args = NULL_TREE;
3164   int length = TMPL_PARMS_DEPTH (current_template_parms);
3165   int l = length;
3166
3167   /* If there is only one level of template parameters, we do not
3168      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3169      TREE_VEC containing the arguments.  */
3170   if (length > 1)
3171     args = make_tree_vec (length);
3172
3173   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3174     {
3175       tree a = copy_node (TREE_VALUE (header));
3176       int i;
3177
3178       TREE_TYPE (a) = NULL_TREE;
3179       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3180         {
3181           tree t = TREE_VEC_ELT (a, i);
3182
3183           /* T will be a list if we are called from within a
3184              begin/end_template_parm_list pair, but a vector directly
3185              if within a begin/end_member_template_processing pair.  */
3186           if (TREE_CODE (t) == TREE_LIST)
3187             {
3188               t = TREE_VALUE (t);
3189
3190               if (!error_operand_p (t))
3191                 {
3192                   if (TREE_CODE (t) == TYPE_DECL
3193                       || TREE_CODE (t) == TEMPLATE_DECL)
3194                     {
3195                       t = TREE_TYPE (t);
3196                       
3197                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3198                         {
3199                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3200                              with a single element, which expands T.  */
3201                           tree vec = make_tree_vec (1);
3202                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3203                           
3204                           t = make_node (TYPE_ARGUMENT_PACK);
3205                           SET_ARGUMENT_PACK_ARGS (t, vec);
3206                         }
3207                     }
3208                   else
3209                     {
3210                       t = DECL_INITIAL (t);
3211                       
3212                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3213                         {
3214                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3215                              with a single element, which expands T.  */
3216                           tree vec = make_tree_vec (1);
3217                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3218                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3219                           
3220                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3221                           SET_ARGUMENT_PACK_ARGS (t, vec);
3222                           TREE_TYPE (t) = type;
3223                         }
3224                     }
3225                   TREE_VEC_ELT (a, i) = t;
3226                 }
3227             }
3228         }
3229
3230       if (length > 1)
3231         TREE_VEC_ELT (args, --l) = a;
3232       else
3233         args = a;
3234     }
3235
3236   return args;
3237 }
3238
3239 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3240    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3241    a member template.  Used by push_template_decl below.  */
3242
3243 static tree
3244 build_template_decl (tree decl, tree parms, bool member_template_p)
3245 {
3246   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3247   DECL_TEMPLATE_PARMS (tmpl) = parms;
3248   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3249   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3250   if (DECL_LANG_SPECIFIC (decl))
3251     {
3252       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3253       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3254       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3255       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3256       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3257       if (DECL_OVERLOADED_OPERATOR_P (decl))
3258         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3259                                       DECL_OVERLOADED_OPERATOR_P (decl));
3260     }
3261
3262   return tmpl;
3263 }
3264
3265 struct template_parm_data
3266 {
3267   /* The level of the template parameters we are currently
3268      processing.  */
3269   int level;
3270
3271   /* The index of the specialization argument we are currently
3272      processing.  */
3273   int current_arg;
3274
3275   /* An array whose size is the number of template parameters.  The
3276      elements are nonzero if the parameter has been used in any one
3277      of the arguments processed so far.  */
3278   int* parms;
3279
3280   /* An array whose size is the number of template arguments.  The
3281      elements are nonzero if the argument makes use of template
3282      parameters of this level.  */
3283   int* arg_uses_template_parms;
3284 };
3285
3286 /* Subroutine of push_template_decl used to see if each template
3287    parameter in a partial specialization is used in the explicit
3288    argument list.  If T is of the LEVEL given in DATA (which is
3289    treated as a template_parm_data*), then DATA->PARMS is marked
3290    appropriately.  */
3291
3292 static int
3293 mark_template_parm (tree t, void* data)
3294 {
3295   int level;
3296   int idx;
3297   struct template_parm_data* tpd = (struct template_parm_data*) data;
3298
3299   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3300     {
3301       level = TEMPLATE_PARM_LEVEL (t);
3302       idx = TEMPLATE_PARM_IDX (t);
3303     }
3304   else
3305     {
3306       level = TEMPLATE_TYPE_LEVEL (t);
3307       idx = TEMPLATE_TYPE_IDX (t);
3308     }
3309
3310   if (level == tpd->level)
3311     {
3312       tpd->parms[idx] = 1;
3313       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3314     }
3315
3316   /* Return zero so that for_each_template_parm will continue the
3317      traversal of the tree; we want to mark *every* template parm.  */
3318   return 0;
3319 }
3320
3321 /* Process the partial specialization DECL.  */
3322
3323 static tree
3324 process_partial_specialization (tree decl)
3325 {
3326   tree type = TREE_TYPE (decl);
3327   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3328   tree specargs = CLASSTYPE_TI_ARGS (type);
3329   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3330   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3331   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3332   int nargs = TREE_VEC_LENGTH (inner_args);
3333   int ntparms = TREE_VEC_LENGTH (inner_parms);
3334   int  i;
3335   int did_error_intro = 0;
3336   struct template_parm_data tpd;
3337   struct template_parm_data tpd2;
3338
3339   /* We check that each of the template parameters given in the
3340      partial specialization is used in the argument list to the
3341      specialization.  For example:
3342
3343        template <class T> struct S;
3344        template <class T> struct S<T*>;
3345
3346      The second declaration is OK because `T*' uses the template
3347      parameter T, whereas
3348
3349        template <class T> struct S<int>;
3350
3351      is no good.  Even trickier is:
3352
3353        template <class T>
3354        struct S1
3355        {
3356           template <class U>
3357           struct S2;
3358           template <class U>
3359           struct S2<T>;
3360        };
3361
3362      The S2<T> declaration is actually invalid; it is a
3363      full-specialization.  Of course,
3364
3365           template <class U>
3366           struct S2<T (*)(U)>;
3367
3368      or some such would have been OK.  */
3369   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3370   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3371   memset (tpd.parms, 0, sizeof (int) * ntparms);
3372
3373   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3374   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3375   for (i = 0; i < nargs; ++i)
3376     {
3377       tpd.current_arg = i;
3378       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3379                               &mark_template_parm,
3380                               &tpd,
3381                               NULL);
3382     }
3383   for (i = 0; i < ntparms; ++i)
3384     if (tpd.parms[i] == 0)
3385       {
3386         /* One of the template parms was not used in the
3387            specialization.  */
3388         if (!did_error_intro)
3389           {
3390             error ("template parameters not used in partial specialization:");
3391             did_error_intro = 1;
3392           }
3393
3394         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3395       }
3396
3397   /* [temp.class.spec]
3398
3399      The argument list of the specialization shall not be identical to
3400      the implicit argument list of the primary template.  */
3401   if (comp_template_args
3402       (inner_args,
3403        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3404                                                    (maintmpl)))))
3405     error ("partial specialization %qT does not specialize any template arguments", type);
3406
3407   /* [temp.class.spec]
3408
3409      A partially specialized non-type argument expression shall not
3410      involve template parameters of the partial specialization except
3411      when the argument expression is a simple identifier.
3412
3413      The type of a template parameter corresponding to a specialized
3414      non-type argument shall not be dependent on a parameter of the
3415      specialization. 
3416
3417      Also, we verify that pack expansions only occur at the
3418      end of the argument list.  */
3419   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3420   tpd2.parms = 0;
3421   for (i = 0; i < nargs; ++i)
3422     {
3423       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3424       tree arg = TREE_VEC_ELT (inner_args, i);
3425       tree packed_args = NULL_TREE;
3426       int j, len = 1;
3427
3428       if (ARGUMENT_PACK_P (arg))
3429         {
3430           /* Extract the arguments from the argument pack. We'll be
3431              iterating over these in the following loop.  */
3432           packed_args = ARGUMENT_PACK_ARGS (arg);
3433           len = TREE_VEC_LENGTH (packed_args);
3434         }
3435
3436       for (j = 0; j < len; j++)
3437         {
3438           if (packed_args)
3439             /* Get the Jth argument in the parameter pack.  */
3440             arg = TREE_VEC_ELT (packed_args, j);
3441
3442           if (PACK_EXPANSION_P (arg))
3443             {
3444               /* Pack expansions must come at the end of the
3445                  argument list.  */
3446               if ((packed_args && j < len - 1)
3447                   || (!packed_args && i < nargs - 1))
3448                 {
3449                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3450                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3451                   else
3452                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);
3453
3454                   if (packed_args)
3455                     TREE_VEC_ELT (packed_args, j) = error_mark_node;
3456                 }
3457             }
3458
3459           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3460             /* We only care about the pattern.  */
3461             arg = PACK_EXPANSION_PATTERN (arg);
3462
3463           if (/* These first two lines are the `non-type' bit.  */
3464               !TYPE_P (arg)
3465               && TREE_CODE (arg) != TEMPLATE_DECL
3466               /* This next line is the `argument expression is not just a
3467                  simple identifier' condition and also the `specialized
3468                  non-type argument' bit.  */
3469               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3470             {
3471               if ((!packed_args && tpd.arg_uses_template_parms[i])
3472                   || (packed_args && uses_template_parms (arg)))
3473                 error ("template argument %qE involves template parameter(s)",
3474                        arg);
3475               else 
3476                 {
3477                   /* Look at the corresponding template parameter,
3478                      marking which template parameters its type depends
3479                      upon.  */
3480                   tree type = TREE_TYPE (parm);
3481
3482                   if (!tpd2.parms)
3483                     {
3484                       /* We haven't yet initialized TPD2.  Do so now.  */
3485                       tpd2.arg_uses_template_parms 
3486                         = (int *) alloca (sizeof (int) * nargs);
3487                       /* The number of parameters here is the number in the
3488                          main template, which, as checked in the assertion
3489                          above, is NARGS.  */
3490                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3491                       tpd2.level = 
3492                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3493                     }
3494
3495                   /* Mark the template parameters.  But this time, we're
3496                      looking for the template parameters of the main
3497                      template, not in the specialization.  */
3498                   tpd2.current_arg = i;
3499                   tpd2.arg_uses_template_parms[i] = 0;
3500                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3501                   for_each_template_parm (type,
3502                                           &mark_template_parm,
3503                                           &tpd2,
3504                                           NULL);
3505
3506                   if (tpd2.arg_uses_template_parms [i])
3507                     {
3508                       /* The type depended on some template parameters.
3509                          If they are fully specialized in the
3510                          specialization, that's OK.  */
3511                       int j;
3512                       for (j = 0; j < nargs; ++j)
3513                         if (tpd2.parms[j] != 0
3514                             && tpd.arg_uses_template_parms [j])
3515                           {
3516                             error ("type %qT of template argument %qE depends "
3517                                    "on template parameter(s)", 
3518                                    type,
3519                                    arg);
3520                             break;
3521                           }
3522                     }
3523                 }
3524             }
3525         }
3526     }
3527
3528   if (retrieve_specialization (maintmpl, specargs,
3529                                /*class_specializations_p=*/true))
3530     /* We've already got this specialization.  */
3531     return decl;
3532
3533   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3534     = tree_cons (specargs, inner_parms,
3535                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3536   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3537   return decl;
3538 }
3539
3540 /* Check that a template declaration's use of default arguments is not
3541    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
3542    nonzero if DECL is the thing declared by a primary template.
3543    IS_PARTIAL is nonzero if DECL is a partial specialization.
3544    
3545
3546    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3547    declaration (but not a definition); 1 indicates a declaration, 2
3548    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3549    emitted for extraneous default arguments.
3550
3551    Returns TRUE if there were no errors found, FALSE otherwise. */
3552
3553 bool
3554 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3555                          int is_partial, int is_friend_decl)
3556 {
3557   const char *msg;
3558   int last_level_to_check;
3559   tree parm_level;
3560   bool no_errors = true;
3561
3562   /* [temp.param]
3563
3564      A default template-argument shall not be specified in a
3565      function template declaration or a function template definition, nor
3566      in the template-parameter-list of the definition of a member of a
3567      class template.  */
3568
3569   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3570     /* You can't have a function template declaration in a local
3571        scope, nor you can you define a member of a class template in a
3572        local scope.  */
3573     return true;
3574
3575   if (current_class_type
3576       && !TYPE_BEING_DEFINED (current_class_type)
3577       && DECL_LANG_SPECIFIC (decl)
3578       /* If this is either a friend defined in the scope of the class
3579          or a member function.  */
3580       && (DECL_FUNCTION_MEMBER_P (decl)
3581           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3582           : DECL_FRIEND_CONTEXT (decl)
3583           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3584           : false)
3585       /* And, if it was a member function, it really was defined in
3586          the scope of the class.  */
3587       && (!DECL_FUNCTION_MEMBER_P (decl)
3588           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3589     /* We already checked these parameters when the template was
3590        declared, so there's no need to do it again now.  This function
3591        was defined in class scope, but we're processing it's body now
3592        that the class is complete.  */
3593     return true;
3594
3595   /* Core issue 226 (C++0x only): the following only applies to class
3596      templates.  */
3597   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3598     {
3599       /* [temp.param]
3600
3601          If a template-parameter has a default template-argument, all
3602          subsequent template-parameters shall have a default
3603          template-argument supplied.  */
3604       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3605         {
3606           tree inner_parms = TREE_VALUE (parm_level);
3607           int ntparms = TREE_VEC_LENGTH (inner_parms);
3608           int seen_def_arg_p = 0;
3609           int i;
3610
3611           for (i = 0; i < ntparms; ++i)
3612             {
3613               tree parm = TREE_VEC_ELT (inner_parms, i);
3614
3615               if (parm == error_mark_node)
3616                 continue;
3617
3618               if (TREE_PURPOSE (parm))
3619                 seen_def_arg_p = 1;
3620               else if (seen_def_arg_p)
3621                 {
3622                   error ("no default argument for %qD", TREE_VALUE (parm));
3623                   /* For better subsequent error-recovery, we indicate that
3624                      there should have been a default argument.  */
3625                   TREE_PURPOSE (parm) = error_mark_node;
3626                   no_errors = false;
3627                 }
3628             }
3629         }
3630     }
3631
3632   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3633       || is_partial 
3634       || !is_primary
3635       || is_friend_decl)
3636     /* For an ordinary class template, default template arguments are
3637        allowed at the innermost level, e.g.:
3638          template <class T = int>
3639          struct S {};
3640        but, in a partial specialization, they're not allowed even
3641        there, as we have in [temp.class.spec]:
3642
3643          The template parameter list of a specialization shall not
3644          contain default template argument values.
3645
3646        So, for a partial specialization, or for a function template
3647        (in C++98/C++03), we look at all of them.  */
3648     ;
3649   else
3650     /* But, for a primary class template that is not a partial
3651        specialization we look at all template parameters except the
3652        innermost ones.  */
3653     parms = TREE_CHAIN (parms);
3654
3655   /* Figure out what error message to issue.  */
3656   if (is_friend_decl == 2)
3657     msg = "default template arguments may not be used in function template friend re-declaration";
3658   else if (is_friend_decl)
3659     msg = "default template arguments may not be used in function template friend declarations";
3660   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3661     msg = "default template arguments may not be used in function templates";
3662   else if (is_partial)
3663     msg = "default template arguments may not be used in partial specializations";
3664   else
3665     msg = "default argument for template parameter for class enclosing %qD";
3666
3667   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3668     /* If we're inside a class definition, there's no need to
3669        examine the parameters to the class itself.  On the one
3670        hand, they will be checked when the class is defined, and,
3671        on the other, default arguments are valid in things like:
3672          template <class T = double>
3673          struct S { template <class U> void f(U); };
3674        Here the default argument for `S' has no bearing on the
3675        declaration of `f'.  */
3676     last_level_to_check = template_class_depth (current_class_type) + 1;
3677   else
3678     /* Check everything.  */
3679     last_level_to_check = 0;
3680
3681   for (parm_level = parms;
3682        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3683        parm_level = TREE_CHAIN (parm_level))
3684     {
3685       tree inner_parms = TREE_VALUE (parm_level);
3686       int i;
3687       int ntparms;
3688
3689       ntparms = TREE_VEC_LENGTH (inner_parms);
3690       for (i = 0; i < ntparms; ++i)
3691         {
3692           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3693             continue;
3694
3695           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3696             {
3697               if (msg)
3698                 {
3699                   no_errors = false;
3700                   if (is_friend_decl == 2)
3701                     return no_errors;
3702
3703                   error (msg, decl);
3704                   msg = 0;
3705                 }
3706
3707               /* Clear out the default argument so that we are not
3708                  confused later.  */
3709               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3710             }
3711         }
3712
3713       /* At this point, if we're still interested in issuing messages,
3714          they must apply to classes surrounding the object declared.  */
3715       if (msg)
3716         msg = "default argument for template parameter for class enclosing %qD";
3717     }
3718
3719   return no_errors;
3720 }
3721
3722 /* Worker for push_template_decl_real, called via
3723    for_each_template_parm.  DATA is really an int, indicating the
3724    level of the parameters we are interested in.  If T is a template
3725    parameter of that level, return nonzero.  */
3726
3727 static int
3728 template_parm_this_level_p (tree t, void* data)
3729 {
3730   int this_level = *(int *)data;
3731   int level;
3732
3733   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3734     level = TEMPLATE_PARM_LEVEL (t);
3735   else
3736     level = TEMPLATE_TYPE_LEVEL (t);
3737   return level == this_level;
3738 }
3739
3740 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3741    parameters given by current_template_args, or reuses a
3742    previously existing one, if appropriate.  Returns the DECL, or an
3743    equivalent one, if it is replaced via a call to duplicate_decls.
3744
3745    If IS_FRIEND is true, DECL is a friend declaration.  */
3746
3747 tree
3748 push_template_decl_real (tree decl, bool is_friend)
3749 {
3750   tree tmpl;
3751   tree args;
3752   tree info;
3753   tree ctx;
3754   int primary;
3755   int is_partial;
3756   int new_template_p = 0;
3757   /* True if the template is a member template, in the sense of
3758      [temp.mem].  */
3759   bool member_template_p = false;
3760
3761   if (decl == error_mark_node)
3762     return decl;
3763
3764   /* See if this is a partial specialization.  */
3765   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3766                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3767                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3768
3769   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3770     is_friend = true;
3771
3772   if (is_friend)
3773     /* For a friend, we want the context of the friend function, not
3774        the type of which it is a friend.  */
3775     ctx = DECL_CONTEXT (decl);
3776   else if (CP_DECL_CONTEXT (decl)
3777            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3778     /* In the case of a virtual function, we want the class in which
3779        it is defined.  */
3780     ctx = CP_DECL_CONTEXT (decl);
3781   else
3782     /* Otherwise, if we're currently defining some class, the DECL
3783        is assumed to be a member of the class.  */
3784     ctx = current_scope ();
3785
3786   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3787     ctx = NULL_TREE;
3788
3789   if (!DECL_CONTEXT (decl))
3790     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3791
3792   /* See if this is a primary template.  */
3793   if (is_friend && ctx)
3794     /* A friend template that specifies a class context, i.e.
3795          template <typename T> friend void A<T>::f();
3796        is not primary.  */
3797     primary = 0;
3798   else
3799     primary = template_parm_scope_p ();
3800
3801   if (primary)
3802     {
3803       if (DECL_CLASS_SCOPE_P (decl))
3804         member_template_p = true;
3805       if (TREE_CODE (decl) == TYPE_DECL
3806           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3807         error ("template class without a name");
3808       else if (TREE_CODE (decl) == FUNCTION_DECL)
3809         {
3810           if (DECL_DESTRUCTOR_P (decl))
3811             {
3812               /* [temp.mem]
3813
3814                  A destructor shall not be a member template.  */
3815               error ("destructor %qD declared as member template", decl);
3816               return error_mark_node;
3817             }
3818           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3819               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3820                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3821                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3822                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3823                       == void_list_node)))
3824             {
3825               /* [basic.stc.dynamic.allocation]
3826
3827                  An allocation function can be a function
3828                  template. ... Template allocation functions shall
3829                  have two or more parameters.  */
3830               error ("invalid template declaration of %qD", decl);
3831               return error_mark_node;
3832             }
3833         }
3834       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3835                && CLASS_TYPE_P (TREE_TYPE (decl)))
3836         /* OK */;
3837       else
3838         {
3839           error ("template declaration of %q#D", decl);
3840           return error_mark_node;
3841         }
3842     }
3843
3844   /* Check to see that the rules regarding the use of default
3845      arguments are not being violated.  */
3846   check_default_tmpl_args (decl, current_template_parms,
3847                            primary, is_partial, /*is_friend_decl=*/0);
3848
3849   /* Ensure that there are no parameter packs in the type of this
3850      declaration that have not been expanded.  */
3851   if (TREE_CODE (decl) == FUNCTION_DECL)
3852     {
3853       /* Check each of the arguments individually to see if there are
3854          any bare parameter packs.  */
3855       tree type = TREE_TYPE (decl);
3856       tree arg = DECL_ARGUMENTS (decl);
3857       tree argtype = TYPE_ARG_TYPES (type);
3858
3859       while (arg && argtype)
3860         {
3861           if (!FUNCTION_PARAMETER_PACK_P (arg)
3862               && !check_for_bare_parameter_packs (&TREE_TYPE (arg)))
3863             {
3864             /* This is a PARM_DECL that contains unexpanded parameter
3865                packs. We have already complained about this in the
3866                check_for_bare_parameter_packs call, so just replace
3867                these types with ERROR_MARK_NODE.  */
3868               TREE_TYPE (arg) = error_mark_node;
3869               TREE_VALUE (argtype) = error_mark_node;
3870             }
3871
3872           arg = TREE_CHAIN (arg);
3873           argtype = TREE_CHAIN (argtype);
3874         }
3875
3876       /* Check for bare parameter packs in the return type and the
3877          exception specifiers.  */
3878       if (!check_for_bare_parameter_packs (&TREE_TYPE (type)))
3879         /* Errors were already issued, set return type to int
3880            as the frontend doesn't expect error_mark_node as
3881            the return type.  */
3882         TREE_TYPE (type) = integer_type_node;
3883       check_for_bare_parameter_packs (&TYPE_RAISES_EXCEPTIONS (type));
3884     }
3885   else if (!check_for_bare_parameter_packs (&TREE_TYPE (decl)))
3886     return error_mark_node;
3887
3888   if (is_partial)
3889     return process_partial_specialization (decl);
3890
3891   /* A primary class template can only have one parameter pack, at the
3892      end of the template parameter list.  */
3893   if (primary && TREE_CODE (decl) == TYPE_DECL)
3894     {
3895       tree inner_parms 
3896         = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3897       int i, len = TREE_VEC_LENGTH (inner_parms);
3898       for (i = 0; i < len - 1; i++)
3899         {
3900           tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3901
3902           if (template_parameter_pack_p (parm))
3903             {
3904               if (TREE_CODE (parm) == PARM_DECL)
3905                 error ("parameter pack %qE must be at the end of the"
3906                        " template parameter list", parm);
3907               else
3908                 error ("parameter pack %qT must be at the end of the"
3909                        " template parameter list", TREE_TYPE (parm));
3910
3911               TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) = error_mark_node;
3912             }
3913         }
3914     }
3915
3916   args = current_template_args ();
3917
3918   if (!ctx
3919       || TREE_CODE (ctx) == FUNCTION_DECL
3920       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3921       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3922     {
3923       if (DECL_LANG_SPECIFIC (decl)
3924           && DECL_TEMPLATE_INFO (decl)
3925           && DECL_TI_TEMPLATE (decl))
3926         tmpl = DECL_TI_TEMPLATE (decl);
3927       /* If DECL is a TYPE_DECL for a class-template, then there won't
3928          be DECL_LANG_SPECIFIC.  The information equivalent to
3929          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3930       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3931                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3932                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3933         {
3934           /* Since a template declaration already existed for this
3935              class-type, we must be redeclaring it here.  Make sure
3936              that the redeclaration is valid.  */
3937           redeclare_class_template (TREE_TYPE (decl),
3938                                     current_template_parms);
3939           /* We don't need to create a new TEMPLATE_DECL; just use the
3940              one we already had.  */
3941           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3942         }
3943       else
3944         {
3945           tmpl = build_template_decl (decl, current_template_parms,
3946                                       member_template_p);
3947           new_template_p = 1;
3948
3949           if (DECL_LANG_SPECIFIC (decl)
3950               && DECL_TEMPLATE_SPECIALIZATION (decl))
3951             {
3952               /* A specialization of a member template of a template
3953                  class.  */
3954               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3955               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3956               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3957             }
3958         }
3959     }
3960   else
3961     {
3962       tree a, t, current, parms;
3963       int i;
3964       tree tinfo = get_template_info (decl);
3965
3966       if (!tinfo)
3967         {
3968           error ("template definition of non-template %q#D", decl);
3969           return decl;
3970         }
3971
3972       tmpl = TI_TEMPLATE (tinfo);
3973
3974       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3975           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3976           && DECL_TEMPLATE_SPECIALIZATION (decl)
3977           && DECL_MEMBER_TEMPLATE_P (tmpl))
3978         {
3979           tree new_tmpl;
3980
3981           /* The declaration is a specialization of a member
3982              template, declared outside the class.  Therefore, the
3983              innermost template arguments will be NULL, so we
3984              replace them with the arguments determined by the
3985              earlier call to check_explicit_specialization.  */
3986           args = DECL_TI_ARGS (decl);
3987
3988           new_tmpl
3989             = build_template_decl (decl, current_template_parms,
3990                                    member_template_p);
3991           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3992           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3993           DECL_TI_TEMPLATE (decl) = new_tmpl;
3994           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3995           DECL_TEMPLATE_INFO (new_tmpl)
3996             = tree_cons (tmpl, args, NULL_TREE);
3997
3998           register_specialization (new_tmpl,
3999                                    most_general_template (tmpl),
4000                                    args,
4001                                    is_friend);
4002           return decl;
4003         }
4004
4005       /* Make sure the template headers we got make sense.  */
4006
4007       parms = DECL_TEMPLATE_PARMS (tmpl);
4008       i = TMPL_PARMS_DEPTH (parms);
4009       if (TMPL_ARGS_DEPTH (args) != i)
4010         {
4011           error ("expected %d levels of template parms for %q#D, got %d",
4012                  i, decl, TMPL_ARGS_DEPTH (args));
4013         }
4014       else
4015         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4016           {
4017             a = TMPL_ARGS_LEVEL (args, i);
4018             t = INNERMOST_TEMPLATE_PARMS (parms);
4019
4020             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4021               {
4022                 if (current == decl)
4023                   error ("got %d template parameters for %q#D",
4024                          TREE_VEC_LENGTH (a), decl);
4025                 else
4026                   error ("got %d template parameters for %q#T",
4027                          TREE_VEC_LENGTH (a), current);
4028                 error ("  but %d required", TREE_VEC_LENGTH (t));
4029                 return error_mark_node;
4030               }
4031
4032             if (current == decl)
4033               current = ctx;
4034             else
4035               current = (TYPE_P (current)
4036                          ? TYPE_CONTEXT (current)
4037                          : DECL_CONTEXT (current));
4038           }
4039
4040       /* Check that the parms are used in the appropriate qualifying scopes
4041          in the declarator.  */
4042       if (!comp_template_args
4043           (TI_ARGS (tinfo),
4044            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4045         {
4046           error ("\
4047 template arguments to %qD do not match original template %qD",
4048                  decl, DECL_TEMPLATE_RESULT (tmpl));
4049           if (!uses_template_parms (TI_ARGS (tinfo)))
4050             inform ("use template<> for an explicit specialization");
4051           /* Avoid crash in import_export_decl.  */
4052           DECL_INTERFACE_KNOWN (decl) = 1;
4053           return error_mark_node;
4054         }
4055     }
4056
4057   DECL_TEMPLATE_RESULT (tmpl) = decl;
4058   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4059
4060   /* Push template declarations for global functions and types.  Note
4061      that we do not try to push a global template friend declared in a
4062      template class; such a thing may well depend on the template
4063      parameters of the class.  */
4064   if (new_template_p && !ctx
4065       && !(is_friend && template_class_depth (current_class_type) > 0))
4066     {
4067       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4068       if (tmpl == error_mark_node)
4069         return error_mark_node;
4070
4071       /* Hide template friend classes that haven't been declared yet.  */
4072       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4073         {
4074           DECL_ANTICIPATED (tmpl) = 1;
4075           DECL_FRIEND_P (tmpl) = 1;
4076         }
4077     }
4078
4079   if (primary)
4080     {
4081       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4082       int i;
4083
4084       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4085       if (DECL_CONV_FN_P (tmpl))
4086         {
4087           int depth = TMPL_PARMS_DEPTH (parms);
4088
4089           /* It is a conversion operator. See if the type converted to
4090              depends on innermost template operands.  */
4091
4092           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
4093                                          depth))
4094             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
4095         }
4096
4097       /* Give template template parms a DECL_CONTEXT of the template
4098          for which they are a parameter.  */
4099       parms = INNERMOST_TEMPLATE_PARMS (parms);
4100       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
4101         {
4102           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4103           if (TREE_CODE (parm) == TEMPLATE_DECL)
4104             DECL_CONTEXT (parm) = tmpl;
4105         }
4106     }
4107
4108   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
4109      back to its most general template.  If TMPL is a specialization,
4110      ARGS may only have the innermost set of arguments.  Add the missing
4111      argument levels if necessary.  */
4112   if (DECL_TEMPLATE_INFO (tmpl))
4113     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
4114
4115   info = tree_cons (tmpl, args, NULL_TREE);
4116
4117   if (DECL_IMPLICIT_TYPEDEF_P (decl))
4118     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
4119   else if (DECL_LANG_SPECIFIC (decl))
4120     DECL_TEMPLATE_INFO (decl) = info;
4121
4122   return DECL_TEMPLATE_RESULT (tmpl);
4123 }
4124
4125 tree
4126 push_template_decl (tree decl)
4127 {
4128   return push_template_decl_real (decl, false);
4129 }
4130
4131 /* Called when a class template TYPE is redeclared with the indicated
4132    template PARMS, e.g.:
4133
4134      template <class T> struct S;
4135      template <class T> struct S {};  */
4136
4137 bool
4138 redeclare_class_template (tree type, tree parms)
4139 {
4140   tree tmpl;
4141   tree tmpl_parms;
4142   int i;
4143
4144   if (!TYPE_TEMPLATE_INFO (type))
4145     {
4146       error ("%qT is not a template type", type);
4147       return false;
4148     }
4149
4150   tmpl = TYPE_TI_TEMPLATE (type);
4151   if (!PRIMARY_TEMPLATE_P (tmpl))
4152     /* The type is nested in some template class.  Nothing to worry
4153        about here; there are no new template parameters for the nested
4154        type.  */
4155     return true;
4156
4157   if (!parms)
4158     {
4159       error ("template specifiers not specified in declaration of %qD",
4160              tmpl);
4161       return false;
4162     }
4163
4164   parms = INNERMOST_TEMPLATE_PARMS (parms);
4165   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4166
4167   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4168     {
4169       error ("redeclared with %d template parameter(s)", 
4170              TREE_VEC_LENGTH (parms));
4171       inform ("previous declaration %q+D used %d template parameter(s)", 
4172              tmpl, TREE_VEC_LENGTH (tmpl_parms));
4173       return false;
4174     }
4175
4176   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4177     {
4178       tree tmpl_parm;
4179       tree parm;
4180       tree tmpl_default;
4181       tree parm_default;
4182
4183       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4184           || TREE_VEC_ELT (parms, i) == error_mark_node)
4185         continue;
4186
4187       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4188       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4189       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4190       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4191
4192       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4193          TEMPLATE_DECL.  */
4194       if (tmpl_parm != error_mark_node
4195            && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4196            || (TREE_CODE (tmpl_parm) != TYPE_DECL
4197                && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4198         {
4199           error ("template parameter %q+#D", tmpl_parm);
4200           error ("redeclared here as %q#D", parm);
4201           return false;
4202         }
4203
4204       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4205         {
4206           /* We have in [temp.param]:
4207
4208              A template-parameter may not be given default arguments
4209              by two different declarations in the same scope.  */
4210           error ("redefinition of default argument for %q#D", parm);
4211           inform ("%Joriginal definition appeared here", tmpl_parm);
4212           return false;
4213         }
4214
4215       if (parm_default != NULL_TREE)
4216         /* Update the previous template parameters (which are the ones
4217            that will really count) with the new default value.  */
4218         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4219       else if (tmpl_default != NULL_TREE)
4220         /* Update the new parameters, too; they'll be used as the
4221            parameters for any members.  */
4222         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4223     }
4224
4225     return true;
4226 }
4227
4228 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4229    (possibly simplified) expression.  */
4230
4231 tree
4232 fold_non_dependent_expr (tree expr)
4233 {
4234   if (expr == NULL_TREE)
4235     return NULL_TREE;
4236
4237   /* If we're in a template, but EXPR isn't value dependent, simplify
4238      it.  We're supposed to treat:
4239
4240        template <typename T> void f(T[1 + 1]);
4241        template <typename T> void f(T[2]);
4242
4243      as two declarations of the same function, for example.  */
4244   if (processing_template_decl
4245       && !type_dependent_expression_p (expr)
4246       && !value_dependent_expression_p (expr))
4247     {
4248       HOST_WIDE_INT saved_processing_template_decl;
4249
4250       saved_processing_template_decl = processing_template_decl;
4251       processing_template_decl = 0;
4252       expr = tsubst_copy_and_build (expr,
4253                                     /*args=*/NULL_TREE,
4254                                     tf_error,
4255                                     /*in_decl=*/NULL_TREE,
4256                                     /*function_p=*/false,
4257                                     /*integral_constant_expression_p=*/true);
4258       processing_template_decl = saved_processing_template_decl;
4259     }
4260   return expr;
4261 }
4262
4263 /* EXPR is an expression which is used in a constant-expression context.
4264    For instance, it could be a VAR_DECL with a constant initializer.
4265    Extract the innest constant expression.
4266
4267    This is basically a more powerful version of
4268    integral_constant_value, which can be used also in templates where
4269    initializers can maintain a syntactic rather than semantic form
4270    (even if they are non-dependent, for access-checking purposes).  */
4271
4272 static tree
4273 fold_decl_constant_value (tree expr)
4274 {
4275   tree const_expr = expr;
4276   do
4277     {
4278       expr = fold_non_dependent_expr (const_expr);
4279       const_expr = integral_constant_value (expr);
4280     }
4281   while (expr != const_expr);
4282
4283   return expr;
4284 }
4285
4286 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4287    must be a function or a pointer-to-function type, as specified
4288    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4289    and check that the resulting function has external linkage.  */
4290
4291 static tree
4292 convert_nontype_argument_function (tree type, tree expr)
4293 {
4294   tree fns = expr;
4295   tree fn, fn_no_ptr;
4296
4297   fn = instantiate_type (type, fns, tf_none);
4298   if (fn == error_mark_node)
4299     return error_mark_node;
4300
4301   fn_no_ptr = fn;
4302   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4303     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4304   if (TREE_CODE (fn_no_ptr) == BASELINK)
4305     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4306  
4307   /* [temp.arg.nontype]/1
4308
4309      A template-argument for a non-type, non-template template-parameter
4310      shall be one of:
4311      [...]
4312      -- the address of an object or function with external linkage.  */
4313   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4314     {
4315       error ("%qE is not a valid template argument for type %qT "
4316              "because function %qD has not external linkage",
4317              expr, type, fn_no_ptr);
4318       return NULL_TREE;
4319     }
4320
4321   return fn;
4322 }
4323
4324 /* Attempt to convert the non-type template parameter EXPR to the
4325    indicated TYPE.  If the conversion is successful, return the
4326    converted value.  If the conversion is unsuccessful, return
4327    NULL_TREE if we issued an error message, or error_mark_node if we
4328    did not.  We issue error messages for out-and-out bad template
4329    parameters, but not simply because the conversion failed, since we
4330    might be just trying to do argument deduction.  Both TYPE and EXPR
4331    must be non-dependent.
4332
4333    The conversion follows the special rules described in
4334    [temp.arg.nontype], and it is much more strict than an implicit
4335    conversion.
4336
4337    This function is called twice for each template argument (see
4338    lookup_template_class for a more accurate description of this
4339    problem). This means that we need to handle expressions which
4340    are not valid in a C++ source, but can be created from the
4341    first call (for instance, casts to perform conversions). These
4342    hacks can go away after we fix the double coercion problem.  */
4343
4344 static tree
4345 convert_nontype_argument (tree type, tree expr)
4346 {
4347   tree expr_type;
4348
4349   /* Detect immediately string literals as invalid non-type argument.
4350      This special-case is not needed for correctness (we would easily
4351      catch this later), but only to provide better diagnostic for this
4352      common user mistake. As suggested by DR 100, we do not mention
4353      linkage issues in the diagnostic as this is not the point.  */
4354   if (TREE_CODE (expr) == STRING_CST)
4355     {
4356       error ("%qE is not a valid template argument for type %qT "
4357              "because string literals can never be used in this context",
4358              expr, type);
4359       return NULL_TREE;
4360     }
4361
4362   /* If we are in a template, EXPR may be non-dependent, but still
4363      have a syntactic, rather than semantic, form.  For example, EXPR
4364      might be a SCOPE_REF, rather than the VAR_DECL to which the
4365      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4366      so that access checking can be performed when the template is
4367      instantiated -- but here we need the resolved form so that we can
4368      convert the argument.  */
4369   expr = fold_non_dependent_expr (expr);
4370   if (error_operand_p (expr))
4371     return error_mark_node;
4372   expr_type = TREE_TYPE (expr);
4373
4374   /* HACK: Due to double coercion, we can get a
4375      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4376      which is the tree that we built on the first call (see
4377      below when coercing to reference to object or to reference to
4378      function). We just strip everything and get to the arg.
4379      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4380      for examples.  */
4381   if (TREE_CODE (expr) == NOP_EXPR)
4382     {
4383       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4384         {
4385           /* ??? Maybe we could use convert_from_reference here, but we
4386              would need to relax its constraints because the NOP_EXPR
4387              could actually change the type to something more cv-qualified,
4388              and this is not folded by convert_from_reference.  */
4389           tree addr = TREE_OPERAND (expr, 0);
4390           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4391           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4392           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4393           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4394                       (TREE_TYPE (expr_type),
4395                        TREE_TYPE (TREE_TYPE (addr))));
4396
4397           expr = TREE_OPERAND (addr, 0);
4398           expr_type = TREE_TYPE (expr);
4399         }
4400
4401       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4402          parameter is a pointer to object, through decay and
4403          qualification conversion. Let's strip everything.  */
4404       else if (TYPE_PTROBV_P (type))
4405         {
4406           STRIP_NOPS (expr);
4407           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4408           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4409           /* Skip the ADDR_EXPR only if it is part of the decay for
4410              an array. Otherwise, it is part of the original argument
4411              in the source code.  */
4412           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4413             expr = TREE_OPERAND (expr, 0);
4414           expr_type = TREE_TYPE (expr);
4415         }
4416     }
4417
4418   /* [temp.arg.nontype]/5, bullet 1
4419
4420      For a non-type template-parameter of integral or enumeration type,
4421      integral promotions (_conv.prom_) and integral conversions
4422      (_conv.integral_) are applied.  */
4423   if (INTEGRAL_TYPE_P (type))
4424     {
4425       if (!INTEGRAL_TYPE_P (expr_type))
4426         return error_mark_node;
4427
4428       expr = fold_decl_constant_value (expr);
4429       /* Notice that there are constant expressions like '4 % 0' which
4430          do not fold into integer constants.  */
4431       if (TREE_CODE (expr) != INTEGER_CST)
4432         {
4433           error ("%qE is not a valid template argument for type %qT "
4434                  "because it is a non-constant expression", expr, type);
4435           return NULL_TREE;
4436         }
4437
4438       /* At this point, an implicit conversion does what we want,
4439          because we already know that the expression is of integral
4440          type.  */
4441       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4442       if (expr == error_mark_node)
4443         return error_mark_node;
4444
4445       /* Conversion was allowed: fold it to a bare integer constant.  */
4446       expr = fold (expr);
4447     }
4448   /* [temp.arg.nontype]/5, bullet 2
4449
4450      For a non-type template-parameter of type pointer to object,
4451      qualification conversions (_conv.qual_) and the array-to-pointer
4452      conversion (_conv.array_) are applied.  */
4453   else if (TYPE_PTROBV_P (type))
4454     {
4455       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4456
4457          A template-argument for a non-type, non-template template-parameter
4458          shall be one of: [...]
4459
4460          -- the name of a non-type template-parameter;
4461          -- the address of an object or function with external linkage, [...]
4462             expressed as "& id-expression" where the & is optional if the name
4463             refers to a function or array, or if the corresponding
4464             template-parameter is a reference.
4465
4466         Here, we do not care about functions, as they are invalid anyway
4467         for a parameter of type pointer-to-object.  */
4468
4469       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4470         /* Non-type template parameters are OK.  */
4471         ;
4472       else if (TREE_CODE (expr) != ADDR_EXPR
4473                && TREE_CODE (expr_type) != ARRAY_TYPE)
4474         {
4475           if (TREE_CODE (expr) == VAR_DECL)
4476             {
4477               error ("%qD is not a valid template argument "
4478                      "because %qD is a variable, not the address of "
4479                      "a variable",
4480                      expr, expr);
4481               return NULL_TREE;
4482             }
4483           /* Other values, like integer constants, might be valid
4484              non-type arguments of some other type.  */
4485           return error_mark_node;
4486         }
4487       else
4488         {
4489           tree decl;
4490
4491           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4492                   ? TREE_OPERAND (expr, 0) : expr);
4493           if (TREE_CODE (decl) != VAR_DECL)
4494             {
4495               error ("%qE is not a valid template argument of type %qT "
4496                      "because %qE is not a variable",
4497                      expr, type, decl);
4498               return NULL_TREE;
4499             }
4500           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4501             {
4502               error ("%qE is not a valid template argument of type %qT "
4503                      "because %qD does not have external linkage",
4504                      expr, type, decl);
4505               return NULL_TREE;
4506             }
4507         }
4508
4509       expr = decay_conversion (expr);
4510       if (expr == error_mark_node)
4511         return error_mark_node;
4512
4513       expr = perform_qualification_conversions (type, expr);
4514       if (expr == error_mark_node)
4515         return error_mark_node;
4516     }
4517   /* [temp.arg.nontype]/5, bullet 3
4518
4519      For a non-type template-parameter of type reference to object, no
4520      conversions apply. The type referred to by the reference may be more
4521      cv-qualified than the (otherwise identical) type of the
4522      template-argument. The template-parameter is bound directly to the
4523      template-argument, which must be an lvalue.  */
4524   else if (TYPE_REF_OBJ_P (type))
4525     {
4526       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4527                                                       expr_type))
4528         return error_mark_node;
4529
4530       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4531         {
4532           error ("%qE is not a valid template argument for type %qT "
4533                  "because of conflicts in cv-qualification", expr, type);
4534           return NULL_TREE;
4535         }
4536
4537       if (!real_lvalue_p (expr))
4538         {
4539           error ("%qE is not a valid template argument for type %qT "
4540                  "because it is not an lvalue", expr, type);
4541           return NULL_TREE;
4542         }
4543
4544       /* [temp.arg.nontype]/1
4545
4546          A template-argument for a non-type, non-template template-parameter
4547          shall be one of: [...]
4548
4549          -- the address of an object or function with external linkage.  */
4550       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4551         {
4552           error ("%qE is not a valid template argument for type %qT "
4553                  "because object %qD has not external linkage",
4554                  expr, type, expr);
4555           return NULL_TREE;
4556         }
4557
4558       expr = build_nop (type, build_address (expr));
4559     }
4560   /* [temp.arg.nontype]/5, bullet 4
4561
4562      For a non-type template-parameter of type pointer to function, only
4563      the function-to-pointer conversion (_conv.func_) is applied. If the
4564      template-argument represents a set of overloaded functions (or a
4565      pointer to such), the matching function is selected from the set
4566      (_over.over_).  */
4567   else if (TYPE_PTRFN_P (type))
4568     {
4569       /* If the argument is a template-id, we might not have enough
4570          context information to decay the pointer.  */
4571       if (!type_unknown_p (expr_type))
4572         {
4573           expr = decay_conversion (expr);
4574           if (expr == error_mark_node)
4575             return error_mark_node;
4576         }
4577
4578       expr = convert_nontype_argument_function (type, expr);
4579       if (!expr || expr == error_mark_node)
4580         return expr;
4581     }
4582   /* [temp.arg.nontype]/5, bullet 5
4583
4584      For a non-type template-parameter of type reference to function, no
4585      conversions apply. If the template-argument represents a set of
4586      overloaded functions, the matching function is selected from the set
4587      (_over.over_).  */
4588   else if (TYPE_REFFN_P (type))
4589     {
4590       if (TREE_CODE (expr) == ADDR_EXPR)
4591         {
4592           error ("%qE is not a valid template argument for type %qT "
4593                  "because it is a pointer", expr, type);
4594           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4595           return NULL_TREE;
4596         }
4597
4598       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4599       if (!expr || expr == error_mark_node)
4600         return expr;
4601
4602       expr = build_nop (type, build_address (expr));
4603     }
4604   /* [temp.arg.nontype]/5, bullet 6
4605
4606      For a non-type template-parameter of type pointer to member function,
4607      no conversions apply. If the template-argument represents a set of
4608      overloaded member functions, the matching member function is selected
4609      from the set (_over.over_).  */
4610   else if (TYPE_PTRMEMFUNC_P (type))
4611     {
4612       expr = instantiate_type (type, expr, tf_none);
4613       if (expr == error_mark_node)
4614         return error_mark_node;
4615
4616       /* There is no way to disable standard conversions in
4617          resolve_address_of_overloaded_function (called by
4618          instantiate_type). It is possible that the call succeeded by
4619          converting &B::I to &D::I (where B is a base of D), so we need
4620          to reject this conversion here.
4621
4622          Actually, even if there was a way to disable standard conversions,
4623          it would still be better to reject them here so that we can
4624          provide a superior diagnostic.  */
4625       if (!same_type_p (TREE_TYPE (expr), type))
4626         {
4627           /* Make sure we are just one standard conversion off.  */
4628           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4629           error ("%qE is not a valid template argument for type %qT "
4630                  "because it is of type %qT", expr, type,
4631                  TREE_TYPE (expr));
4632           inform ("standard conversions are not allowed in this context");
4633           return NULL_TREE;
4634         }
4635     }
4636   /* [temp.arg.nontype]/5, bullet 7
4637
4638      For a non-type template-parameter of type pointer to data member,
4639      qualification conversions (_conv.qual_) are applied.  */
4640   else if (TYPE_PTRMEM_P (type))
4641     {
4642       expr = perform_qualification_conversions (type, expr);
4643       if (expr == error_mark_node)
4644         return expr;
4645     }
4646   /* A template non-type parameter must be one of the above.  */
4647   else
4648     gcc_unreachable ();
4649
4650   /* Sanity check: did we actually convert the argument to the
4651      right type?  */
4652   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4653   return expr;
4654 }
4655
4656
4657 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4658    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4659    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4660    or PARM_DECL.
4661
4662    Consider the example:
4663      template <class T> class A;
4664      template<template <class U> class TT> class B;
4665
4666    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4667    the parameters to A, and OUTER_ARGS contains A.  */
4668
4669 static int
4670 coerce_template_template_parms (tree parm_parms,
4671                                 tree arg_parms,
4672                                 tsubst_flags_t complain,
4673                                 tree in_decl,
4674                                 tree outer_args)
4675 {
4676   int nparms, nargs, i;
4677   tree parm, arg;
4678
4679   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4680   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4681
4682   nparms = TREE_VEC_LENGTH (parm_parms);
4683   nargs = TREE_VEC_LENGTH (arg_parms);
4684
4685   if (nargs != nparms)
4686     return 0;
4687
4688   for (i = 0; i < nparms; ++i)
4689     {
4690       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4691           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4692         continue;
4693
4694       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4695       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4696
4697       if (arg == NULL_TREE || arg == error_mark_node
4698           || parm == NULL_TREE || parm == error_mark_node)
4699         return 0;
4700
4701       if (TREE_CODE (arg) != TREE_CODE (parm))
4702         return 0;
4703
4704       switch (TREE_CODE (parm))
4705         {
4706         case TEMPLATE_DECL:
4707           /* We encounter instantiations of templates like
4708                template <template <template <class> class> class TT>
4709                class C;  */
4710           {
4711             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4712             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4713
4714             if (!coerce_template_template_parms
4715                 (parmparm, argparm, complain, in_decl, outer_args))
4716               return 0;
4717           }
4718           /* Fall through.  */
4719
4720         case TYPE_DECL:
4721           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4722               != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4723             /* One is a parameter pack, the other is not.  */
4724             return 0;
4725           break;
4726
4727         case PARM_DECL:
4728           /* The tsubst call is used to handle cases such as
4729
4730                template <int> class C {};
4731                template <class T, template <T> class TT> class D {};
4732                D<int, C> d;
4733
4734              i.e. the parameter list of TT depends on earlier parameters.  */
4735           if (!dependent_type_p (TREE_TYPE (arg))
4736               && !same_type_p
4737                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4738                              TREE_TYPE (arg)))
4739             return 0;
4740
4741           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4742               != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4743             /* One is a parameter pack, the other is not.  */
4744             return 0;
4745           break;
4746
4747         default:
4748           gcc_unreachable ();
4749         }
4750     }
4751   return 1;
4752 }
4753
4754 /* Verifies that the deduced template arguments (in TARGS) for the
4755    template template parameters (in TPARMS) represent valid bindings,
4756    by comparing the template parameter list of each template argument
4757    to the template parameter list of its corresponding template
4758    template parameter, in accordance with DR150. This
4759    routine can only be called after all template arguments have been
4760    deduced. It will return TRUE if all of the template template
4761    parameter bindings are okay, FALSE otherwise.  */
4762 bool 
4763 template_template_parm_bindings_ok_p (tree tparms, tree targs)
4764 {
4765   int i, ntparms = TREE_VEC_LENGTH (tparms);
4766
4767   targs = INNERMOST_TEMPLATE_ARGS (targs);
4768
4769   for (i = 0; i < ntparms; ++i)
4770     {
4771       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
4772       tree targ = TREE_VEC_ELT (targs, i);
4773
4774       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
4775         {
4776           tree packed_args = NULL_TREE;
4777           int idx, len = 1;
4778
4779           if (ARGUMENT_PACK_P (targ))
4780             {
4781               /* Look inside the argument pack.  */
4782               packed_args = ARGUMENT_PACK_ARGS (targ);
4783               len = TREE_VEC_LENGTH (packed_args);
4784             }
4785
4786           for (idx = 0; idx < len; ++idx)
4787             {
4788               tree targ_parms = NULL_TREE;
4789
4790               if (packed_args)
4791                 /* Extract the next argument from the argument
4792                    pack.  */
4793                 targ = TREE_VEC_ELT (packed_args, idx);
4794
4795               if (PACK_EXPANSION_P (targ))
4796                 /* Look at the pattern of the pack expansion.  */
4797                 targ = PACK_EXPANSION_PATTERN (targ);
4798
4799               /* Extract the template parameters from the template
4800                  argument.  */
4801               if (TREE_CODE (targ) == TEMPLATE_DECL)
4802                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
4803               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
4804                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
4805
4806               /* Verify that we can coerce the template template
4807                  parameters from the template argument to the template
4808                  parameter.  This requires an exact match.  */
4809               if (targ_parms
4810                   && !coerce_template_template_parms
4811                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
4812                         targ_parms,
4813                         tf_none,
4814                         tparm,
4815                         targs))
4816                 return false;
4817             }
4818         }
4819     }
4820
4821   /* Everything is okay.  */
4822   return true;
4823 }
4824
4825 /* Convert the indicated template ARG as necessary to match the
4826    indicated template PARM.  Returns the converted ARG, or
4827    error_mark_node if the conversion was unsuccessful.  Error and
4828    warning messages are issued under control of COMPLAIN.  This
4829    conversion is for the Ith parameter in the parameter list.  ARGS is
4830    the full set of template arguments deduced so far.  */
4831
4832 static tree
4833 convert_template_argument (tree parm,
4834                            tree arg,
4835                            tree args,
4836                            tsubst_flags_t complain,
4837                            int i,
4838                            tree in_decl)
4839 {
4840   tree orig_arg;
4841   tree val;
4842   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4843
4844   if (TREE_CODE (arg) == TREE_LIST
4845       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4846     {
4847       /* The template argument was the name of some
4848          member function.  That's usually
4849          invalid, but static members are OK.  In any
4850          case, grab the underlying fields/functions
4851          and issue an error later if required.  */
4852       orig_arg = TREE_VALUE (arg);
4853       TREE_TYPE (arg) = unknown_type_node;
4854     }
4855
4856   orig_arg = arg;
4857
4858   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4859   requires_type = (TREE_CODE (parm) == TYPE_DECL
4860                    || requires_tmpl_type);
4861
4862   /* When determining whether an argument pack expansion is a template,
4863      look at the pattern.  */
4864   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
4865     arg = PACK_EXPANSION_PATTERN (arg);
4866
4867   is_tmpl_type = 
4868     ((TREE_CODE (arg) == TEMPLATE_DECL
4869       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
4870      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4871      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
4872
4873   if (is_tmpl_type
4874       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4875           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4876     arg = TYPE_STUB_DECL (arg);
4877
4878   is_type = TYPE_P (arg) || is_tmpl_type;
4879
4880   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4881       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4882     {
4883       pedwarn ("to refer to a type member of a template parameter, "
4884                "use %<typename %E%>", orig_arg);
4885
4886       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
4887                                      TREE_OPERAND (arg, 1),
4888                                      typename_type,
4889                                      complain & tf_error);
4890       arg = orig_arg;
4891       is_type = 1;
4892     }
4893   if (is_type != requires_type)
4894     {
4895       if (in_decl)
4896         {
4897           if (complain & tf_error)
4898             {
4899               error ("type/value mismatch at argument %d in template "
4900                      "parameter list for %qD",
4901                      i + 1, in_decl);
4902               if (is_type)
4903                 error ("  expected a constant of type %qT, got %qT",
4904                        TREE_TYPE (parm),
4905                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
4906               else if (requires_tmpl_type)
4907                 error ("  expected a class template, got %qE", orig_arg);
4908               else
4909                 error ("  expected a type, got %qE", orig_arg);
4910             }
4911         }
4912       return error_mark_node;
4913     }
4914   if (is_tmpl_type ^ requires_tmpl_type)
4915     {
4916       if (in_decl && (complain & tf_error))
4917         {
4918           error ("type/value mismatch at argument %d in template "
4919                  "parameter list for %qD",
4920                  i + 1, in_decl);
4921           if (is_tmpl_type)
4922             error ("  expected a type, got %qT", DECL_NAME (arg));
4923           else
4924             error ("  expected a class template, got %qT", orig_arg);
4925         }
4926       return error_mark_node;
4927     }
4928
4929   if (is_type)
4930     {
4931       if (requires_tmpl_type)
4932         {
4933           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4934             /* The number of argument required is not known yet.
4935                Just accept it for now.  */
4936             val = TREE_TYPE (arg);
4937           else
4938             {
4939               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4940               tree argparm;
4941
4942               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4943
4944               if (coerce_template_template_parms (parmparm, argparm,
4945                                                   complain, in_decl,
4946                                                   args))
4947                 {
4948                   val = orig_arg;
4949
4950                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
4951                      TEMPLATE_DECL.  */
4952                   if (val != error_mark_node)
4953                     {
4954                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4955                         val = TREE_TYPE (val);
4956                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4957                                && DECL_TEMPLATE_TEMPLATE_PARM_P (arg))
4958                         {
4959                           val = TREE_TYPE (arg);
4960                           val = make_pack_expansion (val);
4961                         }
4962                     }
4963                 }
4964               else
4965                 {
4966                   if (in_decl && (complain & tf_error))
4967                     {
4968                       error ("type/value mismatch at argument %d in "
4969                              "template parameter list for %qD",
4970                              i + 1, in_decl);
4971                       error ("  expected a template of type %qD, got %qD",
4972                              parm, orig_arg);
4973                     }
4974
4975                   val = error_mark_node;
4976                 }
4977             }
4978         }
4979       else
4980         val = orig_arg;
4981       /* We only form one instance of each template specialization.
4982          Therefore, if we use a non-canonical variant (i.e., a
4983          typedef), any future messages referring to the type will use
4984          the typedef, which is confusing if those future uses do not
4985          themselves also use the typedef.  */
4986       if (TYPE_P (val))
4987         val = canonical_type_variant (val);
4988     }
4989   else
4990     {
4991       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4992
4993       if (invalid_nontype_parm_type_p (t, complain))
4994         return error_mark_node;
4995
4996       if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
4997         /* We used to call digest_init here.  However, digest_init
4998            will report errors, which we don't want when complain
4999            is zero.  More importantly, digest_init will try too
5000            hard to convert things: for example, `0' should not be
5001            converted to pointer type at this point according to
5002            the standard.  Accepting this is not merely an
5003            extension, since deciding whether or not these
5004            conversions can occur is part of determining which
5005            function template to call, or whether a given explicit
5006            argument specification is valid.  */
5007         val = convert_nontype_argument (t, orig_arg);
5008       else
5009         val = orig_arg;
5010
5011       if (val == NULL_TREE)
5012         val = error_mark_node;
5013       else if (val == error_mark_node && (complain & tf_error))
5014         error ("could not convert template argument %qE to %qT",  orig_arg, t);
5015     }
5016
5017   return val;
5018 }
5019
5020 /* Coerces the remaining template arguments in INNER_ARGS (from
5021    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
5022    Returns the coerced argument pack. PARM_IDX is the position of this
5023    parameter in the template parameter list. ARGS is the original
5024    template argument list.  */
5025 static tree
5026 coerce_template_parameter_pack (tree parms,
5027                                 int parm_idx,
5028                                 tree args,
5029                                 tree inner_args,
5030                                 int arg_idx,
5031                                 tree new_args,
5032                                 int* lost,
5033                                 tree in_decl,
5034                                 tsubst_flags_t complain)
5035 {
5036   tree parm = TREE_VEC_ELT (parms, parm_idx);
5037   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5038   tree packed_args;
5039   tree argument_pack;
5040   tree packed_types = NULL_TREE;
5041
5042   if (arg_idx > nargs)
5043     arg_idx = nargs;
5044
5045   packed_args = make_tree_vec (nargs - arg_idx);
5046
5047   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
5048       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
5049     {
5050       /* When the template parameter is a non-type template
5051          parameter pack whose type uses parameter packs, we need
5052          to look at each of the template arguments
5053          separately. Build a vector of the types for these
5054          non-type template parameters in PACKED_TYPES.  */
5055       tree expansion 
5056         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
5057       packed_types = tsubst_pack_expansion (expansion, args,
5058                                             complain, in_decl);
5059
5060       if (packed_types == error_mark_node)
5061         return error_mark_node;
5062
5063       /* Check that we have the right number of arguments.  */
5064       if (arg_idx < nargs
5065           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
5066           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
5067         {
5068           int needed_parms 
5069             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
5070           error ("wrong number of template arguments (%d, should be %d)",
5071                  nargs, needed_parms);
5072           return error_mark_node;
5073         }
5074
5075       /* If we aren't able to check the actual arguments now
5076          (because they haven't been expanded yet), we can at least
5077          verify that all of the types used for the non-type
5078          template parameter pack are, in fact, valid for non-type
5079          template parameters.  */
5080       if (arg_idx < nargs 
5081           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
5082         {
5083           int j, len = TREE_VEC_LENGTH (packed_types);
5084           for (j = 0; j < len; ++j)
5085             {
5086               tree t = TREE_VEC_ELT (packed_types, j);
5087               if (invalid_nontype_parm_type_p (t, complain))
5088                 return error_mark_node;
5089             }
5090         }
5091     }
5092
5093   /* Convert the remaining arguments, which will be a part of the
5094      parameter pack "parm".  */
5095   for (; arg_idx < nargs; ++arg_idx)
5096     {
5097       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
5098       tree actual_parm = TREE_VALUE (parm);
5099
5100       if (packed_types && !PACK_EXPANSION_P (arg))
5101         {
5102           /* When we have a vector of types (corresponding to the
5103              non-type template parameter pack that uses parameter
5104              packs in its type, as mention above), and the
5105              argument is not an expansion (which expands to a
5106              currently unknown number of arguments), clone the
5107              parm and give it the next type in PACKED_TYPES.  */
5108           actual_parm = copy_node (actual_parm);
5109           TREE_TYPE (actual_parm) = 
5110             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
5111         }
5112
5113       if (arg != error_mark_node)
5114         arg = convert_template_argument (actual_parm, 
5115                                          arg, new_args, complain, parm_idx,
5116                                          in_decl);
5117       if (arg == error_mark_node)
5118         (*lost)++;
5119       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
5120     }
5121
5122   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
5123       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
5124     argument_pack = make_node (TYPE_ARGUMENT_PACK);
5125   else
5126     {
5127       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
5128       TREE_TYPE (argument_pack) 
5129         = tsubst (TREE_TYPE (TREE_VALUE (parm)), args, complain, in_decl);
5130       TREE_CONSTANT (argument_pack) = 1;
5131     }
5132
5133   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
5134   return argument_pack;
5135 }
5136
5137 /* Convert all template arguments to their appropriate types, and
5138    return a vector containing the innermost resulting template
5139    arguments.  If any error occurs, return error_mark_node. Error and
5140    warning messages are issued under control of COMPLAIN.
5141
5142    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
5143    for arguments not specified in ARGS.  Otherwise, if
5144    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
5145    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
5146    USE_DEFAULT_ARGS is false, then all arguments must be specified in
5147    ARGS.  */
5148
5149 static tree
5150 coerce_template_parms (tree parms,
5151                        tree args,
5152                        tree in_decl,
5153                        tsubst_flags_t complain,
5154                        bool require_all_args,
5155                        bool use_default_args)
5156 {
5157   int nparms, nargs, parm_idx, arg_idx, lost = 0;
5158   tree inner_args;
5159   tree new_args;
5160   tree new_inner_args;
5161   bool saved_skip_evaluation;
5162
5163   /* When used as a boolean value, indicates whether this is a
5164      variadic template parameter list. Since it's an int, we can also
5165      subtract it from nparms to get the number of non-variadic
5166      parameters.  */
5167   int variadic_p = 0;
5168
5169   inner_args 
5170     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
5171
5172   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
5173   nparms = TREE_VEC_LENGTH (parms);
5174
5175   /* Determine if there are any parameter packs.  */
5176   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
5177     {
5178       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
5179       if (template_parameter_pack_p (tparm))
5180         {
5181           variadic_p = 1;
5182           break;
5183         }
5184     }
5185
5186   if ((nargs > nparms - variadic_p && !variadic_p)
5187       || (nargs < nparms - variadic_p
5188           && require_all_args
5189           && (!use_default_args
5190               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
5191                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
5192     {
5193       if (complain & tf_error)
5194         {
5195           const char *or_more = "";
5196           if (variadic_p)
5197             {
5198               or_more = " or more";
5199               --nparms;
5200             }
5201
5202           error ("wrong number of template arguments (%d, should be %d%s)",
5203                  nargs, nparms, or_more);
5204
5205           if (in_decl)
5206             error ("provided for %q+D", in_decl);
5207         }
5208
5209       return error_mark_node;
5210     }
5211
5212   /* We need to evaluate the template arguments, even though this
5213      template-id may be nested within a "sizeof".  */
5214   saved_skip_evaluation = skip_evaluation;
5215   skip_evaluation = false;
5216   new_inner_args = make_tree_vec (nparms);
5217   new_args = add_outermost_template_args (args, new_inner_args);
5218   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5219     {
5220       tree arg;
5221       tree parm;
5222
5223       /* Get the Ith template parameter.  */
5224       parm = TREE_VEC_ELT (parms, parm_idx);
5225  
5226       if (parm == error_mark_node)
5227       {
5228         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5229         continue;
5230       }
5231
5232       /* Calculate the next argument.  */
5233       if (template_parameter_pack_p (TREE_VALUE (parm)))
5234         {
5235           /* All remaining arguments will be placed in the
5236              template parameter pack PARM.  */
5237           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5238                                                 inner_args, arg_idx,
5239                                                 new_args, &lost,
5240                                                 in_decl, complain);
5241           
5242           /* Store this argument.  */
5243           if (arg == error_mark_node)
5244             lost++;
5245           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5246
5247           /* We are done with all of the arguments.  */
5248           arg_idx = nargs;
5249
5250           continue;
5251         }
5252       else if (arg_idx < nargs)
5253         {
5254           arg = TREE_VEC_ELT (inner_args, arg_idx);
5255
5256           if (arg && PACK_EXPANSION_P (arg))
5257             {
5258               if (complain & tf_error)
5259                 {
5260                   /* If ARG is a pack expansion, but PARM is not a
5261                      template parameter pack (if it were, we would have
5262                      handled it above), we're trying to expand into a
5263                      fixed-length argument list.  */
5264                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5265                     error ("cannot expand %<%E%> into a fixed-length "
5266                            "argument list", arg);
5267                   else
5268                     error ("cannot expand %<%T%> into a fixed-length "
5269                            "argument list", arg);
5270                 }
5271               return error_mark_node;
5272             }
5273         }
5274       else if (require_all_args)
5275         /* There must be a default arg in this case.  */
5276         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5277                                    complain, in_decl);
5278       else
5279         break;
5280
5281       if (arg == error_mark_node)
5282         {
5283           if (complain & tf_error)
5284             error ("template argument %d is invalid", arg_idx + 1);
5285         }
5286       else if (!arg)
5287         /* This only occurs if there was an error in the template
5288            parameter list itself (which we would already have
5289            reported) that we are trying to recover from, e.g., a class
5290            template with a parameter list such as
5291            template<typename..., typename>.  */
5292         return error_mark_node;
5293       else
5294         arg = convert_template_argument (TREE_VALUE (parm),
5295                                          arg, new_args, complain, 
5296                                          parm_idx, in_decl);
5297
5298       if (arg == error_mark_node)
5299         lost++;
5300       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5301     }
5302   skip_evaluation = saved_skip_evaluation;
5303
5304   if (lost)
5305     return error_mark_node;
5306
5307   return new_inner_args;
5308 }
5309
5310 /* Returns 1 if template args OT and NT are equivalent.  */
5311
5312 static int
5313 template_args_equal (tree ot, tree nt)
5314 {
5315   if (nt == ot)
5316     return 1;
5317
5318   if (TREE_CODE (nt) == TREE_VEC)
5319     /* For member templates */
5320     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5321   else if (PACK_EXPANSION_P (ot))
5322     return PACK_EXPANSION_P (nt) 
5323       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5324                               PACK_EXPANSION_PATTERN (nt));
5325   else if (TYPE_P (nt))
5326     return TYPE_P (ot) && same_type_p (ot, nt);
5327   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5328     return 0;
5329   else
5330     return cp_tree_equal (ot, nt);
5331 }
5332
5333 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5334    of template arguments.  Returns 0 otherwise.  */
5335
5336 int
5337 comp_template_args (tree oldargs, tree newargs)
5338 {
5339   int i;
5340
5341   oldargs = expand_template_argument_pack (oldargs);
5342   newargs = expand_template_argument_pack (newargs);
5343
5344   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5345     return 0;
5346
5347   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5348     {
5349       tree nt = TREE_VEC_ELT (newargs, i);
5350       tree ot = TREE_VEC_ELT (oldargs, i);
5351
5352       if (! template_args_equal (ot, nt))
5353         return 0;
5354     }
5355   return 1;
5356 }
5357
5358 static void
5359 add_pending_template (tree d)
5360 {
5361   tree ti = (TYPE_P (d)
5362              ? CLASSTYPE_TEMPLATE_INFO (d)
5363              : DECL_TEMPLATE_INFO (d));
5364   struct pending_template *pt;
5365   int level;
5366
5367   if (TI_PENDING_TEMPLATE_FLAG (ti))
5368     return;
5369
5370   /* We are called both from instantiate_decl, where we've already had a
5371      tinst_level pushed, and instantiate_template, where we haven't.
5372      Compensate.  */
5373   level = !current_tinst_level || current_tinst_level->decl != d;
5374
5375   if (level)
5376     push_tinst_level (d);
5377
5378   pt = GGC_NEW (struct pending_template);
5379   pt->next = NULL;
5380   pt->tinst = current_tinst_level;
5381   if (last_pending_template)
5382     last_pending_template->next = pt;
5383   else
5384     pending_templates = pt;
5385
5386   last_pending_template = pt;
5387
5388   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5389
5390   if (level)
5391     pop_tinst_level ();
5392 }
5393
5394
5395 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5396    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5397    documentation for TEMPLATE_ID_EXPR.  */
5398
5399 tree
5400 lookup_template_function (tree fns, tree arglist)
5401 {
5402   tree type;
5403
5404   if (fns == error_mark_node || arglist == error_mark_node)
5405     return error_mark_node;
5406
5407   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5408   gcc_assert (fns && (is_overloaded_fn (fns)
5409                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5410
5411   if (BASELINK_P (fns))
5412     {
5413       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5414                                          unknown_type_node,
5415                                          BASELINK_FUNCTIONS (fns),
5416                                          arglist);
5417       return fns;
5418     }
5419
5420   type = TREE_TYPE (fns);
5421   if (TREE_CODE (fns) == OVERLOAD || !type)
5422     type = unknown_type_node;
5423
5424   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5425 }
5426
5427 /* Within the scope of a template class S<T>, the name S gets bound
5428    (in build_self_reference) to a TYPE_DECL for the class, not a
5429    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5430    or one of its enclosing classes, and that type is a template,
5431    return the associated TEMPLATE_DECL.  Otherwise, the original
5432    DECL is returned.  */
5433
5434 tree
5435 maybe_get_template_decl_from_type_decl (tree decl)
5436 {
5437   return (decl != NULL_TREE
5438           && TREE_CODE (decl) == TYPE_DECL
5439           && DECL_ARTIFICIAL (decl)
5440           && CLASS_TYPE_P (TREE_TYPE (decl))
5441           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5442     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5443 }
5444
5445 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5446    parameters, find the desired type.
5447
5448    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5449
5450    IN_DECL, if non-NULL, is the template declaration we are trying to
5451    instantiate.
5452
5453    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5454    the class we are looking up.
5455
5456    Issue error and warning messages under control of COMPLAIN.
5457
5458    If the template class is really a local class in a template
5459    function, then the FUNCTION_CONTEXT is the function in which it is
5460    being instantiated.
5461
5462    ??? Note that this function is currently called *twice* for each
5463    template-id: the first time from the parser, while creating the
5464    incomplete type (finish_template_type), and the second type during the
5465    real instantiation (instantiate_template_class). This is surely something
5466    that we want to avoid. It also causes some problems with argument
5467    coercion (see convert_nontype_argument for more information on this).  */
5468
5469 tree
5470 lookup_template_class (tree d1,
5471                        tree arglist,
5472                        tree in_decl,
5473                        tree context,
5474                        int entering_scope,
5475                        tsubst_flags_t complain)
5476 {
5477   tree template = NULL_TREE, parmlist;
5478   tree t;
5479
5480   timevar_push (TV_NAME_LOOKUP);
5481
5482   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5483     {
5484       tree value = innermost_non_namespace_value (d1);
5485       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5486         template = value;
5487       else
5488         {
5489           if (context)
5490             push_decl_namespace (context);
5491           template = lookup_name (d1);
5492           template = maybe_get_template_decl_from_type_decl (template);
5493           if (context)
5494             pop_decl_namespace ();
5495         }
5496       if (template)
5497         context = DECL_CONTEXT (template);
5498     }
5499   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5500     {
5501       tree type = TREE_TYPE (d1);
5502
5503       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5504          an implicit typename for the second A.  Deal with it.  */
5505       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5506         type = TREE_TYPE (type);
5507
5508       if (CLASSTYPE_TEMPLATE_INFO (type))
5509         {
5510           template = CLASSTYPE_TI_TEMPLATE (type);
5511           d1 = DECL_NAME (template);
5512         }
5513     }
5514   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5515            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5516     {
5517       template = TYPE_TI_TEMPLATE (d1);
5518       d1 = DECL_NAME (template);
5519     }
5520   else if (TREE_CODE (d1) == TEMPLATE_DECL
5521            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5522     {
5523       template = d1;
5524       d1 = DECL_NAME (template);
5525       context = DECL_CONTEXT (template);
5526     }
5527
5528   /* Issue an error message if we didn't find a template.  */
5529   if (! template)
5530     {
5531       if (complain & tf_error)
5532         error ("%qT is not a template", d1);
5533       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5534     }
5535
5536   if (TREE_CODE (template) != TEMPLATE_DECL
5537          /* Make sure it's a user visible template, if it was named by
5538             the user.  */
5539       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5540           && !PRIMARY_TEMPLATE_P (template)))
5541     {
5542       if (complain & tf_error)
5543         {
5544           error ("non-template type %qT used as a template", d1);
5545           if (in_decl)
5546             error ("for template declaration %q+D", in_decl);
5547         }
5548       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5549     }
5550
5551   complain &= ~tf_user;
5552
5553   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5554     {
5555       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5556          template arguments */
5557
5558       tree parm;
5559       tree arglist2;
5560       tree outer;
5561
5562       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5563
5564       /* Consider an example where a template template parameter declared as
5565
5566            template <class T, class U = std::allocator<T> > class TT
5567
5568          The template parameter level of T and U are one level larger than
5569          of TT.  To proper process the default argument of U, say when an
5570          instantiation `TT<int>' is seen, we need to build the full
5571          arguments containing {int} as the innermost level.  Outer levels,
5572          available when not appearing as default template argument, can be
5573          obtained from the arguments of the enclosing template.
5574
5575          Suppose that TT is later substituted with std::vector.  The above
5576          instantiation is `TT<int, std::allocator<T> >' with TT at
5577          level 1, and T at level 2, while the template arguments at level 1
5578          becomes {std::vector} and the inner level 2 is {int}.  */
5579
5580       outer = DECL_CONTEXT (template);
5581       if (outer)
5582         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
5583       else if (current_template_parms)
5584         /* This is an argument of the current template, so we haven't set
5585            DECL_CONTEXT yet.  */
5586         outer = current_template_args ();
5587
5588       if (outer)
5589         arglist = add_to_template_args (outer, arglist);
5590
5591       arglist2 = coerce_template_parms (parmlist, arglist, template,
5592                                         complain,
5593                                         /*require_all_args=*/true,
5594                                         /*use_default_args=*/true);
5595       if (arglist2 == error_mark_node
5596           || (!uses_template_parms (arglist2)
5597               && check_instantiated_args (template, arglist2, complain)))
5598         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5599
5600       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5601       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5602     }
5603   else
5604     {
5605       tree template_type = TREE_TYPE (template);
5606       tree gen_tmpl;
5607       tree type_decl;
5608       tree found = NULL_TREE;
5609       int arg_depth;
5610       int parm_depth;
5611       int is_partial_instantiation;
5612
5613       gen_tmpl = most_general_template (template);
5614       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5615       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5616       arg_depth = TMPL_ARGS_DEPTH (arglist);
5617
5618       if (arg_depth == 1 && parm_depth > 1)
5619         {
5620           /* We've been given an incomplete set of template arguments.
5621              For example, given:
5622
5623                template <class T> struct S1 {
5624                  template <class U> struct S2 {};
5625                  template <class U> struct S2<U*> {};
5626                 };
5627
5628              we will be called with an ARGLIST of `U*', but the
5629              TEMPLATE will be `template <class T> template
5630              <class U> struct S1<T>::S2'.  We must fill in the missing
5631              arguments.  */
5632           arglist
5633             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5634                                            arglist);
5635           arg_depth = TMPL_ARGS_DEPTH (arglist);
5636         }
5637
5638       /* Now we should have enough arguments.  */
5639       gcc_assert (parm_depth == arg_depth);
5640
5641       /* From here on, we're only interested in the most general
5642          template.  */
5643       template = gen_tmpl;
5644
5645       /* Calculate the BOUND_ARGS.  These will be the args that are
5646          actually tsubst'd into the definition to create the
5647          instantiation.  */
5648       if (parm_depth > 1)
5649         {
5650           /* We have multiple levels of arguments to coerce, at once.  */
5651           int i;
5652           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5653
5654           tree bound_args = make_tree_vec (parm_depth);
5655
5656           for (i = saved_depth,
5657                  t = DECL_TEMPLATE_PARMS (template);
5658                i > 0 && t != NULL_TREE;
5659                --i, t = TREE_CHAIN (t))
5660             {
5661               tree a = coerce_template_parms (TREE_VALUE (t),
5662                                               arglist, template,
5663                                               complain,
5664                                               /*require_all_args=*/true,
5665                                               /*use_default_args=*/true);
5666
5667               /* Don't process further if one of the levels fails.  */
5668               if (a == error_mark_node)
5669                 {
5670                   /* Restore the ARGLIST to its full size.  */
5671                   TREE_VEC_LENGTH (arglist) = saved_depth;
5672                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5673                 }
5674
5675               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5676
5677               /* We temporarily reduce the length of the ARGLIST so
5678                  that coerce_template_parms will see only the arguments
5679                  corresponding to the template parameters it is
5680                  examining.  */
5681               TREE_VEC_LENGTH (arglist)--;
5682             }
5683
5684           /* Restore the ARGLIST to its full size.  */
5685           TREE_VEC_LENGTH (arglist) = saved_depth;
5686
5687           arglist = bound_args;
5688         }
5689       else
5690         arglist
5691           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5692                                    INNERMOST_TEMPLATE_ARGS (arglist),
5693                                    template,
5694                                    complain,
5695                                    /*require_all_args=*/true,
5696                                    /*use_default_args=*/true);
5697
5698       if (arglist == error_mark_node)
5699         /* We were unable to bind the arguments.  */
5700         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5701
5702       /* In the scope of a template class, explicit references to the
5703          template class refer to the type of the template, not any
5704          instantiation of it.  For example, in:
5705
5706            template <class T> class C { void f(C<T>); }
5707
5708          the `C<T>' is just the same as `C'.  Outside of the
5709          class, however, such a reference is an instantiation.  */
5710       if (comp_template_args (TYPE_TI_ARGS (template_type),
5711                               arglist))
5712         {
5713           found = template_type;
5714
5715           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5716             {
5717               tree ctx;
5718
5719               for (ctx = current_class_type;
5720                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5721                    ctx = (TYPE_P (ctx)
5722                           ? TYPE_CONTEXT (ctx)
5723                           : DECL_CONTEXT (ctx)))
5724                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5725                   goto found_ctx;
5726
5727               /* We're not in the scope of the class, so the
5728                  TEMPLATE_TYPE is not the type we want after all.  */
5729               found = NULL_TREE;
5730             found_ctx:;
5731             }
5732         }
5733       if (found)
5734         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5735
5736       /* If we already have this specialization, return it.  */
5737       found = retrieve_specialization (template, arglist,
5738                                        /*class_specializations_p=*/false);
5739       if (found)
5740         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5741
5742       /* This type is a "partial instantiation" if any of the template
5743          arguments still involve template parameters.  Note that we set
5744          IS_PARTIAL_INSTANTIATION for partial specializations as
5745          well.  */
5746       is_partial_instantiation = uses_template_parms (arglist);
5747
5748       /* If the deduced arguments are invalid, then the binding
5749          failed.  */
5750       if (!is_partial_instantiation
5751           && check_instantiated_args (template,
5752                                       INNERMOST_TEMPLATE_ARGS (arglist),
5753                                       complain))
5754         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5755
5756       if (!is_partial_instantiation
5757           && !PRIMARY_TEMPLATE_P (template)
5758           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5759         {
5760           found = xref_tag_from_type (TREE_TYPE (template),
5761                                       DECL_NAME (template),
5762                                       /*tag_scope=*/ts_global);
5763           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5764         }
5765
5766       context = tsubst (DECL_CONTEXT (template), arglist,
5767                         complain, in_decl);
5768       if (!context)
5769         context = global_namespace;
5770
5771       /* Create the type.  */
5772       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5773         {
5774           if (!is_partial_instantiation)
5775             {
5776               set_current_access_from_decl (TYPE_NAME (template_type));
5777               t = start_enum (TYPE_IDENTIFIER (template_type));
5778             }
5779           else
5780             /* We don't want to call start_enum for this type, since
5781                the values for the enumeration constants may involve
5782                template parameters.  And, no one should be interested
5783                in the enumeration constants for such a type.  */
5784             t = make_node (ENUMERAL_TYPE);
5785         }
5786       else
5787         {
5788           t = make_aggr_type (TREE_CODE (template_type));
5789           CLASSTYPE_DECLARED_CLASS (t)
5790             = CLASSTYPE_DECLARED_CLASS (template_type);
5791           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5792           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5793
5794           /* A local class.  Make sure the decl gets registered properly.  */
5795           if (context == current_function_decl)
5796             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5797
5798           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5799             /* This instantiation is another name for the primary
5800                template type. Set the TYPE_CANONICAL field
5801                appropriately. */
5802             TYPE_CANONICAL (t) = template_type;
5803           else if (any_template_arguments_need_structural_equality_p (arglist))
5804             /* Some of the template arguments require structural
5805                equality testing, so this template class requires
5806                structural equality testing. */
5807             SET_TYPE_STRUCTURAL_EQUALITY (t);
5808         }
5809
5810       /* If we called start_enum or pushtag above, this information
5811          will already be set up.  */
5812       if (!TYPE_NAME (t))
5813         {
5814           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5815
5816           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5817           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5818           TYPE_STUB_DECL (t) = type_decl;
5819           DECL_SOURCE_LOCATION (type_decl)
5820             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5821         }
5822       else
5823         type_decl = TYPE_NAME (t);
5824
5825       TREE_PRIVATE (type_decl)
5826         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5827       TREE_PROTECTED (type_decl)
5828         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5829       DECL_IN_SYSTEM_HEADER (type_decl)
5830         = DECL_IN_SYSTEM_HEADER (template);
5831       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5832         {
5833           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5834           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5835         }
5836
5837       /* Set up the template information.  We have to figure out which
5838          template is the immediate parent if this is a full
5839          instantiation.  */
5840       if (parm_depth == 1 || is_partial_instantiation
5841           || !PRIMARY_TEMPLATE_P (template))
5842         /* This case is easy; there are no member templates involved.  */
5843         found = template;
5844       else
5845         {
5846           /* This is a full instantiation of a member template.  Look
5847              for a partial instantiation of which this is an instance.  */
5848
5849           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5850                found; found = TREE_CHAIN (found))
5851             {
5852               int success;
5853               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5854
5855               /* We only want partial instantiations, here, not
5856                  specializations or full instantiations.  */
5857               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5858                   || !uses_template_parms (TREE_VALUE (found)))
5859                 continue;
5860
5861               /* Temporarily reduce by one the number of levels in the
5862                  ARGLIST and in FOUND so as to avoid comparing the
5863                  last set of arguments.  */
5864               TREE_VEC_LENGTH (arglist)--;
5865               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5866
5867               /* See if the arguments match.  If they do, then TMPL is
5868                  the partial instantiation we want.  */
5869               success = comp_template_args (TREE_PURPOSE (found), arglist);
5870
5871               /* Restore the argument vectors to their full size.  */
5872               TREE_VEC_LENGTH (arglist)++;
5873               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5874
5875               if (success)
5876                 {
5877                   found = tmpl;
5878                   break;
5879                 }
5880             }
5881
5882           if (!found)
5883             {
5884               /* There was no partial instantiation. This happens
5885                  where C<T> is a member template of A<T> and it's used
5886                  in something like
5887
5888                   template <typename T> struct B { A<T>::C<int> m; };
5889                   B<float>;
5890
5891                  Create the partial instantiation.
5892                */
5893               TREE_VEC_LENGTH (arglist)--;
5894               found = tsubst (template, arglist, complain, NULL_TREE);
5895               TREE_VEC_LENGTH (arglist)++;
5896             }
5897         }
5898
5899       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5900       DECL_TEMPLATE_INSTANTIATIONS (template)
5901         = tree_cons (arglist, t,
5902                      DECL_TEMPLATE_INSTANTIATIONS (template));
5903
5904       if (TREE_CODE (t) == ENUMERAL_TYPE
5905           && !is_partial_instantiation)
5906         /* Now that the type has been registered on the instantiations
5907            list, we set up the enumerators.  Because the enumeration
5908            constants may involve the enumeration type itself, we make
5909            sure to register the type first, and then create the
5910            constants.  That way, doing tsubst_expr for the enumeration
5911            constants won't result in recursive calls here; we'll find
5912            the instantiation and exit above.  */
5913         tsubst_enum (template_type, t, arglist);
5914
5915       if (is_partial_instantiation)
5916         /* If the type makes use of template parameters, the
5917            code that generates debugging information will crash.  */
5918         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5919
5920       /* Possibly limit visibility based on template args.  */
5921       TREE_PUBLIC (type_decl) = 1;
5922       determine_visibility (type_decl);
5923
5924       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5925     }
5926   timevar_pop (TV_NAME_LOOKUP);
5927 }
5928 \f
5929 struct pair_fn_data
5930 {
5931   tree_fn_t fn;
5932   void *data;
5933   struct pointer_set_t *visited;
5934 };
5935
5936 /* Called from for_each_template_parm via walk_tree.  */
5937
5938 static tree
5939 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5940 {
5941   tree t = *tp;
5942   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5943   tree_fn_t fn = pfd->fn;
5944   void *data = pfd->data;
5945
5946   if (TYPE_P (t)
5947       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5948     return error_mark_node;
5949
5950   switch (TREE_CODE (t))
5951     {
5952     case RECORD_TYPE:
5953       if (TYPE_PTRMEMFUNC_P (t))
5954         break;
5955       /* Fall through.  */
5956
5957     case UNION_TYPE:
5958     case ENUMERAL_TYPE:
5959       if (!TYPE_TEMPLATE_INFO (t))
5960         *walk_subtrees = 0;
5961       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5962                                        fn, data, pfd->visited))
5963         return error_mark_node;
5964       break;
5965
5966     case INTEGER_TYPE:
5967       if (for_each_template_parm (TYPE_MIN_VALUE (t),
5968                                   fn, data, pfd->visited)
5969           || for_each_template_parm (TYPE_MAX_VALUE (t),
5970                                      fn, data, pfd->visited))
5971         return error_mark_node;
5972       break;
5973
5974     case METHOD_TYPE:
5975       /* Since we're not going to walk subtrees, we have to do this
5976          explicitly here.  */
5977       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5978                                   pfd->visited))
5979         return error_mark_node;
5980       /* Fall through.  */
5981
5982     case FUNCTION_TYPE:
5983       /* Check the return type.  */
5984       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5985         return error_mark_node;
5986
5987       /* Check the parameter types.  Since default arguments are not
5988          instantiated until they are needed, the TYPE_ARG_TYPES may
5989          contain expressions that involve template parameters.  But,
5990          no-one should be looking at them yet.  And, once they're
5991          instantiated, they don't contain template parameters, so
5992          there's no point in looking at them then, either.  */
5993       {
5994         tree parm;
5995
5996         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5997           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5998                                       pfd->visited))
5999             return error_mark_node;
6000
6001         /* Since we've already handled the TYPE_ARG_TYPES, we don't
6002            want walk_tree walking into them itself.  */
6003         *walk_subtrees = 0;
6004       }
6005       break;
6006
6007     case TYPEOF_TYPE:
6008       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
6009                                   pfd->visited))
6010         return error_mark_node;
6011       break;
6012
6013     case FUNCTION_DECL:
6014     case VAR_DECL:
6015       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
6016           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
6017                                      pfd->visited))
6018         return error_mark_node;
6019       /* Fall through.  */
6020
6021     case PARM_DECL:
6022     case CONST_DECL:
6023       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
6024           && for_each_template_parm (DECL_INITIAL (t), fn, data,
6025                                      pfd->visited))
6026         return error_mark_node;
6027       if (DECL_CONTEXT (t)
6028           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
6029                                      pfd->visited))
6030         return error_mark_node;
6031       break;
6032
6033     case BOUND_TEMPLATE_TEMPLATE_PARM:
6034       /* Record template parameters such as `T' inside `TT<T>'.  */
6035       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
6036         return error_mark_node;
6037       /* Fall through.  */
6038
6039     case TEMPLATE_TEMPLATE_PARM:
6040     case TEMPLATE_TYPE_PARM:
6041     case TEMPLATE_PARM_INDEX:
6042       if (fn && (*fn)(t, data))
6043         return error_mark_node;
6044       else if (!fn)
6045         return error_mark_node;
6046       break;
6047
6048     case TEMPLATE_DECL:
6049       /* A template template parameter is encountered.  */
6050       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
6051           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
6052         return error_mark_node;
6053
6054       /* Already substituted template template parameter */
6055       *walk_subtrees = 0;
6056       break;
6057
6058     case TYPENAME_TYPE:
6059       if (!fn
6060           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
6061                                      data, pfd->visited))
6062         return error_mark_node;
6063       break;
6064
6065     case CONSTRUCTOR:
6066       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
6067           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
6068                                      (TREE_TYPE (t)), fn, data,
6069                                      pfd->visited))
6070         return error_mark_node;
6071       break;
6072
6073     case INDIRECT_REF:
6074     case COMPONENT_REF:
6075       /* If there's no type, then this thing must be some expression
6076          involving template parameters.  */
6077       if (!fn && !TREE_TYPE (t))
6078         return error_mark_node;
6079       break;
6080
6081     case MODOP_EXPR:
6082     case CAST_EXPR:
6083     case REINTERPRET_CAST_EXPR:
6084     case CONST_CAST_EXPR:
6085     case STATIC_CAST_EXPR:
6086     case DYNAMIC_CAST_EXPR:
6087     case ARROW_EXPR:
6088     case DOTSTAR_EXPR:
6089     case TYPEID_EXPR:
6090     case PSEUDO_DTOR_EXPR:
6091       if (!fn)
6092         return error_mark_node;
6093       break;
6094
6095     default:
6096       break;
6097     }
6098
6099   /* We didn't find any template parameters we liked.  */
6100   return NULL_TREE;
6101 }
6102
6103 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
6104    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
6105    call FN with the parameter and the DATA.
6106    If FN returns nonzero, the iteration is terminated, and
6107    for_each_template_parm returns 1.  Otherwise, the iteration
6108    continues.  If FN never returns a nonzero value, the value
6109    returned by for_each_template_parm is 0.  If FN is NULL, it is
6110    considered to be the function which always returns 1.  */
6111
6112 static int
6113 for_each_template_parm (tree t, tree_fn_t fn, void* data,
6114                         struct pointer_set_t *visited)
6115 {
6116   struct pair_fn_data pfd;
6117   int result;
6118
6119   /* Set up.  */
6120   pfd.fn = fn;
6121   pfd.data = data;
6122
6123   /* Walk the tree.  (Conceptually, we would like to walk without
6124      duplicates, but for_each_template_parm_r recursively calls
6125      for_each_template_parm, so we would need to reorganize a fair
6126      bit to use walk_tree_without_duplicates, so we keep our own
6127      visited list.)  */
6128   if (visited)
6129     pfd.visited = visited;
6130   else
6131     pfd.visited = pointer_set_create ();
6132   result = cp_walk_tree (&t,
6133                          for_each_template_parm_r,
6134                          &pfd,
6135                          pfd.visited) != NULL_TREE;
6136
6137   /* Clean up.  */
6138   if (!visited)
6139     {
6140       pointer_set_destroy (pfd.visited);
6141       pfd.visited = 0;
6142     }
6143
6144   return result;
6145 }
6146
6147 /* Returns true if T depends on any template parameter.  */
6148
6149 int
6150 uses_template_parms (tree t)
6151 {
6152   bool dependent_p;
6153   int saved_processing_template_decl;
6154
6155   saved_processing_template_decl = processing_template_decl;
6156   if (!saved_processing_template_decl)
6157     processing_template_decl = 1;
6158   if (TYPE_P (t))
6159     dependent_p = dependent_type_p (t);
6160   else if (TREE_CODE (t) == TREE_VEC)
6161     dependent_p = any_dependent_template_arguments_p (t);
6162   else if (TREE_CODE (t) == TREE_LIST)
6163     dependent_p = (uses_template_parms (TREE_VALUE (t))
6164                    || uses_template_parms (TREE_CHAIN (t)));
6165   else if (TREE_CODE (t) == TYPE_DECL)
6166     dependent_p = dependent_type_p (TREE_TYPE (t));
6167   else if (DECL_P (t)
6168            || EXPR_P (t)
6169            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
6170            || TREE_CODE (t) == OVERLOAD
6171            || TREE_CODE (t) == BASELINK
6172            || TREE_CODE (t) == IDENTIFIER_NODE
6173            || TREE_CODE (t) == TRAIT_EXPR
6174            || CONSTANT_CLASS_P (t))
6175     dependent_p = (type_dependent_expression_p (t)
6176                    || value_dependent_expression_p (t));
6177   else
6178     {
6179       gcc_assert (t == error_mark_node);
6180       dependent_p = false;
6181     }
6182
6183   processing_template_decl = saved_processing_template_decl;
6184
6185   return dependent_p;
6186 }
6187
6188 /* Returns true if T depends on any template parameter with level LEVEL.  */
6189
6190 int
6191 uses_template_parms_level (tree t, int level)
6192 {
6193   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
6194 }
6195
6196 static int tinst_depth;
6197 extern int max_tinst_depth;
6198 #ifdef GATHER_STATISTICS
6199 int depth_reached;
6200 #endif
6201 static int tinst_level_tick;
6202 static int last_template_error_tick;
6203
6204 /* We're starting to instantiate D; record the template instantiation context
6205    for diagnostics and to restore it later.  */
6206
6207 static int
6208 push_tinst_level (tree d)
6209 {
6210   struct tinst_level *new;
6211
6212   if (tinst_depth >= max_tinst_depth)
6213     {
6214       /* If the instantiation in question still has unbound template parms,
6215          we don't really care if we can't instantiate it, so just return.
6216          This happens with base instantiation for implicit `typename'.  */
6217       if (uses_template_parms (d))
6218         return 0;
6219
6220       last_template_error_tick = tinst_level_tick;
6221       error ("template instantiation depth exceeds maximum of %d (use "
6222              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6223              max_tinst_depth, d);
6224
6225       print_instantiation_context ();
6226
6227       return 0;
6228     }
6229
6230   new = GGC_NEW (struct tinst_level);
6231   new->decl = d;
6232   new->locus = input_location;
6233   new->in_system_header_p = in_system_header;
6234   new->next = current_tinst_level;
6235   current_tinst_level = new;
6236
6237   ++tinst_depth;
6238 #ifdef GATHER_STATISTICS
6239   if (tinst_depth > depth_reached)
6240     depth_reached = tinst_depth;
6241 #endif
6242
6243   ++tinst_level_tick;
6244   return 1;
6245 }
6246
6247 /* We're done instantiating this template; return to the instantiation
6248    context.  */
6249
6250 static void
6251 pop_tinst_level (void)
6252 {
6253   /* Restore the filename and line number stashed away when we started
6254      this instantiation.  */
6255   input_location = current_tinst_level->locus;
6256   in_system_header = current_tinst_level->in_system_header_p;
6257   current_tinst_level = current_tinst_level->next;
6258   --tinst_depth;
6259   ++tinst_level_tick;
6260 }
6261
6262 /* We're instantiating a deferred template; restore the template
6263    instantiation context in which the instantiation was requested, which
6264    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
6265
6266 static tree
6267 reopen_tinst_level (struct tinst_level *level)
6268 {
6269   struct tinst_level *t;
6270
6271   tinst_depth = 0;
6272   for (t = level; t; t = t->next)
6273     ++tinst_depth;
6274
6275   current_tinst_level = level;
6276   pop_tinst_level ();
6277   return level->decl;
6278 }
6279
6280 /* Returns the TINST_LEVEL which gives the original instantiation
6281    context.  */
6282
6283 struct tinst_level *
6284 outermost_tinst_level (void)
6285 {
6286   struct tinst_level *level = current_tinst_level;
6287   if (level)
6288     while (level->next)
6289       level = level->next;
6290   return level;
6291 }
6292
6293 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6294    vector of template arguments, as for tsubst.
6295
6296    Returns an appropriate tsubst'd friend declaration.  */
6297
6298 static tree
6299 tsubst_friend_function (tree decl, tree args)
6300 {
6301   tree new_friend;
6302
6303   if (TREE_CODE (decl) == FUNCTION_DECL
6304       && DECL_TEMPLATE_INSTANTIATION (decl)
6305       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6306     /* This was a friend declared with an explicit template
6307        argument list, e.g.:
6308
6309        friend void f<>(T);
6310
6311        to indicate that f was a template instantiation, not a new
6312        function declaration.  Now, we have to figure out what
6313        instantiation of what template.  */
6314     {
6315       tree template_id, arglist, fns;
6316       tree new_args;
6317       tree tmpl;
6318       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6319
6320       /* Friend functions are looked up in the containing namespace scope.
6321          We must enter that scope, to avoid finding member functions of the
6322          current cless with same name.  */
6323       push_nested_namespace (ns);
6324       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6325                          tf_warning_or_error, NULL_TREE,
6326                          /*integral_constant_expression_p=*/false);
6327       pop_nested_namespace (ns);
6328       arglist = tsubst (DECL_TI_ARGS (decl), args,
6329                         tf_warning_or_error, NULL_TREE);
6330       template_id = lookup_template_function (fns, arglist);
6331
6332       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6333       tmpl = determine_specialization (template_id, new_friend,
6334                                        &new_args,
6335                                        /*need_member_template=*/0,
6336                                        TREE_VEC_LENGTH (args),
6337                                        tsk_none);
6338       return instantiate_template (tmpl, new_args, tf_error);
6339     }
6340
6341   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6342
6343   /* The NEW_FRIEND will look like an instantiation, to the
6344      compiler, but is not an instantiation from the point of view of
6345      the language.  For example, we might have had:
6346
6347      template <class T> struct S {
6348        template <class U> friend void f(T, U);
6349      };
6350
6351      Then, in S<int>, template <class U> void f(int, U) is not an
6352      instantiation of anything.  */
6353   if (new_friend == error_mark_node)
6354     return error_mark_node;
6355
6356   DECL_USE_TEMPLATE (new_friend) = 0;
6357   if (TREE_CODE (decl) == TEMPLATE_DECL)
6358     {
6359       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6360       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6361         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6362     }
6363
6364   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6365      is not a template instantiation and should not be mangled like
6366      one.  Therefore, we forget the mangling here; we'll recompute it
6367      later if we need it.  */
6368   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6369     {
6370       SET_DECL_RTL (new_friend, NULL_RTX);
6371       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6372     }
6373
6374   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6375     {
6376       tree old_decl;
6377       tree new_friend_template_info;
6378       tree new_friend_result_template_info;
6379       tree ns;
6380       int  new_friend_is_defn;
6381
6382       /* We must save some information from NEW_FRIEND before calling
6383          duplicate decls since that function will free NEW_FRIEND if
6384          possible.  */
6385       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6386       new_friend_is_defn =
6387             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6388                            (template_for_substitution (new_friend)))
6389              != NULL_TREE);
6390       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6391         {
6392           /* This declaration is a `primary' template.  */
6393           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6394
6395           new_friend_result_template_info
6396             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6397         }
6398       else
6399         new_friend_result_template_info = NULL_TREE;
6400
6401       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6402       if (new_friend_is_defn)
6403         DECL_INITIAL (new_friend) = error_mark_node;
6404
6405       /* Inside pushdecl_namespace_level, we will push into the
6406          current namespace. However, the friend function should go
6407          into the namespace of the template.  */
6408       ns = decl_namespace_context (new_friend);
6409       push_nested_namespace (ns);
6410       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6411       pop_nested_namespace (ns);
6412
6413       if (old_decl == error_mark_node)
6414         return error_mark_node;
6415
6416       if (old_decl != new_friend)
6417         {
6418           /* This new friend declaration matched an existing
6419              declaration.  For example, given:
6420
6421                template <class T> void f(T);
6422                template <class U> class C {
6423                  template <class T> friend void f(T) {}
6424                };
6425
6426              the friend declaration actually provides the definition
6427              of `f', once C has been instantiated for some type.  So,
6428              old_decl will be the out-of-class template declaration,
6429              while new_friend is the in-class definition.
6430
6431              But, if `f' was called before this point, the
6432              instantiation of `f' will have DECL_TI_ARGS corresponding
6433              to `T' but not to `U', references to which might appear
6434              in the definition of `f'.  Previously, the most general
6435              template for an instantiation of `f' was the out-of-class
6436              version; now it is the in-class version.  Therefore, we
6437              run through all specialization of `f', adding to their
6438              DECL_TI_ARGS appropriately.  In particular, they need a
6439              new set of outer arguments, corresponding to the
6440              arguments for this class instantiation.
6441
6442              The same situation can arise with something like this:
6443
6444                friend void f(int);
6445                template <class T> class C {
6446                  friend void f(T) {}
6447                };
6448
6449              when `C<int>' is instantiated.  Now, `f(int)' is defined
6450              in the class.  */
6451
6452           if (!new_friend_is_defn)
6453             /* On the other hand, if the in-class declaration does
6454                *not* provide a definition, then we don't want to alter
6455                existing definitions.  We can just leave everything
6456                alone.  */
6457             ;
6458           else
6459             {
6460               /* Overwrite whatever template info was there before, if
6461                  any, with the new template information pertaining to
6462                  the declaration.  */
6463               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6464
6465               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6466                 reregister_specialization (new_friend,
6467                                            most_general_template (old_decl),
6468                                            old_decl);
6469               else
6470                 {
6471                   tree t;
6472                   tree new_friend_args;
6473
6474                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6475                     = new_friend_result_template_info;
6476
6477                   new_friend_args = TI_ARGS (new_friend_template_info);
6478                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6479                        t != NULL_TREE;
6480                        t = TREE_CHAIN (t))
6481                     {
6482                       tree spec = TREE_VALUE (t);
6483
6484                       DECL_TI_ARGS (spec)
6485                         = add_outermost_template_args (new_friend_args,
6486                                                        DECL_TI_ARGS (spec));
6487                     }
6488
6489                   /* Now, since specializations are always supposed to
6490                      hang off of the most general template, we must move
6491                      them.  */
6492                   t = most_general_template (old_decl);
6493                   if (t != old_decl)
6494                     {
6495                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6496                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6497                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6498                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6499                     }
6500                 }
6501             }
6502
6503           /* The information from NEW_FRIEND has been merged into OLD_DECL
6504              by duplicate_decls.  */
6505           new_friend = old_decl;
6506         }
6507     }
6508   else
6509     {
6510       tree context = DECL_CONTEXT (new_friend);
6511       bool dependent_p;
6512
6513       /* In the code
6514            template <class T> class C {
6515              template <class U> friend void C1<U>::f (); // case 1
6516              friend void C2<T>::f ();                    // case 2
6517            };
6518          we only need to make sure CONTEXT is a complete type for
6519          case 2.  To distinguish between the two cases, we note that
6520          CONTEXT of case 1 remains dependent type after tsubst while
6521          this isn't true for case 2.  */
6522       ++processing_template_decl;
6523       dependent_p = dependent_type_p (context);
6524       --processing_template_decl;
6525
6526       if (!dependent_p
6527           && !complete_type_or_else (context, NULL_TREE))
6528         return error_mark_node;
6529
6530       if (COMPLETE_TYPE_P (context))
6531         {
6532           /* Check to see that the declaration is really present, and,
6533              possibly obtain an improved declaration.  */
6534           tree fn = check_classfn (context,
6535                                    new_friend, NULL_TREE);
6536
6537           if (fn)
6538             new_friend = fn;
6539         }
6540     }
6541
6542   return new_friend;
6543 }
6544
6545 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6546    template arguments, as for tsubst.
6547
6548    Returns an appropriate tsubst'd friend type or error_mark_node on
6549    failure.  */
6550
6551 static tree
6552 tsubst_friend_class (tree friend_tmpl, tree args)
6553 {
6554   tree friend_type;
6555   tree tmpl;
6556   tree context;
6557
6558   context = DECL_CONTEXT (friend_tmpl);
6559
6560   if (context)
6561     {
6562       if (TREE_CODE (context) == NAMESPACE_DECL)
6563         push_nested_namespace (context);
6564       else
6565         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6566     }
6567
6568   /* Look for a class template declaration.  We look for hidden names
6569      because two friend declarations of the same template are the
6570      same.  For example, in:
6571
6572        struct A { 
6573          template <typename> friend class F;
6574        };
6575        template <typename> struct B { 
6576          template <typename> friend class F;
6577        };
6578
6579      both F templates are the same.  */
6580   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6581                            /*block_p=*/true, 0, 
6582                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6583
6584   /* But, if we don't find one, it might be because we're in a
6585      situation like this:
6586
6587        template <class T>
6588        struct S {
6589          template <class U>
6590          friend struct S;
6591        };
6592
6593      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6594      for `S<int>', not the TEMPLATE_DECL.  */
6595   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6596     {
6597       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6598       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6599     }
6600
6601   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6602     {
6603       /* The friend template has already been declared.  Just
6604          check to see that the declarations match, and install any new
6605          default parameters.  We must tsubst the default parameters,
6606          of course.  We only need the innermost template parameters
6607          because that is all that redeclare_class_template will look
6608          at.  */
6609       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6610           > TMPL_ARGS_DEPTH (args))
6611         {
6612           tree parms;
6613           location_t saved_input_location;
6614           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6615                                          args, tf_warning_or_error);
6616
6617           saved_input_location = input_location;
6618           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
6619           redeclare_class_template (TREE_TYPE (tmpl), parms);
6620           input_location = saved_input_location;
6621           
6622         }
6623
6624       friend_type = TREE_TYPE (tmpl);
6625     }
6626   else
6627     {
6628       /* The friend template has not already been declared.  In this
6629          case, the instantiation of the template class will cause the
6630          injection of this template into the global scope.  */
6631       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6632       if (tmpl == error_mark_node)
6633         return error_mark_node;
6634
6635       /* The new TMPL is not an instantiation of anything, so we
6636          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6637          the new type because that is supposed to be the corresponding
6638          template decl, i.e., TMPL.  */
6639       DECL_USE_TEMPLATE (tmpl) = 0;
6640       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6641       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6642       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6643         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6644
6645       /* Inject this template into the global scope.  */
6646       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6647     }
6648
6649   if (context)
6650     {
6651       if (TREE_CODE (context) == NAMESPACE_DECL)
6652         pop_nested_namespace (context);
6653       else
6654         pop_nested_class ();
6655     }
6656
6657   return friend_type;
6658 }
6659
6660 /* Returns zero if TYPE cannot be completed later due to circularity.
6661    Otherwise returns one.  */
6662
6663 static int
6664 can_complete_type_without_circularity (tree type)
6665 {
6666   if (type == NULL_TREE || type == error_mark_node)
6667     return 0;
6668   else if (COMPLETE_TYPE_P (type))
6669     return 1;
6670   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6671     return can_complete_type_without_circularity (TREE_TYPE (type));
6672   else if (CLASS_TYPE_P (type)
6673            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6674     return 0;
6675   else
6676     return 1;
6677 }
6678
6679 /* Apply any attributes which had to be deferred until instantiation
6680    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
6681    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
6682
6683 static void
6684 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
6685                                 tree args, tsubst_flags_t complain, tree in_decl)
6686 {
6687   tree last_dep = NULL_TREE;
6688   tree t;
6689   tree *p;
6690
6691   for (t = attributes; t; t = TREE_CHAIN (t))
6692     if (ATTR_IS_DEPENDENT (t))
6693       {
6694         last_dep = t;
6695         attributes = copy_list (attributes);
6696         break;
6697       }
6698
6699   if (DECL_P (*decl_p))
6700     {
6701       if (TREE_TYPE (*decl_p) == error_mark_node)
6702         return;
6703       p = &DECL_ATTRIBUTES (*decl_p);
6704     }
6705   else
6706     p = &TYPE_ATTRIBUTES (*decl_p);
6707
6708   if (last_dep)
6709     {
6710       tree late_attrs = NULL_TREE;
6711       tree *q = &late_attrs;
6712
6713       for (*p = attributes; *p; )
6714         {
6715           t = *p;
6716           if (ATTR_IS_DEPENDENT (t))
6717             {
6718               *p = TREE_CHAIN (t);
6719               TREE_CHAIN (t) = NULL_TREE;
6720               TREE_VALUE (t)
6721                 = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
6722                                /*integral_constant_expression_p=*/false);
6723               *q = t;
6724               q = &TREE_CHAIN (t);
6725             }
6726           else
6727             p = &TREE_CHAIN (t);
6728         }
6729
6730       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
6731     }
6732 }
6733
6734 tree
6735 instantiate_class_template (tree type)
6736 {
6737   tree template, args, pattern, t, member;
6738   tree typedecl;
6739   tree pbinfo;
6740   tree base_list;
6741
6742   if (type == error_mark_node)
6743     return error_mark_node;
6744
6745   if (TYPE_BEING_DEFINED (type)
6746       || COMPLETE_TYPE_P (type)
6747       || dependent_type_p (type))
6748     return type;
6749
6750   /* Figure out which template is being instantiated.  */
6751   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6752   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6753
6754   /* Determine what specialization of the original template to
6755      instantiate.  */
6756   t = most_specialized_class (type, template);
6757   if (t == error_mark_node)
6758     {
6759       TYPE_BEING_DEFINED (type) = 1;
6760       return error_mark_node;
6761     }
6762   else if (t)
6763     {
6764       /* This TYPE is actually an instantiation of a partial
6765          specialization.  We replace the innermost set of ARGS with
6766          the arguments appropriate for substitution.  For example,
6767          given:
6768
6769            template <class T> struct S {};
6770            template <class T> struct S<T*> {};
6771
6772          and supposing that we are instantiating S<int*>, ARGS will
6773          presently be {int*} -- but we need {int}.  */
6774       pattern = TREE_TYPE (t);
6775       args = TREE_PURPOSE (t);
6776     }
6777   else
6778     {
6779       pattern = TREE_TYPE (template);
6780       args = CLASSTYPE_TI_ARGS (type);
6781     }
6782
6783   /* If the template we're instantiating is incomplete, then clearly
6784      there's nothing we can do.  */
6785   if (!COMPLETE_TYPE_P (pattern))
6786     return type;
6787
6788   /* If we've recursively instantiated too many templates, stop.  */
6789   if (! push_tinst_level (type))
6790     return type;
6791
6792   /* Now we're really doing the instantiation.  Mark the type as in
6793      the process of being defined.  */
6794   TYPE_BEING_DEFINED (type) = 1;
6795
6796   /* We may be in the middle of deferred access check.  Disable
6797      it now.  */
6798   push_deferring_access_checks (dk_no_deferred);
6799
6800   push_to_top_level ();
6801
6802   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6803
6804   /* Set the input location to the template definition. This is needed
6805      if tsubsting causes an error.  */
6806   typedecl = TYPE_MAIN_DECL (type);
6807   input_location = DECL_SOURCE_LOCATION (typedecl);
6808   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6809
6810   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6811   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6812   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6813   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6814   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6815   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6816   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6817   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6818   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6819   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6820   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6821   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6822   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6823   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6824   if (ANON_AGGR_TYPE_P (pattern))
6825     SET_ANON_AGGR_TYPE_P (type);
6826   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6827     {
6828       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6829       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6830     }
6831
6832   pbinfo = TYPE_BINFO (pattern);
6833
6834   /* We should never instantiate a nested class before its enclosing
6835      class; we need to look up the nested class by name before we can
6836      instantiate it, and that lookup should instantiate the enclosing
6837      class.  */
6838   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6839               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6840               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6841
6842   base_list = NULL_TREE;
6843   if (BINFO_N_BASE_BINFOS (pbinfo))
6844     {
6845       tree pbase_binfo;
6846       tree context = TYPE_CONTEXT (type);
6847       tree pushed_scope;
6848       int i;
6849
6850       /* We must enter the scope containing the type, as that is where
6851          the accessibility of types named in dependent bases are
6852          looked up from.  */
6853       pushed_scope = push_scope (context ? context : global_namespace);
6854
6855       /* Substitute into each of the bases to determine the actual
6856          basetypes.  */
6857       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6858         {
6859           tree base;
6860           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6861           tree expanded_bases = NULL_TREE;
6862           int idx, len = 1;
6863
6864           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6865             {
6866               expanded_bases = 
6867                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6868                                        args, tf_error, NULL_TREE);
6869               if (expanded_bases == error_mark_node)
6870                 continue;
6871
6872               len = TREE_VEC_LENGTH (expanded_bases);
6873             }
6874
6875           for (idx = 0; idx < len; idx++)
6876             {
6877               if (expanded_bases)
6878                 /* Extract the already-expanded base class.  */
6879                 base = TREE_VEC_ELT (expanded_bases, idx);
6880               else
6881                 /* Substitute to figure out the base class.  */
6882                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6883                                NULL_TREE);
6884
6885               if (base == error_mark_node)
6886                 continue;
6887
6888               base_list = tree_cons (access, base, base_list);
6889               if (BINFO_VIRTUAL_P (pbase_binfo))
6890                 TREE_TYPE (base_list) = integer_type_node;
6891             }
6892         }
6893
6894       /* The list is now in reverse order; correct that.  */
6895       base_list = nreverse (base_list);
6896
6897       if (pushed_scope)
6898         pop_scope (pushed_scope);
6899     }
6900   /* Now call xref_basetypes to set up all the base-class
6901      information.  */
6902   xref_basetypes (type, base_list);
6903
6904   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
6905                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
6906                                   args, tf_error, NULL_TREE);
6907
6908   /* Now that our base classes are set up, enter the scope of the
6909      class, so that name lookups into base classes, etc. will work
6910      correctly.  This is precisely analogous to what we do in
6911      begin_class_definition when defining an ordinary non-template
6912      class, except we also need to push the enclosing classes.  */
6913   push_nested_class (type);
6914
6915   /* Now members are processed in the order of declaration.  */
6916   for (member = CLASSTYPE_DECL_LIST (pattern);
6917        member; member = TREE_CHAIN (member))
6918     {
6919       tree t = TREE_VALUE (member);
6920
6921       if (TREE_PURPOSE (member))
6922         {
6923           if (TYPE_P (t))
6924             {
6925               /* Build new CLASSTYPE_NESTED_UTDS.  */
6926
6927               tree newtag;
6928               bool class_template_p;
6929
6930               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6931                                   && TYPE_LANG_SPECIFIC (t)
6932                                   && CLASSTYPE_IS_TEMPLATE (t));
6933               /* If the member is a class template, then -- even after
6934                  substitution -- there may be dependent types in the
6935                  template argument list for the class.  We increment
6936                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6937                  that function will assume that no types are dependent
6938                  when outside of a template.  */
6939               if (class_template_p)
6940                 ++processing_template_decl;
6941               newtag = tsubst (t, args, tf_error, NULL_TREE);
6942               if (class_template_p)
6943                 --processing_template_decl;
6944               if (newtag == error_mark_node)
6945                 continue;
6946
6947               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6948                 {
6949                   tree name = TYPE_IDENTIFIER (t);
6950
6951                   if (class_template_p)
6952                     /* Unfortunately, lookup_template_class sets
6953                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6954                        instantiation (i.e., for the type of a member
6955                        template class nested within a template class.)
6956                        This behavior is required for
6957                        maybe_process_partial_specialization to work
6958                        correctly, but is not accurate in this case;
6959                        the TAG is not an instantiation of anything.
6960                        (The corresponding TEMPLATE_DECL is an
6961                        instantiation, but the TYPE is not.) */
6962                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6963
6964                   /* Now, we call pushtag to put this NEWTAG into the scope of
6965                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6966                      pushtag calling push_template_decl.  We don't have to do
6967                      this for enums because it will already have been done in
6968                      tsubst_enum.  */
6969                   if (name)
6970                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6971                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6972                 }
6973             }
6974           else if (TREE_CODE (t) == FUNCTION_DECL
6975                    || DECL_FUNCTION_TEMPLATE_P (t))
6976             {
6977               /* Build new TYPE_METHODS.  */
6978               tree r;
6979
6980               if (TREE_CODE (t) == TEMPLATE_DECL)
6981                 ++processing_template_decl;
6982               r = tsubst (t, args, tf_error, NULL_TREE);
6983               if (TREE_CODE (t) == TEMPLATE_DECL)
6984                 --processing_template_decl;
6985               set_current_access_from_decl (r);
6986               finish_member_declaration (r);
6987             }
6988           else
6989             {
6990               /* Build new TYPE_FIELDS.  */
6991               if (TREE_CODE (t) == STATIC_ASSERT)
6992                 {
6993                   tree condition = 
6994                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6995                                  tf_warning_or_error, NULL_TREE,
6996                                  /*integral_constant_expression_p=*/true);
6997                   finish_static_assert (condition,
6998                                         STATIC_ASSERT_MESSAGE (t), 
6999                                         STATIC_ASSERT_SOURCE_LOCATION (t),
7000                                         /*member_p=*/true);
7001                 }
7002               else if (TREE_CODE (t) != CONST_DECL)
7003                 {
7004                   tree r;
7005
7006                   /* The the file and line for this declaration, to
7007                      assist in error message reporting.  Since we
7008                      called push_tinst_level above, we don't need to
7009                      restore these.  */
7010                   input_location = DECL_SOURCE_LOCATION (t);
7011
7012                   if (TREE_CODE (t) == TEMPLATE_DECL)
7013                     ++processing_template_decl;
7014                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
7015                   if (TREE_CODE (t) == TEMPLATE_DECL)
7016                     --processing_template_decl;
7017                   if (TREE_CODE (r) == VAR_DECL)
7018                     {
7019                       /* In [temp.inst]:
7020
7021                            [t]he initialization (and any associated
7022                            side-effects) of a static data member does
7023                            not occur unless the static data member is
7024                            itself used in a way that requires the
7025                            definition of the static data member to
7026                            exist.
7027
7028                          Therefore, we do not substitute into the
7029                          initialized for the static data member here.  */
7030                       finish_static_data_member_decl
7031                         (r,
7032                          /*init=*/NULL_TREE,
7033                          /*init_const_expr_p=*/false,
7034                          /*asmspec_tree=*/NULL_TREE,
7035                          /*flags=*/0);
7036                       if (DECL_INITIALIZED_IN_CLASS_P (r))
7037                         check_static_variable_definition (r, TREE_TYPE (r));
7038                     }
7039                   else if (TREE_CODE (r) == FIELD_DECL)
7040                     {
7041                       /* Determine whether R has a valid type and can be
7042                          completed later.  If R is invalid, then it is
7043                          replaced by error_mark_node so that it will not be
7044                          added to TYPE_FIELDS.  */
7045                       tree rtype = TREE_TYPE (r);
7046                       if (can_complete_type_without_circularity (rtype))
7047                         complete_type (rtype);
7048
7049                       if (!COMPLETE_TYPE_P (rtype))
7050                         {
7051                           cxx_incomplete_type_error (r, rtype);
7052                           r = error_mark_node;
7053                         }
7054                     }
7055
7056                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
7057                      such a thing will already have been added to the field
7058                      list by tsubst_enum in finish_member_declaration in the
7059                      CLASSTYPE_NESTED_UTDS case above.  */
7060                   if (!(TREE_CODE (r) == TYPE_DECL
7061                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
7062                         && DECL_ARTIFICIAL (r)))
7063                     {
7064                       set_current_access_from_decl (r);
7065                       finish_member_declaration (r);
7066                     }
7067                 }
7068             }
7069         }
7070       else
7071         {
7072           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
7073             {
7074               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
7075
7076               tree friend_type = t;
7077               bool adjust_processing_template_decl = false;
7078
7079               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7080                 {
7081                   /* template <class T> friend class C;  */
7082                   friend_type = tsubst_friend_class (friend_type, args);
7083                   adjust_processing_template_decl = true;
7084                 }
7085               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
7086                 {
7087                   /* template <class T> friend class C::D;  */
7088                   friend_type = tsubst (friend_type, args,
7089                                         tf_warning_or_error, NULL_TREE);
7090                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
7091                     friend_type = TREE_TYPE (friend_type);
7092                   adjust_processing_template_decl = true;
7093                 }
7094               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
7095                 {
7096                   /* This could be either
7097
7098                        friend class T::C;
7099
7100                      when dependent_type_p is false or
7101
7102                        template <class U> friend class T::C;
7103
7104                      otherwise.  */
7105                   friend_type = tsubst (friend_type, args,
7106                                         tf_warning_or_error, NULL_TREE);
7107                   /* Bump processing_template_decl for correct
7108                      dependent_type_p calculation.  */
7109                   ++processing_template_decl;
7110                   if (dependent_type_p (friend_type))
7111                     adjust_processing_template_decl = true;
7112                   --processing_template_decl;
7113                 }
7114               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
7115                        && hidden_name_p (TYPE_NAME (friend_type)))
7116                 {
7117                   /* friend class C;
7118
7119                      where C hasn't been declared yet.  Let's lookup name
7120                      from namespace scope directly, bypassing any name that
7121                      come from dependent base class.  */
7122                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
7123
7124                   /* The call to xref_tag_from_type does injection for friend
7125                      classes.  */
7126                   push_nested_namespace (ns);
7127                   friend_type =
7128                     xref_tag_from_type (friend_type, NULL_TREE,
7129                                         /*tag_scope=*/ts_current);
7130                   pop_nested_namespace (ns);
7131                 }
7132               else if (uses_template_parms (friend_type))
7133                 /* friend class C<T>;  */
7134                 friend_type = tsubst (friend_type, args,
7135                                       tf_warning_or_error, NULL_TREE);
7136               /* Otherwise it's
7137
7138                    friend class C;
7139
7140                  where C is already declared or
7141
7142                    friend class C<int>;
7143
7144                  We don't have to do anything in these cases.  */
7145
7146               if (adjust_processing_template_decl)
7147                 /* Trick make_friend_class into realizing that the friend
7148                    we're adding is a template, not an ordinary class.  It's
7149                    important that we use make_friend_class since it will
7150                    perform some error-checking and output cross-reference
7151                    information.  */
7152                 ++processing_template_decl;
7153
7154               if (friend_type != error_mark_node)
7155                 make_friend_class (type, friend_type, /*complain=*/false);
7156
7157               if (adjust_processing_template_decl)
7158                 --processing_template_decl;
7159             }
7160           else
7161             {
7162               /* Build new DECL_FRIENDLIST.  */
7163               tree r;
7164
7165               /* The the file and line for this declaration, to
7166                  assist in error message reporting.  Since we
7167                  called push_tinst_level above, we don't need to
7168                  restore these.  */
7169               input_location = DECL_SOURCE_LOCATION (t);
7170
7171               if (TREE_CODE (t) == TEMPLATE_DECL)
7172                 {
7173                   ++processing_template_decl;
7174                   push_deferring_access_checks (dk_no_check);
7175                 }
7176
7177               r = tsubst_friend_function (t, args);
7178               add_friend (type, r, /*complain=*/false);
7179               if (TREE_CODE (t) == TEMPLATE_DECL)
7180                 {
7181                   pop_deferring_access_checks ();
7182                   --processing_template_decl;
7183                 }
7184             }
7185         }
7186     }
7187
7188   /* Set the file and line number information to whatever is given for
7189      the class itself.  This puts error messages involving generated
7190      implicit functions at a predictable point, and the same point
7191      that would be used for non-template classes.  */
7192   input_location = DECL_SOURCE_LOCATION (typedecl);
7193
7194   unreverse_member_declarations (type);
7195   finish_struct_1 (type);
7196   TYPE_BEING_DEFINED (type) = 0;
7197
7198   /* Now that the class is complete, instantiate default arguments for
7199      any member functions.  We don't do this earlier because the
7200      default arguments may reference members of the class.  */
7201   if (!PRIMARY_TEMPLATE_P (template))
7202     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
7203       if (TREE_CODE (t) == FUNCTION_DECL
7204           /* Implicitly generated member functions will not have template
7205              information; they are not instantiations, but instead are
7206              created "fresh" for each instantiation.  */
7207           && DECL_TEMPLATE_INFO (t))
7208         tsubst_default_arguments (t);
7209
7210   pop_nested_class ();
7211   pop_from_top_level ();
7212   pop_deferring_access_checks ();
7213   pop_tinst_level ();
7214
7215   /* The vtable for a template class can be emitted in any translation
7216      unit in which the class is instantiated.  When there is no key
7217      method, however, finish_struct_1 will already have added TYPE to
7218      the keyed_classes list.  */
7219   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
7220     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
7221
7222   return type;
7223 }
7224
7225 static tree
7226 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7227 {
7228   tree r;
7229
7230   if (!t)
7231     r = t;
7232   else if (TYPE_P (t))
7233     r = tsubst (t, args, complain, in_decl);
7234   else
7235     {
7236       r = tsubst_expr (t, args, complain, in_decl,
7237                        /*integral_constant_expression_p=*/true);
7238       r = fold_non_dependent_expr (r);
7239     }
7240   return r;
7241 }
7242
7243 /* Substitute ARGS into T, which is an pack expansion
7244    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
7245    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
7246    (if only a partial substitution could be performed) or
7247    ERROR_MARK_NODE if there was an error.  */
7248 tree
7249 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
7250                        tree in_decl)
7251 {
7252   tree pattern;
7253   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
7254   tree first_arg_pack; int i, len = -1;
7255   tree result;
7256   int incomplete = 0;
7257
7258   gcc_assert (PACK_EXPANSION_P (t));
7259   pattern = PACK_EXPANSION_PATTERN (t);
7260
7261   /* Determine the argument packs that will instantiate the parameter
7262      packs used in the expansion expression. While we're at it,
7263      compute the number of arguments to be expanded and make sure it
7264      is consistent.  */
7265   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
7266        pack = TREE_CHAIN (pack))
7267     {
7268       tree parm_pack = TREE_VALUE (pack);
7269       tree arg_pack = NULL_TREE;
7270       tree orig_arg = NULL_TREE;
7271
7272       if (TREE_CODE (parm_pack) == PARM_DECL)
7273         {
7274           if (local_specializations)
7275             arg_pack = retrieve_local_specialization (parm_pack);
7276         }
7277       else
7278         {
7279           int level, idx, levels;
7280           template_parm_level_and_index (parm_pack, &level, &idx);
7281
7282           levels = TMPL_ARGS_DEPTH (args);
7283           if (level <= levels)
7284             arg_pack = TMPL_ARG (args, level, idx);
7285         }
7286
7287       orig_arg = arg_pack;
7288       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
7289         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
7290       
7291       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
7292         /* This can only happen if we forget to expand an argument
7293            pack somewhere else. Just return an error, silently.  */
7294         {
7295           result = make_tree_vec (1);
7296           TREE_VEC_ELT (result, 0) = error_mark_node;
7297           return result;
7298         }
7299
7300       if (arg_pack
7301           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
7302           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
7303         {
7304           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
7305           tree pattern = PACK_EXPANSION_PATTERN (expansion);
7306           if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
7307               || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
7308             /* The argument pack that the parameter maps to is just an
7309                expansion of the parameter itself, such as one would
7310                find in the implicit typedef of a class inside the
7311                class itself.  Consider this parameter "unsubstituted",
7312                so that we will maintain the outer pack expansion.  */
7313             arg_pack = NULL_TREE;
7314         }
7315           
7316       if (arg_pack)
7317         {
7318           int my_len = 
7319             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7320
7321           /* It's all-or-nothing with incomplete argument packs.  */
7322           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7323             return error_mark_node;
7324           
7325           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7326             incomplete = 1;
7327
7328           if (len < 0)
7329             {
7330               len = my_len;
7331               first_arg_pack = arg_pack;
7332             }
7333           else if (len != my_len)
7334             {
7335               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7336                 error ("mismatched argument pack lengths while expanding "
7337                        "%<%T%>",
7338                        pattern);
7339               else
7340                 error ("mismatched argument pack lengths while expanding "
7341                        "%<%E%>",
7342                        pattern);
7343               return error_mark_node;
7344             }
7345
7346           /* Keep track of the parameter packs and their corresponding
7347              argument packs.  */
7348           packs = tree_cons (parm_pack, arg_pack, packs);
7349           TREE_TYPE (packs) = orig_arg;
7350         }
7351       else
7352         /* We can't substitute for this parameter pack.  */
7353         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7354                                          TREE_VALUE (pack),
7355                                          unsubstituted_packs);
7356     }
7357
7358   /* We cannot expand this expansion expression, because we don't have
7359      all of the argument packs we need. Substitute into the pattern
7360      and return a PACK_EXPANSION_*. The caller will need to deal with
7361      that.  */
7362   if (unsubstituted_packs)
7363     return make_pack_expansion (tsubst (pattern, args, complain, 
7364                                         in_decl));
7365
7366   /* We could not find any argument packs that work.  */
7367   if (len < 0)
7368     return error_mark_node;
7369
7370   /* For each argument in each argument pack, substitute into the
7371      pattern.  */
7372   result = make_tree_vec (len + incomplete);
7373   for (i = 0; i < len + incomplete; ++i)
7374     {
7375       /* For parameter pack, change the substitution of the parameter
7376          pack to the ith argument in its argument pack, then expand
7377          the pattern.  */
7378       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7379         {
7380           tree parm = TREE_PURPOSE (pack);
7381
7382           if (TREE_CODE (parm) == PARM_DECL)
7383             {
7384               /* Select the Ith argument from the pack.  */
7385               tree arg = make_node (ARGUMENT_PACK_SELECT);
7386               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7387               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7388               mark_used (parm);
7389               register_local_specialization (arg, parm);
7390             }
7391           else
7392             {
7393               tree value = parm;
7394               int idx, level;
7395               template_parm_level_and_index (parm, &level, &idx);
7396               
7397               if (i < len) 
7398                 {
7399                   /* Select the Ith argument from the pack. */
7400                   value = make_node (ARGUMENT_PACK_SELECT);
7401                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7402                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7403                 }
7404
7405               /* Update the corresponding argument.  */
7406               TMPL_ARG (args, level, idx) = value;
7407             }
7408         }
7409
7410       /* Substitute into the PATTERN with the altered arguments.  */
7411       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7412         TREE_VEC_ELT (result, i) = 
7413           tsubst_expr (pattern, args, complain, in_decl,
7414                        /*integral_constant_expression_p=*/false);
7415       else
7416         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7417
7418       if (i == len)
7419         /* When we have incomplete argument packs, the last "expanded"
7420            result is itself a pack expansion, which allows us
7421            to deduce more arguments.  */
7422         TREE_VEC_ELT (result, i) = 
7423           make_pack_expansion (TREE_VEC_ELT (result, i));
7424
7425       if (TREE_VEC_ELT (result, i) == error_mark_node)
7426         {
7427           result = error_mark_node;
7428           break;
7429         }
7430     }
7431   
7432   /* Update ARGS to restore the substitution from parameter packs to
7433      their argument packs.  */
7434   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7435     {
7436       tree parm = TREE_PURPOSE (pack);
7437
7438       if (TREE_CODE (parm) == PARM_DECL)
7439         register_local_specialization (TREE_TYPE (pack), parm);
7440       else
7441         {
7442           int idx, level;
7443           template_parm_level_and_index (parm, &level, &idx);
7444           
7445           /* Update the corresponding argument.  */
7446           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7447             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7448               TREE_TYPE (pack);
7449           else
7450             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7451         }
7452     }
7453
7454   return result;
7455 }
7456
7457 /* Substitute ARGS into the vector or list of template arguments T.  */
7458
7459 static tree
7460 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7461 {
7462   tree orig_t = t;
7463   int len = TREE_VEC_LENGTH (t);
7464   int need_new = 0, i, expanded_len_adjust = 0, out;
7465   tree *elts = (tree *) alloca (len * sizeof (tree));
7466
7467   for (i = 0; i < len; i++)
7468     {
7469       tree orig_arg = TREE_VEC_ELT (t, i);
7470       tree new_arg;
7471
7472       if (TREE_CODE (orig_arg) == TREE_VEC)
7473         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7474       else if (PACK_EXPANSION_P (orig_arg))
7475         {
7476           /* Substitute into an expansion expression.  */
7477           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7478
7479           if (TREE_CODE (new_arg) == TREE_VEC)
7480             /* Add to the expanded length adjustment the number of
7481                expanded arguments. We subtract one from this
7482                measurement, because the argument pack expression
7483                itself is already counted as 1 in
7484                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7485                the argument pack is empty.  */
7486             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7487         }
7488       else if (ARGUMENT_PACK_P (orig_arg))
7489         {
7490           /* Substitute into each of the arguments.  */
7491           new_arg = make_node (TREE_CODE (orig_arg));
7492           
7493           SET_ARGUMENT_PACK_ARGS (
7494             new_arg,
7495             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7496                                   args, complain, in_decl));
7497
7498           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7499             new_arg = error_mark_node;
7500
7501           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7502             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7503                                           complain, in_decl);
7504             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7505
7506             if (TREE_TYPE (new_arg) == error_mark_node)
7507               new_arg = error_mark_node;
7508           }
7509         }
7510       else
7511         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7512
7513       if (new_arg == error_mark_node)
7514         return error_mark_node;
7515
7516       elts[i] = new_arg;
7517       if (new_arg != orig_arg)
7518         need_new = 1;
7519     }
7520
7521   if (!need_new)
7522     return t;
7523
7524   /* Make space for the expanded arguments coming from template
7525      argument packs.  */
7526   t = make_tree_vec (len + expanded_len_adjust);
7527   for (i = 0, out = 0; i < len; i++)
7528     {
7529       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7530            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7531           && TREE_CODE (elts[i]) == TREE_VEC)
7532         {
7533           int idx;
7534
7535           /* Now expand the template argument pack "in place".  */
7536           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7537             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7538         }
7539       else
7540         {
7541           TREE_VEC_ELT (t, out) = elts[i];
7542           out++;
7543         }
7544     }
7545
7546   return t;
7547 }
7548
7549 /* Return the result of substituting ARGS into the template parameters
7550    given by PARMS.  If there are m levels of ARGS and m + n levels of
7551    PARMS, then the result will contain n levels of PARMS.  For
7552    example, if PARMS is `template <class T> template <class U>
7553    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7554    result will be `template <int*, double, class V>'.  */
7555
7556 static tree
7557 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7558 {
7559   tree r = NULL_TREE;
7560   tree* new_parms;
7561
7562   /* When substituting into a template, we must set
7563      PROCESSING_TEMPLATE_DECL as the template parameters may be
7564      dependent if they are based on one-another, and the dependency
7565      predicates are short-circuit outside of templates.  */
7566   ++processing_template_decl;
7567
7568   for (new_parms = &r;
7569        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7570        new_parms = &(TREE_CHAIN (*new_parms)),
7571          parms = TREE_CHAIN (parms))
7572     {
7573       tree new_vec =
7574         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7575       int i;
7576
7577       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7578         {
7579           tree tuple;
7580           tree default_value;
7581           tree parm_decl;
7582
7583           if (parms == error_mark_node)
7584             continue;
7585
7586           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7587
7588           if (tuple == error_mark_node)
7589             continue;
7590
7591           default_value = TREE_PURPOSE (tuple);
7592           parm_decl = TREE_VALUE (tuple);
7593
7594           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7595           if (TREE_CODE (parm_decl) == PARM_DECL
7596               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7597             parm_decl = error_mark_node;
7598           default_value = tsubst_template_arg (default_value, args,
7599                                                complain, NULL_TREE);
7600
7601           tuple = build_tree_list (default_value, parm_decl);
7602           TREE_VEC_ELT (new_vec, i) = tuple;
7603         }
7604
7605       *new_parms =
7606         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7607                              - TMPL_ARGS_DEPTH (args)),
7608                    new_vec, NULL_TREE);
7609     }
7610
7611   --processing_template_decl;
7612
7613   return r;
7614 }
7615
7616 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7617    type T.  If T is not an aggregate or enumeration type, it is
7618    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7619    ENTERING_SCOPE is nonzero, T is the context for a template which
7620    we are presently tsubst'ing.  Return the substituted value.  */
7621
7622 static tree
7623 tsubst_aggr_type (tree t,
7624                   tree args,
7625                   tsubst_flags_t complain,
7626                   tree in_decl,
7627                   int entering_scope)
7628 {
7629   if (t == NULL_TREE)
7630     return NULL_TREE;
7631
7632   switch (TREE_CODE (t))
7633     {
7634     case RECORD_TYPE:
7635       if (TYPE_PTRMEMFUNC_P (t))
7636         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7637
7638       /* Else fall through.  */
7639     case ENUMERAL_TYPE:
7640     case UNION_TYPE:
7641       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
7642         {
7643           tree argvec;
7644           tree context;
7645           tree r;
7646           bool saved_skip_evaluation;
7647
7648           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7649           saved_skip_evaluation = skip_evaluation;
7650           skip_evaluation = false;
7651
7652           /* First, determine the context for the type we are looking
7653              up.  */
7654           context = TYPE_CONTEXT (t);
7655           if (context)
7656             context = tsubst_aggr_type (context, args, complain,
7657                                         in_decl, /*entering_scope=*/1);
7658
7659           /* Then, figure out what arguments are appropriate for the
7660              type we are trying to find.  For example, given:
7661
7662                template <class T> struct S;
7663                template <class T, class U> void f(T, U) { S<U> su; }
7664
7665              and supposing that we are instantiating f<int, double>,
7666              then our ARGS will be {int, double}, but, when looking up
7667              S we only want {double}.  */
7668           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7669                                          complain, in_decl);
7670           if (argvec == error_mark_node)
7671             r = error_mark_node;
7672           else
7673             {
7674               r = lookup_template_class (t, argvec, in_decl, context,
7675                                          entering_scope, complain);
7676               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7677             }
7678
7679           skip_evaluation = saved_skip_evaluation;
7680
7681           return r;
7682         }
7683       else
7684         /* This is not a template type, so there's nothing to do.  */
7685         return t;
7686
7687     default:
7688       return tsubst (t, args, complain, in_decl);
7689     }
7690 }
7691
7692 /* Substitute into the default argument ARG (a default argument for
7693    FN), which has the indicated TYPE.  */
7694
7695 tree
7696 tsubst_default_argument (tree fn, tree type, tree arg)
7697 {
7698   tree saved_class_ptr = NULL_TREE;
7699   tree saved_class_ref = NULL_TREE;
7700
7701   /* This default argument came from a template.  Instantiate the
7702      default argument here, not in tsubst.  In the case of
7703      something like:
7704
7705        template <class T>
7706        struct S {
7707          static T t();
7708          void f(T = t());
7709        };
7710
7711      we must be careful to do name lookup in the scope of S<T>,
7712      rather than in the current class.  */
7713   push_access_scope (fn);
7714   /* The "this" pointer is not valid in a default argument.  */
7715   if (cfun)
7716     {
7717       saved_class_ptr = current_class_ptr;
7718       cp_function_chain->x_current_class_ptr = NULL_TREE;
7719       saved_class_ref = current_class_ref;
7720       cp_function_chain->x_current_class_ref = NULL_TREE;
7721     }
7722
7723   push_deferring_access_checks(dk_no_deferred);
7724   /* The default argument expression may cause implicitly defined
7725      member functions to be synthesized, which will result in garbage
7726      collection.  We must treat this situation as if we were within
7727      the body of function so as to avoid collecting live data on the
7728      stack.  */
7729   ++function_depth;
7730   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7731                      tf_warning_or_error, NULL_TREE,
7732                      /*integral_constant_expression_p=*/false);
7733   --function_depth;
7734   pop_deferring_access_checks();
7735
7736   /* Restore the "this" pointer.  */
7737   if (cfun)
7738     {
7739       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7740       cp_function_chain->x_current_class_ref = saved_class_ref;
7741     }
7742
7743   pop_access_scope (fn);
7744
7745   /* Make sure the default argument is reasonable.  */
7746   arg = check_default_argument (type, arg);
7747
7748   return arg;
7749 }
7750
7751 /* Substitute into all the default arguments for FN.  */
7752
7753 static void
7754 tsubst_default_arguments (tree fn)
7755 {
7756   tree arg;
7757   tree tmpl_args;
7758
7759   tmpl_args = DECL_TI_ARGS (fn);
7760
7761   /* If this function is not yet instantiated, we certainly don't need
7762      its default arguments.  */
7763   if (uses_template_parms (tmpl_args))
7764     return;
7765
7766   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7767        arg;
7768        arg = TREE_CHAIN (arg))
7769     if (TREE_PURPOSE (arg))
7770       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7771                                                     TREE_VALUE (arg),
7772                                                     TREE_PURPOSE (arg));
7773 }
7774
7775 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7776    result of the substitution.  Issue error and warning messages under
7777    control of COMPLAIN.  */
7778
7779 static tree
7780 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7781 {
7782   location_t saved_loc;
7783   tree r = NULL_TREE;
7784   tree in_decl = t;
7785
7786   /* Set the filename and linenumber to improve error-reporting.  */
7787   saved_loc = input_location;
7788   input_location = DECL_SOURCE_LOCATION (t);
7789
7790   switch (TREE_CODE (t))
7791     {
7792     case TEMPLATE_DECL:
7793       {
7794         /* We can get here when processing a member function template,
7795            member class template, and template template parameter of
7796            a template class.  */
7797         tree decl = DECL_TEMPLATE_RESULT (t);
7798         tree spec;
7799         tree tmpl_args;
7800         tree full_args;
7801
7802         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7803           {
7804             /* Template template parameter is treated here.  */
7805             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7806             if (new_type == error_mark_node)
7807               return error_mark_node;
7808
7809             r = copy_decl (t);
7810             TREE_CHAIN (r) = NULL_TREE;
7811             TREE_TYPE (r) = new_type;
7812             DECL_TEMPLATE_RESULT (r)
7813               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7814             DECL_TEMPLATE_PARMS (r)
7815               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7816                                        complain);
7817             TYPE_NAME (new_type) = r;
7818             break;
7819           }
7820
7821         /* We might already have an instance of this template.
7822            The ARGS are for the surrounding class type, so the
7823            full args contain the tsubst'd args for the context,
7824            plus the innermost args from the template decl.  */
7825         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7826           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7827           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7828         /* Because this is a template, the arguments will still be
7829            dependent, even after substitution.  If
7830            PROCESSING_TEMPLATE_DECL is not set, the dependency
7831            predicates will short-circuit.  */
7832         ++processing_template_decl;
7833         full_args = tsubst_template_args (tmpl_args, args,
7834                                           complain, in_decl);
7835         --processing_template_decl;
7836         if (full_args == error_mark_node)
7837           return error_mark_node;
7838
7839         /* tsubst_template_args doesn't copy the vector if
7840            nothing changed.  But, *something* should have
7841            changed.  */
7842         gcc_assert (full_args != tmpl_args);
7843
7844         spec = retrieve_specialization (t, full_args,
7845                                         /*class_specializations_p=*/true);
7846         if (spec != NULL_TREE)
7847           {
7848             r = spec;
7849             break;
7850           }
7851
7852         /* Make a new template decl.  It will be similar to the
7853            original, but will record the current template arguments.
7854            We also create a new function declaration, which is just
7855            like the old one, but points to this new template, rather
7856            than the old one.  */
7857         r = copy_decl (t);
7858         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7859         TREE_CHAIN (r) = NULL_TREE;
7860
7861         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7862
7863         if (TREE_CODE (decl) == TYPE_DECL)
7864           {
7865             tree new_type;
7866             ++processing_template_decl;
7867             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7868             --processing_template_decl;
7869             if (new_type == error_mark_node)
7870               return error_mark_node;
7871
7872             TREE_TYPE (r) = new_type;
7873             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7874             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7875             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7876             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7877           }
7878         else
7879           {
7880             tree new_decl;
7881             ++processing_template_decl;
7882             new_decl = tsubst (decl, args, complain, in_decl);
7883             --processing_template_decl;
7884             if (new_decl == error_mark_node)
7885               return error_mark_node;
7886
7887             DECL_TEMPLATE_RESULT (r) = new_decl;
7888             DECL_TI_TEMPLATE (new_decl) = r;
7889             TREE_TYPE (r) = TREE_TYPE (new_decl);
7890             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7891             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7892           }
7893
7894         SET_DECL_IMPLICIT_INSTANTIATION (r);
7895         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7896         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7897
7898         /* The template parameters for this new template are all the
7899            template parameters for the old template, except the
7900            outermost level of parameters.  */
7901         DECL_TEMPLATE_PARMS (r)
7902           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7903                                    complain);
7904
7905         if (PRIMARY_TEMPLATE_P (t))
7906           DECL_PRIMARY_TEMPLATE (r) = r;
7907
7908         if (TREE_CODE (decl) != TYPE_DECL)
7909           /* Record this non-type partial instantiation.  */
7910           register_specialization (r, t,
7911                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7912                                    false);
7913       }
7914       break;
7915
7916     case FUNCTION_DECL:
7917       {
7918         tree ctx;
7919         tree argvec = NULL_TREE;
7920         tree *friends;
7921         tree gen_tmpl;
7922         tree type;
7923         int member;
7924         int args_depth;
7925         int parms_depth;
7926
7927         /* Nobody should be tsubst'ing into non-template functions.  */
7928         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7929
7930         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7931           {
7932             tree spec;
7933             bool dependent_p;
7934
7935             /* If T is not dependent, just return it.  We have to
7936                increment PROCESSING_TEMPLATE_DECL because
7937                value_dependent_expression_p assumes that nothing is
7938                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7939             ++processing_template_decl;
7940             dependent_p = value_dependent_expression_p (t);
7941             --processing_template_decl;
7942             if (!dependent_p)
7943               return t;
7944
7945             /* Calculate the most general template of which R is a
7946                specialization, and the complete set of arguments used to
7947                specialize R.  */
7948             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7949             argvec = tsubst_template_args (DECL_TI_ARGS
7950                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7951                                            args, complain, in_decl);
7952
7953             /* Check to see if we already have this specialization.  */
7954             spec = retrieve_specialization (gen_tmpl, argvec,
7955                                             /*class_specializations_p=*/false);
7956
7957             if (spec)
7958               {
7959                 r = spec;
7960                 break;
7961               }
7962
7963             /* We can see more levels of arguments than parameters if
7964                there was a specialization of a member template, like
7965                this:
7966
7967                  template <class T> struct S { template <class U> void f(); }
7968                  template <> template <class U> void S<int>::f(U);
7969
7970                Here, we'll be substituting into the specialization,
7971                because that's where we can find the code we actually
7972                want to generate, but we'll have enough arguments for
7973                the most general template.
7974
7975                We also deal with the peculiar case:
7976
7977                  template <class T> struct S {
7978                    template <class U> friend void f();
7979                  };
7980                  template <class U> void f() {}
7981                  template S<int>;
7982                  template void f<double>();
7983
7984                Here, the ARGS for the instantiation of will be {int,
7985                double}.  But, we only need as many ARGS as there are
7986                levels of template parameters in CODE_PATTERN.  We are
7987                careful not to get fooled into reducing the ARGS in
7988                situations like:
7989
7990                  template <class T> struct S { template <class U> void f(U); }
7991                  template <class T> template <> void S<T>::f(int) {}
7992
7993                which we can spot because the pattern will be a
7994                specialization in this case.  */
7995             args_depth = TMPL_ARGS_DEPTH (args);
7996             parms_depth =
7997               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7998             if (args_depth > parms_depth
7999                 && !DECL_TEMPLATE_SPECIALIZATION (t))
8000               args = get_innermost_template_args (args, parms_depth);
8001           }
8002         else
8003           {
8004             /* This special case arises when we have something like this:
8005
8006                  template <class T> struct S {
8007                    friend void f<int>(int, double);
8008                  };
8009
8010                Here, the DECL_TI_TEMPLATE for the friend declaration
8011                will be an IDENTIFIER_NODE.  We are being called from
8012                tsubst_friend_function, and we want only to create a
8013                new decl (R) with appropriate types so that we can call
8014                determine_specialization.  */
8015             gen_tmpl = NULL_TREE;
8016           }
8017
8018         if (DECL_CLASS_SCOPE_P (t))
8019           {
8020             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
8021               member = 2;
8022             else
8023               member = 1;
8024             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8025                                     complain, t, /*entering_scope=*/1);
8026           }
8027         else
8028           {
8029             member = 0;
8030             ctx = DECL_CONTEXT (t);
8031           }
8032         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8033         if (type == error_mark_node)
8034           return error_mark_node;
8035
8036         /* We do NOT check for matching decls pushed separately at this
8037            point, as they may not represent instantiations of this
8038            template, and in any case are considered separate under the
8039            discrete model.  */
8040         r = copy_decl (t);
8041         DECL_USE_TEMPLATE (r) = 0;
8042         TREE_TYPE (r) = type;
8043         /* Clear out the mangled name and RTL for the instantiation.  */
8044         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8045         SET_DECL_RTL (r, NULL_RTX);
8046         DECL_INITIAL (r) = NULL_TREE;
8047         DECL_CONTEXT (r) = ctx;
8048
8049         if (member && DECL_CONV_FN_P (r))
8050           /* Type-conversion operator.  Reconstruct the name, in
8051              case it's the name of one of the template's parameters.  */
8052           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
8053
8054         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
8055                                      complain, t);
8056         DECL_RESULT (r) = NULL_TREE;
8057
8058         TREE_STATIC (r) = 0;
8059         TREE_PUBLIC (r) = TREE_PUBLIC (t);
8060         DECL_EXTERNAL (r) = 1;
8061         /* If this is an instantiation of a function with internal
8062            linkage, we already know what object file linkage will be
8063            assigned to the instantiation.  */
8064         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
8065         DECL_DEFER_OUTPUT (r) = 0;
8066         TREE_CHAIN (r) = NULL_TREE;
8067         DECL_PENDING_INLINE_INFO (r) = 0;
8068         DECL_PENDING_INLINE_P (r) = 0;
8069         DECL_SAVED_TREE (r) = NULL_TREE;
8070         TREE_USED (r) = 0;
8071         if (DECL_CLONED_FUNCTION (r))
8072           {
8073             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
8074                                                args, complain, t);
8075             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
8076             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
8077           }
8078
8079         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
8080            this in the special friend case mentioned above where
8081            GEN_TMPL is NULL.  */
8082         if (gen_tmpl)
8083           {
8084             DECL_TEMPLATE_INFO (r)
8085               = tree_cons (gen_tmpl, argvec, NULL_TREE);
8086             SET_DECL_IMPLICIT_INSTANTIATION (r);
8087             register_specialization (r, gen_tmpl, argvec, false);
8088
8089             /* We're not supposed to instantiate default arguments
8090                until they are called, for a template.  But, for a
8091                declaration like:
8092
8093                  template <class T> void f ()
8094                  { extern void g(int i = T()); }
8095
8096                we should do the substitution when the template is
8097                instantiated.  We handle the member function case in
8098                instantiate_class_template since the default arguments
8099                might refer to other members of the class.  */
8100             if (!member
8101                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
8102                 && !uses_template_parms (argvec))
8103               tsubst_default_arguments (r);
8104           }
8105         else
8106           DECL_TEMPLATE_INFO (r) = NULL_TREE;
8107
8108         /* Copy the list of befriending classes.  */
8109         for (friends = &DECL_BEFRIENDING_CLASSES (r);
8110              *friends;
8111              friends = &TREE_CHAIN (*friends))
8112           {
8113             *friends = copy_node (*friends);
8114             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
8115                                             args, complain,
8116                                             in_decl);
8117           }
8118
8119         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
8120           {
8121             maybe_retrofit_in_chrg (r);
8122             if (DECL_CONSTRUCTOR_P (r))
8123               grok_ctor_properties (ctx, r);
8124             /* If this is an instantiation of a member template, clone it.
8125                If it isn't, that'll be handled by
8126                clone_constructors_and_destructors.  */
8127             if (PRIMARY_TEMPLATE_P (gen_tmpl))
8128               clone_function_decl (r, /*update_method_vec_p=*/0);
8129           }
8130         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
8131                  && !grok_op_properties (r, (complain & tf_error) != 0))
8132           return error_mark_node;
8133
8134         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
8135           SET_DECL_FRIEND_CONTEXT (r,
8136                                    tsubst (DECL_FRIEND_CONTEXT (t),
8137                                             args, complain, in_decl));
8138
8139         /* Possibly limit visibility based on template args.  */
8140         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8141         if (DECL_VISIBILITY_SPECIFIED (t))
8142           {
8143             DECL_VISIBILITY_SPECIFIED (r) = 0;
8144             DECL_ATTRIBUTES (r)
8145               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8146           }
8147         determine_visibility (r);
8148
8149         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8150                                         args, complain, in_decl);
8151       }
8152       break;
8153
8154     case PARM_DECL:
8155       {
8156         tree type = NULL_TREE;
8157         int i, len = 1;
8158         tree expanded_types = NULL_TREE;
8159         tree prev_r = NULL_TREE;
8160         tree first_r = NULL_TREE;
8161
8162         if (FUNCTION_PARAMETER_PACK_P (t))
8163           {
8164             /* If there is a local specialization that isn't a
8165                parameter pack, it means that we're doing a "simple"
8166                substitution from inside tsubst_pack_expansion. Just
8167                return the local specialization (which will be a single
8168                parm).  */
8169             tree spec = NULL_TREE;
8170             if (local_specializations)
8171               spec = retrieve_local_specialization (t);
8172             if (spec 
8173                 && TREE_CODE (spec) == PARM_DECL
8174                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
8175               return spec;
8176
8177             /* Expand the TYPE_PACK_EXPANSION that provides the types for
8178                the parameters in this function parameter pack.  */
8179             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
8180                                                     complain, in_decl);
8181             if (TREE_CODE (expanded_types) == TREE_VEC)
8182               {
8183                 len = TREE_VEC_LENGTH (expanded_types);
8184
8185                 /* Zero-length parameter packs are boring. Just substitute
8186                    into the chain.  */
8187                 if (len == 0)
8188                   return tsubst (TREE_CHAIN (t), args, complain, 
8189                                  TREE_CHAIN (t));
8190               }
8191             else
8192               {
8193                 /* All we did was update the type. Make a note of that.  */
8194                 type = expanded_types;
8195                 expanded_types = NULL_TREE;
8196               }
8197           }
8198
8199         /* Loop through all of the parameter's we'll build. When T is
8200            a function parameter pack, LEN is the number of expanded
8201            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
8202         r = NULL_TREE;
8203         for (i = 0; i < len; ++i)
8204           {
8205             prev_r = r;
8206             r = copy_node (t);
8207             if (DECL_TEMPLATE_PARM_P (t))
8208               SET_DECL_TEMPLATE_PARM_P (r);
8209
8210             if (expanded_types)
8211               /* We're on the Ith parameter of the function parameter
8212                  pack.  */
8213               {
8214                 /* Get the Ith type.  */
8215                 type = TREE_VEC_ELT (expanded_types, i);
8216
8217                 if (DECL_NAME (r))
8218                   /* Rename the parameter to include the index.  */
8219                   DECL_NAME (r) =
8220                     make_ith_pack_parameter_name (DECL_NAME (r), i);
8221               }
8222             else if (!type)
8223               /* We're dealing with a normal parameter.  */
8224               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8225
8226             type = type_decays_to (type);
8227             TREE_TYPE (r) = type;
8228             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8229
8230             if (DECL_INITIAL (r))
8231               {
8232                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
8233                   DECL_INITIAL (r) = TREE_TYPE (r);
8234                 else
8235                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
8236                                              complain, in_decl);
8237               }
8238
8239             DECL_CONTEXT (r) = NULL_TREE;
8240
8241             if (!DECL_TEMPLATE_PARM_P (r))
8242               DECL_ARG_TYPE (r) = type_passed_as (type);
8243
8244             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8245                                             args, complain, in_decl);
8246
8247             /* Keep track of the first new parameter we
8248                generate. That's what will be returned to the
8249                caller.  */
8250             if (!first_r)
8251               first_r = r;
8252
8253             /* Build a proper chain of parameters when substituting
8254                into a function parameter pack.  */
8255             if (prev_r)
8256               TREE_CHAIN (prev_r) = r;
8257           }
8258
8259         if (TREE_CHAIN (t))
8260           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
8261                                    complain, TREE_CHAIN (t));
8262
8263         /* FIRST_R contains the start of the chain we've built.  */
8264         r = first_r;
8265       }
8266       break;
8267
8268     case FIELD_DECL:
8269       {
8270         tree type;
8271
8272         r = copy_decl (t);
8273         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8274         if (type == error_mark_node)
8275           return error_mark_node;
8276         TREE_TYPE (r) = type;
8277         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8278
8279         /* DECL_INITIAL gives the number of bits in a bit-field.  */
8280         DECL_INITIAL (r)
8281           = tsubst_expr (DECL_INITIAL (t), args,
8282                          complain, in_decl,
8283                          /*integral_constant_expression_p=*/true);
8284         /* We don't have to set DECL_CONTEXT here; it is set by
8285            finish_member_declaration.  */
8286         TREE_CHAIN (r) = NULL_TREE;
8287         if (VOID_TYPE_P (type))
8288           error ("instantiation of %q+D as type %qT", r, type);
8289
8290         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
8291                                         args, complain, in_decl);
8292       }
8293       break;
8294
8295     case USING_DECL:
8296       /* We reach here only for member using decls.  */
8297       if (DECL_DEPENDENT_P (t))
8298         {
8299           r = do_class_using_decl
8300             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
8301              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
8302           if (!r)
8303             r = error_mark_node;
8304         }
8305       else
8306         {
8307           r = copy_node (t);
8308           TREE_CHAIN (r) = NULL_TREE;
8309         }
8310       break;
8311
8312     case TYPE_DECL:
8313     case VAR_DECL:
8314       {
8315         tree argvec = NULL_TREE;
8316         tree gen_tmpl = NULL_TREE;
8317         tree spec;
8318         tree tmpl = NULL_TREE;
8319         tree ctx;
8320         tree type = NULL_TREE;
8321         bool local_p;
8322
8323         if (TREE_CODE (t) == TYPE_DECL
8324             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8325           {
8326             /* If this is the canonical decl, we don't have to
8327                mess with instantiations, and often we can't (for
8328                typename, template type parms and such).  Note that
8329                TYPE_NAME is not correct for the above test if
8330                we've copied the type for a typedef.  */
8331             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8332             if (type == error_mark_node)
8333               return error_mark_node;
8334             r = TYPE_NAME (type);
8335             break;
8336           }
8337
8338         /* Check to see if we already have the specialization we
8339            need.  */
8340         spec = NULL_TREE;
8341         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8342           {
8343             /* T is a static data member or namespace-scope entity.
8344                We have to substitute into namespace-scope variables
8345                (even though such entities are never templates) because
8346                of cases like:
8347                
8348                  template <class T> void f() { extern T t; }
8349
8350                where the entity referenced is not known until
8351                instantiation time.  */
8352             local_p = false;
8353             ctx = DECL_CONTEXT (t);
8354             if (DECL_CLASS_SCOPE_P (t))
8355               {
8356                 ctx = tsubst_aggr_type (ctx, args,
8357                                         complain,
8358                                         in_decl, /*entering_scope=*/1);
8359                 /* If CTX is unchanged, then T is in fact the
8360                    specialization we want.  That situation occurs when
8361                    referencing a static data member within in its own
8362                    class.  We can use pointer equality, rather than
8363                    same_type_p, because DECL_CONTEXT is always
8364                    canonical.  */
8365                 if (ctx == DECL_CONTEXT (t))
8366                   spec = t;
8367               }
8368
8369             if (!spec)
8370               {
8371                 tmpl = DECL_TI_TEMPLATE (t);
8372                 gen_tmpl = most_general_template (tmpl);
8373                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8374                 spec = (retrieve_specialization 
8375                         (gen_tmpl, argvec,
8376                          /*class_specializations_p=*/false));
8377               }
8378           }
8379         else
8380           {
8381             /* A local variable.  */
8382             local_p = true;
8383             /* Subsequent calls to pushdecl will fill this in.  */
8384             ctx = NULL_TREE;
8385             spec = retrieve_local_specialization (t);
8386           }
8387         /* If we already have the specialization we need, there is
8388            nothing more to do.  */ 
8389         if (spec)
8390           {
8391             r = spec;
8392             break;
8393           }
8394
8395         /* Create a new node for the specialization we need.  */
8396         r = copy_decl (t);
8397         if (type == NULL_TREE)
8398           type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8399         if (TREE_CODE (r) == VAR_DECL)
8400           {
8401             /* Even if the original location is out of scope, the
8402                newly substituted one is not.  */
8403             DECL_DEAD_FOR_LOCAL (r) = 0;
8404             DECL_INITIALIZED_P (r) = 0;
8405             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8406             if (type == error_mark_node)
8407               return error_mark_node;
8408             if (TREE_CODE (type) == FUNCTION_TYPE)
8409               {
8410                 /* It may seem that this case cannot occur, since:
8411
8412                      typedef void f();
8413                      void g() { f x; }
8414
8415                    declares a function, not a variable.  However:
8416       
8417                      typedef void f();
8418                      template <typename T> void g() { T t; }
8419                      template void g<f>();
8420
8421                    is an attempt to declare a variable with function
8422                    type.  */
8423                 error ("variable %qD has function type",
8424                        /* R is not yet sufficiently initialized, so we
8425                           just use its name.  */
8426                        DECL_NAME (r));
8427                 return error_mark_node;
8428               }
8429             type = complete_type (type);
8430             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8431               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8432             type = check_var_type (DECL_NAME (r), type);
8433
8434             if (DECL_HAS_VALUE_EXPR_P (t))
8435               {
8436                 tree ve = DECL_VALUE_EXPR (t);
8437                 ve = tsubst_expr (ve, args, complain, in_decl,
8438                                   /*constant_expression_p=*/false);
8439                 SET_DECL_VALUE_EXPR (r, ve);
8440               }
8441           }
8442         else if (DECL_SELF_REFERENCE_P (t))
8443           SET_DECL_SELF_REFERENCE_P (r);
8444         TREE_TYPE (r) = type;
8445         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8446         DECL_CONTEXT (r) = ctx;
8447         /* Clear out the mangled name and RTL for the instantiation.  */
8448         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8449         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8450           SET_DECL_RTL (r, NULL_RTX);
8451         /* The initializer must not be expanded until it is required;
8452            see [temp.inst].  */
8453         DECL_INITIAL (r) = NULL_TREE;
8454         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8455           SET_DECL_RTL (r, NULL_RTX);
8456         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8457         if (TREE_CODE (r) == VAR_DECL)
8458           {
8459             /* Possibly limit visibility based on template args.  */
8460             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8461             if (DECL_VISIBILITY_SPECIFIED (t))
8462               {
8463                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8464                 DECL_ATTRIBUTES (r)
8465                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8466               }
8467             determine_visibility (r);
8468           }
8469         /* Preserve a typedef that names a type.  */
8470         else if (TREE_CODE (r) == TYPE_DECL
8471                  && DECL_ORIGINAL_TYPE (t)
8472                  && type != error_mark_node)
8473           {
8474             DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
8475                                              args, complain, in_decl);
8476             TREE_TYPE (r) = type = build_variant_type_copy (type);
8477             TYPE_NAME (type) = r;
8478           }
8479
8480         if (!local_p)
8481           {
8482             /* A static data member declaration is always marked
8483                external when it is declared in-class, even if an
8484                initializer is present.  We mimic the non-template
8485                processing here.  */
8486             DECL_EXTERNAL (r) = 1;
8487
8488             register_specialization (r, gen_tmpl, argvec, false);
8489             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8490             SET_DECL_IMPLICIT_INSTANTIATION (r);
8491           }
8492         else
8493           register_local_specialization (r, t);
8494
8495         TREE_CHAIN (r) = NULL_TREE;
8496
8497         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
8498                                         (int) ATTR_FLAG_TYPE_IN_PLACE,
8499                                         args, complain, in_decl);
8500         layout_decl (r, 0);
8501       }
8502       break;
8503
8504     default:
8505       gcc_unreachable ();
8506     }
8507
8508   /* Restore the file and line information.  */
8509   input_location = saved_loc;
8510
8511   return r;
8512 }
8513
8514 /* Substitute into the ARG_TYPES of a function type.  */
8515
8516 static tree
8517 tsubst_arg_types (tree arg_types,
8518                   tree args,
8519                   tsubst_flags_t complain,
8520                   tree in_decl)
8521 {
8522   tree remaining_arg_types;
8523   tree type = NULL_TREE;
8524   int i = 1;
8525   tree expanded_args = NULL_TREE;
8526   tree default_arg;
8527
8528   if (!arg_types || arg_types == void_list_node)
8529     return arg_types;
8530
8531   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8532                                           args, complain, in_decl);
8533   if (remaining_arg_types == error_mark_node)
8534     return error_mark_node;
8535
8536   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8537     {
8538       /* For a pack expansion, perform substitution on the
8539          entire expression. Later on, we'll handle the arguments
8540          one-by-one.  */
8541       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8542                                             args, complain, in_decl);
8543
8544       if (TREE_CODE (expanded_args) == TREE_VEC)
8545         /* So that we'll spin through the parameters, one by one.  */
8546         i = TREE_VEC_LENGTH (expanded_args);
8547       else
8548         {
8549           /* We only partially substituted into the parameter
8550              pack. Our type is TYPE_PACK_EXPANSION.  */
8551           type = expanded_args;
8552           expanded_args = NULL_TREE;
8553         }
8554     }
8555
8556   while (i > 0) {
8557     --i;
8558     
8559     if (expanded_args)
8560       type = TREE_VEC_ELT (expanded_args, i);
8561     else if (!type)
8562       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8563
8564     if (type == error_mark_node)
8565       return error_mark_node;
8566     if (VOID_TYPE_P (type))
8567       {
8568         if (complain & tf_error)
8569           {
8570             error ("invalid parameter type %qT", type);
8571             if (in_decl)
8572               error ("in declaration %q+D", in_decl);
8573           }
8574         return error_mark_node;
8575     }
8576     
8577     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8578        top-level qualifiers as required.  */
8579     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8580
8581     /* We do not substitute into default arguments here.  The standard
8582        mandates that they be instantiated only when needed, which is
8583        done in build_over_call.  */
8584     default_arg = TREE_PURPOSE (arg_types);
8585
8586     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8587       {
8588         /* We've instantiated a template before its default arguments
8589            have been parsed.  This can happen for a nested template
8590            class, and is not an error unless we require the default
8591            argument in a call of this function.  */
8592         remaining_arg_types = 
8593           tree_cons (default_arg, type, remaining_arg_types);
8594         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8595                        remaining_arg_types);
8596       }
8597     else
8598       remaining_arg_types = 
8599         hash_tree_cons (default_arg, type, remaining_arg_types);
8600   }
8601         
8602   return remaining_arg_types;
8603 }
8604
8605 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8606    *not* handle the exception-specification for FNTYPE, because the
8607    initial substitution of explicitly provided template parameters
8608    during argument deduction forbids substitution into the
8609    exception-specification:
8610
8611      [temp.deduct]
8612
8613      All references in the function type of the function template to  the
8614      corresponding template parameters are replaced by the specified tem-
8615      plate argument values.  If a substitution in a template parameter or
8616      in  the function type of the function template results in an invalid
8617      type, type deduction fails.  [Note: The equivalent  substitution  in
8618      exception specifications is done only when the function is instanti-
8619      ated, at which point a program is  ill-formed  if  the  substitution
8620      results in an invalid type.]  */
8621
8622 static tree
8623 tsubst_function_type (tree t,
8624                       tree args,
8625                       tsubst_flags_t complain,
8626                       tree in_decl)
8627 {
8628   tree return_type;
8629   tree arg_types;
8630   tree fntype;
8631
8632   /* The TYPE_CONTEXT is not used for function/method types.  */
8633   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8634
8635   /* Substitute the return type.  */
8636   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8637   if (return_type == error_mark_node)
8638     return error_mark_node;
8639   /* The standard does not presently indicate that creation of a
8640      function type with an invalid return type is a deduction failure.
8641      However, that is clearly analogous to creating an array of "void"
8642      or a reference to a reference.  This is core issue #486.  */
8643   if (TREE_CODE (return_type) == ARRAY_TYPE
8644       || TREE_CODE (return_type) == FUNCTION_TYPE)
8645     {
8646       if (complain & tf_error)
8647         {
8648           if (TREE_CODE (return_type) == ARRAY_TYPE)
8649             error ("function returning an array");
8650           else
8651             error ("function returning a function");
8652         }
8653       return error_mark_node;
8654     }
8655
8656   /* Substitute the argument types.  */
8657   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8658                                 complain, in_decl);
8659   if (arg_types == error_mark_node)
8660     return error_mark_node;
8661
8662   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8663       && in_decl != NULL_TREE
8664       && !TREE_NO_WARNING (in_decl)
8665       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8666     warning (OPT_Wreturn_type,
8667             "type qualifiers ignored on function return type");
8668
8669   /* Construct a new type node and return it.  */
8670   if (TREE_CODE (t) == FUNCTION_TYPE)
8671     fntype = build_function_type (return_type, arg_types);
8672   else
8673     {
8674       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8675       if (! IS_AGGR_TYPE (r))
8676         {
8677           /* [temp.deduct]
8678
8679              Type deduction may fail for any of the following
8680              reasons:
8681
8682              -- Attempting to create "pointer to member of T" when T
8683              is not a class type.  */
8684           if (complain & tf_error)
8685             error ("creating pointer to member function of non-class type %qT",
8686                       r);
8687           return error_mark_node;
8688         }
8689
8690       fntype = build_method_type_directly (r, return_type,
8691                                            TREE_CHAIN (arg_types));
8692     }
8693   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8694   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8695
8696   return fntype;
8697 }
8698
8699 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8700    ARGS into that specification, and return the substituted
8701    specification.  If there is no specification, return NULL_TREE.  */
8702
8703 static tree
8704 tsubst_exception_specification (tree fntype,
8705                                 tree args,
8706                                 tsubst_flags_t complain,
8707                                 tree in_decl)
8708 {
8709   tree specs;
8710   tree new_specs;
8711
8712   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8713   new_specs = NULL_TREE;
8714   if (specs)
8715     {
8716       if (! TREE_VALUE (specs))
8717         new_specs = specs;
8718       else
8719         while (specs)
8720           {
8721             tree spec;
8722             int i, len = 1;
8723             tree expanded_specs = NULL_TREE;
8724
8725             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8726               {
8727                 /* Expand the pack expansion type.  */
8728                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8729                                                        args, complain,
8730                                                        in_decl);
8731
8732                 if (expanded_specs == error_mark_node)
8733                   return error_mark_node;
8734                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
8735                   len = TREE_VEC_LENGTH (expanded_specs);
8736                 else
8737                   {
8738                     /* We're substituting into a member template, so
8739                        we got a TYPE_PACK_EXPANSION back.  Add that
8740                        expansion and move on.  */
8741                     gcc_assert (TREE_CODE (expanded_specs) 
8742                                 == TYPE_PACK_EXPANSION);
8743                     new_specs = add_exception_specifier (new_specs,
8744                                                          expanded_specs,
8745                                                          complain);
8746                     specs = TREE_CHAIN (specs);
8747                     continue;
8748                   }
8749               }
8750
8751             for (i = 0; i < len; ++i)
8752               {
8753                 if (expanded_specs)
8754                   spec = TREE_VEC_ELT (expanded_specs, i);
8755                 else
8756                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8757                 if (spec == error_mark_node)
8758                   return spec;
8759                 new_specs = add_exception_specifier (new_specs, spec, 
8760                                                      complain);
8761               }
8762
8763             specs = TREE_CHAIN (specs);
8764           }
8765     }
8766   return new_specs;
8767 }
8768
8769 /* Take the tree structure T and replace template parameters used
8770    therein with the argument vector ARGS.  IN_DECL is an associated
8771    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8772    Issue error and warning messages under control of COMPLAIN.  Note
8773    that we must be relatively non-tolerant of extensions here, in
8774    order to preserve conformance; if we allow substitutions that
8775    should not be allowed, we may allow argument deductions that should
8776    not succeed, and therefore report ambiguous overload situations
8777    where there are none.  In theory, we could allow the substitution,
8778    but indicate that it should have failed, and allow our caller to
8779    make sure that the right thing happens, but we don't try to do this
8780    yet.
8781
8782    This function is used for dealing with types, decls and the like;
8783    for expressions, use tsubst_expr or tsubst_copy.  */
8784
8785 static tree
8786 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8787 {
8788   tree type, r;
8789
8790   if (t == NULL_TREE || t == error_mark_node
8791       || t == integer_type_node
8792       || t == void_type_node
8793       || t == char_type_node
8794       || t == unknown_type_node
8795       || TREE_CODE (t) == NAMESPACE_DECL)
8796     return t;
8797
8798   if (DECL_P (t))
8799     return tsubst_decl (t, args, complain);
8800
8801   if (TREE_CODE (t) == IDENTIFIER_NODE)
8802     type = IDENTIFIER_TYPE_VALUE (t);
8803   else
8804     type = TREE_TYPE (t);
8805
8806   gcc_assert (type != unknown_type_node);
8807
8808   /* Reuse typedefs.  We need to do this to handle dependent attributes,
8809      such as attribute aligned.  */
8810   if (TYPE_P (t)
8811       && TYPE_NAME (t)
8812       && TYPE_NAME (t) != TYPE_MAIN_DECL (t))
8813     {
8814       tree decl = TYPE_NAME (t);
8815       
8816       if (DECL_CLASS_SCOPE_P (decl)
8817           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl)))
8818         {
8819           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
8820           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
8821           r = retrieve_specialization (tmpl, gen_args, false);
8822         }
8823       else if (DECL_FUNCTION_SCOPE_P (decl))
8824         r = retrieve_local_specialization (decl);
8825       else
8826         r = NULL_TREE;
8827         
8828       if (r)
8829         {
8830           r = TREE_TYPE (r);
8831           r = cp_build_qualified_type_real
8832             (r, cp_type_quals (t) | cp_type_quals (r),
8833              complain | tf_ignore_bad_quals);
8834           return r;
8835         }
8836       /* Else we must be instantiating the typedef, so fall through.  */
8837     }
8838
8839   if (type
8840       && TREE_CODE (t) != TYPENAME_TYPE
8841       && TREE_CODE (t) != IDENTIFIER_NODE
8842       && TREE_CODE (t) != FUNCTION_TYPE
8843       && TREE_CODE (t) != METHOD_TYPE)
8844     type = tsubst (type, args, complain, in_decl);
8845   if (type == error_mark_node)
8846     return error_mark_node;
8847
8848   switch (TREE_CODE (t))
8849     {
8850     case RECORD_TYPE:
8851     case UNION_TYPE:
8852     case ENUMERAL_TYPE:
8853       return tsubst_aggr_type (t, args, complain, in_decl,
8854                                /*entering_scope=*/0);
8855
8856     case ERROR_MARK:
8857     case IDENTIFIER_NODE:
8858     case VOID_TYPE:
8859     case REAL_TYPE:
8860     case COMPLEX_TYPE:
8861     case VECTOR_TYPE:
8862     case BOOLEAN_TYPE:
8863     case INTEGER_CST:
8864     case REAL_CST:
8865     case STRING_CST:
8866       return t;
8867
8868     case INTEGER_TYPE:
8869       if (t == integer_type_node)
8870         return t;
8871
8872       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8873           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8874         return t;
8875
8876       {
8877         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8878
8879         max = tsubst_expr (omax, args, complain, in_decl,
8880                            /*integral_constant_expression_p=*/false);
8881         max = fold_decl_constant_value (max);
8882
8883         if (TREE_CODE (max) != INTEGER_CST 
8884             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8885             && !at_function_scope_p ())
8886           {
8887             if (complain & tf_error)
8888               error ("array bound is not an integer constant");
8889             return error_mark_node;
8890           }
8891
8892         /* [temp.deduct]
8893
8894            Type deduction may fail for any of the following
8895            reasons:
8896
8897              Attempting to create an array with a size that is
8898              zero or negative.  */
8899         if (integer_zerop (max) && !(complain & tf_error))
8900           /* We must fail if performing argument deduction (as
8901              indicated by the state of complain), so that
8902              another substitution can be found.  */
8903           return error_mark_node;
8904         else if (TREE_CODE (max) == INTEGER_CST
8905                  && INT_CST_LT (max, integer_zero_node))
8906           {
8907             if (complain & tf_error)
8908               error ("creating array with negative size (%qE)", max);
8909
8910             return error_mark_node;
8911           }
8912
8913         return compute_array_index_type (NULL_TREE, max);
8914       }
8915
8916     case TEMPLATE_TYPE_PARM:
8917     case TEMPLATE_TEMPLATE_PARM:
8918     case BOUND_TEMPLATE_TEMPLATE_PARM:
8919     case TEMPLATE_PARM_INDEX:
8920       {
8921         int idx;
8922         int level;
8923         int levels;
8924         tree arg = NULL_TREE;
8925
8926         r = NULL_TREE;
8927
8928         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8929         template_parm_level_and_index (t, &level, &idx); 
8930
8931         levels = TMPL_ARGS_DEPTH (args);
8932         if (level <= levels)
8933           {
8934             arg = TMPL_ARG (args, level, idx);
8935
8936             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8937               /* See through ARGUMENT_PACK_SELECT arguments. */
8938               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8939           }
8940
8941         if (arg == error_mark_node)
8942           return error_mark_node;
8943         else if (arg != NULL_TREE)
8944           {
8945             if (ARGUMENT_PACK_P (arg))
8946               /* If ARG is an argument pack, we don't actually want to
8947                  perform a substitution here, because substitutions
8948                  for argument packs are only done
8949                  element-by-element. We can get to this point when
8950                  substituting the type of a non-type template
8951                  parameter pack, when that type actually contains
8952                  template parameter packs from an outer template, e.g.,
8953
8954                  template<typename... Types> struct A {
8955                    template<Types... Values> struct B { };
8956                  };  */
8957               return t;
8958
8959             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8960               {
8961                 int quals;
8962                 gcc_assert (TYPE_P (arg));
8963
8964                 /* cv-quals from the template are discarded when
8965                    substituting in a function or reference type.  */
8966                 if (TREE_CODE (arg) == FUNCTION_TYPE
8967                     || TREE_CODE (arg) == METHOD_TYPE
8968                     || TREE_CODE (arg) == REFERENCE_TYPE)
8969                   quals = cp_type_quals (arg);
8970                 else
8971                   quals = cp_type_quals (arg) | cp_type_quals (t);
8972                   
8973                 return cp_build_qualified_type_real
8974                   (arg, quals, complain | tf_ignore_bad_quals);
8975               }
8976             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8977               {
8978                 /* We are processing a type constructed from a
8979                    template template parameter.  */
8980                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8981                                       args, complain, in_decl);
8982                 if (argvec == error_mark_node)
8983                   return error_mark_node;
8984
8985                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8986                    are resolving nested-types in the signature of a
8987                    member function templates.  Otherwise ARG is a
8988                    TEMPLATE_DECL and is the real template to be
8989                    instantiated.  */
8990                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8991                   arg = TYPE_NAME (arg);
8992
8993                 r = lookup_template_class (arg,
8994                                            argvec, in_decl,
8995                                            DECL_CONTEXT (arg),
8996                                             /*entering_scope=*/0,
8997                                            complain);
8998                 return cp_build_qualified_type_real
8999                   (r, TYPE_QUALS (t), complain);
9000               }
9001             else
9002               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
9003               return arg;
9004           }
9005
9006         if (level == 1)
9007           /* This can happen during the attempted tsubst'ing in
9008              unify.  This means that we don't yet have any information
9009              about the template parameter in question.  */
9010           return t;
9011
9012         /* If we get here, we must have been looking at a parm for a
9013            more deeply nested template.  Make a new version of this
9014            template parameter, but with a lower level.  */
9015         switch (TREE_CODE (t))
9016           {
9017           case TEMPLATE_TYPE_PARM:
9018           case TEMPLATE_TEMPLATE_PARM:
9019           case BOUND_TEMPLATE_TEMPLATE_PARM:
9020             if (cp_type_quals (t))
9021               {
9022                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
9023                 r = cp_build_qualified_type_real
9024                   (r, cp_type_quals (t),
9025                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
9026                                ? tf_ignore_bad_quals : 0));
9027               }
9028             else
9029               {
9030                 r = copy_type (t);
9031                 TEMPLATE_TYPE_PARM_INDEX (r)
9032                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
9033                                                 r, levels, args, complain);
9034                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
9035                 TYPE_MAIN_VARIANT (r) = r;
9036                 TYPE_POINTER_TO (r) = NULL_TREE;
9037                 TYPE_REFERENCE_TO (r) = NULL_TREE;
9038
9039                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
9040                   /* We have reduced the level of the template
9041                      template parameter, but not the levels of its
9042                      template parameters, so canonical_type_parameter
9043                      will not be able to find the canonical template
9044                      template parameter for this level. Thus, we
9045                      require structural equality checking to compare
9046                      TEMPLATE_TEMPLATE_PARMs. */
9047                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9048                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
9049                   SET_TYPE_STRUCTURAL_EQUALITY (r);
9050                 else
9051                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
9052
9053                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9054                   {
9055                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
9056                                           complain, in_decl);
9057                     if (argvec == error_mark_node)
9058                       return error_mark_node;
9059
9060                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
9061                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
9062                   }
9063               }
9064             break;
9065
9066           case TEMPLATE_PARM_INDEX:
9067             r = reduce_template_parm_level (t, type, levels, args, complain);
9068             break;
9069
9070           default:
9071             gcc_unreachable ();
9072           }
9073
9074         return r;
9075       }
9076
9077     case TREE_LIST:
9078       {
9079         tree purpose, value, chain;
9080
9081         if (t == void_list_node)
9082           return t;
9083
9084         purpose = TREE_PURPOSE (t);
9085         if (purpose)
9086           {
9087             purpose = tsubst (purpose, args, complain, in_decl);
9088             if (purpose == error_mark_node)
9089               return error_mark_node;
9090           }
9091         value = TREE_VALUE (t);
9092         if (value)
9093           {
9094             value = tsubst (value, args, complain, in_decl);
9095             if (value == error_mark_node)
9096               return error_mark_node;
9097           }
9098         chain = TREE_CHAIN (t);
9099         if (chain && chain != void_type_node)
9100           {
9101             chain = tsubst (chain, args, complain, in_decl);
9102             if (chain == error_mark_node)
9103               return error_mark_node;
9104           }
9105         if (purpose == TREE_PURPOSE (t)
9106             && value == TREE_VALUE (t)
9107             && chain == TREE_CHAIN (t))
9108           return t;
9109         return hash_tree_cons (purpose, value, chain);
9110       }
9111
9112     case TREE_BINFO:
9113       /* We should never be tsubsting a binfo.  */
9114       gcc_unreachable ();
9115
9116     case TREE_VEC:
9117       /* A vector of template arguments.  */
9118       gcc_assert (!type);
9119       return tsubst_template_args (t, args, complain, in_decl);
9120
9121     case POINTER_TYPE:
9122     case REFERENCE_TYPE:
9123       {
9124         enum tree_code code;
9125
9126         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
9127           return t;
9128
9129         code = TREE_CODE (t);
9130
9131
9132         /* [temp.deduct]
9133
9134            Type deduction may fail for any of the following
9135            reasons:
9136
9137            -- Attempting to create a pointer to reference type.
9138            -- Attempting to create a reference to a reference type or
9139               a reference to void.
9140
9141           Core issue 106 says that creating a reference to a reference
9142           during instantiation is no longer a cause for failure. We
9143           only enforce this check in strict C++98 mode.  */
9144         if ((TREE_CODE (type) == REFERENCE_TYPE
9145              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
9146             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
9147           {
9148             static location_t last_loc;
9149
9150             /* We keep track of the last time we issued this error
9151                message to avoid spewing a ton of messages during a
9152                single bad template instantiation.  */
9153             if (complain & tf_error
9154 #ifdef USE_MAPPED_LOCATION
9155                 && last_loc != input_location
9156 #else
9157                 && (last_loc.line != input_line
9158                     || last_loc.file != input_filename)
9159 #endif
9160                   )
9161               {
9162                 if (TREE_CODE (type) == VOID_TYPE)
9163                   error ("forming reference to void");
9164                 else
9165                   error ("forming %s to reference type %qT",
9166                          (code == POINTER_TYPE) ? "pointer" : "reference",
9167                          type);
9168                 last_loc = input_location;
9169               }
9170
9171             return error_mark_node;
9172           }
9173         else if (code == POINTER_TYPE)
9174           {
9175             r = build_pointer_type (type);
9176             if (TREE_CODE (type) == METHOD_TYPE)
9177               r = build_ptrmemfunc_type (r);
9178           }
9179         else if (TREE_CODE (type) == REFERENCE_TYPE)
9180           /* In C++0x, during template argument substitution, when there is an
9181              attempt to create a reference to a reference type, reference
9182              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
9183
9184              "If a template-argument for a template-parameter T names a type
9185              that is a reference to a type A, an attempt to create the type
9186              'lvalue reference to cv T' creates the type 'lvalue reference to
9187              A,' while an attempt to create the type type rvalue reference to
9188              cv T' creates the type T"
9189           */
9190           r = cp_build_reference_type
9191               (TREE_TYPE (type),
9192                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
9193         else
9194           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
9195         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
9196
9197         if (r != error_mark_node)
9198           /* Will this ever be needed for TYPE_..._TO values?  */
9199           layout_type (r);
9200
9201         return r;
9202       }
9203     case OFFSET_TYPE:
9204       {
9205         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
9206         if (r == error_mark_node || !IS_AGGR_TYPE (r))
9207           {
9208             /* [temp.deduct]
9209
9210                Type deduction may fail for any of the following
9211                reasons:
9212
9213                -- Attempting to create "pointer to member of T" when T
9214                   is not a class type.  */
9215             if (complain & tf_error)
9216               error ("creating pointer to member of non-class type %qT", r);
9217             return error_mark_node;
9218           }
9219         if (TREE_CODE (type) == REFERENCE_TYPE)
9220           {
9221             if (complain & tf_error)
9222               error ("creating pointer to member reference type %qT", type);
9223             return error_mark_node;
9224           }
9225         if (TREE_CODE (type) == VOID_TYPE)
9226           {
9227             if (complain & tf_error)
9228               error ("creating pointer to member of type void");
9229             return error_mark_node;
9230           }
9231         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
9232         if (TREE_CODE (type) == FUNCTION_TYPE)
9233           {
9234             /* The type of the implicit object parameter gets its
9235                cv-qualifiers from the FUNCTION_TYPE. */
9236             tree method_type;
9237             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
9238                                                       cp_type_quals (type));
9239             tree memptr;
9240             method_type = build_method_type_directly (this_type,
9241                                                       TREE_TYPE (type),
9242                                                       TYPE_ARG_TYPES (type));
9243             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
9244             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
9245                                                  complain);
9246           }
9247         else
9248           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
9249                                                TYPE_QUALS (t),
9250                                                complain);
9251       }
9252     case FUNCTION_TYPE:
9253     case METHOD_TYPE:
9254       {
9255         tree fntype;
9256         tree specs;
9257         fntype = tsubst_function_type (t, args, complain, in_decl);
9258         if (fntype == error_mark_node)
9259           return error_mark_node;
9260
9261         /* Substitute the exception specification.  */
9262         specs = tsubst_exception_specification (t, args, complain,
9263                                                 in_decl);
9264         if (specs == error_mark_node)
9265           return error_mark_node;
9266         if (specs)
9267           fntype = build_exception_variant (fntype, specs);
9268         return fntype;
9269       }
9270     case ARRAY_TYPE:
9271       {
9272         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
9273         if (domain == error_mark_node)
9274           return error_mark_node;
9275
9276         /* As an optimization, we avoid regenerating the array type if
9277            it will obviously be the same as T.  */
9278         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
9279           return t;
9280
9281         /* These checks should match the ones in grokdeclarator.
9282
9283            [temp.deduct]
9284
9285            The deduction may fail for any of the following reasons:
9286
9287            -- Attempting to create an array with an element type that
9288               is void, a function type, or a reference type, or [DR337]
9289               an abstract class type.  */
9290         if (TREE_CODE (type) == VOID_TYPE
9291             || TREE_CODE (type) == FUNCTION_TYPE
9292             || TREE_CODE (type) == REFERENCE_TYPE)
9293           {
9294             if (complain & tf_error)
9295               error ("creating array of %qT", type);
9296             return error_mark_node;
9297           }
9298         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
9299           {
9300             if (complain & tf_error)
9301               error ("creating array of %qT, which is an abstract class type",
9302                      type);
9303             return error_mark_node;
9304           }
9305
9306         r = build_cplus_array_type (type, domain);
9307
9308         if (TYPE_USER_ALIGN (t))
9309           {
9310             TYPE_ALIGN (r) = TYPE_ALIGN (t);
9311             TYPE_USER_ALIGN (r) = 1;
9312           }
9313
9314         return r;
9315       }
9316
9317     case PLUS_EXPR:
9318     case MINUS_EXPR:
9319       {
9320         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9321         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9322
9323         if (e1 == error_mark_node || e2 == error_mark_node)
9324           return error_mark_node;
9325
9326         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
9327       }
9328
9329     case NEGATE_EXPR:
9330     case NOP_EXPR:
9331       {
9332         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9333         if (e == error_mark_node)
9334           return error_mark_node;
9335
9336         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
9337       }
9338
9339     case TYPENAME_TYPE:
9340       {
9341         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9342                                      in_decl, /*entering_scope=*/1);
9343         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
9344                               complain, in_decl);
9345
9346         if (ctx == error_mark_node || f == error_mark_node)
9347           return error_mark_node;
9348
9349         if (!IS_AGGR_TYPE (ctx))
9350           {
9351             if (complain & tf_error)
9352               error ("%qT is not a class, struct, or union type", ctx);
9353             return error_mark_node;
9354           }
9355         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
9356           {
9357             /* Normally, make_typename_type does not require that the CTX
9358                have complete type in order to allow things like:
9359
9360                  template <class T> struct S { typename S<T>::X Y; };
9361
9362                But, such constructs have already been resolved by this
9363                point, so here CTX really should have complete type, unless
9364                it's a partial instantiation.  */
9365             ctx = complete_type (ctx);
9366             if (!COMPLETE_TYPE_P (ctx))
9367               {
9368                 if (complain & tf_error)
9369                   cxx_incomplete_type_error (NULL_TREE, ctx);
9370                 return error_mark_node;
9371               }
9372           }
9373
9374         f = make_typename_type (ctx, f, typename_type,
9375                                 (complain & tf_error) | tf_keep_type_decl);
9376         if (f == error_mark_node)
9377           return f;
9378         if (TREE_CODE (f) == TYPE_DECL)
9379           {
9380             complain |= tf_ignore_bad_quals;
9381             f = TREE_TYPE (f);
9382           }
9383
9384         if (TREE_CODE (f) != TYPENAME_TYPE)
9385           {
9386             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9387               error ("%qT resolves to %qT, which is not an enumeration type",
9388                      t, f);
9389             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9390               error ("%qT resolves to %qT, which is is not a class type",
9391                      t, f);
9392           }
9393
9394         return cp_build_qualified_type_real
9395           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9396       }
9397
9398     case UNBOUND_CLASS_TEMPLATE:
9399       {
9400         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9401                                      in_decl, /*entering_scope=*/1);
9402         tree name = TYPE_IDENTIFIER (t);
9403         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9404
9405         if (ctx == error_mark_node || name == error_mark_node)
9406           return error_mark_node;
9407
9408         if (parm_list)
9409           parm_list = tsubst_template_parms (parm_list, args, complain);
9410         return make_unbound_class_template (ctx, name, parm_list, complain);
9411       }
9412
9413     case INDIRECT_REF:
9414     case ADDR_EXPR:
9415     case CALL_EXPR:
9416       gcc_unreachable ();
9417
9418     case ARRAY_REF:
9419       {
9420         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9421         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9422                                /*integral_constant_expression_p=*/false);
9423         if (e1 == error_mark_node || e2 == error_mark_node)
9424           return error_mark_node;
9425
9426         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9427       }
9428
9429     case SCOPE_REF:
9430       {
9431         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9432         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9433         if (e1 == error_mark_node || e2 == error_mark_node)
9434           return error_mark_node;
9435
9436         return build_qualified_name (/*type=*/NULL_TREE,
9437                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9438       }
9439
9440     case TYPEOF_TYPE:
9441       {
9442         tree type;
9443
9444         type = finish_typeof (tsubst_expr 
9445                               (TYPEOF_TYPE_EXPR (t), args,
9446                                complain, in_decl,
9447                                /*integral_constant_expression_p=*/false));
9448         return cp_build_qualified_type_real (type,
9449                                              cp_type_quals (t)
9450                                              | cp_type_quals (type),
9451                                              complain);
9452       }
9453
9454     case DECLTYPE_TYPE:
9455       {
9456         tree type;
9457
9458         type = 
9459           finish_decltype_type (tsubst_expr 
9460                                 (DECLTYPE_TYPE_EXPR (t), args,
9461                                  complain, in_decl,
9462                                  /*integral_constant_expression_p=*/false),
9463                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9464         return cp_build_qualified_type_real (type,
9465                                              cp_type_quals (t)
9466                                              | cp_type_quals (type),
9467                                              complain);
9468       }
9469
9470     case TYPE_ARGUMENT_PACK:
9471     case NONTYPE_ARGUMENT_PACK:
9472       {
9473         tree r = make_node (TREE_CODE (t));
9474         tree packed_out = 
9475           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9476                                 args,
9477                                 complain,
9478                                 in_decl);
9479         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9480
9481         /* For template nontype argument packs, also substitute into
9482            the type.  */
9483         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9484           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9485
9486         return r;
9487       }
9488       break;
9489
9490     default:
9491       sorry ("use of %qs in template",
9492              tree_code_name [(int) TREE_CODE (t)]);
9493       return error_mark_node;
9494     }
9495 }
9496
9497 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9498    type of the expression on the left-hand side of the "." or "->"
9499    operator.  */
9500
9501 static tree
9502 tsubst_baselink (tree baselink, tree object_type,
9503                  tree args, tsubst_flags_t complain, tree in_decl)
9504 {
9505     tree name;
9506     tree qualifying_scope;
9507     tree fns;
9508     tree optype;
9509     tree template_args = 0;
9510     bool template_id_p = false;
9511
9512     /* A baselink indicates a function from a base class.  Both the
9513        BASELINK_ACCESS_BINFO and the base class referenced may
9514        indicate bases of the template class, rather than the
9515        instantiated class.  In addition, lookups that were not
9516        ambiguous before may be ambiguous now.  Therefore, we perform
9517        the lookup again.  */
9518     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9519     qualifying_scope = tsubst (qualifying_scope, args,
9520                                complain, in_decl);
9521     fns = BASELINK_FUNCTIONS (baselink);
9522     optype = BASELINK_OPTYPE (baselink);
9523     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9524       {
9525         template_id_p = true;
9526         template_args = TREE_OPERAND (fns, 1);
9527         fns = TREE_OPERAND (fns, 0);
9528         if (template_args)
9529           template_args = tsubst_template_args (template_args, args,
9530                                                 complain, in_decl);
9531       }
9532     name = DECL_NAME (get_first_fn (fns));
9533     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9534
9535     /* If lookup found a single function, mark it as used at this
9536        point.  (If it lookup found multiple functions the one selected
9537        later by overload resolution will be marked as used at that
9538        point.)  */
9539     if (BASELINK_P (baselink))
9540       fns = BASELINK_FUNCTIONS (baselink);
9541     if (!template_id_p && !really_overloaded_fn (fns))
9542       mark_used (OVL_CURRENT (fns));
9543
9544     /* Add back the template arguments, if present.  */
9545     if (BASELINK_P (baselink) && template_id_p)
9546       BASELINK_FUNCTIONS (baselink)
9547         = build_nt (TEMPLATE_ID_EXPR,
9548                     BASELINK_FUNCTIONS (baselink),
9549                     template_args);
9550     /* Update the conversion operator type.  */
9551     BASELINK_OPTYPE (baselink) 
9552       = tsubst (optype, args, complain, in_decl);
9553
9554     if (!object_type)
9555       object_type = current_class_type;
9556     return adjust_result_of_qualified_name_lookup (baselink,
9557                                                    qualifying_scope,
9558                                                    object_type);
9559 }
9560
9561 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9562    true if the qualified-id will be a postfix-expression in-and-of
9563    itself; false if more of the postfix-expression follows the
9564    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9565    of "&".  */
9566
9567 static tree
9568 tsubst_qualified_id (tree qualified_id, tree args,
9569                      tsubst_flags_t complain, tree in_decl,
9570                      bool done, bool address_p)
9571 {
9572   tree expr;
9573   tree scope;
9574   tree name;
9575   bool is_template;
9576   tree template_args;
9577
9578   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9579
9580   /* Figure out what name to look up.  */
9581   name = TREE_OPERAND (qualified_id, 1);
9582   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9583     {
9584       is_template = true;
9585       template_args = TREE_OPERAND (name, 1);
9586       if (template_args)
9587         template_args = tsubst_template_args (template_args, args,
9588                                               complain, in_decl);
9589       name = TREE_OPERAND (name, 0);
9590     }
9591   else
9592     {
9593       is_template = false;
9594       template_args = NULL_TREE;
9595     }
9596
9597   /* Substitute into the qualifying scope.  When there are no ARGS, we
9598      are just trying to simplify a non-dependent expression.  In that
9599      case the qualifying scope may be dependent, and, in any case,
9600      substituting will not help.  */
9601   scope = TREE_OPERAND (qualified_id, 0);
9602   if (args)
9603     {
9604       scope = tsubst (scope, args, complain, in_decl);
9605       expr = tsubst_copy (name, args, complain, in_decl);
9606     }
9607   else
9608     expr = name;
9609
9610   if (dependent_type_p (scope))
9611     return build_qualified_name (/*type=*/NULL_TREE,
9612                                  scope, expr,
9613                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9614
9615   if (!BASELINK_P (name) && !DECL_P (expr))
9616     {
9617       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9618         /* If this were actually a destructor call, it would have been
9619            parsed as such by the parser.  */
9620         expr = error_mark_node;
9621       else
9622         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9623       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9624                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9625         {
9626           if (complain & tf_error)
9627             {
9628               error ("dependent-name %qE is parsed as a non-type, but "
9629                      "instantiation yields a type", qualified_id);
9630               inform ("say %<typename %E%> if a type is meant", qualified_id);
9631             }
9632           return error_mark_node;
9633         }
9634     }
9635
9636   if (DECL_P (expr))
9637     {
9638       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9639                                            scope);
9640       /* Remember that there was a reference to this entity.  */
9641       mark_used (expr);
9642     }
9643
9644   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9645     {
9646       if (complain & tf_error)
9647         qualified_name_lookup_error (scope,
9648                                      TREE_OPERAND (qualified_id, 1),
9649                                      expr);
9650       return error_mark_node;
9651     }
9652
9653   if (is_template)
9654     expr = lookup_template_function (expr, template_args);
9655
9656   if (expr == error_mark_node && complain & tf_error)
9657     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9658                                  expr);
9659   else if (TYPE_P (scope))
9660     {
9661       expr = (adjust_result_of_qualified_name_lookup
9662               (expr, scope, current_class_type));
9663       expr = (finish_qualified_id_expr
9664               (scope, expr, done, address_p,
9665                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9666                /*template_arg_p=*/false));
9667     }
9668
9669   /* Expressions do not generally have reference type.  */
9670   if (TREE_CODE (expr) != SCOPE_REF
9671       /* However, if we're about to form a pointer-to-member, we just
9672          want the referenced member referenced.  */
9673       && TREE_CODE (expr) != OFFSET_REF)
9674     expr = convert_from_reference (expr);
9675
9676   return expr;
9677 }
9678
9679 /* Like tsubst, but deals with expressions.  This function just replaces
9680    template parms; to finish processing the resultant expression, use
9681    tsubst_expr.  */
9682
9683 static tree
9684 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9685 {
9686   enum tree_code code;
9687   tree r;
9688
9689   if (t == NULL_TREE || t == error_mark_node)
9690     return t;
9691
9692   code = TREE_CODE (t);
9693
9694   switch (code)
9695     {
9696     case PARM_DECL:
9697       r = retrieve_local_specialization (t);
9698       gcc_assert (r != NULL);
9699       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9700         r = ARGUMENT_PACK_SELECT_ARG (r);
9701       mark_used (r);
9702       return r;
9703
9704     case CONST_DECL:
9705       {
9706         tree enum_type;
9707         tree v;
9708
9709         if (DECL_TEMPLATE_PARM_P (t))
9710           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9711         /* There is no need to substitute into namespace-scope
9712            enumerators.  */
9713         if (DECL_NAMESPACE_SCOPE_P (t))
9714           return t;
9715         /* If ARGS is NULL, then T is known to be non-dependent.  */
9716         if (args == NULL_TREE)
9717           return integral_constant_value (t);
9718
9719         /* Unfortunately, we cannot just call lookup_name here.
9720            Consider:
9721
9722              template <int I> int f() {
9723              enum E { a = I };
9724              struct S { void g() { E e = a; } };
9725              };
9726
9727            When we instantiate f<7>::S::g(), say, lookup_name is not
9728            clever enough to find f<7>::a.  */
9729         enum_type
9730           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9731                               /*entering_scope=*/0);
9732
9733         for (v = TYPE_VALUES (enum_type);
9734              v != NULL_TREE;
9735              v = TREE_CHAIN (v))
9736           if (TREE_PURPOSE (v) == DECL_NAME (t))
9737             return TREE_VALUE (v);
9738
9739           /* We didn't find the name.  That should never happen; if
9740              name-lookup found it during preliminary parsing, we
9741              should find it again here during instantiation.  */
9742         gcc_unreachable ();
9743       }
9744       return t;
9745
9746     case FIELD_DECL:
9747       if (DECL_CONTEXT (t))
9748         {
9749           tree ctx;
9750
9751           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9752                                   /*entering_scope=*/1);
9753           if (ctx != DECL_CONTEXT (t))
9754             {
9755               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9756               if (!r)
9757                 {
9758                   if (complain & tf_error)
9759                     error ("using invalid field %qD", t);
9760                   return error_mark_node;
9761                 }
9762               return r;
9763             }
9764         }
9765
9766       return t;
9767
9768     case VAR_DECL:
9769     case FUNCTION_DECL:
9770       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9771           || local_variable_p (t))
9772         t = tsubst (t, args, complain, in_decl);
9773       mark_used (t);
9774       return t;
9775
9776     case BASELINK:
9777       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9778
9779     case TEMPLATE_DECL:
9780       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9781         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9782                        args, complain, in_decl);
9783       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9784         return tsubst (t, args, complain, in_decl);
9785       else if (DECL_CLASS_SCOPE_P (t)
9786                && uses_template_parms (DECL_CONTEXT (t)))
9787         {
9788           /* Template template argument like the following example need
9789              special treatment:
9790
9791                template <template <class> class TT> struct C {};
9792                template <class T> struct D {
9793                  template <class U> struct E {};
9794                  C<E> c;                                // #1
9795                };
9796                D<int> d;                                // #2
9797
9798              We are processing the template argument `E' in #1 for
9799              the template instantiation #2.  Originally, `E' is a
9800              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9801              have to substitute this with one having context `D<int>'.  */
9802
9803           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9804           return lookup_field (context, DECL_NAME(t), 0, false);
9805         }
9806       else
9807         /* Ordinary template template argument.  */
9808         return t;
9809
9810     case CAST_EXPR:
9811     case REINTERPRET_CAST_EXPR:
9812     case CONST_CAST_EXPR:
9813     case STATIC_CAST_EXPR:
9814     case DYNAMIC_CAST_EXPR:
9815     case NOP_EXPR:
9816       return build1
9817         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9818          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9819
9820     case SIZEOF_EXPR:
9821       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9822         {
9823           /* We only want to compute the number of arguments.  */
9824           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9825                                                 complain, in_decl);
9826           if (expanded == error_mark_node)
9827             return error_mark_node;
9828           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9829         }
9830       /* Fall through */
9831
9832     case INDIRECT_REF:
9833     case NEGATE_EXPR:
9834     case TRUTH_NOT_EXPR:
9835     case BIT_NOT_EXPR:
9836     case ADDR_EXPR:
9837     case UNARY_PLUS_EXPR:      /* Unary + */
9838     case ALIGNOF_EXPR:
9839     case ARROW_EXPR:
9840     case THROW_EXPR:
9841     case TYPEID_EXPR:
9842     case REALPART_EXPR:
9843     case IMAGPART_EXPR:
9844       return build1
9845         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9846          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9847
9848     case COMPONENT_REF:
9849       {
9850         tree object;
9851         tree name;
9852
9853         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9854         name = TREE_OPERAND (t, 1);
9855         if (TREE_CODE (name) == BIT_NOT_EXPR)
9856           {
9857             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9858                                 complain, in_decl);
9859             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9860           }
9861         else if (TREE_CODE (name) == SCOPE_REF
9862                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9863           {
9864             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9865                                      complain, in_decl);
9866             name = TREE_OPERAND (name, 1);
9867             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9868                                 complain, in_decl);
9869             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9870             name = build_qualified_name (/*type=*/NULL_TREE,
9871                                          base, name,
9872                                          /*template_p=*/false);
9873           }
9874         else if (TREE_CODE (name) == BASELINK)
9875           name = tsubst_baselink (name,
9876                                   non_reference (TREE_TYPE (object)),
9877                                   args, complain,
9878                                   in_decl);
9879         else
9880           name = tsubst_copy (name, args, complain, in_decl);
9881         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9882       }
9883
9884     case PLUS_EXPR:
9885     case MINUS_EXPR:
9886     case MULT_EXPR:
9887     case TRUNC_DIV_EXPR:
9888     case CEIL_DIV_EXPR:
9889     case FLOOR_DIV_EXPR:
9890     case ROUND_DIV_EXPR:
9891     case EXACT_DIV_EXPR:
9892     case BIT_AND_EXPR:
9893     case BIT_IOR_EXPR:
9894     case BIT_XOR_EXPR:
9895     case TRUNC_MOD_EXPR:
9896     case FLOOR_MOD_EXPR:
9897     case TRUTH_ANDIF_EXPR:
9898     case TRUTH_ORIF_EXPR:
9899     case TRUTH_AND_EXPR:
9900     case TRUTH_OR_EXPR:
9901     case RSHIFT_EXPR:
9902     case LSHIFT_EXPR:
9903     case RROTATE_EXPR:
9904     case LROTATE_EXPR:
9905     case EQ_EXPR:
9906     case NE_EXPR:
9907     case MAX_EXPR:
9908     case MIN_EXPR:
9909     case LE_EXPR:
9910     case GE_EXPR:
9911     case LT_EXPR:
9912     case GT_EXPR:
9913     case COMPOUND_EXPR:
9914     case DOTSTAR_EXPR:
9915     case MEMBER_REF:
9916     case PREDECREMENT_EXPR:
9917     case PREINCREMENT_EXPR:
9918     case POSTDECREMENT_EXPR:
9919     case POSTINCREMENT_EXPR:
9920       return build_nt
9921         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9922          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9923
9924     case SCOPE_REF:
9925       return build_qualified_name (/*type=*/NULL_TREE,
9926                                    tsubst_copy (TREE_OPERAND (t, 0),
9927                                                 args, complain, in_decl),
9928                                    tsubst_copy (TREE_OPERAND (t, 1),
9929                                                 args, complain, in_decl),
9930                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9931
9932     case ARRAY_REF:
9933       return build_nt
9934         (ARRAY_REF,
9935          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9936          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9937          NULL_TREE, NULL_TREE);
9938
9939     case CALL_EXPR:
9940       {
9941         int n = VL_EXP_OPERAND_LENGTH (t);
9942         tree result = build_vl_exp (CALL_EXPR, n);
9943         int i;
9944         for (i = 0; i < n; i++)
9945           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9946                                              complain, in_decl);
9947         return result;
9948       }
9949
9950     case COND_EXPR:
9951     case MODOP_EXPR:
9952     case PSEUDO_DTOR_EXPR:
9953       {
9954         r = build_nt
9955           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9956            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9957            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9958         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9959         return r;
9960       }
9961
9962     case NEW_EXPR:
9963       {
9964         r = build_nt
9965         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9966          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9967          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9968         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9969         return r;
9970       }
9971
9972     case DELETE_EXPR:
9973       {
9974         r = build_nt
9975         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9976          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9977         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9978         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9979         return r;
9980       }
9981
9982     case TEMPLATE_ID_EXPR:
9983       {
9984         /* Substituted template arguments */
9985         tree fn = TREE_OPERAND (t, 0);
9986         tree targs = TREE_OPERAND (t, 1);
9987
9988         fn = tsubst_copy (fn, args, complain, in_decl);
9989         if (targs)
9990           targs = tsubst_template_args (targs, args, complain, in_decl);
9991
9992         return lookup_template_function (fn, targs);
9993       }
9994
9995     case TREE_LIST:
9996       {
9997         tree purpose, value, chain;
9998
9999         if (t == void_list_node)
10000           return t;
10001
10002         purpose = TREE_PURPOSE (t);
10003         if (purpose)
10004           purpose = tsubst_copy (purpose, args, complain, in_decl);
10005         value = TREE_VALUE (t);
10006         if (value)
10007           value = tsubst_copy (value, args, complain, in_decl);
10008         chain = TREE_CHAIN (t);
10009         if (chain && chain != void_type_node)
10010           chain = tsubst_copy (chain, args, complain, in_decl);
10011         if (purpose == TREE_PURPOSE (t)
10012             && value == TREE_VALUE (t)
10013             && chain == TREE_CHAIN (t))
10014           return t;
10015         return tree_cons (purpose, value, chain);
10016       }
10017
10018     case RECORD_TYPE:
10019     case UNION_TYPE:
10020     case ENUMERAL_TYPE:
10021     case INTEGER_TYPE:
10022     case TEMPLATE_TYPE_PARM:
10023     case TEMPLATE_TEMPLATE_PARM:
10024     case BOUND_TEMPLATE_TEMPLATE_PARM:
10025     case TEMPLATE_PARM_INDEX:
10026     case POINTER_TYPE:
10027     case REFERENCE_TYPE:
10028     case OFFSET_TYPE:
10029     case FUNCTION_TYPE:
10030     case METHOD_TYPE:
10031     case ARRAY_TYPE:
10032     case TYPENAME_TYPE:
10033     case UNBOUND_CLASS_TEMPLATE:
10034     case TYPEOF_TYPE:
10035     case DECLTYPE_TYPE:
10036     case TYPE_DECL:
10037       return tsubst (t, args, complain, in_decl);
10038
10039     case IDENTIFIER_NODE:
10040       if (IDENTIFIER_TYPENAME_P (t))
10041         {
10042           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10043           return mangle_conv_op_name_for_type (new_type);
10044         }
10045       else
10046         return t;
10047
10048     case CONSTRUCTOR:
10049       /* This is handled by tsubst_copy_and_build.  */
10050       gcc_unreachable ();
10051
10052     case VA_ARG_EXPR:
10053       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
10054                                           in_decl),
10055                              tsubst (TREE_TYPE (t), args, complain, in_decl));
10056
10057     case CLEANUP_POINT_EXPR:
10058       /* We shouldn't have built any of these during initial template
10059          generation.  Instead, they should be built during instantiation
10060          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
10061       gcc_unreachable ();
10062
10063     case OFFSET_REF:
10064       mark_used (TREE_OPERAND (t, 1));
10065       return t;
10066
10067     case EXPR_PACK_EXPANSION:
10068       error ("invalid use of pack expansion expression");
10069       return error_mark_node;
10070
10071     case NONTYPE_ARGUMENT_PACK:
10072       error ("use %<...%> to expand argument pack");
10073       return error_mark_node;
10074
10075     default:
10076       return t;
10077     }
10078 }
10079
10080 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
10081
10082 static tree
10083 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
10084                     tree in_decl)
10085 {
10086   tree new_clauses = NULL, nc, oc;
10087
10088   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
10089     {
10090       nc = copy_node (oc);
10091       OMP_CLAUSE_CHAIN (nc) = new_clauses;
10092       new_clauses = nc;
10093
10094       switch (OMP_CLAUSE_CODE (nc))
10095         {
10096         case OMP_CLAUSE_PRIVATE:
10097         case OMP_CLAUSE_SHARED:
10098         case OMP_CLAUSE_FIRSTPRIVATE:
10099         case OMP_CLAUSE_LASTPRIVATE:
10100         case OMP_CLAUSE_REDUCTION:
10101         case OMP_CLAUSE_COPYIN:
10102         case OMP_CLAUSE_COPYPRIVATE:
10103         case OMP_CLAUSE_IF:
10104         case OMP_CLAUSE_NUM_THREADS:
10105         case OMP_CLAUSE_SCHEDULE:
10106           OMP_CLAUSE_OPERAND (nc, 0)
10107             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
10108                            in_decl, /*integral_constant_expression_p=*/false);
10109           break;
10110         case OMP_CLAUSE_NOWAIT:
10111         case OMP_CLAUSE_ORDERED:
10112         case OMP_CLAUSE_DEFAULT:
10113           break;
10114         default:
10115           gcc_unreachable ();
10116         }
10117     }
10118
10119   return finish_omp_clauses (nreverse (new_clauses));
10120 }
10121
10122 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
10123
10124 static tree
10125 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
10126                           tree in_decl)
10127 {
10128 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
10129
10130   tree purpose, value, chain;
10131
10132   if (t == NULL)
10133     return t;
10134
10135   if (TREE_CODE (t) != TREE_LIST)
10136     return tsubst_copy_and_build (t, args, complain, in_decl,
10137                                   /*function_p=*/false,
10138                                   /*integral_constant_expression_p=*/false);
10139
10140   if (t == void_list_node)
10141     return t;
10142
10143   purpose = TREE_PURPOSE (t);
10144   if (purpose)
10145     purpose = RECUR (purpose);
10146   value = TREE_VALUE (t);
10147   if (value)
10148     value = RECUR (value);
10149   chain = TREE_CHAIN (t);
10150   if (chain && chain != void_type_node)
10151     chain = RECUR (chain);
10152   return tree_cons (purpose, value, chain);
10153 #undef RECUR
10154 }
10155
10156 /* Like tsubst_copy for expressions, etc. but also does semantic
10157    processing.  */
10158
10159 static tree
10160 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
10161              bool integral_constant_expression_p)
10162 {
10163 #define RECUR(NODE)                             \
10164   tsubst_expr ((NODE), args, complain, in_decl, \
10165                integral_constant_expression_p)
10166
10167   tree stmt, tmp;
10168
10169   if (t == NULL_TREE || t == error_mark_node)
10170     return t;
10171
10172   if (EXPR_HAS_LOCATION (t))
10173     input_location = EXPR_LOCATION (t);
10174   if (STATEMENT_CODE_P (TREE_CODE (t)))
10175     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
10176
10177   switch (TREE_CODE (t))
10178     {
10179     case STATEMENT_LIST:
10180       {
10181         tree_stmt_iterator i;
10182         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
10183           RECUR (tsi_stmt (i));
10184         break;
10185       }
10186
10187     case CTOR_INITIALIZER:
10188       finish_mem_initializers (tsubst_initializer_list
10189                                (TREE_OPERAND (t, 0), args));
10190       break;
10191
10192     case RETURN_EXPR:
10193       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
10194       break;
10195
10196     case EXPR_STMT:
10197       tmp = RECUR (EXPR_STMT_EXPR (t));
10198       if (EXPR_STMT_STMT_EXPR_RESULT (t))
10199         finish_stmt_expr_expr (tmp, cur_stmt_expr);
10200       else
10201         finish_expr_stmt (tmp);
10202       break;
10203
10204     case USING_STMT:
10205       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
10206       break;
10207
10208     case DECL_EXPR:
10209       {
10210         tree decl;
10211         tree init;
10212
10213         decl = DECL_EXPR_DECL (t);
10214         if (TREE_CODE (decl) == LABEL_DECL)
10215           finish_label_decl (DECL_NAME (decl));
10216         else if (TREE_CODE (decl) == USING_DECL)
10217           {
10218             tree scope = USING_DECL_SCOPE (decl);
10219             tree name = DECL_NAME (decl);
10220             tree decl;
10221
10222             scope = RECUR (scope);
10223             decl = lookup_qualified_name (scope, name,
10224                                           /*is_type_p=*/false,
10225                                           /*complain=*/false);
10226             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
10227               qualified_name_lookup_error (scope, name, decl);
10228             else
10229               do_local_using_decl (decl, scope, name);
10230           }
10231         else
10232           {
10233             init = DECL_INITIAL (decl);
10234             decl = tsubst (decl, args, complain, in_decl);
10235             if (decl != error_mark_node)
10236               {
10237                 /* By marking the declaration as instantiated, we avoid
10238                    trying to instantiate it.  Since instantiate_decl can't
10239                    handle local variables, and since we've already done
10240                    all that needs to be done, that's the right thing to
10241                    do.  */
10242                 if (TREE_CODE (decl) == VAR_DECL)
10243                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10244                 if (TREE_CODE (decl) == VAR_DECL
10245                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
10246                   /* Anonymous aggregates are a special case.  */
10247                   finish_anon_union (decl);
10248                 else
10249                   {
10250                     maybe_push_decl (decl);
10251                     if (TREE_CODE (decl) == VAR_DECL
10252                         && DECL_PRETTY_FUNCTION_P (decl))
10253                       {
10254                         /* For __PRETTY_FUNCTION__ we have to adjust the
10255                            initializer.  */
10256                         const char *const name
10257                           = cxx_printable_name (current_function_decl, 2);
10258                         init = cp_fname_init (name, &TREE_TYPE (decl));
10259                       }
10260                     else
10261                       {
10262                         tree t = RECUR (init);
10263
10264                         if (init && !t)
10265                           /* If we had an initializer but it
10266                              instantiated to nothing,
10267                              value-initialize the object.  This will
10268                              only occur when the initializer was a
10269                              pack expansion where the parameter packs
10270                              used in that expansion were of length
10271                              zero.  */
10272                           init = build_default_init (TREE_TYPE (decl),
10273                                                      NULL_TREE);
10274                         else
10275                           init = t;
10276                       }
10277
10278                     finish_decl (decl, init, NULL_TREE);
10279                   }
10280               }
10281           }
10282
10283         /* A DECL_EXPR can also be used as an expression, in the condition
10284            clause of an if/for/while construct.  */
10285         return decl;
10286       }
10287
10288     case FOR_STMT:
10289       stmt = begin_for_stmt ();
10290                           RECUR (FOR_INIT_STMT (t));
10291       finish_for_init_stmt (stmt);
10292       tmp = RECUR (FOR_COND (t));
10293       finish_for_cond (tmp, stmt);
10294       tmp = RECUR (FOR_EXPR (t));
10295       finish_for_expr (tmp, stmt);
10296       RECUR (FOR_BODY (t));
10297       finish_for_stmt (stmt);
10298       break;
10299
10300     case WHILE_STMT:
10301       stmt = begin_while_stmt ();
10302       tmp = RECUR (WHILE_COND (t));
10303       finish_while_stmt_cond (tmp, stmt);
10304       RECUR (WHILE_BODY (t));
10305       finish_while_stmt (stmt);
10306       break;
10307
10308     case DO_STMT:
10309       stmt = begin_do_stmt ();
10310       RECUR (DO_BODY (t));
10311       finish_do_body (stmt);
10312       tmp = RECUR (DO_COND (t));
10313       finish_do_stmt (tmp, stmt);
10314       break;
10315
10316     case IF_STMT:
10317       stmt = begin_if_stmt ();
10318       tmp = RECUR (IF_COND (t));
10319       finish_if_stmt_cond (tmp, stmt);
10320       RECUR (THEN_CLAUSE (t));
10321       finish_then_clause (stmt);
10322
10323       if (ELSE_CLAUSE (t))
10324         {
10325           begin_else_clause (stmt);
10326           RECUR (ELSE_CLAUSE (t));
10327           finish_else_clause (stmt);
10328         }
10329
10330       finish_if_stmt (stmt);
10331       break;
10332
10333     case BIND_EXPR:
10334       if (BIND_EXPR_BODY_BLOCK (t))
10335         stmt = begin_function_body ();
10336       else
10337         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
10338                                     ? BCS_TRY_BLOCK : 0);
10339
10340       RECUR (BIND_EXPR_BODY (t));
10341
10342       if (BIND_EXPR_BODY_BLOCK (t))
10343         finish_function_body (stmt);
10344       else
10345         finish_compound_stmt (stmt);
10346       break;
10347
10348     case BREAK_STMT:
10349       finish_break_stmt ();
10350       break;
10351
10352     case CONTINUE_STMT:
10353       finish_continue_stmt ();
10354       break;
10355
10356     case SWITCH_STMT:
10357       stmt = begin_switch_stmt ();
10358       tmp = RECUR (SWITCH_STMT_COND (t));
10359       finish_switch_cond (tmp, stmt);
10360       RECUR (SWITCH_STMT_BODY (t));
10361       finish_switch_stmt (stmt);
10362       break;
10363
10364     case CASE_LABEL_EXPR:
10365       finish_case_label (RECUR (CASE_LOW (t)),
10366                          RECUR (CASE_HIGH (t)));
10367       break;
10368
10369     case LABEL_EXPR:
10370       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
10371       break;
10372
10373     case GOTO_EXPR:
10374       tmp = GOTO_DESTINATION (t);
10375       if (TREE_CODE (tmp) != LABEL_DECL)
10376         /* Computed goto's must be tsubst'd into.  On the other hand,
10377            non-computed gotos must not be; the identifier in question
10378            will have no binding.  */
10379         tmp = RECUR (tmp);
10380       else
10381         tmp = DECL_NAME (tmp);
10382       finish_goto_stmt (tmp);
10383       break;
10384
10385     case ASM_EXPR:
10386       tmp = finish_asm_stmt
10387         (ASM_VOLATILE_P (t),
10388          RECUR (ASM_STRING (t)),
10389          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
10390          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
10391          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
10392       {
10393         tree asm_expr = tmp;
10394         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
10395           asm_expr = TREE_OPERAND (asm_expr, 0);
10396         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
10397       }
10398       break;
10399
10400     case TRY_BLOCK:
10401       if (CLEANUP_P (t))
10402         {
10403           stmt = begin_try_block ();
10404           RECUR (TRY_STMTS (t));
10405           finish_cleanup_try_block (stmt);
10406           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10407         }
10408       else
10409         {
10410           tree compound_stmt = NULL_TREE;
10411
10412           if (FN_TRY_BLOCK_P (t))
10413             stmt = begin_function_try_block (&compound_stmt);
10414           else
10415             stmt = begin_try_block ();
10416
10417           RECUR (TRY_STMTS (t));
10418
10419           if (FN_TRY_BLOCK_P (t))
10420             finish_function_try_block (stmt);
10421           else
10422             finish_try_block (stmt);
10423
10424           RECUR (TRY_HANDLERS (t));
10425           if (FN_TRY_BLOCK_P (t))
10426             finish_function_handler_sequence (stmt, compound_stmt);
10427           else
10428             finish_handler_sequence (stmt);
10429         }
10430       break;
10431
10432     case HANDLER:
10433       {
10434         tree decl = HANDLER_PARMS (t);
10435
10436         if (decl)
10437           {
10438             decl = tsubst (decl, args, complain, in_decl);
10439             /* Prevent instantiate_decl from trying to instantiate
10440                this variable.  We've already done all that needs to be
10441                done.  */
10442             if (decl != error_mark_node)
10443               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10444           }
10445         stmt = begin_handler ();
10446         finish_handler_parms (decl, stmt);
10447         RECUR (HANDLER_BODY (t));
10448         finish_handler (stmt);
10449       }
10450       break;
10451
10452     case TAG_DEFN:
10453       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10454       break;
10455
10456     case STATIC_ASSERT:
10457       {
10458         tree condition = 
10459           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10460                        args,
10461                        complain, in_decl,
10462                        /*integral_constant_expression_p=*/true);
10463         finish_static_assert (condition,
10464                               STATIC_ASSERT_MESSAGE (t),
10465                               STATIC_ASSERT_SOURCE_LOCATION (t),
10466                               /*member_p=*/false);
10467       }
10468       break;
10469
10470     case OMP_PARALLEL:
10471       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10472                                 args, complain, in_decl);
10473       stmt = begin_omp_parallel ();
10474       RECUR (OMP_PARALLEL_BODY (t));
10475       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10476         = OMP_PARALLEL_COMBINED (t);
10477       break;
10478
10479     case OMP_FOR:
10480       {
10481         tree clauses, decl, init, cond, incr, body, pre_body;
10482
10483         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10484                                       args, complain, in_decl);
10485         init = OMP_FOR_INIT (t);
10486         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10487         decl = RECUR (TREE_OPERAND (init, 0));
10488         init = RECUR (TREE_OPERAND (init, 1));
10489         cond = RECUR (OMP_FOR_COND (t));
10490         incr = RECUR (OMP_FOR_INCR (t));
10491
10492         stmt = begin_omp_structured_block ();
10493
10494         pre_body = push_stmt_list ();
10495         RECUR (OMP_FOR_PRE_BODY (t));
10496         pre_body = pop_stmt_list (pre_body);
10497
10498         body = push_stmt_list ();
10499         RECUR (OMP_FOR_BODY (t));
10500         body = pop_stmt_list (body);
10501
10502         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10503                             pre_body);
10504         if (t)
10505           OMP_FOR_CLAUSES (t) = clauses;
10506
10507         add_stmt (finish_omp_structured_block (stmt));
10508       }
10509       break;
10510
10511     case OMP_SECTIONS:
10512     case OMP_SINGLE:
10513       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10514       stmt = push_stmt_list ();
10515       RECUR (OMP_BODY (t));
10516       stmt = pop_stmt_list (stmt);
10517
10518       t = copy_node (t);
10519       OMP_BODY (t) = stmt;
10520       OMP_CLAUSES (t) = tmp;
10521       add_stmt (t);
10522       break;
10523
10524     case OMP_SECTION:
10525     case OMP_CRITICAL:
10526     case OMP_MASTER:
10527     case OMP_ORDERED:
10528       stmt = push_stmt_list ();
10529       RECUR (OMP_BODY (t));
10530       stmt = pop_stmt_list (stmt);
10531
10532       t = copy_node (t);
10533       OMP_BODY (t) = stmt;
10534       add_stmt (t);
10535       break;
10536
10537     case OMP_ATOMIC:
10538       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
10539       {
10540         tree op1 = TREE_OPERAND (t, 1);
10541         tree lhs = RECUR (TREE_OPERAND (op1, 0));
10542         tree rhs = RECUR (TREE_OPERAND (op1, 1));
10543         finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10544       }
10545       break;
10546
10547     case EXPR_PACK_EXPANSION:
10548       error ("invalid use of pack expansion expression");
10549       return error_mark_node;
10550
10551     case NONTYPE_ARGUMENT_PACK:
10552       error ("use %<...%> to expand argument pack");
10553       return error_mark_node;
10554
10555     default:
10556       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10557
10558       return tsubst_copy_and_build (t, args, complain, in_decl,
10559                                     /*function_p=*/false,
10560                                     integral_constant_expression_p);
10561     }
10562
10563   return NULL_TREE;
10564 #undef RECUR
10565 }
10566
10567 /* T is a postfix-expression that is not being used in a function
10568    call.  Return the substituted version of T.  */
10569
10570 static tree
10571 tsubst_non_call_postfix_expression (tree t, tree args,
10572                                     tsubst_flags_t complain,
10573                                     tree in_decl)
10574 {
10575   if (TREE_CODE (t) == SCOPE_REF)
10576     t = tsubst_qualified_id (t, args, complain, in_decl,
10577                              /*done=*/false, /*address_p=*/false);
10578   else
10579     t = tsubst_copy_and_build (t, args, complain, in_decl,
10580                                /*function_p=*/false,
10581                                /*integral_constant_expression_p=*/false);
10582
10583   return t;
10584 }
10585
10586 /* Like tsubst but deals with expressions and performs semantic
10587    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10588
10589 tree
10590 tsubst_copy_and_build (tree t,
10591                        tree args,
10592                        tsubst_flags_t complain,
10593                        tree in_decl,
10594                        bool function_p,
10595                        bool integral_constant_expression_p)
10596 {
10597 #define RECUR(NODE)                                             \
10598   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10599                          /*function_p=*/false,                  \
10600                          integral_constant_expression_p)
10601
10602   tree op1;
10603
10604   if (t == NULL_TREE || t == error_mark_node)
10605     return t;
10606
10607   switch (TREE_CODE (t))
10608     {
10609     case USING_DECL:
10610       t = DECL_NAME (t);
10611       /* Fall through.  */
10612     case IDENTIFIER_NODE:
10613       {
10614         tree decl;
10615         cp_id_kind idk;
10616         bool non_integral_constant_expression_p;
10617         const char *error_msg;
10618
10619         if (IDENTIFIER_TYPENAME_P (t))
10620           {
10621             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10622             t = mangle_conv_op_name_for_type (new_type);
10623           }
10624
10625         /* Look up the name.  */
10626         decl = lookup_name (t);
10627
10628         /* By convention, expressions use ERROR_MARK_NODE to indicate
10629            failure, not NULL_TREE.  */
10630         if (decl == NULL_TREE)
10631           decl = error_mark_node;
10632
10633         decl = finish_id_expression (t, decl, NULL_TREE,
10634                                      &idk,
10635                                      integral_constant_expression_p,
10636                                      /*allow_non_integral_constant_expression_p=*/false,
10637                                      &non_integral_constant_expression_p,
10638                                      /*template_p=*/false,
10639                                      /*done=*/true,
10640                                      /*address_p=*/false,
10641                                      /*template_arg_p=*/false,
10642                                      &error_msg);
10643         if (error_msg)
10644           error (error_msg);
10645         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10646           decl = unqualified_name_lookup_error (decl);
10647         return decl;
10648       }
10649
10650     case TEMPLATE_ID_EXPR:
10651       {
10652         tree object;
10653         tree template = RECUR (TREE_OPERAND (t, 0));
10654         tree targs = TREE_OPERAND (t, 1);
10655
10656         if (targs)
10657           targs = tsubst_template_args (targs, args, complain, in_decl);
10658
10659         if (TREE_CODE (template) == COMPONENT_REF)
10660           {
10661             object = TREE_OPERAND (template, 0);
10662             template = TREE_OPERAND (template, 1);
10663           }
10664         else
10665           object = NULL_TREE;
10666         template = lookup_template_function (template, targs);
10667
10668         if (object)
10669           return build3 (COMPONENT_REF, TREE_TYPE (template),
10670                          object, template, NULL_TREE);
10671         else
10672           return baselink_for_fns (template);
10673       }
10674
10675     case INDIRECT_REF:
10676       {
10677         tree r = RECUR (TREE_OPERAND (t, 0));
10678
10679         if (REFERENCE_REF_P (t))
10680           {
10681             /* A type conversion to reference type will be enclosed in
10682                such an indirect ref, but the substitution of the cast
10683                will have also added such an indirect ref.  */
10684             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10685               r = convert_from_reference (r);
10686           }
10687         else
10688           r = build_x_indirect_ref (r, "unary *");
10689         return r;
10690       }
10691
10692     case NOP_EXPR:
10693       return build_nop
10694         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10695          RECUR (TREE_OPERAND (t, 0)));
10696
10697     case CAST_EXPR:
10698     case REINTERPRET_CAST_EXPR:
10699     case CONST_CAST_EXPR:
10700     case DYNAMIC_CAST_EXPR:
10701     case STATIC_CAST_EXPR:
10702       {
10703         tree type;
10704         tree op;
10705
10706         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10707         if (integral_constant_expression_p
10708             && !cast_valid_in_integral_constant_expression_p (type))
10709           {
10710             error ("a cast to a type other than an integral or "
10711                    "enumeration type cannot appear in a constant-expression");
10712             return error_mark_node; 
10713           }
10714
10715         op = RECUR (TREE_OPERAND (t, 0));
10716
10717         switch (TREE_CODE (t))
10718           {
10719           case CAST_EXPR:
10720             return build_functional_cast (type, op);
10721           case REINTERPRET_CAST_EXPR:
10722             return build_reinterpret_cast (type, op);
10723           case CONST_CAST_EXPR:
10724             return build_const_cast (type, op);
10725           case DYNAMIC_CAST_EXPR:
10726             return build_dynamic_cast (type, op);
10727           case STATIC_CAST_EXPR:
10728             return build_static_cast (type, op);
10729           default:
10730             gcc_unreachable ();
10731           }
10732       }
10733
10734     case POSTDECREMENT_EXPR:
10735     case POSTINCREMENT_EXPR:
10736       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10737                                                 args, complain, in_decl);
10738       return build_x_unary_op (TREE_CODE (t), op1);
10739
10740     case PREDECREMENT_EXPR:
10741     case PREINCREMENT_EXPR:
10742     case NEGATE_EXPR:
10743     case BIT_NOT_EXPR:
10744     case ABS_EXPR:
10745     case TRUTH_NOT_EXPR:
10746     case UNARY_PLUS_EXPR:  /* Unary + */
10747     case REALPART_EXPR:
10748     case IMAGPART_EXPR:
10749       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10750
10751     case ADDR_EXPR:
10752       op1 = TREE_OPERAND (t, 0);
10753       if (TREE_CODE (op1) == SCOPE_REF)
10754         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10755                                    /*done=*/true, /*address_p=*/true);
10756       else
10757         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10758                                                   in_decl);
10759       if (TREE_CODE (op1) == LABEL_DECL)
10760         return finish_label_address_expr (DECL_NAME (op1));
10761       return build_x_unary_op (ADDR_EXPR, op1);
10762
10763     case PLUS_EXPR:
10764     case MINUS_EXPR:
10765     case MULT_EXPR:
10766     case TRUNC_DIV_EXPR:
10767     case CEIL_DIV_EXPR:
10768     case FLOOR_DIV_EXPR:
10769     case ROUND_DIV_EXPR:
10770     case EXACT_DIV_EXPR:
10771     case BIT_AND_EXPR:
10772     case BIT_IOR_EXPR:
10773     case BIT_XOR_EXPR:
10774     case TRUNC_MOD_EXPR:
10775     case FLOOR_MOD_EXPR:
10776     case TRUTH_ANDIF_EXPR:
10777     case TRUTH_ORIF_EXPR:
10778     case TRUTH_AND_EXPR:
10779     case TRUTH_OR_EXPR:
10780     case RSHIFT_EXPR:
10781     case LSHIFT_EXPR:
10782     case RROTATE_EXPR:
10783     case LROTATE_EXPR:
10784     case EQ_EXPR:
10785     case NE_EXPR:
10786     case MAX_EXPR:
10787     case MIN_EXPR:
10788     case LE_EXPR:
10789     case GE_EXPR:
10790     case LT_EXPR:
10791     case GT_EXPR:
10792     case MEMBER_REF:
10793     case DOTSTAR_EXPR:
10794       return build_x_binary_op
10795         (TREE_CODE (t),
10796          RECUR (TREE_OPERAND (t, 0)),
10797          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10798           ? ERROR_MARK
10799           : TREE_CODE (TREE_OPERAND (t, 0))),
10800          RECUR (TREE_OPERAND (t, 1)),
10801          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10802           ? ERROR_MARK
10803           : TREE_CODE (TREE_OPERAND (t, 1))),
10804          /*overloaded_p=*/NULL);
10805
10806     case SCOPE_REF:
10807       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10808                                   /*address_p=*/false);
10809     case ARRAY_REF:
10810       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10811                                                 args, complain, in_decl);
10812       return build_x_binary_op (ARRAY_REF, op1,
10813                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10814                                  ? ERROR_MARK
10815                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10816                                 RECUR (TREE_OPERAND (t, 1)),
10817                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10818                                  ? ERROR_MARK
10819                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10820                                 /*overloaded_p=*/NULL);
10821
10822     case SIZEOF_EXPR:
10823       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10824         {
10825           /* We only want to compute the number of arguments.  */
10826           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10827                                                 complain, in_decl);
10828           if (expanded == error_mark_node)
10829             return error_mark_node;
10830           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10831         }
10832       /* Fall through */
10833       
10834     case ALIGNOF_EXPR:
10835       op1 = TREE_OPERAND (t, 0);
10836       if (!args)
10837         {
10838           /* When there are no ARGS, we are trying to evaluate a
10839              non-dependent expression from the parser.  Trying to do
10840              the substitutions may not work.  */
10841           if (!TYPE_P (op1))
10842             op1 = TREE_TYPE (op1);
10843         }
10844       else
10845         {
10846           ++skip_evaluation;
10847           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10848                                        /*function_p=*/false,
10849                                        /*integral_constant_expression_p=*/false);
10850           --skip_evaluation;
10851         }
10852       if (TYPE_P (op1))
10853         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10854       else
10855         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10856
10857     case MODOP_EXPR:
10858       {
10859         tree r = build_x_modify_expr
10860           (RECUR (TREE_OPERAND (t, 0)),
10861            TREE_CODE (TREE_OPERAND (t, 1)),
10862            RECUR (TREE_OPERAND (t, 2)));
10863         /* TREE_NO_WARNING must be set if either the expression was
10864            parenthesized or it uses an operator such as >>= rather
10865            than plain assignment.  In the former case, it was already
10866            set and must be copied.  In the latter case,
10867            build_x_modify_expr sets it and it must not be reset
10868            here.  */
10869         if (TREE_NO_WARNING (t))
10870           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10871         return r;
10872       }
10873
10874     case ARROW_EXPR:
10875       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10876                                                 args, complain, in_decl);
10877       /* Remember that there was a reference to this entity.  */
10878       if (DECL_P (op1))
10879         mark_used (op1);
10880       return build_x_arrow (op1);
10881
10882     case NEW_EXPR:
10883       {
10884         tree init = RECUR (TREE_OPERAND (t, 3));
10885
10886         if (TREE_OPERAND (t, 3) && !init)
10887           /* If there was an initializer in the the original tree, but
10888              it instantiated to an empty list, then we should pass on
10889              VOID_ZERO_NODE to tell build_new that it was an empty
10890              initializer () rather than no initializer.  This can only
10891              happen when the initializer is a pack expansion whose
10892              parameter packs are of length zero.  */
10893           init = void_zero_node;
10894
10895         return build_new
10896           (RECUR (TREE_OPERAND (t, 0)),
10897            RECUR (TREE_OPERAND (t, 1)),
10898            RECUR (TREE_OPERAND (t, 2)),
10899            init,
10900            NEW_EXPR_USE_GLOBAL (t));
10901       }
10902
10903     case DELETE_EXPR:
10904      return delete_sanity
10905        (RECUR (TREE_OPERAND (t, 0)),
10906         RECUR (TREE_OPERAND (t, 1)),
10907         DELETE_EXPR_USE_VEC (t),
10908         DELETE_EXPR_USE_GLOBAL (t));
10909
10910     case COMPOUND_EXPR:
10911       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10912                                     RECUR (TREE_OPERAND (t, 1)));
10913
10914     case CALL_EXPR:
10915       {
10916         tree function;
10917         tree call_args;
10918         bool qualified_p;
10919         bool koenig_p;
10920
10921         function = CALL_EXPR_FN (t);
10922         /* When we parsed the expression,  we determined whether or
10923            not Koenig lookup should be performed.  */
10924         koenig_p = KOENIG_LOOKUP_P (t);
10925         if (TREE_CODE (function) == SCOPE_REF)
10926           {
10927             qualified_p = true;
10928             function = tsubst_qualified_id (function, args, complain, in_decl,
10929                                             /*done=*/false,
10930                                             /*address_p=*/false);
10931           }
10932         else
10933           {
10934             if (TREE_CODE (function) == COMPONENT_REF)
10935               {
10936                 tree op = TREE_OPERAND (function, 1);
10937
10938                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10939                                || (BASELINK_P (op)
10940                                    && BASELINK_QUALIFIED_P (op)));
10941               }
10942             else
10943               qualified_p = false;
10944
10945             function = tsubst_copy_and_build (function, args, complain,
10946                                               in_decl,
10947                                               !qualified_p,
10948                                               integral_constant_expression_p);
10949
10950             if (BASELINK_P (function))
10951               qualified_p = true;
10952           }
10953
10954         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10955         call_args = RECUR (CALL_EXPR_ARGS (t));
10956
10957         /* We do not perform argument-dependent lookup if normal
10958            lookup finds a non-function, in accordance with the
10959            expected resolution of DR 218.  */
10960         if (koenig_p
10961             && ((is_overloaded_fn (function)
10962                  /* If lookup found a member function, the Koenig lookup is
10963                     not appropriate, even if an unqualified-name was used
10964                     to denote the function.  */
10965                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10966                 || TREE_CODE (function) == IDENTIFIER_NODE))
10967           function = perform_koenig_lookup (function, call_args);
10968
10969         if (TREE_CODE (function) == IDENTIFIER_NODE)
10970           {
10971             unqualified_name_lookup_error (function);
10972             return error_mark_node;
10973           }
10974
10975         /* Remember that there was a reference to this entity.  */
10976         if (DECL_P (function))
10977           mark_used (function);
10978
10979         if (TREE_CODE (function) == OFFSET_REF)
10980           return build_offset_ref_call_from_tree (function, call_args);
10981         if (TREE_CODE (function) == COMPONENT_REF)
10982           {
10983             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10984               return finish_call_expr (function, call_args,
10985                                        /*disallow_virtual=*/false,
10986                                        /*koenig_p=*/false);
10987             else
10988               return (build_new_method_call
10989                       (TREE_OPERAND (function, 0),
10990                        TREE_OPERAND (function, 1),
10991                        call_args, NULL_TREE,
10992                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10993                        /*fn_p=*/NULL));
10994           }
10995         return finish_call_expr (function, call_args,
10996                                  /*disallow_virtual=*/qualified_p,
10997                                  koenig_p);
10998       }
10999
11000     case COND_EXPR:
11001       return build_x_conditional_expr
11002         (RECUR (TREE_OPERAND (t, 0)),
11003          RECUR (TREE_OPERAND (t, 1)),
11004          RECUR (TREE_OPERAND (t, 2)));
11005
11006     case PSEUDO_DTOR_EXPR:
11007       return finish_pseudo_destructor_expr
11008         (RECUR (TREE_OPERAND (t, 0)),
11009          RECUR (TREE_OPERAND (t, 1)),
11010          RECUR (TREE_OPERAND (t, 2)));
11011
11012     case TREE_LIST:
11013       {
11014         tree purpose, value, chain;
11015
11016         if (t == void_list_node)
11017           return t;
11018
11019         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
11020             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
11021           {
11022             /* We have pack expansions, so expand those and
11023                create a new list out of it.  */
11024             tree purposevec = NULL_TREE;
11025             tree valuevec = NULL_TREE;
11026             tree chain;
11027             int i, len = -1;
11028
11029             /* Expand the argument expressions.  */
11030             if (TREE_PURPOSE (t))
11031               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
11032                                                  complain, in_decl);
11033             if (TREE_VALUE (t))
11034               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
11035                                                complain, in_decl);
11036
11037             /* Build the rest of the list.  */
11038             chain = TREE_CHAIN (t);
11039             if (chain && chain != void_type_node)
11040               chain = RECUR (chain);
11041
11042             /* Determine the number of arguments.  */
11043             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
11044               {
11045                 len = TREE_VEC_LENGTH (purposevec);
11046                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
11047               }
11048             else if (TREE_CODE (valuevec) == TREE_VEC)
11049               len = TREE_VEC_LENGTH (valuevec);
11050             else
11051               {
11052                 /* Since we only performed a partial substitution into
11053                    the argument pack, we only return a single list
11054                    node.  */
11055                 if (purposevec == TREE_PURPOSE (t)
11056                     && valuevec == TREE_VALUE (t)
11057                     && chain == TREE_CHAIN (t))
11058                   return t;
11059
11060                 return tree_cons (purposevec, valuevec, chain);
11061               }
11062             
11063             /* Convert the argument vectors into a TREE_LIST */
11064             i = len;
11065             while (i > 0)
11066               {
11067                 /* Grab the Ith values.  */
11068                 i--;
11069                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
11070                                      : NULL_TREE;
11071                 value 
11072                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
11073                              : NULL_TREE;
11074
11075                 /* Build the list (backwards).  */
11076                 chain = tree_cons (purpose, value, chain);
11077               }
11078
11079             return chain;
11080           }
11081
11082         purpose = TREE_PURPOSE (t);
11083         if (purpose)
11084           purpose = RECUR (purpose);
11085         value = TREE_VALUE (t);
11086         if (value)
11087           value = RECUR (value);
11088         chain = TREE_CHAIN (t);
11089         if (chain && chain != void_type_node)
11090           chain = RECUR (chain);
11091         if (purpose == TREE_PURPOSE (t)
11092             && value == TREE_VALUE (t)
11093             && chain == TREE_CHAIN (t))
11094           return t;
11095         return tree_cons (purpose, value, chain);
11096       }
11097
11098     case COMPONENT_REF:
11099       {
11100         tree object;
11101         tree object_type;
11102         tree member;
11103
11104         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
11105                                                      args, complain, in_decl);
11106         /* Remember that there was a reference to this entity.  */
11107         if (DECL_P (object))
11108           mark_used (object);
11109         object_type = TREE_TYPE (object);
11110
11111         member = TREE_OPERAND (t, 1);
11112         if (BASELINK_P (member))
11113           member = tsubst_baselink (member,
11114                                     non_reference (TREE_TYPE (object)),
11115                                     args, complain, in_decl);
11116         else
11117           member = tsubst_copy (member, args, complain, in_decl);
11118         if (member == error_mark_node)
11119           return error_mark_node;
11120
11121         if (object_type && !CLASS_TYPE_P (object_type))
11122           {
11123             if (SCALAR_TYPE_P (object_type))
11124               {
11125                 tree s = NULL_TREE;
11126                 tree dtor = member;
11127
11128                 if (TREE_CODE (dtor) == SCOPE_REF)
11129                   {
11130                     s = TREE_OPERAND (dtor, 0);
11131                     dtor = TREE_OPERAND (dtor, 1);
11132                   }
11133                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
11134                   {
11135                     dtor = TREE_OPERAND (dtor, 0);
11136                     if (TYPE_P (dtor))
11137                       return finish_pseudo_destructor_expr (object, s, dtor);
11138                   }
11139               }
11140           }
11141         else if (TREE_CODE (member) == SCOPE_REF
11142                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
11143           {
11144             tree tmpl;
11145             tree args;
11146
11147             /* Lookup the template functions now that we know what the
11148                scope is.  */
11149             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
11150             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
11151             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
11152                                             /*is_type_p=*/false,
11153                                             /*complain=*/false);
11154             if (BASELINK_P (member))
11155               {
11156                 BASELINK_FUNCTIONS (member)
11157                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
11158                               args);
11159                 member = (adjust_result_of_qualified_name_lookup
11160                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
11161                            object_type));
11162               }
11163             else
11164               {
11165                 qualified_name_lookup_error (object_type, tmpl, member);
11166                 return error_mark_node;
11167               }
11168           }
11169         else if (TREE_CODE (member) == SCOPE_REF
11170                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
11171                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
11172           {
11173             if (complain & tf_error)
11174               {
11175                 if (TYPE_P (TREE_OPERAND (member, 0)))
11176                   error ("%qT is not a class or namespace",
11177                          TREE_OPERAND (member, 0));
11178                 else
11179                   error ("%qD is not a class or namespace",
11180                          TREE_OPERAND (member, 0));
11181               }
11182             return error_mark_node;
11183           }
11184         else if (TREE_CODE (member) == FIELD_DECL)
11185           return finish_non_static_data_member (member, object, NULL_TREE);
11186
11187         return finish_class_member_access_expr (object, member,
11188                                                 /*template_p=*/false);
11189       }
11190
11191     case THROW_EXPR:
11192       return build_throw
11193         (RECUR (TREE_OPERAND (t, 0)));
11194
11195     case CONSTRUCTOR:
11196       {
11197         VEC(constructor_elt,gc) *n;
11198         constructor_elt *ce;
11199         unsigned HOST_WIDE_INT idx;
11200         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11201         bool process_index_p;
11202         int newlen;
11203         bool need_copy_p = false;
11204
11205         if (type == error_mark_node)
11206           return error_mark_node;
11207
11208         /* digest_init will do the wrong thing if we let it.  */
11209         if (type && TYPE_PTRMEMFUNC_P (type))
11210           return t;
11211
11212         /* We do not want to process the index of aggregate
11213            initializers as they are identifier nodes which will be
11214            looked up by digest_init.  */
11215         process_index_p = !(type && IS_AGGR_TYPE (type));
11216
11217         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
11218         newlen = VEC_length (constructor_elt, n);
11219         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
11220           {
11221             if (ce->index && process_index_p)
11222               ce->index = RECUR (ce->index);
11223
11224             if (PACK_EXPANSION_P (ce->value))
11225               {
11226                 /* Substitute into the pack expansion.  */
11227                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
11228                                                   in_decl);
11229
11230                 if (ce->value == error_mark_node)
11231                   ;
11232                 else if (TREE_VEC_LENGTH (ce->value) == 1)
11233                   /* Just move the argument into place.  */
11234                   ce->value = TREE_VEC_ELT (ce->value, 0);
11235                 else
11236                   {
11237                     /* Update the length of the final CONSTRUCTOR
11238                        arguments vector, and note that we will need to
11239                        copy.*/
11240                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
11241                     need_copy_p = true;
11242                   }
11243               }
11244             else
11245               ce->value = RECUR (ce->value);
11246           }
11247
11248         if (need_copy_p)
11249           {
11250             VEC(constructor_elt,gc) *old_n = n;
11251
11252             n = VEC_alloc (constructor_elt, gc, newlen);
11253             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
11254                  idx++)
11255               {
11256                 if (TREE_CODE (ce->value) == TREE_VEC)
11257                   {
11258                     int i, len = TREE_VEC_LENGTH (ce->value);
11259                     for (i = 0; i < len; ++i)
11260                       CONSTRUCTOR_APPEND_ELT (n, 0,
11261                                               TREE_VEC_ELT (ce->value, i));
11262                   }
11263                 else
11264                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
11265               }
11266           }
11267
11268         if (TREE_HAS_CONSTRUCTOR (t))
11269           return finish_compound_literal (type, n);
11270
11271         return build_constructor (NULL_TREE, n);
11272       }
11273
11274     case TYPEID_EXPR:
11275       {
11276         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
11277         if (TYPE_P (operand_0))
11278           return get_typeid (operand_0);
11279         return build_typeid (operand_0);
11280       }
11281
11282     case VAR_DECL:
11283       if (!args)
11284         return t;
11285       /* Fall through */
11286
11287     case PARM_DECL:
11288       {
11289         tree r = tsubst_copy (t, args, complain, in_decl);
11290
11291         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
11292           /* If the original type was a reference, we'll be wrapped in
11293              the appropriate INDIRECT_REF.  */
11294           r = convert_from_reference (r);
11295         return r;
11296       }
11297
11298     case VA_ARG_EXPR:
11299       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
11300                              tsubst_copy (TREE_TYPE (t), args, complain,
11301                                           in_decl));
11302
11303     case OFFSETOF_EXPR:
11304       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
11305
11306     case TRAIT_EXPR:
11307       {
11308         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
11309                                   complain, in_decl);
11310
11311         tree type2 = TRAIT_EXPR_TYPE2 (t);
11312         if (type2)
11313           type2 = tsubst_copy (type2, args, complain, in_decl);
11314         
11315         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
11316       }
11317
11318     case STMT_EXPR:
11319       {
11320         tree old_stmt_expr = cur_stmt_expr;
11321         tree stmt_expr = begin_stmt_expr ();
11322
11323         cur_stmt_expr = stmt_expr;
11324         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
11325                      integral_constant_expression_p);
11326         stmt_expr = finish_stmt_expr (stmt_expr, false);
11327         cur_stmt_expr = old_stmt_expr;
11328
11329         return stmt_expr;
11330       }
11331
11332     case CONST_DECL:
11333       t = tsubst_copy (t, args, complain, in_decl);
11334       /* As in finish_id_expression, we resolve enumeration constants
11335          to their underlying values.  */
11336       if (TREE_CODE (t) == CONST_DECL)
11337         {
11338           used_types_insert (TREE_TYPE (t));
11339           return DECL_INITIAL (t);
11340         }
11341       return t;
11342
11343     default:
11344       /* Handle Objective-C++ constructs, if appropriate.  */
11345       {
11346         tree subst
11347           = objcp_tsubst_copy_and_build (t, args, complain,
11348                                          in_decl, /*function_p=*/false);
11349         if (subst)
11350           return subst;
11351       }
11352       return tsubst_copy (t, args, complain, in_decl);
11353     }
11354
11355 #undef RECUR
11356 }
11357
11358 /* Verify that the instantiated ARGS are valid. For type arguments,
11359    make sure that the type's linkage is ok. For non-type arguments,
11360    make sure they are constants if they are integral or enumerations.
11361    Emit an error under control of COMPLAIN, and return TRUE on error.  */
11362
11363 static bool
11364 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
11365 {
11366   int ix, len = DECL_NTPARMS (tmpl);
11367   bool result = false;
11368
11369   for (ix = 0; ix != len; ix++)
11370     {
11371       tree t = TREE_VEC_ELT (args, ix);
11372
11373       if (TYPE_P (t))
11374         {
11375           /* [basic.link]: A name with no linkage (notably, the name
11376              of a class or enumeration declared in a local scope)
11377              shall not be used to declare an entity with linkage.
11378              This implies that names with no linkage cannot be used as
11379              template arguments.  */
11380           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
11381
11382           if (nt)
11383             {
11384               /* DR 488 makes use of a type with no linkage cause
11385                  type deduction to fail.  */
11386               if (complain & tf_error)
11387                 {
11388                   if (TYPE_ANONYMOUS_P (nt))
11389                     error ("%qT is/uses anonymous type", t);
11390                   else
11391                     error ("template argument for %qD uses local type %qT",
11392                            tmpl, t);
11393                 }
11394               result = true;
11395             }
11396           /* In order to avoid all sorts of complications, we do not
11397              allow variably-modified types as template arguments.  */
11398           else if (variably_modified_type_p (t, NULL_TREE))
11399             {
11400               if (complain & tf_error)
11401                 error ("%qT is a variably modified type", t);
11402               result = true;
11403             }
11404         }
11405       /* A non-type argument of integral or enumerated type must be a
11406          constant.  */
11407       else if (TREE_TYPE (t)
11408                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
11409                && !TREE_CONSTANT (t))
11410         {
11411           if (complain & tf_error)
11412             error ("integral expression %qE is not constant", t);
11413           result = true;
11414         }
11415     }
11416   if (result && (complain & tf_error))
11417     error ("  trying to instantiate %qD", tmpl);
11418   return result;
11419 }
11420
11421 /* Instantiate the indicated variable or function template TMPL with
11422    the template arguments in TARG_PTR.  */
11423
11424 tree
11425 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11426 {
11427   tree fndecl;
11428   tree gen_tmpl;
11429   tree spec;
11430   HOST_WIDE_INT saved_processing_template_decl;
11431
11432   if (tmpl == error_mark_node)
11433     return error_mark_node;
11434
11435   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11436
11437   /* If this function is a clone, handle it specially.  */
11438   if (DECL_CLONED_FUNCTION_P (tmpl))
11439     {
11440       tree spec;
11441       tree clone;
11442
11443       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11444                                    complain);
11445       if (spec == error_mark_node)
11446         return error_mark_node;
11447
11448       /* Look for the clone.  */
11449       FOR_EACH_CLONE (clone, spec)
11450         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11451           return clone;
11452       /* We should always have found the clone by now.  */
11453       gcc_unreachable ();
11454       return NULL_TREE;
11455     }
11456
11457   /* Check to see if we already have this specialization.  */
11458   spec = retrieve_specialization (tmpl, targ_ptr,
11459                                   /*class_specializations_p=*/false);
11460   if (spec != NULL_TREE)
11461     return spec;
11462
11463   gen_tmpl = most_general_template (tmpl);
11464   if (tmpl != gen_tmpl)
11465     {
11466       /* The TMPL is a partial instantiation.  To get a full set of
11467          arguments we must add the arguments used to perform the
11468          partial instantiation.  */
11469       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11470                                               targ_ptr);
11471
11472       /* Check to see if we already have this specialization.  */
11473       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11474                                       /*class_specializations_p=*/false);
11475       if (spec != NULL_TREE)
11476         return spec;
11477     }
11478
11479   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11480                                complain))
11481     return error_mark_node;
11482
11483   /* We are building a FUNCTION_DECL, during which the access of its
11484      parameters and return types have to be checked.  However this
11485      FUNCTION_DECL which is the desired context for access checking
11486      is not built yet.  We solve this chicken-and-egg problem by
11487      deferring all checks until we have the FUNCTION_DECL.  */
11488   push_deferring_access_checks (dk_deferred);
11489
11490   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11491      (because, for example, we have encountered a non-dependent
11492      function call in the body of a template function and must now
11493      determine which of several overloaded functions will be called),
11494      within the instantiation itself we are not processing a
11495      template.  */  
11496   saved_processing_template_decl = processing_template_decl;
11497   processing_template_decl = 0;
11498   /* Substitute template parameters to obtain the specialization.  */
11499   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11500                    targ_ptr, complain, gen_tmpl);
11501   processing_template_decl = saved_processing_template_decl;
11502   if (fndecl == error_mark_node)
11503     return error_mark_node;
11504
11505   /* Now we know the specialization, compute access previously
11506      deferred.  */
11507   push_access_scope (fndecl);
11508   perform_deferred_access_checks ();
11509   pop_access_scope (fndecl);
11510   pop_deferring_access_checks ();
11511
11512   /* The DECL_TI_TEMPLATE should always be the immediate parent
11513      template, not the most general template.  */
11514   DECL_TI_TEMPLATE (fndecl) = tmpl;
11515
11516   /* If we've just instantiated the main entry point for a function,
11517      instantiate all the alternate entry points as well.  We do this
11518      by cloning the instantiation of the main entry point, not by
11519      instantiating the template clones.  */
11520   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11521     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11522
11523   return fndecl;
11524 }
11525
11526 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11527    arguments that are being used when calling it.  TARGS is a vector
11528    into which the deduced template arguments are placed.
11529
11530    Return zero for success, 2 for an incomplete match that doesn't resolve
11531    all the types, and 1 for complete failure.  An error message will be
11532    printed only for an incomplete match.
11533
11534    If FN is a conversion operator, or we are trying to produce a specific
11535    specialization, RETURN_TYPE is the return type desired.
11536
11537    The EXPLICIT_TARGS are explicit template arguments provided via a
11538    template-id.
11539
11540    The parameter STRICT is one of:
11541
11542    DEDUCE_CALL:
11543      We are deducing arguments for a function call, as in
11544      [temp.deduct.call].
11545
11546    DEDUCE_CONV:
11547      We are deducing arguments for a conversion function, as in
11548      [temp.deduct.conv].
11549
11550    DEDUCE_EXACT:
11551      We are deducing arguments when doing an explicit instantiation
11552      as in [temp.explicit], when determining an explicit specialization
11553      as in [temp.expl.spec], or when taking the address of a function
11554      template, as in [temp.deduct.funcaddr].  */
11555
11556 int
11557 fn_type_unification (tree fn,
11558                      tree explicit_targs,
11559                      tree targs,
11560                      tree args,
11561                      tree return_type,
11562                      unification_kind_t strict,
11563                      int flags)
11564 {
11565   tree parms;
11566   tree fntype;
11567   int result;
11568   bool incomplete_argument_packs_p = false;
11569
11570   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11571
11572   fntype = TREE_TYPE (fn);
11573   if (explicit_targs)
11574     {
11575       /* [temp.deduct]
11576
11577          The specified template arguments must match the template
11578          parameters in kind (i.e., type, nontype, template), and there
11579          must not be more arguments than there are parameters;
11580          otherwise type deduction fails.
11581
11582          Nontype arguments must match the types of the corresponding
11583          nontype template parameters, or must be convertible to the
11584          types of the corresponding nontype parameters as specified in
11585          _temp.arg.nontype_, otherwise type deduction fails.
11586
11587          All references in the function type of the function template
11588          to the corresponding template parameters are replaced by the
11589          specified template argument values.  If a substitution in a
11590          template parameter or in the function type of the function
11591          template results in an invalid type, type deduction fails.  */
11592       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11593       int i, len = TREE_VEC_LENGTH (tparms);
11594       tree converted_args;
11595       bool incomplete = false;
11596
11597       if (explicit_targs == error_mark_node)
11598         return 1;
11599
11600       converted_args
11601         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11602                                   /*require_all_args=*/false,
11603                                   /*use_default_args=*/false));
11604       if (converted_args == error_mark_node)
11605         return 1;
11606
11607       /* Substitute the explicit args into the function type.  This is
11608          necessary so that, for instance, explicitly declared function
11609          arguments can match null pointed constants.  If we were given
11610          an incomplete set of explicit args, we must not do semantic
11611          processing during substitution as we could create partial
11612          instantiations.  */
11613       for (i = 0; i < len; i++)
11614         {
11615           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11616           bool parameter_pack = false;
11617
11618           /* Dig out the actual parm.  */
11619           if (TREE_CODE (parm) == TYPE_DECL
11620               || TREE_CODE (parm) == TEMPLATE_DECL)
11621             {
11622               parm = TREE_TYPE (parm);
11623               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11624             }
11625           else if (TREE_CODE (parm) == PARM_DECL)
11626             {
11627               parm = DECL_INITIAL (parm);
11628               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11629             }
11630
11631           if (parameter_pack)
11632             {
11633               int level, idx;
11634               tree targ;
11635               template_parm_level_and_index (parm, &level, &idx);
11636
11637               /* Mark the argument pack as "incomplete". We could
11638                  still deduce more arguments during unification.  */
11639               targ = TMPL_ARG (converted_args, level, idx);
11640               if (targ)
11641                 {
11642                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11643                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11644                     = ARGUMENT_PACK_ARGS (targ);
11645                 }
11646
11647               /* We have some incomplete argument packs.  */
11648               incomplete_argument_packs_p = true;
11649             }
11650         }
11651
11652       if (incomplete_argument_packs_p)
11653         /* Any substitution is guaranteed to be incomplete if there
11654            are incomplete argument packs, because we can still deduce
11655            more arguments.  */
11656         incomplete = 1;
11657       else
11658         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11659
11660       processing_template_decl += incomplete;
11661       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11662       processing_template_decl -= incomplete;
11663
11664       if (fntype == error_mark_node)
11665         return 1;
11666
11667       /* Place the explicitly specified arguments in TARGS.  */
11668       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11669         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11670     }
11671
11672   /* Never do unification on the 'this' parameter.  */
11673   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11674
11675   if (return_type)
11676     {
11677       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11678       args = tree_cons (NULL_TREE, return_type, args);
11679     }
11680
11681   /* We allow incomplete unification without an error message here
11682      because the standard doesn't seem to explicitly prohibit it.  Our
11683      callers must be ready to deal with unification failures in any
11684      event.  */
11685   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11686                                   targs, parms, args, /*subr=*/0,
11687                                   strict, flags);
11688
11689   if (result == 0 && incomplete_argument_packs_p)
11690     {
11691       int i, len = NUM_TMPL_ARGS (targs);
11692
11693       /* Clear the "incomplete" flags on all argument packs.  */
11694       for (i = 0; i < len; i++)
11695         {
11696           tree arg = TREE_VEC_ELT (targs, i);
11697           if (ARGUMENT_PACK_P (arg))
11698             {
11699               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11700               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11701             }
11702         }
11703     }
11704
11705   /* Now that we have bindings for all of the template arguments,
11706      ensure that the arguments deduced for the template template
11707      parameters have compatible template parameter lists.  We cannot
11708      check this property before we have deduced all template
11709      arguments, because the template parameter types of a template
11710      template parameter might depend on prior template parameters
11711      deduced after the template template parameter.  The following
11712      ill-formed example illustrates this issue:
11713
11714        template<typename T, template<T> class C> void f(C<5>, T);
11715
11716        template<int N> struct X {};
11717
11718        void g() {
11719          f(X<5>(), 5l); // error: template argument deduction fails
11720        }
11721
11722      The template parameter list of 'C' depends on the template type
11723      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
11724      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
11725      time that we deduce 'C'.  */
11726   if (result == 0
11727       && !template_template_parm_bindings_ok_p 
11728            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
11729     return 1;
11730
11731   if (result == 0)
11732     /* All is well so far.  Now, check:
11733
11734        [temp.deduct]
11735
11736        When all template arguments have been deduced, all uses of
11737        template parameters in nondeduced contexts are replaced with
11738        the corresponding deduced argument values.  If the
11739        substitution results in an invalid type, as described above,
11740        type deduction fails.  */
11741     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11742         == error_mark_node)
11743       return 1;
11744
11745   return result;
11746 }
11747
11748 /* Adjust types before performing type deduction, as described in
11749    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11750    sections are symmetric.  PARM is the type of a function parameter
11751    or the return type of the conversion function.  ARG is the type of
11752    the argument passed to the call, or the type of the value
11753    initialized with the result of the conversion function.
11754    ARG_EXPR is the original argument expression, which may be null.  */
11755
11756 static int
11757 maybe_adjust_types_for_deduction (unification_kind_t strict,
11758                                   tree* parm,
11759                                   tree* arg,
11760                                   tree arg_expr)
11761 {
11762   int result = 0;
11763
11764   switch (strict)
11765     {
11766     case DEDUCE_CALL:
11767       break;
11768
11769     case DEDUCE_CONV:
11770       {
11771         /* Swap PARM and ARG throughout the remainder of this
11772            function; the handling is precisely symmetric since PARM
11773            will initialize ARG rather than vice versa.  */
11774         tree* temp = parm;
11775         parm = arg;
11776         arg = temp;
11777         break;
11778       }
11779
11780     case DEDUCE_EXACT:
11781       /* There is nothing to do in this case.  */
11782       return 0;
11783
11784     default:
11785       gcc_unreachable ();
11786     }
11787
11788   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11789     {
11790       /* [temp.deduct.call]
11791
11792          If P is not a reference type:
11793
11794          --If A is an array type, the pointer type produced by the
11795          array-to-pointer standard conversion (_conv.array_) is
11796          used in place of A for type deduction; otherwise,
11797
11798          --If A is a function type, the pointer type produced by
11799          the function-to-pointer standard conversion
11800          (_conv.func_) is used in place of A for type deduction;
11801          otherwise,
11802
11803          --If A is a cv-qualified type, the top level
11804          cv-qualifiers of A's type are ignored for type
11805          deduction.  */
11806       if (TREE_CODE (*arg) == ARRAY_TYPE)
11807         *arg = build_pointer_type (TREE_TYPE (*arg));
11808       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11809         *arg = build_pointer_type (*arg);
11810       else
11811         *arg = TYPE_MAIN_VARIANT (*arg);
11812     }
11813
11814   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11815      of the form T&&, where T is a template parameter, and the argument
11816      is an lvalue, T is deduced as A& */
11817   if (TREE_CODE (*parm) == REFERENCE_TYPE
11818       && TYPE_REF_IS_RVALUE (*parm)
11819       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11820       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11821       && arg_expr && real_lvalue_p (arg_expr))
11822     *arg = build_reference_type (*arg);
11823
11824   /* [temp.deduct.call]
11825
11826      If P is a cv-qualified type, the top level cv-qualifiers
11827      of P's type are ignored for type deduction.  If P is a
11828      reference type, the type referred to by P is used for
11829      type deduction.  */
11830   *parm = TYPE_MAIN_VARIANT (*parm);
11831   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11832     {
11833       *parm = TREE_TYPE (*parm);
11834       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11835     }
11836
11837   /* DR 322. For conversion deduction, remove a reference type on parm
11838      too (which has been swapped into ARG).  */
11839   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11840     *arg = TREE_TYPE (*arg);
11841
11842   return result;
11843 }
11844
11845 /* Most parms like fn_type_unification.
11846
11847    If SUBR is 1, we're being called recursively (to unify the
11848    arguments of a function or method parameter of a function
11849    template). */
11850
11851 static int
11852 type_unification_real (tree tparms,
11853                        tree targs,
11854                        tree xparms,
11855                        tree xargs,
11856                        int subr,
11857                        unification_kind_t strict,
11858                        int flags)
11859 {
11860   tree parm, arg, arg_expr;
11861   int i;
11862   int ntparms = TREE_VEC_LENGTH (tparms);
11863   int sub_strict;
11864   int saw_undeduced = 0;
11865   tree parms, args;
11866
11867   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11868   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11869   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11870   gcc_assert (ntparms > 0);
11871
11872   switch (strict)
11873     {
11874     case DEDUCE_CALL:
11875       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11876                     | UNIFY_ALLOW_DERIVED);
11877       break;
11878
11879     case DEDUCE_CONV:
11880       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11881       break;
11882
11883     case DEDUCE_EXACT:
11884       sub_strict = UNIFY_ALLOW_NONE;
11885       break;
11886
11887     default:
11888       gcc_unreachable ();
11889     }
11890
11891  again:
11892   parms = xparms;
11893   args = xargs;
11894
11895   while (parms && parms != void_list_node
11896          && args && args != void_list_node)
11897     {
11898       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11899         break;
11900
11901       parm = TREE_VALUE (parms);
11902       parms = TREE_CHAIN (parms);
11903       arg = TREE_VALUE (args);
11904       args = TREE_CHAIN (args);
11905       arg_expr = NULL;
11906
11907       if (arg == error_mark_node)
11908         return 1;
11909       if (arg == unknown_type_node)
11910         /* We can't deduce anything from this, but we might get all the
11911            template args from other function args.  */
11912         continue;
11913
11914       /* Conversions will be performed on a function argument that
11915          corresponds with a function parameter that contains only
11916          non-deducible template parameters and explicitly specified
11917          template parameters.  */
11918       if (!uses_template_parms (parm))
11919         {
11920           tree type;
11921
11922           if (!TYPE_P (arg))
11923             type = TREE_TYPE (arg);
11924           else
11925             type = arg;
11926
11927           if (same_type_p (parm, type))
11928             continue;
11929           if (strict != DEDUCE_EXACT
11930               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11931                                   flags))
11932             continue;
11933
11934           return 1;
11935         }
11936
11937       if (!TYPE_P (arg))
11938         {
11939           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11940           if (type_unknown_p (arg))
11941             {
11942               /* [temp.deduct.type] 
11943
11944                  A template-argument can be deduced from a pointer to
11945                  function or pointer to member function argument if
11946                  the set of overloaded functions does not contain
11947                  function templates and at most one of a set of
11948                  overloaded functions provides a unique match.  */
11949               if (resolve_overloaded_unification
11950                   (tparms, targs, parm, arg, strict, sub_strict))
11951                 continue;
11952
11953               return 1;
11954             }
11955           arg_expr = arg;
11956           arg = unlowered_expr_type (arg);
11957           if (arg == error_mark_node)
11958             return 1;
11959         }
11960
11961       {
11962         int arg_strict = sub_strict;
11963
11964         if (!subr)
11965           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11966                                                           arg_expr);
11967
11968         if (unify (tparms, targs, parm, arg, arg_strict))
11969           return 1;
11970       }
11971     }
11972
11973
11974   if (parms 
11975       && parms != void_list_node
11976       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11977     {
11978       /* Unify the remaining arguments with the pack expansion type.  */
11979       tree argvec;
11980       tree parmvec = make_tree_vec (1);
11981       int len = 0;
11982       tree t;
11983
11984       /* Count the number of arguments that remain.  */
11985       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11986         len++;
11987         
11988       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11989       argvec = make_tree_vec (len);
11990       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11991         {
11992           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11993           ++i;
11994         }
11995
11996       /* Copy the parameter into parmvec.  */
11997       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11998       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11999                                 /*call_args_p=*/true, /*subr=*/subr))
12000         return 1;
12001
12002       /* Advance to the end of the list of parameters.  */
12003       parms = TREE_CHAIN (parms);
12004     }
12005
12006   /* Fail if we've reached the end of the parm list, and more args
12007      are present, and the parm list isn't variadic.  */
12008   if (args && args != void_list_node && parms == void_list_node)
12009     return 1;
12010   /* Fail if parms are left and they don't have default values.  */
12011   if (parms && parms != void_list_node
12012       && TREE_PURPOSE (parms) == NULL_TREE)
12013     return 1;
12014
12015   if (!subr)
12016     for (i = 0; i < ntparms; i++)
12017       if (!TREE_VEC_ELT (targs, i))
12018         {
12019           tree tparm;
12020
12021           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
12022             continue;
12023
12024           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
12025
12026           /* If this is an undeduced nontype parameter that depends on
12027              a type parameter, try another pass; its type may have been
12028              deduced from a later argument than the one from which
12029              this parameter can be deduced.  */
12030           if (TREE_CODE (tparm) == PARM_DECL
12031               && uses_template_parms (TREE_TYPE (tparm))
12032               && !saw_undeduced++)
12033             goto again;
12034
12035           /* Core issue #226 (C++0x) [temp.deduct]:
12036
12037                If a template argument has not been deduced, its
12038                default template argument, if any, is used. 
12039
12040              When we are in C++98 mode, TREE_PURPOSE will either
12041              be NULL_TREE or ERROR_MARK_NODE, so we do not need
12042              to explicitly check cxx_dialect here.  */
12043           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
12044             {
12045               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
12046                                  targs, tf_none, NULL_TREE);
12047               if (arg == error_mark_node)
12048                 return 1;
12049               else
12050                 {
12051                   TREE_VEC_ELT (targs, i) = arg;
12052                   continue;
12053                 }
12054             }
12055
12056           /* If the type parameter is a parameter pack, then it will
12057              be deduced to an empty parameter pack.  */
12058           if (template_parameter_pack_p (tparm))
12059             {
12060               tree arg;
12061
12062               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
12063                 {
12064                   arg = make_node (NONTYPE_ARGUMENT_PACK);
12065                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
12066                   TREE_CONSTANT (arg) = 1;
12067                 }
12068               else
12069                 arg = make_node (TYPE_ARGUMENT_PACK);
12070
12071               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
12072
12073               TREE_VEC_ELT (targs, i) = arg;
12074               continue;
12075             }
12076
12077           return 2;
12078         }
12079
12080   return 0;
12081 }
12082
12083 /* Subroutine of type_unification_real.  Args are like the variables
12084    at the call site.  ARG is an overloaded function (or template-id);
12085    we try deducing template args from each of the overloads, and if
12086    only one succeeds, we go with that.  Modifies TARGS and returns
12087    true on success.  */
12088
12089 static bool
12090 resolve_overloaded_unification (tree tparms,
12091                                 tree targs,
12092                                 tree parm,
12093                                 tree arg,
12094                                 unification_kind_t strict,
12095                                 int sub_strict)
12096 {
12097   tree tempargs = copy_node (targs);
12098   int good = 0;
12099   bool addr_p;
12100
12101   if (TREE_CODE (arg) == ADDR_EXPR)
12102     {
12103       arg = TREE_OPERAND (arg, 0);
12104       addr_p = true;
12105     }
12106   else
12107     addr_p = false;
12108
12109   if (TREE_CODE (arg) == COMPONENT_REF)
12110     /* Handle `&x' where `x' is some static or non-static member
12111        function name.  */
12112     arg = TREE_OPERAND (arg, 1);
12113
12114   if (TREE_CODE (arg) == OFFSET_REF)
12115     arg = TREE_OPERAND (arg, 1);
12116
12117   /* Strip baselink information.  */
12118   if (BASELINK_P (arg))
12119     arg = BASELINK_FUNCTIONS (arg);
12120
12121   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
12122     {
12123       /* If we got some explicit template args, we need to plug them into
12124          the affected templates before we try to unify, in case the
12125          explicit args will completely resolve the templates in question.  */
12126
12127       tree expl_subargs = TREE_OPERAND (arg, 1);
12128       arg = TREE_OPERAND (arg, 0);
12129
12130       for (; arg; arg = OVL_NEXT (arg))
12131         {
12132           tree fn = OVL_CURRENT (arg);
12133           tree subargs, elem;
12134
12135           if (TREE_CODE (fn) != TEMPLATE_DECL)
12136             continue;
12137
12138           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
12139                                   expl_subargs, /*check_ret=*/false);
12140           if (subargs)
12141             {
12142               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
12143               good += try_one_overload (tparms, targs, tempargs, parm,
12144                                         elem, strict, sub_strict, addr_p);
12145             }
12146         }
12147     }
12148   else if (TREE_CODE (arg) != OVERLOAD
12149            && TREE_CODE (arg) != FUNCTION_DECL)
12150     /* If ARG is, for example, "(0, &f)" then its type will be unknown
12151        -- but the deduction does not succeed because the expression is
12152        not just the function on its own.  */
12153     return false;
12154   else
12155     for (; arg; arg = OVL_NEXT (arg))
12156       good += try_one_overload (tparms, targs, tempargs, parm,
12157                                 TREE_TYPE (OVL_CURRENT (arg)),
12158                                 strict, sub_strict, addr_p);
12159
12160   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12161      to function or pointer to member function argument if the set of
12162      overloaded functions does not contain function templates and at most
12163      one of a set of overloaded functions provides a unique match.
12164
12165      So if we found multiple possibilities, we return success but don't
12166      deduce anything.  */
12167
12168   if (good == 1)
12169     {
12170       int i = TREE_VEC_LENGTH (targs);
12171       for (; i--; )
12172         if (TREE_VEC_ELT (tempargs, i))
12173           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
12174     }
12175   if (good)
12176     return true;
12177
12178   return false;
12179 }
12180
12181 /* Subroutine of resolve_overloaded_unification; does deduction for a single
12182    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
12183    different overloads deduce different arguments for a given parm.
12184    ADDR_P is true if the expression for which deduction is being
12185    performed was of the form "& fn" rather than simply "fn".
12186
12187    Returns 1 on success.  */
12188
12189 static int
12190 try_one_overload (tree tparms,
12191                   tree orig_targs,
12192                   tree targs,
12193                   tree parm,
12194                   tree arg,
12195                   unification_kind_t strict,
12196                   int sub_strict,
12197                   bool addr_p)
12198 {
12199   int nargs;
12200   tree tempargs;
12201   int i;
12202
12203   /* [temp.deduct.type] A template-argument can be deduced from a pointer
12204      to function or pointer to member function argument if the set of
12205      overloaded functions does not contain function templates and at most
12206      one of a set of overloaded functions provides a unique match.
12207
12208      So if this is a template, just return success.  */
12209
12210   if (uses_template_parms (arg))
12211     return 1;
12212
12213   if (TREE_CODE (arg) == METHOD_TYPE)
12214     arg = build_ptrmemfunc_type (build_pointer_type (arg));
12215   else if (addr_p)
12216     arg = build_pointer_type (arg);
12217
12218   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12219
12220   /* We don't copy orig_targs for this because if we have already deduced
12221      some template args from previous args, unify would complain when we
12222      try to deduce a template parameter for the same argument, even though
12223      there isn't really a conflict.  */
12224   nargs = TREE_VEC_LENGTH (targs);
12225   tempargs = make_tree_vec (nargs);
12226
12227   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
12228     return 0;
12229
12230   /* First make sure we didn't deduce anything that conflicts with
12231      explicitly specified args.  */
12232   for (i = nargs; i--; )
12233     {
12234       tree elt = TREE_VEC_ELT (tempargs, i);
12235       tree oldelt = TREE_VEC_ELT (orig_targs, i);
12236
12237       if (!elt)
12238         /*NOP*/;
12239       else if (uses_template_parms (elt))
12240         /* Since we're unifying against ourselves, we will fill in
12241            template args used in the function parm list with our own
12242            template parms.  Discard them.  */
12243         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
12244       else if (oldelt && !template_args_equal (oldelt, elt))
12245         return 0;
12246     }
12247
12248   for (i = nargs; i--; )
12249     {
12250       tree elt = TREE_VEC_ELT (tempargs, i);
12251
12252       if (elt)
12253         TREE_VEC_ELT (targs, i) = elt;
12254     }
12255
12256   return 1;
12257 }
12258
12259 /* PARM is a template class (perhaps with unbound template
12260    parameters).  ARG is a fully instantiated type.  If ARG can be
12261    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
12262    TARGS are as for unify.  */
12263
12264 static tree
12265 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
12266 {
12267   tree copy_of_targs;
12268
12269   if (!CLASSTYPE_TEMPLATE_INFO (arg)
12270       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
12271           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
12272     return NULL_TREE;
12273
12274   /* We need to make a new template argument vector for the call to
12275      unify.  If we used TARGS, we'd clutter it up with the result of
12276      the attempted unification, even if this class didn't work out.
12277      We also don't want to commit ourselves to all the unifications
12278      we've already done, since unification is supposed to be done on
12279      an argument-by-argument basis.  In other words, consider the
12280      following pathological case:
12281
12282        template <int I, int J, int K>
12283        struct S {};
12284
12285        template <int I, int J>
12286        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
12287
12288        template <int I, int J, int K>
12289        void f(S<I, J, K>, S<I, I, I>);
12290
12291        void g() {
12292          S<0, 0, 0> s0;
12293          S<0, 1, 2> s2;
12294
12295          f(s0, s2);
12296        }
12297
12298      Now, by the time we consider the unification involving `s2', we
12299      already know that we must have `f<0, 0, 0>'.  But, even though
12300      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
12301      because there are two ways to unify base classes of S<0, 1, 2>
12302      with S<I, I, I>.  If we kept the already deduced knowledge, we
12303      would reject the possibility I=1.  */
12304   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
12305
12306   /* If unification failed, we're done.  */
12307   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
12308              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
12309     return NULL_TREE;
12310
12311   return arg;
12312 }
12313
12314 /* Given a template type PARM and a class type ARG, find the unique
12315    base type in ARG that is an instance of PARM.  We do not examine
12316    ARG itself; only its base-classes.  If there is not exactly one
12317    appropriate base class, return NULL_TREE.  PARM may be the type of
12318    a partial specialization, as well as a plain template type.  Used
12319    by unify.  */
12320
12321 static tree
12322 get_template_base (tree tparms, tree targs, tree parm, tree arg)
12323 {
12324   tree rval = NULL_TREE;
12325   tree binfo;
12326
12327   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
12328
12329   binfo = TYPE_BINFO (complete_type (arg));
12330   if (!binfo)
12331     /* The type could not be completed.  */
12332     return NULL_TREE;
12333
12334   /* Walk in inheritance graph order.  The search order is not
12335      important, and this avoids multiple walks of virtual bases.  */
12336   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
12337     {
12338       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
12339
12340       if (r)
12341         {
12342           /* If there is more than one satisfactory baseclass, then:
12343
12344                [temp.deduct.call]
12345
12346               If they yield more than one possible deduced A, the type
12347               deduction fails.
12348
12349              applies.  */
12350           if (rval && !same_type_p (r, rval))
12351             return NULL_TREE;
12352
12353           rval = r;
12354         }
12355     }
12356
12357   return rval;
12358 }
12359
12360 /* Returns the level of DECL, which declares a template parameter.  */
12361
12362 static int
12363 template_decl_level (tree decl)
12364 {
12365   switch (TREE_CODE (decl))
12366     {
12367     case TYPE_DECL:
12368     case TEMPLATE_DECL:
12369       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
12370
12371     case PARM_DECL:
12372       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
12373
12374     default:
12375       gcc_unreachable ();
12376     }
12377   return 0;
12378 }
12379
12380 /* Decide whether ARG can be unified with PARM, considering only the
12381    cv-qualifiers of each type, given STRICT as documented for unify.
12382    Returns nonzero iff the unification is OK on that basis.  */
12383
12384 static int
12385 check_cv_quals_for_unify (int strict, tree arg, tree parm)
12386 {
12387   int arg_quals = cp_type_quals (arg);
12388   int parm_quals = cp_type_quals (parm);
12389
12390   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12391       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12392     {
12393       /*  Although a CVR qualifier is ignored when being applied to a
12394           substituted template parameter ([8.3.2]/1 for example), that
12395           does not apply during deduction [14.8.2.4]/1, (even though
12396           that is not explicitly mentioned, [14.8.2.4]/9 indicates
12397           this).  Except when we're allowing additional CV qualifiers
12398           at the outer level [14.8.2.1]/3,1st bullet.  */
12399       if ((TREE_CODE (arg) == REFERENCE_TYPE
12400            || TREE_CODE (arg) == FUNCTION_TYPE
12401            || TREE_CODE (arg) == METHOD_TYPE)
12402           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
12403         return 0;
12404
12405       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
12406           && (parm_quals & TYPE_QUAL_RESTRICT))
12407         return 0;
12408     }
12409
12410   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
12411       && (arg_quals & parm_quals) != parm_quals)
12412     return 0;
12413
12414   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
12415       && (parm_quals & arg_quals) != arg_quals)
12416     return 0;
12417
12418   return 1;
12419 }
12420
12421 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
12422 void 
12423 template_parm_level_and_index (tree parm, int* level, int* index)
12424 {
12425   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12426       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12427       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12428     {
12429       *index = TEMPLATE_TYPE_IDX (parm);
12430       *level = TEMPLATE_TYPE_LEVEL (parm);
12431     }
12432   else
12433     {
12434       *index = TEMPLATE_PARM_IDX (parm);
12435       *level = TEMPLATE_PARM_LEVEL (parm);
12436     }
12437 }
12438
12439 /* Unifies the remaining arguments in PACKED_ARGS with the pack
12440    expansion at the end of PACKED_PARMS. Returns 0 if the type
12441    deduction succeeds, 1 otherwise. STRICT is the same as in
12442    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
12443    call argument list. We'll need to adjust the arguments to make them
12444    types. SUBR tells us if this is from a recursive call to
12445    type_unification_real.  */
12446 int
12447 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
12448                       tree packed_args, int strict, bool call_args_p,
12449                       bool subr)
12450 {
12451   tree parm 
12452     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12453   tree pattern = PACK_EXPANSION_PATTERN (parm);
12454   tree pack, packs = NULL_TREE;
12455   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12456   int len = TREE_VEC_LENGTH (packed_args);
12457
12458   /* Determine the parameter packs we will be deducing from the
12459      pattern, and record their current deductions.  */
12460   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12461        pack; pack = TREE_CHAIN (pack))
12462     {
12463       tree parm_pack = TREE_VALUE (pack);
12464       int idx, level;
12465
12466       /* Determine the index and level of this parameter pack.  */
12467       template_parm_level_and_index (parm_pack, &level, &idx);
12468
12469       /* Keep track of the parameter packs and their corresponding
12470          argument packs.  */
12471       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12472       TREE_TYPE (packs) = make_tree_vec (len - start);
12473     }
12474   
12475   /* Loop through all of the arguments that have not yet been
12476      unified and unify each with the pattern.  */
12477   for (i = start; i < len; i++)
12478     {
12479       tree parm = pattern;
12480
12481       /* For each parameter pack, clear out the deduced value so that
12482          we can deduce it again.  */
12483       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12484         {
12485           int idx, level;
12486           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12487
12488           TMPL_ARG (targs, level, idx) = NULL_TREE;
12489         }
12490
12491       /* Unify the pattern with the current argument.  */
12492       {
12493         tree arg = TREE_VEC_ELT (packed_args, i);
12494         tree arg_expr = NULL_TREE;
12495         int arg_strict = strict;
12496         bool skip_arg_p = false;
12497
12498         if (call_args_p)
12499           {
12500             int sub_strict;
12501
12502             /* This mirrors what we do in type_unification_real.  */
12503             switch (strict)
12504               {
12505               case DEDUCE_CALL:
12506                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12507                               | UNIFY_ALLOW_MORE_CV_QUAL
12508                               | UNIFY_ALLOW_DERIVED);
12509                 break;
12510                 
12511               case DEDUCE_CONV:
12512                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12513                 break;
12514                 
12515               case DEDUCE_EXACT:
12516                 sub_strict = UNIFY_ALLOW_NONE;
12517                 break;
12518                 
12519               default:
12520                 gcc_unreachable ();
12521               }
12522
12523             if (!TYPE_P (arg))
12524               {
12525                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12526                 if (type_unknown_p (arg))
12527                   {
12528                     /* [temp.deduct.type] A template-argument can be
12529                        deduced from a pointer to function or pointer
12530                        to member function argument if the set of
12531                        overloaded functions does not contain function
12532                        templates and at most one of a set of
12533                        overloaded functions provides a unique
12534                        match.  */
12535
12536                     if (resolve_overloaded_unification
12537                         (tparms, targs, parm, arg, strict, sub_strict)
12538                         != 0)
12539                       return 1;
12540                     skip_arg_p = true;
12541                   }
12542
12543                 if (!skip_arg_p)
12544                   {
12545                     arg_expr = arg;
12546                     arg = unlowered_expr_type (arg);
12547                     if (arg == error_mark_node)
12548                       return 1;
12549                   }
12550               }
12551       
12552             arg_strict = sub_strict;
12553
12554             if (!subr)
12555               arg_strict |= 
12556                 maybe_adjust_types_for_deduction (strict, &parm, &arg, 
12557                                                   arg_expr);
12558           }
12559
12560         if (!skip_arg_p)
12561           {
12562             if (unify (tparms, targs, parm, arg, arg_strict))
12563               return 1;
12564           }
12565       }
12566
12567       /* For each parameter pack, collect the deduced value.  */
12568       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12569         {
12570           int idx, level;
12571           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12572
12573           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12574             TMPL_ARG (targs, level, idx);
12575         }
12576     }
12577
12578   /* Verify that the results of unification with the parameter packs
12579      produce results consistent with what we've seen before, and make
12580      the deduced argument packs available.  */
12581   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12582     {
12583       tree old_pack = TREE_VALUE (pack);
12584       tree new_args = TREE_TYPE (pack);
12585       int i, len = TREE_VEC_LENGTH (new_args);
12586       bool nondeduced_p = false;
12587
12588       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
12589          actually deduce anything.  */
12590       for (i = 0; i < len && !nondeduced_p; ++i)
12591         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
12592           nondeduced_p = true;
12593       if (nondeduced_p)
12594         continue;
12595
12596       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12597         {
12598           /* Prepend the explicit arguments onto NEW_ARGS.  */
12599           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12600           tree old_args = new_args;
12601           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12602           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12603
12604           /* Copy the explicit arguments.  */
12605           new_args = make_tree_vec (len);
12606           for (i = 0; i < explicit_len; i++)
12607             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12608
12609           /* Copy the deduced arguments.  */
12610           for (; i < len; i++)
12611             TREE_VEC_ELT (new_args, i) =
12612               TREE_VEC_ELT (old_args, i - explicit_len);
12613         }
12614
12615       if (!old_pack)
12616         {
12617           tree result;
12618           int idx, level;
12619           
12620           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12621
12622           /* Build the deduced *_ARGUMENT_PACK.  */
12623           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12624             {
12625               result = make_node (NONTYPE_ARGUMENT_PACK);
12626               TREE_TYPE (result) = 
12627                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12628               TREE_CONSTANT (result) = 1;
12629             }
12630           else
12631             result = make_node (TYPE_ARGUMENT_PACK);
12632
12633           SET_ARGUMENT_PACK_ARGS (result, new_args);
12634
12635           /* Note the deduced argument packs for this parameter
12636              pack.  */
12637           TMPL_ARG (targs, level, idx) = result;
12638         }
12639       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12640                && (ARGUMENT_PACK_ARGS (old_pack) 
12641                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12642         {
12643           /* We only had the explicitly-provided arguments before, but
12644              now we have a complete set of arguments.  */
12645           int idx, level;
12646           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12647           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12648
12649           /* Keep the original deduced argument pack.  */
12650           TMPL_ARG (targs, level, idx) = old_pack;
12651
12652           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12653           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12654           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12655         }
12656       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12657                                     new_args))
12658         /* Inconsistent unification of this parameter pack.  */
12659         return 1;
12660       else
12661         {
12662           int idx, level;
12663           
12664           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12665
12666           /* Keep the original deduced argument pack.  */
12667           TMPL_ARG (targs, level, idx) = old_pack;
12668         }
12669     }
12670
12671   return 0;
12672 }
12673
12674 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12675    set of template parameters to a template.  TARGS is the bindings
12676    for those template parameters, as determined thus far; TARGS may
12677    include template arguments for outer levels of template parameters
12678    as well.  PARM is a parameter to a template function, or a
12679    subcomponent of that parameter; ARG is the corresponding argument.
12680    This function attempts to match PARM with ARG in a manner
12681    consistent with the existing assignments in TARGS.  If more values
12682    are deduced, then TARGS is updated.
12683
12684    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12685    parameter STRICT is a bitwise or of the following flags:
12686
12687      UNIFY_ALLOW_NONE:
12688        Require an exact match between PARM and ARG.
12689      UNIFY_ALLOW_MORE_CV_QUAL:
12690        Allow the deduced ARG to be more cv-qualified (by qualification
12691        conversion) than ARG.
12692      UNIFY_ALLOW_LESS_CV_QUAL:
12693        Allow the deduced ARG to be less cv-qualified than ARG.
12694      UNIFY_ALLOW_DERIVED:
12695        Allow the deduced ARG to be a template base class of ARG,
12696        or a pointer to a template base class of the type pointed to by
12697        ARG.
12698      UNIFY_ALLOW_INTEGER:
12699        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12700        case for more information.
12701      UNIFY_ALLOW_OUTER_LEVEL:
12702        This is the outermost level of a deduction. Used to determine validity
12703        of qualification conversions. A valid qualification conversion must
12704        have const qualified pointers leading up to the inner type which
12705        requires additional CV quals, except at the outer level, where const
12706        is not required [conv.qual]. It would be normal to set this flag in
12707        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12708      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12709        This is the outermost level of a deduction, and PARM can be more CV
12710        qualified at this point.
12711      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12712        This is the outermost level of a deduction, and PARM can be less CV
12713        qualified at this point.  */
12714
12715 static int
12716 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12717 {
12718   int idx;
12719   tree targ;
12720   tree tparm;
12721   int strict_in = strict;
12722
12723   /* I don't think this will do the right thing with respect to types.
12724      But the only case I've seen it in so far has been array bounds, where
12725      signedness is the only information lost, and I think that will be
12726      okay.  */
12727   while (TREE_CODE (parm) == NOP_EXPR)
12728     parm = TREE_OPERAND (parm, 0);
12729
12730   if (arg == error_mark_node)
12731     return 1;
12732   if (arg == unknown_type_node)
12733     /* We can't deduce anything from this, but we might get all the
12734        template args from other function args.  */
12735     return 0;
12736
12737   /* If PARM uses template parameters, then we can't bail out here,
12738      even if ARG == PARM, since we won't record unifications for the
12739      template parameters.  We might need them if we're trying to
12740      figure out which of two things is more specialized.  */
12741   if (arg == parm && !uses_template_parms (parm))
12742     return 0;
12743
12744   /* Immediately reject some pairs that won't unify because of
12745      cv-qualification mismatches.  */
12746   if (TREE_CODE (arg) == TREE_CODE (parm)
12747       && TYPE_P (arg)
12748       /* It is the elements of the array which hold the cv quals of an array
12749          type, and the elements might be template type parms. We'll check
12750          when we recurse.  */
12751       && TREE_CODE (arg) != ARRAY_TYPE
12752       /* We check the cv-qualifiers when unifying with template type
12753          parameters below.  We want to allow ARG `const T' to unify with
12754          PARM `T' for example, when computing which of two templates
12755          is more specialized, for example.  */
12756       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12757       && !check_cv_quals_for_unify (strict_in, arg, parm))
12758     return 1;
12759
12760   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12761       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12762     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12763   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12764   strict &= ~UNIFY_ALLOW_DERIVED;
12765   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12766   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12767
12768   switch (TREE_CODE (parm))
12769     {
12770     case TYPENAME_TYPE:
12771     case SCOPE_REF:
12772     case UNBOUND_CLASS_TEMPLATE:
12773       /* In a type which contains a nested-name-specifier, template
12774          argument values cannot be deduced for template parameters used
12775          within the nested-name-specifier.  */
12776       return 0;
12777
12778     case TEMPLATE_TYPE_PARM:
12779     case TEMPLATE_TEMPLATE_PARM:
12780     case BOUND_TEMPLATE_TEMPLATE_PARM:
12781       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12782       if (tparm == error_mark_node)
12783         return 1;
12784
12785       if (TEMPLATE_TYPE_LEVEL (parm)
12786           != template_decl_level (tparm))
12787         /* The PARM is not one we're trying to unify.  Just check
12788            to see if it matches ARG.  */
12789         return (TREE_CODE (arg) == TREE_CODE (parm)
12790                 && same_type_p (parm, arg)) ? 0 : 1;
12791       idx = TEMPLATE_TYPE_IDX (parm);
12792       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12793       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12794
12795       /* Check for mixed types and values.  */
12796       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12797            && TREE_CODE (tparm) != TYPE_DECL)
12798           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12799               && TREE_CODE (tparm) != TEMPLATE_DECL))
12800         return 1;
12801
12802       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12803         {
12804           /* ARG must be constructed from a template class or a template
12805              template parameter.  */
12806           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12807               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12808             return 1;
12809
12810           {
12811             tree parmvec = TYPE_TI_ARGS (parm);
12812             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12813             tree argtmplvec
12814               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12815             int i, len;
12816             int parm_variadic_p = 0;
12817
12818             /* The resolution to DR150 makes clear that default
12819                arguments for an N-argument may not be used to bind T
12820                to a template template parameter with fewer than N
12821                parameters.  It is not safe to permit the binding of
12822                default arguments as an extension, as that may change
12823                the meaning of a conforming program.  Consider:
12824
12825                   struct Dense { static const unsigned int dim = 1; };
12826
12827                   template <template <typename> class View,
12828                             typename Block>
12829                   void operator+(float, View<Block> const&);
12830
12831                   template <typename Block,
12832                             unsigned int Dim = Block::dim>
12833                   struct Lvalue_proxy { operator float() const; };
12834
12835                   void
12836                   test_1d (void) {
12837                     Lvalue_proxy<Dense> p;
12838                     float b;
12839                     b + p;
12840                   }
12841
12842               Here, if Lvalue_proxy is permitted to bind to View, then
12843               the global operator+ will be used; if they are not, the
12844               Lvalue_proxy will be converted to float.  */
12845             if (coerce_template_parms (argtmplvec, parmvec,
12846                                        TYPE_TI_TEMPLATE (parm),
12847                                        tf_none,
12848                                        /*require_all_args=*/true,
12849                                        /*use_default_args=*/false)
12850                 == error_mark_node)
12851               return 1;
12852
12853             /* Deduce arguments T, i from TT<T> or TT<i>.
12854                We check each element of PARMVEC and ARGVEC individually
12855                rather than the whole TREE_VEC since they can have
12856                different number of elements.  */
12857
12858             parmvec = expand_template_argument_pack (parmvec);
12859             argvec = expand_template_argument_pack (argvec);
12860
12861             len = TREE_VEC_LENGTH (parmvec);
12862
12863             /* Check if the parameters end in a pack, making them
12864                variadic.  */
12865             if (len > 0
12866                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
12867               parm_variadic_p = 1;
12868             
12869             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
12870               return 1;
12871
12872              for (i = 0; i < len - parm_variadic_p; ++i)
12873               {
12874                 if (unify (tparms, targs,
12875                            TREE_VEC_ELT (parmvec, i),
12876                            TREE_VEC_ELT (argvec, i),
12877                            UNIFY_ALLOW_NONE))
12878                   return 1;
12879               }
12880
12881             if (parm_variadic_p
12882                 && unify_pack_expansion (tparms, targs,
12883                                          parmvec, argvec,
12884                                          UNIFY_ALLOW_NONE,
12885                                          /*call_args_p=*/false,
12886                                          /*subr=*/false))
12887               return 1;
12888           }
12889           arg = TYPE_TI_TEMPLATE (arg);
12890
12891           /* Fall through to deduce template name.  */
12892         }
12893
12894       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12895           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12896         {
12897           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12898
12899           /* Simple cases: Value already set, does match or doesn't.  */
12900           if (targ != NULL_TREE && template_args_equal (targ, arg))
12901             return 0;
12902           else if (targ)
12903             return 1;
12904         }
12905       else
12906         {
12907           /* If PARM is `const T' and ARG is only `int', we don't have
12908              a match unless we are allowing additional qualification.
12909              If ARG is `const int' and PARM is just `T' that's OK;
12910              that binds `const int' to `T'.  */
12911           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12912                                          arg, parm))
12913             return 1;
12914
12915           /* Consider the case where ARG is `const volatile int' and
12916              PARM is `const T'.  Then, T should be `volatile int'.  */
12917           arg = cp_build_qualified_type_real
12918             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12919           if (arg == error_mark_node)
12920             return 1;
12921
12922           /* Simple cases: Value already set, does match or doesn't.  */
12923           if (targ != NULL_TREE && same_type_p (targ, arg))
12924             return 0;
12925           else if (targ)
12926             return 1;
12927
12928           /* Make sure that ARG is not a variable-sized array.  (Note
12929              that were talking about variable-sized arrays (like
12930              `int[n]'), rather than arrays of unknown size (like
12931              `int[]').)  We'll get very confused by such a type since
12932              the bound of the array will not be computable in an
12933              instantiation.  Besides, such types are not allowed in
12934              ISO C++, so we can do as we please here.  */
12935           if (variably_modified_type_p (arg, NULL_TREE))
12936             return 1;
12937         }
12938
12939       /* If ARG is a parameter pack or an expansion, we cannot unify
12940          against it unless PARM is also a parameter pack.  */
12941       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12942           && !template_parameter_pack_p (parm))
12943         return 1;
12944
12945       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12946       return 0;
12947
12948     case TEMPLATE_PARM_INDEX:
12949       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12950       if (tparm == error_mark_node)
12951         return 1;
12952
12953       if (TEMPLATE_PARM_LEVEL (parm)
12954           != template_decl_level (tparm))
12955         /* The PARM is not one we're trying to unify.  Just check
12956            to see if it matches ARG.  */
12957         return !(TREE_CODE (arg) == TREE_CODE (parm)
12958                  && cp_tree_equal (parm, arg));
12959
12960       idx = TEMPLATE_PARM_IDX (parm);
12961       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12962
12963       if (targ)
12964         return !cp_tree_equal (targ, arg);
12965
12966       /* [temp.deduct.type] If, in the declaration of a function template
12967          with a non-type template-parameter, the non-type
12968          template-parameter is used in an expression in the function
12969          parameter-list and, if the corresponding template-argument is
12970          deduced, the template-argument type shall match the type of the
12971          template-parameter exactly, except that a template-argument
12972          deduced from an array bound may be of any integral type.
12973          The non-type parameter might use already deduced type parameters.  */
12974       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12975       if (!TREE_TYPE (arg))
12976         /* Template-parameter dependent expression.  Just accept it for now.
12977            It will later be processed in convert_template_argument.  */
12978         ;
12979       else if (same_type_p (TREE_TYPE (arg), tparm))
12980         /* OK */;
12981       else if ((strict & UNIFY_ALLOW_INTEGER)
12982                && (TREE_CODE (tparm) == INTEGER_TYPE
12983                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12984         /* Convert the ARG to the type of PARM; the deduced non-type
12985            template argument must exactly match the types of the
12986            corresponding parameter.  */
12987         arg = fold (build_nop (TREE_TYPE (parm), arg));
12988       else if (uses_template_parms (tparm))
12989         /* We haven't deduced the type of this parameter yet.  Try again
12990            later.  */
12991         return 0;
12992       else
12993         return 1;
12994
12995       /* If ARG is a parameter pack or an expansion, we cannot unify
12996          against it unless PARM is also a parameter pack.  */
12997       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12998           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12999         return 1;
13000
13001       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
13002       return 0;
13003
13004     case PTRMEM_CST:
13005      {
13006         /* A pointer-to-member constant can be unified only with
13007          another constant.  */
13008       if (TREE_CODE (arg) != PTRMEM_CST)
13009         return 1;
13010
13011       /* Just unify the class member. It would be useless (and possibly
13012          wrong, depending on the strict flags) to unify also
13013          PTRMEM_CST_CLASS, because we want to be sure that both parm and
13014          arg refer to the same variable, even if through different
13015          classes. For instance:
13016
13017          struct A { int x; };
13018          struct B : A { };
13019
13020          Unification of &A::x and &B::x must succeed.  */
13021       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
13022                     PTRMEM_CST_MEMBER (arg), strict);
13023      }
13024
13025     case POINTER_TYPE:
13026       {
13027         if (TREE_CODE (arg) != POINTER_TYPE)
13028           return 1;
13029
13030         /* [temp.deduct.call]
13031
13032            A can be another pointer or pointer to member type that can
13033            be converted to the deduced A via a qualification
13034            conversion (_conv.qual_).
13035
13036            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
13037            This will allow for additional cv-qualification of the
13038            pointed-to types if appropriate.  */
13039
13040         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
13041           /* The derived-to-base conversion only persists through one
13042              level of pointers.  */
13043           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
13044
13045         return unify (tparms, targs, TREE_TYPE (parm),
13046                       TREE_TYPE (arg), strict);
13047       }
13048
13049     case REFERENCE_TYPE:
13050       if (TREE_CODE (arg) != REFERENCE_TYPE)
13051         return 1;
13052       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13053                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13054
13055     case ARRAY_TYPE:
13056       if (TREE_CODE (arg) != ARRAY_TYPE)
13057         return 1;
13058       if ((TYPE_DOMAIN (parm) == NULL_TREE)
13059           != (TYPE_DOMAIN (arg) == NULL_TREE))
13060         return 1;
13061       if (TYPE_DOMAIN (parm) != NULL_TREE)
13062         {
13063           tree parm_max;
13064           tree arg_max;
13065           bool parm_cst;
13066           bool arg_cst;
13067
13068           /* Our representation of array types uses "N - 1" as the
13069              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
13070              not an integer constant.  We cannot unify arbitrarily
13071              complex expressions, so we eliminate the MINUS_EXPRs
13072              here.  */
13073           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
13074           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
13075           if (!parm_cst)
13076             {
13077               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
13078               parm_max = TREE_OPERAND (parm_max, 0);
13079             }
13080           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
13081           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
13082           if (!arg_cst)
13083             {
13084               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
13085                  trying to unify the type of a variable with the type
13086                  of a template parameter.  For example:
13087
13088                    template <unsigned int N>
13089                    void f (char (&) [N]);
13090                    int g(); 
13091                    void h(int i) {
13092                      char a[g(i)];
13093                      f(a); 
13094                    }
13095
13096                 Here, the type of the ARG will be "int [g(i)]", and
13097                 may be a SAVE_EXPR, etc.  */
13098               if (TREE_CODE (arg_max) != MINUS_EXPR)
13099                 return 1;
13100               arg_max = TREE_OPERAND (arg_max, 0);
13101             }
13102
13103           /* If only one of the bounds used a MINUS_EXPR, compensate
13104              by adding one to the other bound.  */
13105           if (parm_cst && !arg_cst)
13106             parm_max = fold_build2 (PLUS_EXPR,
13107                                     integer_type_node,
13108                                     parm_max,
13109                                     integer_one_node);
13110           else if (arg_cst && !parm_cst)
13111             arg_max = fold_build2 (PLUS_EXPR,
13112                                    integer_type_node,
13113                                    arg_max,
13114                                    integer_one_node);
13115
13116           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
13117             return 1;
13118         }
13119       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13120                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
13121
13122     case REAL_TYPE:
13123     case COMPLEX_TYPE:
13124     case VECTOR_TYPE:
13125     case INTEGER_TYPE:
13126     case BOOLEAN_TYPE:
13127     case ENUMERAL_TYPE:
13128     case VOID_TYPE:
13129       if (TREE_CODE (arg) != TREE_CODE (parm))
13130         return 1;
13131
13132       /* We have already checked cv-qualification at the top of the
13133          function.  */
13134       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
13135         return 1;
13136
13137       /* As far as unification is concerned, this wins.  Later checks
13138          will invalidate it if necessary.  */
13139       return 0;
13140
13141       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
13142       /* Type INTEGER_CST can come from ordinary constant template args.  */
13143     case INTEGER_CST:
13144       while (TREE_CODE (arg) == NOP_EXPR)
13145         arg = TREE_OPERAND (arg, 0);
13146
13147       if (TREE_CODE (arg) != INTEGER_CST)
13148         return 1;
13149       return !tree_int_cst_equal (parm, arg);
13150
13151     case TREE_VEC:
13152       {
13153         int i;
13154         if (TREE_CODE (arg) != TREE_VEC)
13155           return 1;
13156         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
13157           return 1;
13158         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
13159           if (unify (tparms, targs,
13160                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
13161                      UNIFY_ALLOW_NONE))
13162             return 1;
13163         return 0;
13164       }
13165
13166     case RECORD_TYPE:
13167     case UNION_TYPE:
13168       if (TREE_CODE (arg) != TREE_CODE (parm))
13169         return 1;
13170
13171       if (TYPE_PTRMEMFUNC_P (parm))
13172         {
13173           if (!TYPE_PTRMEMFUNC_P (arg))
13174             return 1;
13175
13176           return unify (tparms, targs,
13177                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
13178                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
13179                         strict);
13180         }
13181
13182       if (CLASSTYPE_TEMPLATE_INFO (parm))
13183         {
13184           tree t = NULL_TREE;
13185
13186           if (strict_in & UNIFY_ALLOW_DERIVED)
13187             {
13188               /* First, we try to unify the PARM and ARG directly.  */
13189               t = try_class_unification (tparms, targs,
13190                                          parm, arg);
13191
13192               if (!t)
13193                 {
13194                   /* Fallback to the special case allowed in
13195                      [temp.deduct.call]:
13196
13197                        If P is a class, and P has the form
13198                        template-id, then A can be a derived class of
13199                        the deduced A.  Likewise, if P is a pointer to
13200                        a class of the form template-id, A can be a
13201                        pointer to a derived class pointed to by the
13202                        deduced A.  */
13203                   t = get_template_base (tparms, targs, parm, arg);
13204
13205                   if (!t)
13206                     return 1;
13207                 }
13208             }
13209           else if (CLASSTYPE_TEMPLATE_INFO (arg)
13210                    && (CLASSTYPE_TI_TEMPLATE (parm)
13211                        == CLASSTYPE_TI_TEMPLATE (arg)))
13212             /* Perhaps PARM is something like S<U> and ARG is S<int>.
13213                Then, we should unify `int' and `U'.  */
13214             t = arg;
13215           else
13216             /* There's no chance of unification succeeding.  */
13217             return 1;
13218
13219           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
13220                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
13221         }
13222       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
13223         return 1;
13224       return 0;
13225
13226     case METHOD_TYPE:
13227     case FUNCTION_TYPE:
13228       if (TREE_CODE (arg) != TREE_CODE (parm))
13229         return 1;
13230
13231       /* CV qualifications for methods can never be deduced, they must
13232          match exactly.  We need to check them explicitly here,
13233          because type_unification_real treats them as any other
13234          cvqualified parameter.  */
13235       if (TREE_CODE (parm) == METHOD_TYPE
13236           && (!check_cv_quals_for_unify
13237               (UNIFY_ALLOW_NONE,
13238                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
13239                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
13240         return 1;
13241
13242       if (unify (tparms, targs, TREE_TYPE (parm),
13243                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
13244         return 1;
13245       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
13246                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
13247                                     LOOKUP_NORMAL);
13248
13249     case OFFSET_TYPE:
13250       /* Unify a pointer to member with a pointer to member function, which
13251          deduces the type of the member as a function type. */
13252       if (TYPE_PTRMEMFUNC_P (arg))
13253         {
13254           tree method_type;
13255           tree fntype;
13256           cp_cv_quals cv_quals;
13257
13258           /* Check top-level cv qualifiers */
13259           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
13260             return 1;
13261
13262           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13263                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
13264             return 1;
13265
13266           /* Determine the type of the function we are unifying against. */
13267           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
13268           fntype =
13269             build_function_type (TREE_TYPE (method_type),
13270                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
13271
13272           /* Extract the cv-qualifiers of the member function from the
13273              implicit object parameter and place them on the function
13274              type to be restored later. */
13275           cv_quals =
13276             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
13277           fntype = build_qualified_type (fntype, cv_quals);
13278           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
13279         }
13280
13281       if (TREE_CODE (arg) != OFFSET_TYPE)
13282         return 1;
13283       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
13284                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
13285         return 1;
13286       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
13287                     strict);
13288
13289     case CONST_DECL:
13290       if (DECL_TEMPLATE_PARM_P (parm))
13291         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
13292       if (arg != integral_constant_value (parm))
13293         return 1;
13294       return 0;
13295
13296     case FIELD_DECL:
13297     case TEMPLATE_DECL:
13298       /* Matched cases are handled by the ARG == PARM test above.  */
13299       return 1;
13300
13301     case TYPE_ARGUMENT_PACK:
13302     case NONTYPE_ARGUMENT_PACK:
13303       {
13304         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
13305         tree packed_args = ARGUMENT_PACK_ARGS (arg);
13306         int i, len = TREE_VEC_LENGTH (packed_parms);
13307         int argslen = TREE_VEC_LENGTH (packed_args);
13308         int parm_variadic_p = 0;
13309
13310         for (i = 0; i < len; ++i)
13311           {
13312             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
13313               {
13314                 if (i == len - 1)
13315                   /* We can unify against something with a trailing
13316                      parameter pack.  */
13317                   parm_variadic_p = 1;
13318                 else
13319                   /* Since there is something following the pack
13320                      expansion, we cannot unify this template argument
13321                      list.  */
13322                   return 0;
13323               }
13324           }
13325           
13326
13327         /* If we don't have enough arguments to satisfy the parameters
13328            (not counting the pack expression at the end), or we have
13329            too many arguments for a parameter list that doesn't end in
13330            a pack expression, we can't unify.  */
13331         if (argslen < (len - parm_variadic_p)
13332             || (argslen > len && !parm_variadic_p))
13333           return 1;
13334
13335         /* Unify all of the parameters that precede the (optional)
13336            pack expression.  */
13337         for (i = 0; i < len - parm_variadic_p; ++i)
13338           {
13339             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
13340                        TREE_VEC_ELT (packed_args, i), strict))
13341               return 1;
13342           }
13343
13344         if (parm_variadic_p)
13345           return unify_pack_expansion (tparms, targs, 
13346                                        packed_parms, packed_args,
13347                                        strict, /*call_args_p=*/false,
13348                                        /*subr=*/false);
13349         return 0;
13350       }
13351
13352       break;
13353
13354     case TYPEOF_TYPE:
13355     case DECLTYPE_TYPE:
13356       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
13357          nodes.  */
13358       return 0;
13359
13360     case ERROR_MARK:
13361       /* Unification fails if we hit an error node.  */
13362       return 1;
13363
13364     default:
13365       gcc_assert (EXPR_P (parm));
13366
13367       /* We must be looking at an expression.  This can happen with
13368          something like:
13369
13370            template <int I>
13371            void foo(S<I>, S<I + 2>);
13372
13373          This is a "nondeduced context":
13374
13375            [deduct.type]
13376
13377            The nondeduced contexts are:
13378
13379            --A type that is a template-id in which one or more of
13380              the template-arguments is an expression that references
13381              a template-parameter.
13382
13383          In these cases, we assume deduction succeeded, but don't
13384          actually infer any unifications.  */
13385
13386       if (!uses_template_parms (parm)
13387           && !template_args_equal (parm, arg))
13388         return 1;
13389       else
13390         return 0;
13391     }
13392 }
13393 \f
13394 /* Note that DECL can be defined in this translation unit, if
13395    required.  */
13396
13397 static void
13398 mark_definable (tree decl)
13399 {
13400   tree clone;
13401   DECL_NOT_REALLY_EXTERN (decl) = 1;
13402   FOR_EACH_CLONE (clone, decl)
13403     DECL_NOT_REALLY_EXTERN (clone) = 1;
13404 }
13405
13406 /* Called if RESULT is explicitly instantiated, or is a member of an
13407    explicitly instantiated class.  */
13408
13409 void
13410 mark_decl_instantiated (tree result, int extern_p)
13411 {
13412   SET_DECL_EXPLICIT_INSTANTIATION (result);
13413
13414   /* If this entity has already been written out, it's too late to
13415      make any modifications.  */
13416   if (TREE_ASM_WRITTEN (result))
13417     return;
13418
13419   if (TREE_CODE (result) != FUNCTION_DECL)
13420     /* The TREE_PUBLIC flag for function declarations will have been
13421        set correctly by tsubst.  */
13422     TREE_PUBLIC (result) = 1;
13423
13424   /* This might have been set by an earlier implicit instantiation.  */
13425   DECL_COMDAT (result) = 0;
13426
13427   if (extern_p)
13428     DECL_NOT_REALLY_EXTERN (result) = 0;
13429   else
13430     {
13431       mark_definable (result);
13432       /* Always make artificials weak.  */
13433       if (DECL_ARTIFICIAL (result) && flag_weak)
13434         comdat_linkage (result);
13435       /* For WIN32 we also want to put explicit instantiations in
13436          linkonce sections.  */
13437       else if (TREE_PUBLIC (result))
13438         maybe_make_one_only (result);
13439     }
13440
13441   /* If EXTERN_P, then this function will not be emitted -- unless
13442      followed by an explicit instantiation, at which point its linkage
13443      will be adjusted.  If !EXTERN_P, then this function will be
13444      emitted here.  In neither circumstance do we want
13445      import_export_decl to adjust the linkage.  */
13446   DECL_INTERFACE_KNOWN (result) = 1;
13447 }
13448
13449 /* Given two function templates PAT1 and PAT2, return:
13450
13451    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
13452    -1 if PAT2 is more specialized than PAT1.
13453    0 if neither is more specialized.
13454
13455    LEN indicates the number of parameters we should consider
13456    (defaulted parameters should not be considered).
13457
13458    The 1998 std underspecified function template partial ordering, and
13459    DR214 addresses the issue.  We take pairs of arguments, one from
13460    each of the templates, and deduce them against each other.  One of
13461    the templates will be more specialized if all the *other*
13462    template's arguments deduce against its arguments and at least one
13463    of its arguments *does* *not* deduce against the other template's
13464    corresponding argument.  Deduction is done as for class templates.
13465    The arguments used in deduction have reference and top level cv
13466    qualifiers removed.  Iff both arguments were originally reference
13467    types *and* deduction succeeds in both directions, the template
13468    with the more cv-qualified argument wins for that pairing (if
13469    neither is more cv-qualified, they both are equal).  Unlike regular
13470    deduction, after all the arguments have been deduced in this way,
13471    we do *not* verify the deduced template argument values can be
13472    substituted into non-deduced contexts, nor do we have to verify
13473    that all template arguments have been deduced.  */
13474
13475 int
13476 more_specialized_fn (tree pat1, tree pat2, int len)
13477 {
13478   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
13479   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
13480   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
13481   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
13482   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
13483   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
13484   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
13485   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
13486   int better1 = 0;
13487   int better2 = 0;
13488
13489   /* Remove the this parameter from non-static member functions.  If
13490      one is a non-static member function and the other is not a static
13491      member function, remove the first parameter from that function
13492      also.  This situation occurs for operator functions where we
13493      locate both a member function (with this pointer) and non-member
13494      operator (with explicit first operand).  */
13495   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
13496     {
13497       len--; /* LEN is the number of significant arguments for DECL1 */
13498       args1 = TREE_CHAIN (args1);
13499       if (!DECL_STATIC_FUNCTION_P (decl2))
13500         args2 = TREE_CHAIN (args2);
13501     }
13502   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
13503     {
13504       args2 = TREE_CHAIN (args2);
13505       if (!DECL_STATIC_FUNCTION_P (decl1))
13506         {
13507           len--;
13508           args1 = TREE_CHAIN (args1);
13509         }
13510     }
13511
13512   /* If only one is a conversion operator, they are unordered.  */
13513   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13514     return 0;
13515
13516   /* Consider the return type for a conversion function */
13517   if (DECL_CONV_FN_P (decl1))
13518     {
13519       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13520       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13521       len++;
13522     }
13523
13524   processing_template_decl++;
13525
13526   while (len--)
13527     {
13528       tree arg1 = TREE_VALUE (args1);
13529       tree arg2 = TREE_VALUE (args2);
13530       int deduce1, deduce2;
13531       int quals1 = -1;
13532       int quals2 = -1;
13533
13534       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13535           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13536         {
13537           /* When both arguments are pack expansions, we need only
13538              unify the patterns themselves.  */
13539           arg1 = PACK_EXPANSION_PATTERN (arg1);
13540           arg2 = PACK_EXPANSION_PATTERN (arg2);
13541
13542           /* This is the last comparison we need to do.  */
13543           len = 0;
13544         }
13545
13546       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13547         {
13548           arg1 = TREE_TYPE (arg1);
13549           quals1 = cp_type_quals (arg1);
13550         }
13551
13552       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13553         {
13554           arg2 = TREE_TYPE (arg2);
13555           quals2 = cp_type_quals (arg2);
13556         }
13557
13558       if ((quals1 < 0) != (quals2 < 0))
13559         {
13560           /* Only of the args is a reference, see if we should apply
13561              array/function pointer decay to it.  This is not part of
13562              DR214, but is, IMHO, consistent with the deduction rules
13563              for the function call itself, and with our earlier
13564              implementation of the underspecified partial ordering
13565              rules.  (nathan).  */
13566           if (quals1 >= 0)
13567             {
13568               switch (TREE_CODE (arg1))
13569                 {
13570                 case ARRAY_TYPE:
13571                   arg1 = TREE_TYPE (arg1);
13572                   /* FALLTHROUGH. */
13573                 case FUNCTION_TYPE:
13574                   arg1 = build_pointer_type (arg1);
13575                   break;
13576
13577                 default:
13578                   break;
13579                 }
13580             }
13581           else
13582             {
13583               switch (TREE_CODE (arg2))
13584                 {
13585                 case ARRAY_TYPE:
13586                   arg2 = TREE_TYPE (arg2);
13587                   /* FALLTHROUGH. */
13588                 case FUNCTION_TYPE:
13589                   arg2 = build_pointer_type (arg2);
13590                   break;
13591
13592                 default:
13593                   break;
13594                 }
13595             }
13596         }
13597
13598       arg1 = TYPE_MAIN_VARIANT (arg1);
13599       arg2 = TYPE_MAIN_VARIANT (arg2);
13600
13601       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13602         {
13603           int i, len2 = list_length (args2);
13604           tree parmvec = make_tree_vec (1);
13605           tree argvec = make_tree_vec (len2);
13606           tree ta = args2;
13607
13608           /* Setup the parameter vector, which contains only ARG1.  */
13609           TREE_VEC_ELT (parmvec, 0) = arg1;
13610
13611           /* Setup the argument vector, which contains the remaining
13612              arguments.  */
13613           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13614             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13615
13616           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13617                                            argvec, UNIFY_ALLOW_NONE, 
13618                                            /*call_args_p=*/false, 
13619                                            /*subr=*/0);
13620
13621           /* We cannot deduce in the other direction, because ARG1 is
13622              a pack expansion but ARG2 is not.  */
13623           deduce2 = 0;
13624         }
13625       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13626         {
13627           int i, len1 = list_length (args1);
13628           tree parmvec = make_tree_vec (1);
13629           tree argvec = make_tree_vec (len1);
13630           tree ta = args1;
13631
13632           /* Setup the parameter vector, which contains only ARG1.  */
13633           TREE_VEC_ELT (parmvec, 0) = arg2;
13634
13635           /* Setup the argument vector, which contains the remaining
13636              arguments.  */
13637           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13638             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13639
13640           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13641                                            argvec, UNIFY_ALLOW_NONE, 
13642                                            /*call_args_p=*/false, 
13643                                            /*subr=*/0);
13644
13645           /* We cannot deduce in the other direction, because ARG2 is
13646              a pack expansion but ARG1 is not.*/
13647           deduce1 = 0;
13648         }
13649
13650       else
13651         {
13652           /* The normal case, where neither argument is a pack
13653              expansion.  */
13654           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13655           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13656         }
13657
13658       if (!deduce1)
13659         better2 = -1;
13660       if (!deduce2)
13661         better1 = -1;
13662       if (better1 < 0 && better2 < 0)
13663         /* We've failed to deduce something in either direction.
13664            These must be unordered.  */
13665         break;
13666
13667       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13668         {
13669           /* Deduces in both directions, see if quals can
13670              disambiguate.  Pretend the worse one failed to deduce. */
13671           if ((quals1 & quals2) == quals2)
13672             deduce1 = 0;
13673           if ((quals1 & quals2) == quals1)
13674             deduce2 = 0;
13675         }
13676       if (deduce1 && !deduce2 && !better2)
13677         better2 = 1;
13678       if (deduce2 && !deduce1 && !better1)
13679         better1 = 1;
13680
13681       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13682           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13683         /* We have already processed all of the arguments in our
13684            handing of the pack expansion type.  */
13685         len = 0;
13686
13687       args1 = TREE_CHAIN (args1);
13688       args2 = TREE_CHAIN (args2);
13689
13690       /* Stop when an ellipsis is seen.  */
13691       if (args1 == NULL_TREE || args2 == NULL_TREE)
13692         break;
13693     }
13694
13695   processing_template_decl--;
13696
13697   /* All things being equal, if the next argument is a pack expansion
13698      for one function but not for the other, prefer the
13699      non-variadic function.  */
13700   if ((better1 > 0) - (better2 > 0) == 0
13701       && args1 && TREE_VALUE (args1)
13702       && args2 && TREE_VALUE (args2))
13703     {
13704       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13705         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13706       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13707         return 1;
13708     }
13709
13710   return (better1 > 0) - (better2 > 0);
13711 }
13712
13713 /* Determine which of two partial specializations is more specialized.
13714
13715    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13716    to the first partial specialization.  The TREE_VALUE is the
13717    innermost set of template parameters for the partial
13718    specialization.  PAT2 is similar, but for the second template.
13719
13720    Return 1 if the first partial specialization is more specialized;
13721    -1 if the second is more specialized; 0 if neither is more
13722    specialized.
13723
13724    See [temp.class.order] for information about determining which of
13725    two templates is more specialized.  */
13726
13727 static int
13728 more_specialized_class (tree pat1, tree pat2)
13729 {
13730   tree targs;
13731   tree tmpl1, tmpl2;
13732   int winner = 0;
13733   bool any_deductions = false;
13734
13735   tmpl1 = TREE_TYPE (pat1);
13736   tmpl2 = TREE_TYPE (pat2);
13737
13738   /* Just like what happens for functions, if we are ordering between
13739      different class template specializations, we may encounter dependent
13740      types in the arguments, and we need our dependency check functions
13741      to behave correctly.  */
13742   ++processing_template_decl;
13743   targs = get_class_bindings (TREE_VALUE (pat1),
13744                               CLASSTYPE_TI_ARGS (tmpl1),
13745                               CLASSTYPE_TI_ARGS (tmpl2));
13746   if (targs)
13747     {
13748       --winner;
13749       any_deductions = true;
13750     }
13751
13752   targs = get_class_bindings (TREE_VALUE (pat2),
13753                               CLASSTYPE_TI_ARGS (tmpl2),
13754                               CLASSTYPE_TI_ARGS (tmpl1));
13755   if (targs)
13756     {
13757       ++winner;
13758       any_deductions = true;
13759     }
13760   --processing_template_decl;
13761
13762   /* In the case of a tie where at least one of the class templates
13763      has a parameter pack at the end, the template with the most
13764      non-packed parameters wins.  */
13765   if (winner == 0
13766       && any_deductions
13767       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13768           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13769     {
13770       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13771       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13772       int len1 = TREE_VEC_LENGTH (args1);
13773       int len2 = TREE_VEC_LENGTH (args2);
13774
13775       /* We don't count the pack expansion at the end.  */
13776       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13777         --len1;
13778       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13779         --len2;
13780
13781       if (len1 > len2)
13782         return 1;
13783       else if (len1 < len2)
13784         return -1;
13785     }
13786
13787   return winner;
13788 }
13789
13790 /* Return the template arguments that will produce the function signature
13791    DECL from the function template FN, with the explicit template
13792    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13793    also match.  Return NULL_TREE if no satisfactory arguments could be
13794    found.  */
13795
13796 static tree
13797 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13798 {
13799   int ntparms = DECL_NTPARMS (fn);
13800   tree targs = make_tree_vec (ntparms);
13801   tree decl_type;
13802   tree decl_arg_types;
13803
13804   /* Substitute the explicit template arguments into the type of DECL.
13805      The call to fn_type_unification will handle substitution into the
13806      FN.  */
13807   decl_type = TREE_TYPE (decl);
13808   if (explicit_args && uses_template_parms (decl_type))
13809     {
13810       tree tmpl;
13811       tree converted_args;
13812
13813       if (DECL_TEMPLATE_INFO (decl))
13814         tmpl = DECL_TI_TEMPLATE (decl);
13815       else
13816         /* We can get here for some invalid specializations.  */
13817         return NULL_TREE;
13818
13819       converted_args
13820         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13821                                  explicit_args, NULL_TREE,
13822                                  tf_none,
13823                                  /*require_all_args=*/false,
13824                                  /*use_default_args=*/false);
13825       if (converted_args == error_mark_node)
13826         return NULL_TREE;
13827
13828       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13829       if (decl_type == error_mark_node)
13830         return NULL_TREE;
13831     }
13832
13833   /* Never do unification on the 'this' parameter.  */
13834   decl_arg_types = skip_artificial_parms_for (decl, 
13835                                               TYPE_ARG_TYPES (decl_type));
13836
13837   if (fn_type_unification (fn, explicit_args, targs,
13838                            decl_arg_types,
13839                            (check_rettype || DECL_CONV_FN_P (fn)
13840                             ? TREE_TYPE (decl_type) : NULL_TREE),
13841                            DEDUCE_EXACT, LOOKUP_NORMAL))
13842     return NULL_TREE;
13843
13844   return targs;
13845 }
13846
13847 /* Return the innermost template arguments that, when applied to a
13848    template specialization whose innermost template parameters are
13849    TPARMS, and whose specialization arguments are PARMS, yield the
13850    ARGS.
13851
13852    For example, suppose we have:
13853
13854      template <class T, class U> struct S {};
13855      template <class T> struct S<T*, int> {};
13856
13857    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13858    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13859    int}.  The resulting vector will be {double}, indicating that `T'
13860    is bound to `double'.  */
13861
13862 static tree
13863 get_class_bindings (tree tparms, tree spec_args, tree args)
13864 {
13865   int i, ntparms = TREE_VEC_LENGTH (tparms);
13866   tree deduced_args;
13867   tree innermost_deduced_args;
13868
13869   innermost_deduced_args = make_tree_vec (ntparms);
13870   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13871     {
13872       deduced_args = copy_node (args);
13873       SET_TMPL_ARGS_LEVEL (deduced_args,
13874                            TMPL_ARGS_DEPTH (deduced_args),
13875                            innermost_deduced_args);
13876     }
13877   else
13878     deduced_args = innermost_deduced_args;
13879
13880   if (unify (tparms, deduced_args,
13881              INNERMOST_TEMPLATE_ARGS (spec_args),
13882              INNERMOST_TEMPLATE_ARGS (args),
13883              UNIFY_ALLOW_NONE))
13884     return NULL_TREE;
13885
13886   for (i =  0; i < ntparms; ++i)
13887     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13888       return NULL_TREE;
13889
13890   /* Verify that nondeduced template arguments agree with the type
13891      obtained from argument deduction.
13892
13893      For example:
13894
13895        struct A { typedef int X; };
13896        template <class T, class U> struct C {};
13897        template <class T> struct C<T, typename T::X> {};
13898
13899      Then with the instantiation `C<A, int>', we can deduce that
13900      `T' is `A' but unify () does not check whether `typename T::X'
13901      is `int'.  */
13902   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13903   if (spec_args == error_mark_node
13904       /* We only need to check the innermost arguments; the other
13905          arguments will always agree.  */
13906       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13907                               INNERMOST_TEMPLATE_ARGS (args)))
13908     return NULL_TREE;
13909
13910   /* Now that we have bindings for all of the template arguments,
13911      ensure that the arguments deduced for the template template
13912      parameters have compatible template parameter lists.  See the use
13913      of template_template_parm_bindings_ok_p in fn_type_unification
13914      for more information.  */
13915   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
13916     return NULL_TREE;
13917
13918   return deduced_args;
13919 }
13920
13921 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13922    Return the TREE_LIST node with the most specialized template, if
13923    any.  If there is no most specialized template, the error_mark_node
13924    is returned.
13925
13926    Note that this function does not look at, or modify, the
13927    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13928    returned is one of the elements of INSTANTIATIONS, callers may
13929    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13930    and retrieve it from the value returned.  */
13931
13932 tree
13933 most_specialized_instantiation (tree templates)
13934 {
13935   tree fn, champ;
13936
13937   ++processing_template_decl;
13938
13939   champ = templates;
13940   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13941     {
13942       int fate = 0;
13943
13944       if (get_bindings (TREE_VALUE (champ),
13945                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13946                         NULL_TREE, /*check_ret=*/false))
13947         fate--;
13948
13949       if (get_bindings (TREE_VALUE (fn),
13950                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13951                         NULL_TREE, /*check_ret=*/false))
13952         fate++;
13953
13954       if (fate == -1)
13955         champ = fn;
13956       else if (!fate)
13957         {
13958           /* Equally specialized, move to next function.  If there
13959              is no next function, nothing's most specialized.  */
13960           fn = TREE_CHAIN (fn);
13961           champ = fn;
13962           if (!fn)
13963             break;
13964         }
13965     }
13966
13967   if (champ)
13968     /* Now verify that champ is better than everything earlier in the
13969        instantiation list.  */
13970     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13971       if (get_bindings (TREE_VALUE (champ),
13972                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13973                         NULL_TREE, /*check_ret=*/false)
13974           || !get_bindings (TREE_VALUE (fn),
13975                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13976                             NULL_TREE, /*check_ret=*/false))
13977         {
13978           champ = NULL_TREE;
13979           break;
13980         }
13981
13982   processing_template_decl--;
13983
13984   if (!champ)
13985     return error_mark_node;
13986
13987   return champ;
13988 }
13989
13990 /* If DECL is a specialization of some template, return the most
13991    general such template.  Otherwise, returns NULL_TREE.
13992
13993    For example, given:
13994
13995      template <class T> struct S { template <class U> void f(U); };
13996
13997    if TMPL is `template <class U> void S<int>::f(U)' this will return
13998    the full template.  This function will not trace past partial
13999    specializations, however.  For example, given in addition:
14000
14001      template <class T> struct S<T*> { template <class U> void f(U); };
14002
14003    if TMPL is `template <class U> void S<int*>::f(U)' this will return
14004    `template <class T> template <class U> S<T*>::f(U)'.  */
14005
14006 tree
14007 most_general_template (tree decl)
14008 {
14009   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
14010      an immediate specialization.  */
14011   if (TREE_CODE (decl) == FUNCTION_DECL)
14012     {
14013       if (DECL_TEMPLATE_INFO (decl)) {
14014         decl = DECL_TI_TEMPLATE (decl);
14015
14016         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
14017            template friend.  */
14018         if (TREE_CODE (decl) != TEMPLATE_DECL)
14019           return NULL_TREE;
14020       } else
14021         return NULL_TREE;
14022     }
14023
14024   /* Look for more and more general templates.  */
14025   while (DECL_TEMPLATE_INFO (decl))
14026     {
14027       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
14028          (See cp-tree.h for details.)  */
14029       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
14030         break;
14031
14032       if (CLASS_TYPE_P (TREE_TYPE (decl))
14033           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
14034         break;
14035
14036       /* Stop if we run into an explicitly specialized class template.  */
14037       if (!DECL_NAMESPACE_SCOPE_P (decl)
14038           && DECL_CONTEXT (decl)
14039           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
14040         break;
14041
14042       decl = DECL_TI_TEMPLATE (decl);
14043     }
14044
14045   return decl;
14046 }
14047
14048 /* Return the most specialized of the class template partial
14049    specializations of TMPL which can produce TYPE, a specialization of
14050    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
14051    a _TYPE node corresponding to the partial specialization, while the
14052    TREE_PURPOSE is the set of template arguments that must be
14053    substituted into the TREE_TYPE in order to generate TYPE.
14054
14055    If the choice of partial specialization is ambiguous, a diagnostic
14056    is issued, and the error_mark_node is returned.  If there are no
14057    partial specializations of TMPL matching TYPE, then NULL_TREE is
14058    returned.  */
14059
14060 static tree
14061 most_specialized_class (tree type, tree tmpl)
14062 {
14063   tree list = NULL_TREE;
14064   tree t;
14065   tree champ;
14066   int fate;
14067   bool ambiguous_p;
14068   tree args;
14069   tree outer_args = NULL_TREE;
14070
14071   tmpl = most_general_template (tmpl);
14072   args = CLASSTYPE_TI_ARGS (type);
14073
14074   /* For determining which partial specialization to use, only the
14075      innermost args are interesting.  */
14076   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
14077     {
14078       outer_args = strip_innermost_template_args (args, 1);
14079       args = INNERMOST_TEMPLATE_ARGS (args);
14080     }
14081
14082   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
14083     {
14084       tree partial_spec_args;
14085       tree spec_args;
14086       tree parms = TREE_VALUE (t);
14087
14088       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
14089       if (outer_args)
14090         {
14091           int i;
14092
14093           ++processing_template_decl;
14094
14095           /* Discard the outer levels of args, and then substitute in the
14096              template args from the enclosing class.  */
14097           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
14098           partial_spec_args = tsubst_template_args
14099             (partial_spec_args, outer_args, tf_none, NULL_TREE);
14100
14101           /* PARMS already refers to just the innermost parms, but the
14102              template parms in partial_spec_args had their levels lowered
14103              by tsubst, so we need to do the same for the parm list.  We
14104              can't just tsubst the TREE_VEC itself, as tsubst wants to
14105              treat a TREE_VEC as an argument vector.  */
14106           parms = copy_node (parms);
14107           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
14108             TREE_VEC_ELT (parms, i) =
14109               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
14110
14111           --processing_template_decl;
14112         }
14113       spec_args = get_class_bindings (parms,
14114                                       partial_spec_args,
14115                                       args);
14116       if (spec_args)
14117         {
14118           if (outer_args)
14119             spec_args = add_to_template_args (outer_args, spec_args);
14120           list = tree_cons (spec_args, TREE_VALUE (t), list);
14121           TREE_TYPE (list) = TREE_TYPE (t);
14122         }
14123     }
14124
14125   if (! list)
14126     return NULL_TREE;
14127
14128   ambiguous_p = false;
14129   t = list;
14130   champ = t;
14131   t = TREE_CHAIN (t);
14132   for (; t; t = TREE_CHAIN (t))
14133     {
14134       fate = more_specialized_class (champ, t);
14135       if (fate == 1)
14136         ;
14137       else
14138         {
14139           if (fate == 0)
14140             {
14141               t = TREE_CHAIN (t);
14142               if (! t)
14143                 {
14144                   ambiguous_p = true;
14145                   break;
14146                 }
14147             }
14148           champ = t;
14149         }
14150     }
14151
14152   if (!ambiguous_p)
14153     for (t = list; t && t != champ; t = TREE_CHAIN (t))
14154       {
14155         fate = more_specialized_class (champ, t);
14156         if (fate != 1)
14157           {
14158             ambiguous_p = true;
14159             break;
14160           }
14161       }
14162
14163   if (ambiguous_p)
14164     {
14165       const char *str = "candidates are:";
14166       error ("ambiguous class template instantiation for %q#T", type);
14167       for (t = list; t; t = TREE_CHAIN (t))
14168         {
14169           error ("%s %+#T", str, TREE_TYPE (t));
14170           str = "               ";
14171         }
14172       return error_mark_node;
14173     }
14174
14175   return champ;
14176 }
14177
14178 /* Explicitly instantiate DECL.  */
14179
14180 void
14181 do_decl_instantiation (tree decl, tree storage)
14182 {
14183   tree result = NULL_TREE;
14184   int extern_p = 0;
14185
14186   if (!decl || decl == error_mark_node)
14187     /* An error occurred, for which grokdeclarator has already issued
14188        an appropriate message.  */
14189     return;
14190   else if (! DECL_LANG_SPECIFIC (decl))
14191     {
14192       error ("explicit instantiation of non-template %q#D", decl);
14193       return;
14194     }
14195   else if (TREE_CODE (decl) == VAR_DECL)
14196     {
14197       /* There is an asymmetry here in the way VAR_DECLs and
14198          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
14199          the latter, the DECL we get back will be marked as a
14200          template instantiation, and the appropriate
14201          DECL_TEMPLATE_INFO will be set up.  This does not happen for
14202          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
14203          should handle VAR_DECLs as it currently handles
14204          FUNCTION_DECLs.  */
14205       if (!DECL_CLASS_SCOPE_P (decl))
14206         {
14207           error ("%qD is not a static data member of a class template", decl);
14208           return;
14209         }
14210       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
14211       if (!result || TREE_CODE (result) != VAR_DECL)
14212         {
14213           error ("no matching template for %qD found", decl);
14214           return;
14215         }
14216       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
14217         {
14218           error ("type %qT for explicit instantiation %qD does not match "
14219                  "declared type %qT", TREE_TYPE (result), decl,
14220                  TREE_TYPE (decl));
14221           return;
14222         }
14223     }
14224   else if (TREE_CODE (decl) != FUNCTION_DECL)
14225     {
14226       error ("explicit instantiation of %q#D", decl);
14227       return;
14228     }
14229   else
14230     result = decl;
14231
14232   /* Check for various error cases.  Note that if the explicit
14233      instantiation is valid the RESULT will currently be marked as an
14234      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
14235      until we get here.  */
14236
14237   if (DECL_TEMPLATE_SPECIALIZATION (result))
14238     {
14239       /* DR 259 [temp.spec].
14240
14241          Both an explicit instantiation and a declaration of an explicit
14242          specialization shall not appear in a program unless the explicit
14243          instantiation follows a declaration of the explicit specialization.
14244
14245          For a given set of template parameters, if an explicit
14246          instantiation of a template appears after a declaration of an
14247          explicit specialization for that template, the explicit
14248          instantiation has no effect.  */
14249       return;
14250     }
14251   else if (DECL_EXPLICIT_INSTANTIATION (result))
14252     {
14253       /* [temp.spec]
14254
14255          No program shall explicitly instantiate any template more
14256          than once.
14257
14258          We check DECL_NOT_REALLY_EXTERN so as not to complain when
14259          the first instantiation was `extern' and the second is not,
14260          and EXTERN_P for the opposite case.  */
14261       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
14262         pedwarn ("duplicate explicit instantiation of %q#D", result);
14263       /* If an "extern" explicit instantiation follows an ordinary
14264          explicit instantiation, the template is instantiated.  */
14265       if (extern_p)
14266         return;
14267     }
14268   else if (!DECL_IMPLICIT_INSTANTIATION (result))
14269     {
14270       error ("no matching template for %qD found", result);
14271       return;
14272     }
14273   else if (!DECL_TEMPLATE_INFO (result))
14274     {
14275       pedwarn ("explicit instantiation of non-template %q#D", result);
14276       return;
14277     }
14278
14279   if (storage == NULL_TREE)
14280     ;
14281   else if (storage == ridpointers[(int) RID_EXTERN])
14282     {
14283       if (pedantic && !in_system_header)
14284         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
14285                  "instantiations");
14286       extern_p = 1;
14287     }
14288   else
14289     error ("storage class %qD applied to template instantiation", storage);
14290
14291   check_explicit_instantiation_namespace (result);
14292   mark_decl_instantiated (result, extern_p);
14293   if (! extern_p)
14294     instantiate_decl (result, /*defer_ok=*/1,
14295                       /*expl_inst_class_mem_p=*/false);
14296 }
14297
14298 static void
14299 mark_class_instantiated (tree t, int extern_p)
14300 {
14301   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
14302   SET_CLASSTYPE_INTERFACE_KNOWN (t);
14303   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
14304   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
14305   if (! extern_p)
14306     {
14307       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
14308       rest_of_type_compilation (t, 1);
14309     }
14310 }
14311
14312 /* Called from do_type_instantiation through binding_table_foreach to
14313    do recursive instantiation for the type bound in ENTRY.  */
14314 static void
14315 bt_instantiate_type_proc (binding_entry entry, void *data)
14316 {
14317   tree storage = *(tree *) data;
14318
14319   if (IS_AGGR_TYPE (entry->type)
14320       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
14321     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
14322 }
14323
14324 /* Called from do_type_instantiation to instantiate a member
14325    (a member function or a static member variable) of an
14326    explicitly instantiated class template.  */
14327 static void
14328 instantiate_class_member (tree decl, int extern_p)
14329 {
14330   mark_decl_instantiated (decl, extern_p);
14331   if (! extern_p)
14332     instantiate_decl (decl, /*defer_ok=*/1,
14333                       /*expl_inst_class_mem_p=*/true);
14334 }
14335
14336 /* Perform an explicit instantiation of template class T.  STORAGE, if
14337    non-null, is the RID for extern, inline or static.  COMPLAIN is
14338    nonzero if this is called from the parser, zero if called recursively,
14339    since the standard is unclear (as detailed below).  */
14340
14341 void
14342 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
14343 {
14344   int extern_p = 0;
14345   int nomem_p = 0;
14346   int static_p = 0;
14347   int previous_instantiation_extern_p = 0;
14348
14349   if (TREE_CODE (t) == TYPE_DECL)
14350     t = TREE_TYPE (t);
14351
14352   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
14353     {
14354       error ("explicit instantiation of non-template type %qT", t);
14355       return;
14356     }
14357
14358   complete_type (t);
14359
14360   if (!COMPLETE_TYPE_P (t))
14361     {
14362       if (complain & tf_error)
14363         error ("explicit instantiation of %q#T before definition of template",
14364                t);
14365       return;
14366     }
14367
14368   if (storage != NULL_TREE)
14369     {
14370       if (pedantic && !in_system_header)
14371         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
14372                 storage);
14373
14374       if (storage == ridpointers[(int) RID_INLINE])
14375         nomem_p = 1;
14376       else if (storage == ridpointers[(int) RID_EXTERN])
14377         extern_p = 1;
14378       else if (storage == ridpointers[(int) RID_STATIC])
14379         static_p = 1;
14380       else
14381         {
14382           error ("storage class %qD applied to template instantiation",
14383                  storage);
14384           extern_p = 0;
14385         }
14386     }
14387
14388   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
14389     {
14390       /* DR 259 [temp.spec].
14391
14392          Both an explicit instantiation and a declaration of an explicit
14393          specialization shall not appear in a program unless the explicit
14394          instantiation follows a declaration of the explicit specialization.
14395
14396          For a given set of template parameters, if an explicit
14397          instantiation of a template appears after a declaration of an
14398          explicit specialization for that template, the explicit
14399          instantiation has no effect.  */
14400       return;
14401     }
14402   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
14403     {
14404       /* [temp.spec]
14405
14406          No program shall explicitly instantiate any template more
14407          than once.
14408
14409          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
14410          instantiation was `extern'.  If EXTERN_P then the second is.
14411          These cases are OK.  */
14412       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
14413
14414       if (!previous_instantiation_extern_p && !extern_p
14415           && (complain & tf_error))
14416         pedwarn ("duplicate explicit instantiation of %q#T", t);
14417
14418       /* If we've already instantiated the template, just return now.  */
14419       if (!CLASSTYPE_INTERFACE_ONLY (t))
14420         return;
14421     }
14422
14423   check_explicit_instantiation_namespace (TYPE_NAME (t));
14424   mark_class_instantiated (t, extern_p);
14425
14426   if (nomem_p)
14427     return;
14428
14429   {
14430     tree tmp;
14431
14432     /* In contrast to implicit instantiation, where only the
14433        declarations, and not the definitions, of members are
14434        instantiated, we have here:
14435
14436          [temp.explicit]
14437
14438          The explicit instantiation of a class template specialization
14439          implies the instantiation of all of its members not
14440          previously explicitly specialized in the translation unit
14441          containing the explicit instantiation.
14442
14443        Of course, we can't instantiate member template classes, since
14444        we don't have any arguments for them.  Note that the standard
14445        is unclear on whether the instantiation of the members are
14446        *explicit* instantiations or not.  However, the most natural
14447        interpretation is that it should be an explicit instantiation.  */
14448
14449     if (! static_p)
14450       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
14451         if (TREE_CODE (tmp) == FUNCTION_DECL
14452             && DECL_TEMPLATE_INSTANTIATION (tmp))
14453           instantiate_class_member (tmp, extern_p);
14454
14455     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
14456       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
14457         instantiate_class_member (tmp, extern_p);
14458
14459     if (CLASSTYPE_NESTED_UTDS (t))
14460       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
14461                              bt_instantiate_type_proc, &storage);
14462   }
14463 }
14464
14465 /* Given a function DECL, which is a specialization of TMPL, modify
14466    DECL to be a re-instantiation of TMPL with the same template
14467    arguments.  TMPL should be the template into which tsubst'ing
14468    should occur for DECL, not the most general template.
14469
14470    One reason for doing this is a scenario like this:
14471
14472      template <class T>
14473      void f(const T&, int i);
14474
14475      void g() { f(3, 7); }
14476
14477      template <class T>
14478      void f(const T& t, const int i) { }
14479
14480    Note that when the template is first instantiated, with
14481    instantiate_template, the resulting DECL will have no name for the
14482    first parameter, and the wrong type for the second.  So, when we go
14483    to instantiate the DECL, we regenerate it.  */
14484
14485 static void
14486 regenerate_decl_from_template (tree decl, tree tmpl)
14487 {
14488   /* The arguments used to instantiate DECL, from the most general
14489      template.  */
14490   tree args;
14491   tree code_pattern;
14492
14493   args = DECL_TI_ARGS (decl);
14494   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
14495
14496   /* Make sure that we can see identifiers, and compute access
14497      correctly.  */
14498   push_access_scope (decl);
14499
14500   if (TREE_CODE (decl) == FUNCTION_DECL)
14501     {
14502       tree decl_parm;
14503       tree pattern_parm;
14504       tree specs;
14505       int args_depth;
14506       int parms_depth;
14507
14508       args_depth = TMPL_ARGS_DEPTH (args);
14509       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
14510       if (args_depth > parms_depth)
14511         args = get_innermost_template_args (args, parms_depth);
14512
14513       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
14514                                               args, tf_error, NULL_TREE);
14515       if (specs)
14516         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
14517                                                     specs);
14518
14519       /* Merge parameter declarations.  */
14520       decl_parm = skip_artificial_parms_for (decl,
14521                                              DECL_ARGUMENTS (decl));
14522       pattern_parm
14523         = skip_artificial_parms_for (code_pattern,
14524                                      DECL_ARGUMENTS (code_pattern));
14525       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
14526         {
14527           tree parm_type;
14528           tree attributes;
14529           
14530           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14531             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
14532           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
14533                               NULL_TREE);
14534           parm_type = type_decays_to (parm_type);
14535           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14536             TREE_TYPE (decl_parm) = parm_type;
14537           attributes = DECL_ATTRIBUTES (pattern_parm);
14538           if (DECL_ATTRIBUTES (decl_parm) != attributes)
14539             {
14540               DECL_ATTRIBUTES (decl_parm) = attributes;
14541               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14542             }
14543           decl_parm = TREE_CHAIN (decl_parm);
14544           pattern_parm = TREE_CHAIN (pattern_parm);
14545         }
14546       /* Merge any parameters that match with the function parameter
14547          pack.  */
14548       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
14549         {
14550           int i, len;
14551           tree expanded_types;
14552           /* Expand the TYPE_PACK_EXPANSION that provides the types for
14553              the parameters in this function parameter pack.  */
14554           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
14555                                                  args, tf_error, NULL_TREE);
14556           len = TREE_VEC_LENGTH (expanded_types);
14557           for (i = 0; i < len; i++)
14558             {
14559               tree parm_type;
14560               tree attributes;
14561           
14562               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14563                 /* Rename the parameter to include the index.  */
14564                 DECL_NAME (decl_parm) = 
14565                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14566               parm_type = TREE_VEC_ELT (expanded_types, i);
14567               parm_type = type_decays_to (parm_type);
14568               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14569                 TREE_TYPE (decl_parm) = parm_type;
14570               attributes = DECL_ATTRIBUTES (pattern_parm);
14571               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14572                 {
14573                   DECL_ATTRIBUTES (decl_parm) = attributes;
14574                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14575                 }
14576               decl_parm = TREE_CHAIN (decl_parm);
14577             }
14578         }
14579       /* Merge additional specifiers from the CODE_PATTERN.  */
14580       if (DECL_DECLARED_INLINE_P (code_pattern)
14581           && !DECL_DECLARED_INLINE_P (decl))
14582         DECL_DECLARED_INLINE_P (decl) = 1;
14583       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14584         DECL_INLINE (decl) = 1;
14585     }
14586   else if (TREE_CODE (decl) == VAR_DECL)
14587     DECL_INITIAL (decl) =
14588       tsubst_expr (DECL_INITIAL (code_pattern), args,
14589                    tf_error, DECL_TI_TEMPLATE (decl),
14590                    /*integral_constant_expression_p=*/false);
14591   else
14592     gcc_unreachable ();
14593
14594   pop_access_scope (decl);
14595 }
14596
14597 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14598    substituted to get DECL.  */
14599
14600 tree
14601 template_for_substitution (tree decl)
14602 {
14603   tree tmpl = DECL_TI_TEMPLATE (decl);
14604
14605   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14606      for the instantiation.  This is not always the most general
14607      template.  Consider, for example:
14608
14609         template <class T>
14610         struct S { template <class U> void f();
14611                    template <> void f<int>(); };
14612
14613      and an instantiation of S<double>::f<int>.  We want TD to be the
14614      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14615   while (/* An instantiation cannot have a definition, so we need a
14616             more general template.  */
14617          DECL_TEMPLATE_INSTANTIATION (tmpl)
14618            /* We must also deal with friend templates.  Given:
14619
14620                 template <class T> struct S {
14621                   template <class U> friend void f() {};
14622                 };
14623
14624               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14625               so far as the language is concerned, but that's still
14626               where we get the pattern for the instantiation from.  On
14627               other hand, if the definition comes outside the class, say:
14628
14629                 template <class T> struct S {
14630                   template <class U> friend void f();
14631                 };
14632                 template <class U> friend void f() {}
14633
14634               we don't need to look any further.  That's what the check for
14635               DECL_INITIAL is for.  */
14636           || (TREE_CODE (decl) == FUNCTION_DECL
14637               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14638               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14639     {
14640       /* The present template, TD, should not be a definition.  If it
14641          were a definition, we should be using it!  Note that we
14642          cannot restructure the loop to just keep going until we find
14643          a template with a definition, since that might go too far if
14644          a specialization was declared, but not defined.  */
14645       gcc_assert (TREE_CODE (decl) != VAR_DECL
14646                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14647
14648       /* Fetch the more general template.  */
14649       tmpl = DECL_TI_TEMPLATE (tmpl);
14650     }
14651
14652   return tmpl;
14653 }
14654
14655 /* Produce the definition of D, a _DECL generated from a template.  If
14656    DEFER_OK is nonzero, then we don't have to actually do the
14657    instantiation now; we just have to do it sometime.  Normally it is
14658    an error if this is an explicit instantiation but D is undefined.
14659    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14660    explicitly instantiated class template.  */
14661
14662 tree
14663 instantiate_decl (tree d, int defer_ok,
14664                   bool expl_inst_class_mem_p)
14665 {
14666   tree tmpl = DECL_TI_TEMPLATE (d);
14667   tree gen_args;
14668   tree args;
14669   tree td;
14670   tree code_pattern;
14671   tree spec;
14672   tree gen_tmpl;
14673   bool pattern_defined;
14674   int need_push;
14675   location_t saved_loc = input_location;
14676   int saved_in_system_header = in_system_header;
14677   bool external_p;
14678
14679   /* This function should only be used to instantiate templates for
14680      functions and static member variables.  */
14681   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14682               || TREE_CODE (d) == VAR_DECL);
14683
14684   /* Variables are never deferred; if instantiation is required, they
14685      are instantiated right away.  That allows for better code in the
14686      case that an expression refers to the value of the variable --
14687      if the variable has a constant value the referring expression can
14688      take advantage of that fact.  */
14689   if (TREE_CODE (d) == VAR_DECL)
14690     defer_ok = 0;
14691
14692   /* Don't instantiate cloned functions.  Instead, instantiate the
14693      functions they cloned.  */
14694   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14695     d = DECL_CLONED_FUNCTION (d);
14696
14697   if (DECL_TEMPLATE_INSTANTIATED (d))
14698     /* D has already been instantiated.  It might seem reasonable to
14699        check whether or not D is an explicit instantiation, and, if so,
14700        stop here.  But when an explicit instantiation is deferred
14701        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14702        is set, even though we still need to do the instantiation.  */
14703     return d;
14704
14705   /* If we already have a specialization of this declaration, then
14706      there's no reason to instantiate it.  Note that
14707      retrieve_specialization gives us both instantiations and
14708      specializations, so we must explicitly check
14709      DECL_TEMPLATE_SPECIALIZATION.  */
14710   gen_tmpl = most_general_template (tmpl);
14711   gen_args = DECL_TI_ARGS (d);
14712   spec = retrieve_specialization (gen_tmpl, gen_args,
14713                                   /*class_specializations_p=*/false);
14714   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14715     return spec;
14716
14717   /* This needs to happen before any tsubsting.  */
14718   if (! push_tinst_level (d))
14719     return d;
14720
14721   timevar_push (TV_PARSE);
14722
14723   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14724      for the instantiation.  */
14725   td = template_for_substitution (d);
14726   code_pattern = DECL_TEMPLATE_RESULT (td);
14727
14728   /* We should never be trying to instantiate a member of a class
14729      template or partial specialization.  */
14730   gcc_assert (d != code_pattern);
14731
14732   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14733       || DECL_TEMPLATE_SPECIALIZATION (td))
14734     /* In the case of a friend template whose definition is provided
14735        outside the class, we may have too many arguments.  Drop the
14736        ones we don't need.  The same is true for specializations.  */
14737     args = get_innermost_template_args
14738       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14739   else
14740     args = gen_args;
14741
14742   if (TREE_CODE (d) == FUNCTION_DECL)
14743     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14744   else
14745     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14746
14747   /* We may be in the middle of deferred access check.  Disable it now.  */
14748   push_deferring_access_checks (dk_no_deferred);
14749
14750   /* Unless an explicit instantiation directive has already determined
14751      the linkage of D, remember that a definition is available for
14752      this entity.  */
14753   if (pattern_defined
14754       && !DECL_INTERFACE_KNOWN (d)
14755       && !DECL_NOT_REALLY_EXTERN (d))
14756     mark_definable (d);
14757
14758   input_location = DECL_SOURCE_LOCATION (d);
14759   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14760
14761   /* If D is a member of an explicitly instantiated class template,
14762      and no definition is available, treat it like an implicit
14763      instantiation.  */
14764   if (!pattern_defined && expl_inst_class_mem_p
14765       && DECL_EXPLICIT_INSTANTIATION (d))
14766     {
14767       DECL_NOT_REALLY_EXTERN (d) = 0;
14768       DECL_INTERFACE_KNOWN (d) = 0;
14769       SET_DECL_IMPLICIT_INSTANTIATION (d);
14770     }
14771
14772   if (!defer_ok)
14773     {
14774       /* Recheck the substitutions to obtain any warning messages
14775          about ignoring cv qualifiers.  */
14776       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14777       tree type = TREE_TYPE (gen);
14778
14779       /* Make sure that we can see identifiers, and compute access
14780          correctly.  D is already the target FUNCTION_DECL with the
14781          right context.  */
14782       push_access_scope (d);
14783
14784       if (TREE_CODE (gen) == FUNCTION_DECL)
14785         {
14786           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14787           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14788                                           d);
14789           /* Don't simply tsubst the function type, as that will give
14790              duplicate warnings about poor parameter qualifications.
14791              The function arguments are the same as the decl_arguments
14792              without the top level cv qualifiers.  */
14793           type = TREE_TYPE (type);
14794         }
14795       tsubst (type, gen_args, tf_warning_or_error, d);
14796
14797       pop_access_scope (d);
14798     }
14799
14800   /* Check to see whether we know that this template will be
14801      instantiated in some other file, as with "extern template"
14802      extension.  */
14803   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14804   /* In general, we do not instantiate such templates...  */
14805   if (external_p
14806       /* ... but we instantiate inline functions so that we can inline
14807          them and ... */
14808       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14809       /* ... we instantiate static data members whose values are
14810          needed in integral constant expressions.  */
14811       && ! (TREE_CODE (d) == VAR_DECL
14812             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14813     goto out;
14814   /* Defer all other templates, unless we have been explicitly
14815      forbidden from doing so.  */
14816   if (/* If there is no definition, we cannot instantiate the
14817          template.  */
14818       ! pattern_defined
14819       /* If it's OK to postpone instantiation, do so.  */
14820       || defer_ok
14821       /* If this is a static data member that will be defined
14822          elsewhere, we don't want to instantiate the entire data
14823          member, but we do want to instantiate the initializer so that
14824          we can substitute that elsewhere.  */
14825       || (external_p && TREE_CODE (d) == VAR_DECL))
14826     {
14827       /* The definition of the static data member is now required so
14828          we must substitute the initializer.  */
14829       if (TREE_CODE (d) == VAR_DECL
14830           && !DECL_INITIAL (d)
14831           && DECL_INITIAL (code_pattern))
14832         {
14833           tree ns;
14834           tree init;
14835
14836           ns = decl_namespace_context (d);
14837           push_nested_namespace (ns);
14838           push_nested_class (DECL_CONTEXT (d));
14839           init = tsubst_expr (DECL_INITIAL (code_pattern),
14840                               args,
14841                               tf_warning_or_error, NULL_TREE,
14842                               /*integral_constant_expression_p=*/false);
14843           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14844                           /*asmspec_tree=*/NULL_TREE,
14845                           LOOKUP_ONLYCONVERTING);
14846           pop_nested_class ();
14847           pop_nested_namespace (ns);
14848         }
14849
14850       /* We restore the source position here because it's used by
14851          add_pending_template.  */
14852       input_location = saved_loc;
14853
14854       if (at_eof && !pattern_defined
14855           && DECL_EXPLICIT_INSTANTIATION (d))
14856         /* [temp.explicit]
14857
14858            The definition of a non-exported function template, a
14859            non-exported member function template, or a non-exported
14860            member function or static data member of a class template
14861            shall be present in every translation unit in which it is
14862            explicitly instantiated.  */
14863         pedwarn
14864           ("explicit instantiation of %qD but no definition available", d);
14865
14866       /* ??? Historically, we have instantiated inline functions, even
14867          when marked as "extern template".  */
14868       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14869         add_pending_template (d);
14870       goto out;
14871     }
14872   /* Tell the repository that D is available in this translation unit
14873      -- and see if it is supposed to be instantiated here.  */
14874   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14875     {
14876       /* In a PCH file, despite the fact that the repository hasn't
14877          requested instantiation in the PCH it is still possible that
14878          an instantiation will be required in a file that includes the
14879          PCH.  */
14880       if (pch_file)
14881         add_pending_template (d);
14882       /* Instantiate inline functions so that the inliner can do its
14883          job, even though we'll not be emitting a copy of this
14884          function.  */
14885       if (!(TREE_CODE (d) == FUNCTION_DECL
14886             && flag_inline_trees
14887             && DECL_DECLARED_INLINE_P (d)))
14888         goto out;
14889     }
14890
14891   need_push = !cfun || !global_bindings_p ();
14892   if (need_push)
14893     push_to_top_level ();
14894
14895   /* Mark D as instantiated so that recursive calls to
14896      instantiate_decl do not try to instantiate it again.  */
14897   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14898
14899   /* Regenerate the declaration in case the template has been modified
14900      by a subsequent redeclaration.  */
14901   regenerate_decl_from_template (d, td);
14902
14903   /* We already set the file and line above.  Reset them now in case
14904      they changed as a result of calling regenerate_decl_from_template.  */
14905   input_location = DECL_SOURCE_LOCATION (d);
14906
14907   if (TREE_CODE (d) == VAR_DECL)
14908     {
14909       tree init;
14910
14911       /* Clear out DECL_RTL; whatever was there before may not be right
14912          since we've reset the type of the declaration.  */
14913       SET_DECL_RTL (d, NULL_RTX);
14914       DECL_IN_AGGR_P (d) = 0;
14915
14916       /* The initializer is placed in DECL_INITIAL by
14917          regenerate_decl_from_template.  Pull it out so that
14918          finish_decl can process it.  */
14919       init = DECL_INITIAL (d);
14920       DECL_INITIAL (d) = NULL_TREE;
14921       DECL_INITIALIZED_P (d) = 0;
14922
14923       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14924          initializer.  That function will defer actual emission until
14925          we have a chance to determine linkage.  */
14926       DECL_EXTERNAL (d) = 0;
14927
14928       /* Enter the scope of D so that access-checking works correctly.  */
14929       push_nested_class (DECL_CONTEXT (d));
14930       finish_decl (d, init, NULL_TREE);
14931       pop_nested_class ();
14932     }
14933   else if (TREE_CODE (d) == FUNCTION_DECL)
14934     {
14935       htab_t saved_local_specializations;
14936       tree subst_decl;
14937       tree tmpl_parm;
14938       tree spec_parm;
14939
14940       /* Save away the current list, in case we are instantiating one
14941          template from within the body of another.  */
14942       saved_local_specializations = local_specializations;
14943
14944       /* Set up the list of local specializations.  */
14945       local_specializations = htab_create (37,
14946                                            hash_local_specialization,
14947                                            eq_local_specializations,
14948                                            NULL);
14949
14950       /* Set up context.  */
14951       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14952
14953       /* Create substitution entries for the parameters.  */
14954       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14955       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14956       spec_parm = DECL_ARGUMENTS (d);
14957       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14958         {
14959           register_local_specialization (spec_parm, tmpl_parm);
14960           spec_parm = skip_artificial_parms_for (d, spec_parm);
14961           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14962         }
14963       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14964         {
14965           register_local_specialization (spec_parm, tmpl_parm);
14966           tmpl_parm = TREE_CHAIN (tmpl_parm);
14967           spec_parm = TREE_CHAIN (spec_parm);
14968         }
14969       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14970         {
14971           /* Collect all of the extra "packed" parameters into an
14972              argument pack.  */
14973           tree parmvec;
14974           tree parmtypevec;
14975           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14976           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14977           int i, len = 0;
14978           tree t;
14979           
14980           /* Count how many parameters remain.  */
14981           for (t = spec_parm; t; t = TREE_CHAIN (t))
14982             len++;
14983
14984           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14985           parmvec = make_tree_vec (len);
14986           parmtypevec = make_tree_vec (len);
14987           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14988             {
14989               TREE_VEC_ELT (parmvec, i) = spec_parm;
14990               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14991             }
14992
14993           /* Build the argument packs.  */
14994           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14995           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14996           TREE_TYPE (argpack) = argtypepack;
14997           
14998           /* Register the (value) argument pack as a specialization of
14999              TMPL_PARM, then move on.  */
15000           register_local_specialization (argpack, tmpl_parm);
15001           tmpl_parm = TREE_CHAIN (tmpl_parm);
15002         }
15003       gcc_assert (!spec_parm);
15004
15005       /* Substitute into the body of the function.  */
15006       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
15007                    tf_warning_or_error, tmpl,
15008                    /*integral_constant_expression_p=*/false);
15009
15010       /* Set the current input_location to the end of the function
15011          so that finish_function knows where we are.  */
15012       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
15013
15014       /* We don't need the local specializations any more.  */
15015       htab_delete (local_specializations);
15016       local_specializations = saved_local_specializations;
15017
15018       /* Finish the function.  */
15019       d = finish_function (0);
15020       expand_or_defer_fn (d);
15021     }
15022
15023   /* We're not deferring instantiation any more.  */
15024   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
15025
15026   if (need_push)
15027     pop_from_top_level ();
15028
15029 out:
15030   input_location = saved_loc;
15031   in_system_header = saved_in_system_header;
15032   pop_deferring_access_checks ();
15033   pop_tinst_level ();
15034
15035   timevar_pop (TV_PARSE);
15036
15037   return d;
15038 }
15039
15040 /* Run through the list of templates that we wish we could
15041    instantiate, and instantiate any we can.  RETRIES is the
15042    number of times we retry pending template instantiation.  */
15043
15044 void
15045 instantiate_pending_templates (int retries)
15046 {
15047   int reconsider;
15048   location_t saved_loc = input_location;
15049   int saved_in_system_header = in_system_header;
15050
15051   /* Instantiating templates may trigger vtable generation.  This in turn
15052      may require further template instantiations.  We place a limit here
15053      to avoid infinite loop.  */
15054   if (pending_templates && retries >= max_tinst_depth)
15055     {
15056       tree decl = pending_templates->tinst->decl;
15057
15058       error ("template instantiation depth exceeds maximum of %d"
15059              " instantiating %q+D, possibly from virtual table generation"
15060              " (use -ftemplate-depth-NN to increase the maximum)",
15061              max_tinst_depth, decl);
15062       if (TREE_CODE (decl) == FUNCTION_DECL)
15063         /* Pretend that we defined it.  */
15064         DECL_INITIAL (decl) = error_mark_node;
15065       return;
15066     }
15067
15068   do
15069     {
15070       struct pending_template **t = &pending_templates;
15071       struct pending_template *last = NULL;
15072       reconsider = 0;
15073       while (*t)
15074         {
15075           tree instantiation = reopen_tinst_level ((*t)->tinst);
15076           bool complete = false;
15077
15078           if (TYPE_P (instantiation))
15079             {
15080               tree fn;
15081
15082               if (!COMPLETE_TYPE_P (instantiation))
15083                 {
15084                   instantiate_class_template (instantiation);
15085                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
15086                     for (fn = TYPE_METHODS (instantiation);
15087                          fn;
15088                          fn = TREE_CHAIN (fn))
15089                       if (! DECL_ARTIFICIAL (fn))
15090                         instantiate_decl (fn,
15091                                           /*defer_ok=*/0,
15092                                           /*expl_inst_class_mem_p=*/false);
15093                   if (COMPLETE_TYPE_P (instantiation))
15094                     reconsider = 1;
15095                 }
15096
15097               complete = COMPLETE_TYPE_P (instantiation);
15098             }
15099           else
15100             {
15101               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
15102                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
15103                 {
15104                   instantiation
15105                     = instantiate_decl (instantiation,
15106                                         /*defer_ok=*/0,
15107                                         /*expl_inst_class_mem_p=*/false);
15108                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
15109                     reconsider = 1;
15110                 }
15111
15112               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
15113                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
15114             }
15115
15116           if (complete)
15117             /* If INSTANTIATION has been instantiated, then we don't
15118                need to consider it again in the future.  */
15119             *t = (*t)->next;
15120           else
15121             {
15122               last = *t;
15123               t = &(*t)->next;
15124             }
15125           tinst_depth = 0;
15126           current_tinst_level = NULL;
15127         }
15128       last_pending_template = last;
15129     }
15130   while (reconsider);
15131
15132   input_location = saved_loc;
15133   in_system_header = saved_in_system_header;
15134 }
15135
15136 /* Substitute ARGVEC into T, which is a list of initializers for
15137    either base class or a non-static data member.  The TREE_PURPOSEs
15138    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
15139    instantiate_decl.  */
15140
15141 static tree
15142 tsubst_initializer_list (tree t, tree argvec)
15143 {
15144   tree inits = NULL_TREE;
15145
15146   for (; t; t = TREE_CHAIN (t))
15147     {
15148       tree decl;
15149       tree init;
15150       tree expanded_bases = NULL_TREE;
15151       tree expanded_arguments = NULL_TREE;
15152       int i, len = 1;
15153
15154       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
15155         {
15156           tree expr;
15157           tree arg;
15158
15159           /* Expand the base class expansion type into separate base
15160              classes.  */
15161           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
15162                                                  tf_warning_or_error,
15163                                                  NULL_TREE);
15164           if (expanded_bases == error_mark_node)
15165             continue;
15166           
15167           /* We'll be building separate TREE_LISTs of arguments for
15168              each base.  */
15169           len = TREE_VEC_LENGTH (expanded_bases);
15170           expanded_arguments = make_tree_vec (len);
15171           for (i = 0; i < len; i++)
15172             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
15173
15174           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
15175              expand each argument in the TREE_VALUE of t.  */
15176           expr = make_node (EXPR_PACK_EXPANSION);
15177           PACK_EXPANSION_PARAMETER_PACKS (expr) =
15178             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
15179
15180           /* Substitute parameter packs into each argument in the
15181              TREE_LIST.  */
15182           in_base_initializer = 1;
15183           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
15184             {
15185               tree expanded_exprs;
15186
15187               /* Expand the argument.  */
15188               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
15189               expanded_exprs = tsubst_pack_expansion (expr, argvec,
15190                                                       tf_warning_or_error,
15191                                                       NULL_TREE);
15192
15193               /* Prepend each of the expanded expressions to the
15194                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
15195               for (i = 0; i < len; i++)
15196                 {
15197                   TREE_VEC_ELT (expanded_arguments, i) = 
15198                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
15199                                TREE_VEC_ELT (expanded_arguments, i));
15200                 }
15201             }
15202           in_base_initializer = 0;
15203
15204           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
15205              since we built them backwards.  */
15206           for (i = 0; i < len; i++)
15207             {
15208               TREE_VEC_ELT (expanded_arguments, i) = 
15209                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
15210             }
15211         }
15212
15213       for (i = 0; i < len; ++i)
15214         {
15215           if (expanded_bases)
15216             {
15217               decl = TREE_VEC_ELT (expanded_bases, i);
15218               decl = expand_member_init (decl);
15219               init = TREE_VEC_ELT (expanded_arguments, i);
15220             }
15221           else
15222             {
15223               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
15224                                   tf_warning_or_error, NULL_TREE);
15225
15226               decl = expand_member_init (decl);
15227               if (decl && !DECL_P (decl))
15228                 in_base_initializer = 1;
15229
15230               init = tsubst_expr (TREE_VALUE (t), argvec, 
15231                                   tf_warning_or_error, NULL_TREE,
15232                                   /*integral_constant_expression_p=*/false);
15233               in_base_initializer = 0;
15234             }
15235
15236           if (decl)
15237             {
15238               init = build_tree_list (decl, init);
15239               TREE_CHAIN (init) = inits;
15240               inits = init;
15241             }
15242         }
15243     }
15244   return inits;
15245 }
15246
15247 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
15248
15249 static void
15250 set_current_access_from_decl (tree decl)
15251 {
15252   if (TREE_PRIVATE (decl))
15253     current_access_specifier = access_private_node;
15254   else if (TREE_PROTECTED (decl))
15255     current_access_specifier = access_protected_node;
15256   else
15257     current_access_specifier = access_public_node;
15258 }
15259
15260 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
15261    is the instantiation (which should have been created with
15262    start_enum) and ARGS are the template arguments to use.  */
15263
15264 static void
15265 tsubst_enum (tree tag, tree newtag, tree args)
15266 {
15267   tree e;
15268
15269   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
15270     {
15271       tree value;
15272       tree decl;
15273
15274       decl = TREE_VALUE (e);
15275       /* Note that in a template enum, the TREE_VALUE is the
15276          CONST_DECL, not the corresponding INTEGER_CST.  */
15277       value = tsubst_expr (DECL_INITIAL (decl),
15278                            args, tf_warning_or_error, NULL_TREE,
15279                            /*integral_constant_expression_p=*/true);
15280
15281       /* Give this enumeration constant the correct access.  */
15282       set_current_access_from_decl (decl);
15283
15284       /* Actually build the enumerator itself.  */
15285       build_enumerator (DECL_NAME (decl), value, newtag);
15286     }
15287
15288   finish_enum (newtag);
15289   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
15290     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
15291 }
15292
15293 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
15294    its type -- but without substituting the innermost set of template
15295    arguments.  So, innermost set of template parameters will appear in
15296    the type.  */
15297
15298 tree
15299 get_mostly_instantiated_function_type (tree decl)
15300 {
15301   tree fn_type;
15302   tree tmpl;
15303   tree targs;
15304   tree tparms;
15305   int parm_depth;
15306
15307   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15308   targs = DECL_TI_ARGS (decl);
15309   tparms = DECL_TEMPLATE_PARMS (tmpl);
15310   parm_depth = TMPL_PARMS_DEPTH (tparms);
15311
15312   /* There should be as many levels of arguments as there are levels
15313      of parameters.  */
15314   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
15315
15316   fn_type = TREE_TYPE (tmpl);
15317
15318   if (parm_depth == 1)
15319     /* No substitution is necessary.  */
15320     ;
15321   else
15322     {
15323       int i, save_access_control;
15324       tree partial_args;
15325
15326       /* Replace the innermost level of the TARGS with NULL_TREEs to
15327          let tsubst know not to substitute for those parameters.  */
15328       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
15329       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
15330         SET_TMPL_ARGS_LEVEL (partial_args, i,
15331                              TMPL_ARGS_LEVEL (targs, i));
15332       SET_TMPL_ARGS_LEVEL (partial_args,
15333                            TMPL_ARGS_DEPTH (targs),
15334                            make_tree_vec (DECL_NTPARMS (tmpl)));
15335
15336       /* Disable access control as this function is used only during
15337          name-mangling.  */
15338       save_access_control = flag_access_control;
15339       flag_access_control = 0;
15340
15341       ++processing_template_decl;
15342       /* Now, do the (partial) substitution to figure out the
15343          appropriate function type.  */
15344       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
15345       --processing_template_decl;
15346
15347       /* Substitute into the template parameters to obtain the real
15348          innermost set of parameters.  This step is important if the
15349          innermost set of template parameters contains value
15350          parameters whose types depend on outer template parameters.  */
15351       TREE_VEC_LENGTH (partial_args)--;
15352       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
15353
15354       flag_access_control = save_access_control;
15355     }
15356
15357   return fn_type;
15358 }
15359
15360 /* Return truthvalue if we're processing a template different from
15361    the last one involved in diagnostics.  */
15362 int
15363 problematic_instantiation_changed (void)
15364 {
15365   return last_template_error_tick != tinst_level_tick;
15366 }
15367
15368 /* Remember current template involved in diagnostics.  */
15369 void
15370 record_last_problematic_instantiation (void)
15371 {
15372   last_template_error_tick = tinst_level_tick;
15373 }
15374
15375 struct tinst_level *
15376 current_instantiation (void)
15377 {
15378   return current_tinst_level;
15379 }
15380
15381 /* [temp.param] Check that template non-type parm TYPE is of an allowable
15382    type. Return zero for ok, nonzero for disallowed. Issue error and
15383    warning messages under control of COMPLAIN.  */
15384
15385 static int
15386 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
15387 {
15388   if (INTEGRAL_TYPE_P (type))
15389     return 0;
15390   else if (POINTER_TYPE_P (type))
15391     return 0;
15392   else if (TYPE_PTR_TO_MEMBER_P (type))
15393     return 0;
15394   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
15395     return 0;
15396   else if (TREE_CODE (type) == TYPENAME_TYPE)
15397     return 0;
15398
15399   if (complain & tf_error)
15400     error ("%q#T is not a valid type for a template constant parameter", type);
15401   return 1;
15402 }
15403
15404 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
15405    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
15406
15407 static bool
15408 dependent_type_p_r (tree type)
15409 {
15410   tree scope;
15411
15412   /* [temp.dep.type]
15413
15414      A type is dependent if it is:
15415
15416      -- a template parameter. Template template parameters are types
15417         for us (since TYPE_P holds true for them) so we handle
15418         them here.  */
15419   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
15420       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
15421     return true;
15422   /* -- a qualified-id with a nested-name-specifier which contains a
15423         class-name that names a dependent type or whose unqualified-id
15424         names a dependent type.  */
15425   if (TREE_CODE (type) == TYPENAME_TYPE)
15426     return true;
15427   /* -- a cv-qualified type where the cv-unqualified type is
15428         dependent.  */
15429   type = TYPE_MAIN_VARIANT (type);
15430   /* -- a compound type constructed from any dependent type.  */
15431   if (TYPE_PTR_TO_MEMBER_P (type))
15432     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
15433             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
15434                                            (type)));
15435   else if (TREE_CODE (type) == POINTER_TYPE
15436            || TREE_CODE (type) == REFERENCE_TYPE)
15437     return dependent_type_p (TREE_TYPE (type));
15438   else if (TREE_CODE (type) == FUNCTION_TYPE
15439            || TREE_CODE (type) == METHOD_TYPE)
15440     {
15441       tree arg_type;
15442
15443       if (dependent_type_p (TREE_TYPE (type)))
15444         return true;
15445       for (arg_type = TYPE_ARG_TYPES (type);
15446            arg_type;
15447            arg_type = TREE_CHAIN (arg_type))
15448         if (dependent_type_p (TREE_VALUE (arg_type)))
15449           return true;
15450       return false;
15451     }
15452   /* -- an array type constructed from any dependent type or whose
15453         size is specified by a constant expression that is
15454         value-dependent.  */
15455   if (TREE_CODE (type) == ARRAY_TYPE)
15456     {
15457       if (TYPE_DOMAIN (type)
15458           && dependent_type_p (TYPE_DOMAIN (type)))
15459         return true;
15460       return dependent_type_p (TREE_TYPE (type));
15461     }
15462   else if (TREE_CODE (type) == INTEGER_TYPE
15463            && !TREE_CONSTANT (TYPE_MAX_VALUE (type)))
15464     {
15465       /* If this is the TYPE_DOMAIN of an array type, consider it
15466          dependent.  */
15467       return (value_dependent_expression_p (TYPE_MAX_VALUE (type))
15468               || type_dependent_expression_p (TYPE_MAX_VALUE (type)));
15469     }
15470
15471   /* -- a template-id in which either the template name is a template
15472      parameter ...  */
15473   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
15474     return true;
15475   /* ... or any of the template arguments is a dependent type or
15476         an expression that is type-dependent or value-dependent.  */
15477   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
15478            && (any_dependent_template_arguments_p
15479                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
15480     return true;
15481
15482   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
15483      argument of the `typeof' expression is not type-dependent, then
15484      it should already been have resolved.  */
15485   if (TREE_CODE (type) == TYPEOF_TYPE
15486       || TREE_CODE (type) == DECLTYPE_TYPE)
15487     return true;
15488
15489   /* A template argument pack is dependent if any of its packed
15490      arguments are.  */
15491   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
15492     {
15493       tree args = ARGUMENT_PACK_ARGS (type);
15494       int i, len = TREE_VEC_LENGTH (args);
15495       for (i = 0; i < len; ++i)
15496         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15497           return true;
15498     }
15499
15500   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
15501      be template parameters.  */
15502   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
15503     return true;
15504
15505   /* The standard does not specifically mention types that are local
15506      to template functions or local classes, but they should be
15507      considered dependent too.  For example:
15508
15509        template <int I> void f() {
15510          enum E { a = I };
15511          S<sizeof (E)> s;
15512        }
15513
15514      The size of `E' cannot be known until the value of `I' has been
15515      determined.  Therefore, `E' must be considered dependent.  */
15516   scope = TYPE_CONTEXT (type);
15517   if (scope && TYPE_P (scope))
15518     return dependent_type_p (scope);
15519   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15520     return type_dependent_expression_p (scope);
15521
15522   /* Other types are non-dependent.  */
15523   return false;
15524 }
15525
15526 /* Returns TRUE if TYPE is dependent, in the sense of
15527    [temp.dep.type].  */
15528
15529 bool
15530 dependent_type_p (tree type)
15531 {
15532   /* If there are no template parameters in scope, then there can't be
15533      any dependent types.  */
15534   if (!processing_template_decl)
15535     {
15536       /* If we are not processing a template, then nobody should be
15537          providing us with a dependent type.  */
15538       gcc_assert (type);
15539       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
15540       return false;
15541     }
15542
15543   /* If the type is NULL, we have not computed a type for the entity
15544      in question; in that case, the type is dependent.  */
15545   if (!type)
15546     return true;
15547
15548   /* Erroneous types can be considered non-dependent.  */
15549   if (type == error_mark_node)
15550     return false;
15551
15552   /* If we have not already computed the appropriate value for TYPE,
15553      do so now.  */
15554   if (!TYPE_DEPENDENT_P_VALID (type))
15555     {
15556       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15557       TYPE_DEPENDENT_P_VALID (type) = 1;
15558     }
15559
15560   return TYPE_DEPENDENT_P (type);
15561 }
15562
15563 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15564
15565 static bool
15566 dependent_scope_ref_p (tree expression, bool criterion (tree))
15567 {
15568   tree scope;
15569   tree name;
15570
15571   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15572
15573   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15574     return true;
15575
15576   scope = TREE_OPERAND (expression, 0);
15577   name = TREE_OPERAND (expression, 1);
15578
15579   /* [temp.dep.expr]
15580
15581      An id-expression is type-dependent if it contains a
15582      nested-name-specifier that contains a class-name that names a
15583      dependent type.  */
15584   /* The suggested resolution to Core Issue 2 implies that if the
15585      qualifying type is the current class, then we must peek
15586      inside it.  */
15587   if (DECL_P (name)
15588       && currently_open_class (scope)
15589       && !criterion (name))
15590     return false;
15591   if (dependent_type_p (scope))
15592     return true;
15593
15594   return false;
15595 }
15596
15597 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15598    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15599    expression.  */
15600
15601 bool
15602 value_dependent_expression_p (tree expression)
15603 {
15604   if (!processing_template_decl)
15605     return false;
15606
15607   /* A name declared with a dependent type.  */
15608   if (DECL_P (expression) && type_dependent_expression_p (expression))
15609     return true;
15610
15611   switch (TREE_CODE (expression))
15612     {
15613     case IDENTIFIER_NODE:
15614       /* A name that has not been looked up -- must be dependent.  */
15615       return true;
15616
15617     case TEMPLATE_PARM_INDEX:
15618       /* A non-type template parm.  */
15619       return true;
15620
15621     case CONST_DECL:
15622       /* A non-type template parm.  */
15623       if (DECL_TEMPLATE_PARM_P (expression))
15624         return true;
15625       return false;
15626
15627     case VAR_DECL:
15628        /* A constant with integral or enumeration type and is initialized
15629           with an expression that is value-dependent.  */
15630       if (DECL_INITIAL (expression)
15631           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15632           && value_dependent_expression_p (DECL_INITIAL (expression)))
15633         return true;
15634       return false;
15635
15636     case DYNAMIC_CAST_EXPR:
15637     case STATIC_CAST_EXPR:
15638     case CONST_CAST_EXPR:
15639     case REINTERPRET_CAST_EXPR:
15640     case CAST_EXPR:
15641       /* These expressions are value-dependent if the type to which
15642          the cast occurs is dependent or the expression being casted
15643          is value-dependent.  */
15644       {
15645         tree type = TREE_TYPE (expression);
15646
15647         if (dependent_type_p (type))
15648           return true;
15649
15650         /* A functional cast has a list of operands.  */
15651         expression = TREE_OPERAND (expression, 0);
15652         if (!expression)
15653           {
15654             /* If there are no operands, it must be an expression such
15655                as "int()". This should not happen for aggregate types
15656                because it would form non-constant expressions.  */
15657             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15658
15659             return false;
15660           }
15661
15662         if (TREE_CODE (expression) == TREE_LIST)
15663           return any_value_dependent_elements_p (expression);
15664
15665         return value_dependent_expression_p (expression);
15666       }
15667
15668     case SIZEOF_EXPR:
15669     case ALIGNOF_EXPR:
15670       /* A `sizeof' expression is value-dependent if the operand is
15671          type-dependent or is a pack expansion.  */
15672       expression = TREE_OPERAND (expression, 0);
15673       if (PACK_EXPANSION_P (expression))
15674         return true;
15675       else if (TYPE_P (expression))
15676         return dependent_type_p (expression);
15677       return type_dependent_expression_p (expression);
15678
15679     case SCOPE_REF:
15680       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15681
15682     case COMPONENT_REF:
15683       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15684               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15685
15686     case CALL_EXPR:
15687       /* A CALL_EXPR may appear in a constant expression if it is a
15688          call to a builtin function, e.g., __builtin_constant_p.  All
15689          such calls are value-dependent.  */
15690       return true;
15691
15692     case NONTYPE_ARGUMENT_PACK:
15693       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15694          is value-dependent.  */
15695       {
15696         tree values = ARGUMENT_PACK_ARGS (expression);
15697         int i, len = TREE_VEC_LENGTH (values);
15698         
15699         for (i = 0; i < len; ++i)
15700           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15701             return true;
15702         
15703         return false;
15704       }
15705
15706     case TRAIT_EXPR:
15707       {
15708         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15709         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15710                 || (type2 ? dependent_type_p (type2) : false));
15711       }
15712
15713     case MODOP_EXPR:
15714       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15715               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15716
15717     default:
15718       /* A constant expression is value-dependent if any subexpression is
15719          value-dependent.  */
15720       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15721         {
15722         case tcc_reference:
15723         case tcc_unary:
15724           return (value_dependent_expression_p
15725                   (TREE_OPERAND (expression, 0)));
15726
15727         case tcc_comparison:
15728         case tcc_binary:
15729           return ((value_dependent_expression_p
15730                    (TREE_OPERAND (expression, 0)))
15731                   || (value_dependent_expression_p
15732                       (TREE_OPERAND (expression, 1))));
15733
15734         case tcc_expression:
15735         case tcc_vl_exp:
15736           {
15737             int i;
15738             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15739               /* In some cases, some of the operands may be missing.
15740                  (For example, in the case of PREDECREMENT_EXPR, the
15741                  amount to increment by may be missing.)  That doesn't
15742                  make the expression dependent.  */
15743               if (TREE_OPERAND (expression, i)
15744                   && (value_dependent_expression_p
15745                       (TREE_OPERAND (expression, i))))
15746                 return true;
15747             return false;
15748           }
15749
15750         default:
15751           break;
15752         }
15753     }
15754
15755   /* The expression is not value-dependent.  */
15756   return false;
15757 }
15758
15759 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15760    [temp.dep.expr].  */
15761
15762 bool
15763 type_dependent_expression_p (tree expression)
15764 {
15765   if (!processing_template_decl)
15766     return false;
15767
15768   if (expression == error_mark_node)
15769     return false;
15770
15771   /* An unresolved name is always dependent.  */
15772   if (TREE_CODE (expression) == IDENTIFIER_NODE
15773       || TREE_CODE (expression) == USING_DECL)
15774     return true;
15775
15776   /* Some expression forms are never type-dependent.  */
15777   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15778       || TREE_CODE (expression) == SIZEOF_EXPR
15779       || TREE_CODE (expression) == ALIGNOF_EXPR
15780       || TREE_CODE (expression) == TRAIT_EXPR
15781       || TREE_CODE (expression) == TYPEID_EXPR
15782       || TREE_CODE (expression) == DELETE_EXPR
15783       || TREE_CODE (expression) == VEC_DELETE_EXPR
15784       || TREE_CODE (expression) == THROW_EXPR)
15785     return false;
15786
15787   /* The types of these expressions depends only on the type to which
15788      the cast occurs.  */
15789   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15790       || TREE_CODE (expression) == STATIC_CAST_EXPR
15791       || TREE_CODE (expression) == CONST_CAST_EXPR
15792       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15793       || TREE_CODE (expression) == CAST_EXPR)
15794     return dependent_type_p (TREE_TYPE (expression));
15795
15796   /* The types of these expressions depends only on the type created
15797      by the expression.  */
15798   if (TREE_CODE (expression) == NEW_EXPR
15799       || TREE_CODE (expression) == VEC_NEW_EXPR)
15800     {
15801       /* For NEW_EXPR tree nodes created inside a template, either
15802          the object type itself or a TREE_LIST may appear as the
15803          operand 1.  */
15804       tree type = TREE_OPERAND (expression, 1);
15805       if (TREE_CODE (type) == TREE_LIST)
15806         /* This is an array type.  We need to check array dimensions
15807            as well.  */
15808         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15809                || value_dependent_expression_p
15810                     (TREE_OPERAND (TREE_VALUE (type), 1));
15811       else
15812         return dependent_type_p (type);
15813     }
15814
15815   if (TREE_CODE (expression) == SCOPE_REF
15816       && dependent_scope_ref_p (expression,
15817                                 type_dependent_expression_p))
15818     return true;
15819
15820   if (TREE_CODE (expression) == FUNCTION_DECL
15821       && DECL_LANG_SPECIFIC (expression)
15822       && DECL_TEMPLATE_INFO (expression)
15823       && (any_dependent_template_arguments_p
15824           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15825     return true;
15826
15827   if (TREE_CODE (expression) == TEMPLATE_DECL
15828       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15829     return false;
15830
15831   if (TREE_CODE (expression) == STMT_EXPR)
15832     expression = stmt_expr_value_expr (expression);
15833
15834   if (TREE_TYPE (expression) == unknown_type_node)
15835     {
15836       if (TREE_CODE (expression) == ADDR_EXPR)
15837         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15838       if (TREE_CODE (expression) == COMPONENT_REF
15839           || TREE_CODE (expression) == OFFSET_REF)
15840         {
15841           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15842             return true;
15843           expression = TREE_OPERAND (expression, 1);
15844           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15845             return false;
15846         }
15847       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15848       if (TREE_CODE (expression) == SCOPE_REF)
15849         return false;
15850
15851       if (TREE_CODE (expression) == BASELINK)
15852         expression = BASELINK_FUNCTIONS (expression);
15853
15854       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15855         {
15856           if (any_dependent_template_arguments_p
15857               (TREE_OPERAND (expression, 1)))
15858             return true;
15859           expression = TREE_OPERAND (expression, 0);
15860         }
15861       gcc_assert (TREE_CODE (expression) == OVERLOAD
15862                   || TREE_CODE (expression) == FUNCTION_DECL);
15863
15864       while (expression)
15865         {
15866           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15867             return true;
15868           expression = OVL_NEXT (expression);
15869         }
15870       return false;
15871     }
15872
15873   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15874
15875   return (dependent_type_p (TREE_TYPE (expression)));
15876 }
15877
15878 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15879    contains a type-dependent expression.  */
15880
15881 bool
15882 any_type_dependent_arguments_p (const_tree args)
15883 {
15884   while (args)
15885     {
15886       tree arg = TREE_VALUE (args);
15887
15888       if (type_dependent_expression_p (arg))
15889         return true;
15890       args = TREE_CHAIN (args);
15891     }
15892   return false;
15893 }
15894
15895 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15896    expressions) contains any value-dependent expressions.  */
15897
15898 bool
15899 any_value_dependent_elements_p (const_tree list)
15900 {
15901   for (; list; list = TREE_CHAIN (list))
15902     if (value_dependent_expression_p (TREE_VALUE (list)))
15903       return true;
15904
15905   return false;
15906 }
15907
15908 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15909
15910 bool
15911 dependent_template_arg_p (tree arg)
15912 {
15913   if (!processing_template_decl)
15914     return false;
15915
15916   if (TREE_CODE (arg) == TEMPLATE_DECL
15917       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15918     return dependent_template_p (arg);
15919   else if (ARGUMENT_PACK_P (arg))
15920     {
15921       tree args = ARGUMENT_PACK_ARGS (arg);
15922       int i, len = TREE_VEC_LENGTH (args);
15923       for (i = 0; i < len; ++i)
15924         {
15925           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15926             return true;
15927         }
15928
15929       return false;
15930     }
15931   else if (TYPE_P (arg))
15932     return dependent_type_p (arg);
15933   else
15934     return (type_dependent_expression_p (arg)
15935             || value_dependent_expression_p (arg));
15936 }
15937
15938 /* Returns true if ARGS (a collection of template arguments) contains
15939    any types that require structural equality testing.  */
15940
15941 bool
15942 any_template_arguments_need_structural_equality_p (tree args)
15943 {
15944   int i;
15945   int j;
15946
15947   if (!args)
15948     return false;
15949   if (args == error_mark_node)
15950     return true;
15951
15952   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15953     {
15954       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15955       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15956         {
15957           tree arg = TREE_VEC_ELT (level, j);
15958           tree packed_args = NULL_TREE;
15959           int k, len = 1;
15960
15961           if (ARGUMENT_PACK_P (arg))
15962             {
15963               /* Look inside the argument pack.  */
15964               packed_args = ARGUMENT_PACK_ARGS (arg);
15965               len = TREE_VEC_LENGTH (packed_args);
15966             }
15967
15968           for (k = 0; k < len; ++k)
15969             {
15970               if (packed_args)
15971                 arg = TREE_VEC_ELT (packed_args, k);
15972
15973               if (error_operand_p (arg))
15974                 return true;
15975               else if (TREE_CODE (arg) == TEMPLATE_DECL
15976                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15977                 continue;
15978               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15979                 return true;
15980               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15981                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15982                 return true;
15983             }
15984         }
15985     }
15986
15987   return false;
15988 }
15989
15990 /* Returns true if ARGS (a collection of template arguments) contains
15991    any dependent arguments.  */
15992
15993 bool
15994 any_dependent_template_arguments_p (const_tree args)
15995 {
15996   int i;
15997   int j;
15998
15999   if (!args)
16000     return false;
16001   if (args == error_mark_node)
16002     return true;
16003
16004   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
16005     {
16006       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
16007       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
16008         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
16009           return true;
16010     }
16011
16012   return false;
16013 }
16014
16015 /* Returns TRUE if the template TMPL is dependent.  */
16016
16017 bool
16018 dependent_template_p (tree tmpl)
16019 {
16020   if (TREE_CODE (tmpl) == OVERLOAD)
16021     {
16022       while (tmpl)
16023         {
16024           if (dependent_template_p (OVL_FUNCTION (tmpl)))
16025             return true;
16026           tmpl = OVL_CHAIN (tmpl);
16027         }
16028       return false;
16029     }
16030
16031   /* Template template parameters are dependent.  */
16032   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
16033       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
16034     return true;
16035   /* So are names that have not been looked up.  */
16036   if (TREE_CODE (tmpl) == SCOPE_REF
16037       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
16038     return true;
16039   /* So are member templates of dependent classes.  */
16040   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
16041     return dependent_type_p (DECL_CONTEXT (tmpl));
16042   return false;
16043 }
16044
16045 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
16046
16047 bool
16048 dependent_template_id_p (tree tmpl, tree args)
16049 {
16050   return (dependent_template_p (tmpl)
16051           || any_dependent_template_arguments_p (args));
16052 }
16053
16054 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
16055    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
16056    no such TYPE can be found.  Note that this function peers inside
16057    uninstantiated templates and therefore should be used only in
16058    extremely limited situations.  ONLY_CURRENT_P restricts this
16059    peering to the currently open classes hierarchy (which is required
16060    when comparing types).  */
16061
16062 tree
16063 resolve_typename_type (tree type, bool only_current_p)
16064 {
16065   tree scope;
16066   tree name;
16067   tree decl;
16068   int quals;
16069   tree pushed_scope;
16070   tree result;
16071
16072   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
16073
16074   scope = TYPE_CONTEXT (type);
16075   name = TYPE_IDENTIFIER (type);
16076
16077   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
16078      it first before we can figure out what NAME refers to.  */
16079   if (TREE_CODE (scope) == TYPENAME_TYPE)
16080     scope = resolve_typename_type (scope, only_current_p);
16081   /* If we don't know what SCOPE refers to, then we cannot resolve the
16082      TYPENAME_TYPE.  */
16083   if (TREE_CODE (scope) == TYPENAME_TYPE)
16084     return type;
16085   /* If the SCOPE is a template type parameter, we have no way of
16086      resolving the name.  */
16087   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
16088     return type;
16089   /* If the SCOPE is not the current instantiation, there's no reason
16090      to look inside it.  */
16091   if (only_current_p && !currently_open_class (scope))
16092     return type;
16093   /* If SCOPE isn't the template itself, it will not have a valid
16094      TYPE_FIELDS list.  */
16095   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
16096     /* scope is either the template itself or a compatible instantiation
16097        like X<T>, so look up the name in the original template.  */
16098     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
16099   else
16100     /* scope is a partial instantiation, so we can't do the lookup or we
16101        will lose the template arguments.  */
16102     return type;
16103   /* Enter the SCOPE so that name lookup will be resolved as if we
16104      were in the class definition.  In particular, SCOPE will no
16105      longer be considered a dependent type.  */
16106   pushed_scope = push_scope (scope);
16107   /* Look up the declaration.  */
16108   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
16109
16110   result = NULL_TREE;
16111   
16112   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
16113      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
16114   if (!decl)
16115     /*nop*/;
16116   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
16117            && TREE_CODE (decl) == TYPE_DECL)
16118     {
16119       result = TREE_TYPE (decl);
16120       if (result == error_mark_node)
16121         result = NULL_TREE;
16122     }
16123   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
16124            && DECL_CLASS_TEMPLATE_P (decl))
16125     {
16126       tree tmpl;
16127       tree args;
16128       /* Obtain the template and the arguments.  */
16129       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
16130       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
16131       /* Instantiate the template.  */
16132       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
16133                                       /*entering_scope=*/0,
16134                                       tf_error | tf_user);
16135       if (result == error_mark_node)
16136         result = NULL_TREE;
16137     }
16138   
16139   /* Leave the SCOPE.  */
16140   if (pushed_scope)
16141     pop_scope (pushed_scope);
16142
16143   /* If we failed to resolve it, return the original typename.  */
16144   if (!result)
16145     return type;
16146   
16147   /* If lookup found a typename type, resolve that too.  */
16148   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
16149     {
16150       /* Ill-formed programs can cause infinite recursion here, so we
16151          must catch that.  */
16152       TYPENAME_IS_RESOLVING_P (type) = 1;
16153       result = resolve_typename_type (result, only_current_p);
16154       TYPENAME_IS_RESOLVING_P (type) = 0;
16155     }
16156   
16157   /* Qualify the resulting type.  */
16158   quals = cp_type_quals (type);
16159   if (quals)
16160     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
16161
16162   return result;
16163 }
16164
16165 /* EXPR is an expression which is not type-dependent.  Return a proxy
16166    for EXPR that can be used to compute the types of larger
16167    expressions containing EXPR.  */
16168
16169 tree
16170 build_non_dependent_expr (tree expr)
16171 {
16172   tree inner_expr;
16173
16174   /* Preserve null pointer constants so that the type of things like
16175      "p == 0" where "p" is a pointer can be determined.  */
16176   if (null_ptr_cst_p (expr))
16177     return expr;
16178   /* Preserve OVERLOADs; the functions must be available to resolve
16179      types.  */
16180   inner_expr = expr;
16181   if (TREE_CODE (inner_expr) == STMT_EXPR)
16182     inner_expr = stmt_expr_value_expr (inner_expr);
16183   if (TREE_CODE (inner_expr) == ADDR_EXPR)
16184     inner_expr = TREE_OPERAND (inner_expr, 0);
16185   if (TREE_CODE (inner_expr) == COMPONENT_REF)
16186     inner_expr = TREE_OPERAND (inner_expr, 1);
16187   if (is_overloaded_fn (inner_expr)
16188       || TREE_CODE (inner_expr) == OFFSET_REF)
16189     return expr;
16190   /* There is no need to return a proxy for a variable.  */
16191   if (TREE_CODE (expr) == VAR_DECL)
16192     return expr;
16193   /* Preserve string constants; conversions from string constants to
16194      "char *" are allowed, even though normally a "const char *"
16195      cannot be used to initialize a "char *".  */
16196   if (TREE_CODE (expr) == STRING_CST)
16197     return expr;
16198   /* Preserve arithmetic constants, as an optimization -- there is no
16199      reason to create a new node.  */
16200   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
16201     return expr;
16202   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
16203      There is at least one place where we want to know that a
16204      particular expression is a throw-expression: when checking a ?:
16205      expression, there are special rules if the second or third
16206      argument is a throw-expression.  */
16207   if (TREE_CODE (expr) == THROW_EXPR)
16208     return expr;
16209
16210   if (TREE_CODE (expr) == COND_EXPR)
16211     return build3 (COND_EXPR,
16212                    TREE_TYPE (expr),
16213                    TREE_OPERAND (expr, 0),
16214                    (TREE_OPERAND (expr, 1)
16215                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
16216                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
16217                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
16218   if (TREE_CODE (expr) == COMPOUND_EXPR
16219       && !COMPOUND_EXPR_OVERLOADED (expr))
16220     return build2 (COMPOUND_EXPR,
16221                    TREE_TYPE (expr),
16222                    TREE_OPERAND (expr, 0),
16223                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
16224
16225   /* If the type is unknown, it can't really be non-dependent */
16226   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
16227
16228   /* Otherwise, build a NON_DEPENDENT_EXPR.
16229
16230      REFERENCE_TYPEs are not stripped for expressions in templates
16231      because doing so would play havoc with mangling.  Consider, for
16232      example:
16233
16234        template <typename T> void f<T& g>() { g(); }
16235
16236      In the body of "f", the expression for "g" will have
16237      REFERENCE_TYPE, even though the standard says that it should
16238      not.  The reason is that we must preserve the syntactic form of
16239      the expression so that mangling (say) "f<g>" inside the body of
16240      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
16241      stripped here.  */
16242   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
16243 }
16244
16245 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
16246    Return a new TREE_LIST with the various arguments replaced with
16247    equivalent non-dependent expressions.  */
16248
16249 tree
16250 build_non_dependent_args (tree args)
16251 {
16252   tree a;
16253   tree new_args;
16254
16255   new_args = NULL_TREE;
16256   for (a = args; a; a = TREE_CHAIN (a))
16257     new_args = tree_cons (NULL_TREE,
16258                           build_non_dependent_expr (TREE_VALUE (a)),
16259                           new_args);
16260   return nreverse (new_args);
16261 }
16262
16263 #include "gt-cp-pt.h"