]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/pt.c
Makefile.in (intl.*): Honor non-zero exit codes in the intl subdir.
[gcc.git] / gcc / cp / pt.c
CommitLineData
8d08fdba 1/* Handle parameterized types (templates) for GNU C++.
06ceef4e
RK
2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
3 Free Software Foundation, Inc.
8d08fdba 4 Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
fc378698 5 Rewritten by Jason Merrill (jason@cygnus.com).
8d08fdba
MS
6
7This file is part of GNU CC.
8
9GNU CC is free software; you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation; either version 2, or (at your option)
12any later version.
13
14GNU CC is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along with GNU CC; see the file COPYING. If not, write to
e9fa0c7c
RK
21the Free Software Foundation, 59 Temple Place - Suite 330,
22Boston, MA 02111-1307, USA. */
8d08fdba
MS
23
24/* Known bugs or deficiencies include:
e92cc029 25
e92cc029
MS
26 all methods must be provided in header files; can't use a source
27 file that contains only the method templates and "just win". */
8d08fdba
MS
28
29#include "config.h"
8d052bc7 30#include "system.h"
8d08fdba
MS
31#include "obstack.h"
32
33#include "tree.h"
34#include "flags.h"
35#include "cp-tree.h"
36#include "decl.h"
37#include "parse.h"
f0e01782 38#include "lex.h"
e8abc66f 39#include "output.h"
a9aedbc2 40#include "defaults.h"
49c249e1 41#include "except.h"
54f92bfb 42#include "toplev.h"
3dcaad8b 43#include "rtl.h"
091f9839 44#include "defaults.h"
9cd64686 45#include "ggc.h"
6dfbb909 46#include "hashtab.h"
49c249e1 47
050367a3
MM
48/* The type of functions taking a tree, and some additional data, and
49 returning an int. */
158991b7 50typedef int (*tree_fn_t) PARAMS ((tree, void*));
050367a3 51
8d08fdba 52extern struct obstack permanent_obstack;
8d08fdba 53
0aafb128
MM
54/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55 instantiations have been deferred, either because their definitions
56 were not yet available, or because we were putting off doing the
57 work. The TREE_PURPOSE of each entry is a SRCLOC indicating where
58 the instantiate request occurred; the TREE_VALUE is a either a DECL
59 (for a function or static data member), or a TYPE (for a class)
60 indicating what we are hoping to instantiate. */
61static tree pending_templates;
5566b478
MS
62static tree *template_tail = &pending_templates;
63
0aafb128 64static tree maybe_templates;
73aad9b9
JM
65static tree *maybe_template_tail = &maybe_templates;
66
67ffc812 67int processing_template_parmlist;
386b8a85
JM
68static int template_header_count;
69
75650646 70static tree saved_trees;
3dcaad8b
MM
71static varray_type inline_parm_levels;
72static size_t inline_parm_levels_used;
75650646 73
6dfbb909
MM
74/* A map from local variable declarations in the body of the template
75 presently being instantiated to the corresponding instantiated
76 local variables. */
77static htab_t local_specializations;
78
8d08fdba
MS
79#define obstack_chunk_alloc xmalloc
80#define obstack_chunk_free free
81
830bfa74
MM
82#define UNIFY_ALLOW_NONE 0
83#define UNIFY_ALLOW_MORE_CV_QUAL 1
84#define UNIFY_ALLOW_LESS_CV_QUAL 2
85#define UNIFY_ALLOW_DERIVED 4
161c12b0 86#define UNIFY_ALLOW_INTEGER 8
830bfa74 87
4393e105
MM
88#define GTB_VIA_VIRTUAL 1 /* The base class we are examining is
89 virtual, or a base class of a virtual
90 base. */
91#define GTB_IGNORE_TYPE 2 /* We don't need to try to unify the current
92 type with the desired type. */
93
158991b7 94static int resolve_overloaded_unification PARAMS ((tree, tree, tree, tree,
4393e105 95 unification_kind_t, int));
158991b7 96static int try_one_overload PARAMS ((tree, tree, tree, tree, tree,
4393e105 97 unification_kind_t, int));
158991b7
KG
98static int unify PARAMS ((tree, tree, tree, tree, int));
99static void add_pending_template PARAMS ((tree));
100static int push_tinst_level PARAMS ((tree));
101static tree classtype_mangled_name PARAMS ((tree));
102static char *mangle_class_name_for_template PARAMS ((char *, tree, tree));
103static tree tsubst_expr_values PARAMS ((tree, tree));
104static int list_eq PARAMS ((tree, tree));
105static tree get_class_bindings PARAMS ((tree, tree, tree));
106static tree coerce_template_parms PARAMS ((tree, tree, tree, int, int));
107static void tsubst_enum PARAMS ((tree, tree, tree));
108static tree add_to_template_args PARAMS ((tree, tree));
109static tree add_outermost_template_args PARAMS ((tree, tree));
110static void maybe_adjust_types_for_deduction PARAMS ((unification_kind_t, tree*,
830bfa74 111 tree*));
158991b7 112static int type_unification_real PARAMS ((tree, tree, tree, tree,
4393e105 113 int, unification_kind_t, int));
158991b7
KG
114static void note_template_header PARAMS ((int));
115static tree maybe_fold_nontype_arg PARAMS ((tree));
116static tree convert_nontype_argument PARAMS ((tree, tree));
117static tree convert_template_argument PARAMS ((tree, tree, tree, int,
8b5b8b7c 118 int , tree));
158991b7
KG
119static tree get_bindings_overload PARAMS ((tree, tree, tree));
120static int for_each_template_parm PARAMS ((tree, tree_fn_t, void*));
121static tree build_template_parm_index PARAMS ((int, int, int, tree, tree));
122static int inline_needs_template_parms PARAMS ((tree));
123static void push_inline_template_parms_recursive PARAMS ((tree, int));
124static tree retrieve_specialization PARAMS ((tree, tree));
6dfbb909 125static tree retrieve_local_specialization PARAMS ((tree));
158991b7 126static tree register_specialization PARAMS ((tree, tree, tree));
6dfbb909 127static tree register_local_specialization PARAMS ((tree, tree));
158991b7
KG
128static int unregister_specialization PARAMS ((tree, tree));
129static tree reduce_template_parm_level PARAMS ((tree, tree, int));
130static tree build_template_decl PARAMS ((tree, tree));
131static int mark_template_parm PARAMS ((tree, void *));
132static tree tsubst_friend_function PARAMS ((tree, tree));
133static tree tsubst_friend_class PARAMS ((tree, tree));
134static tree get_bindings_real PARAMS ((tree, tree, tree, int));
135static int template_decl_level PARAMS ((tree));
136static tree maybe_get_template_decl_from_type_decl PARAMS ((tree));
137static int check_cv_quals_for_unify PARAMS ((int, tree, tree));
138static tree tsubst_template_arg_vector PARAMS ((tree, tree, int));
139static tree tsubst_template_parms PARAMS ((tree, tree, int));
140static void regenerate_decl_from_template PARAMS ((tree, tree));
141static tree most_specialized PARAMS ((tree, tree, tree));
142static tree most_specialized_class PARAMS ((tree, tree));
143static void set_mangled_name_for_template_decl PARAMS ((tree));
144static int template_class_depth_real PARAMS ((tree, int));
145static tree tsubst_aggr_type PARAMS ((tree, tree, int, tree, int));
146static tree tsubst_decl PARAMS ((tree, tree, tree, tree));
147static tree tsubst_arg_types PARAMS ((tree, tree, int, tree));
148static tree tsubst_function_type PARAMS ((tree, tree, int, tree));
149static void check_specialization_scope PARAMS ((void));
150static tree process_partial_specialization PARAMS ((tree));
151static void set_current_access_from_decl PARAMS ((tree));
152static void check_default_tmpl_args PARAMS ((tree, tree, int, int));
153static tree tsubst_call_declarator_parms PARAMS ((tree, tree, int, tree));
154static tree get_template_base_recursive PARAMS ((tree, tree,
4393e105 155 tree, tree, tree, int));
158991b7
KG
156static tree get_template_base PARAMS ((tree, tree, tree, tree));
157static tree try_class_unification PARAMS ((tree, tree, tree, tree));
158static int coerce_template_template_parms PARAMS ((tree, tree, int,
4393e105 159 tree, tree));
158991b7
KG
160static tree determine_specialization PARAMS ((tree, tree, tree *, int));
161static int template_args_equal PARAMS ((tree, tree));
162static void print_template_context PARAMS ((int));
163static void tsubst_default_arguments PARAMS ((tree));
164static tree for_each_template_parm_r PARAMS ((tree *, int *, void *));
db9b2174 165static tree instantiate_clone PARAMS ((tree, tree));
36a117a5 166
9cd64686
MM
167/* Called once to initialize pt.c. */
168
169void
170init_pt ()
171{
172 ggc_add_tree_root (&pending_templates, 1);
173 ggc_add_tree_root (&maybe_templates, 1);
174 ggc_add_tree_root (&saved_trees, 1);
175}
176
e1467ff2
MM
177/* Do any processing required when DECL (a member template declaration
178 using TEMPLATE_PARAMETERS as its innermost parameter list) is
179 finished. Returns the TEMPLATE_DECL corresponding to DECL, unless
180 it is a specialization, in which case the DECL itself is returned. */
181
182tree
61a127b3 183finish_member_template_decl (decl)
e1467ff2
MM
184 tree decl;
185{
93cdc044
JM
186 if (decl == NULL_TREE || decl == void_type_node)
187 return NULL_TREE;
3ddfb0e6
MM
188 else if (decl == error_mark_node)
189 /* By returning NULL_TREE, the parser will just ignore this
190 declaration. We have already issued the error. */
191 return NULL_TREE;
93cdc044
JM
192 else if (TREE_CODE (decl) == TREE_LIST)
193 {
5f311aec 194 /* Assume that the class is the only declspec. */
93cdc044 195 decl = TREE_VALUE (decl);
8d019cef 196 if (IS_AGGR_TYPE (decl) && CLASSTYPE_TEMPLATE_INFO (decl)
370af2d5 197 && ! CLASSTYPE_TEMPLATE_SPECIALIZATION (decl))
93cdc044
JM
198 {
199 tree tmpl = CLASSTYPE_TI_TEMPLATE (decl);
200 check_member_template (tmpl);
201 return tmpl;
202 }
8d019cef 203 return NULL_TREE;
93cdc044 204 }
07c88314
MM
205 else if (TREE_CODE (decl) == FIELD_DECL)
206 cp_error ("data member `%D' cannot be a member template", decl);
a1da6cba 207 else if (DECL_TEMPLATE_INFO (decl))
e1467ff2 208 {
a1da6cba
MM
209 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
210 {
211 check_member_template (DECL_TI_TEMPLATE (decl));
212 return DECL_TI_TEMPLATE (decl);
213 }
214 else
215 return decl;
216 }
217 else
8251199e 218 cp_error ("invalid member template declaration `%D'", decl);
e1467ff2 219
a1da6cba 220 return error_mark_node;
f84b4be9 221}
e1467ff2 222
f84b4be9
JM
223/* Returns the template nesting level of the indicated class TYPE.
224
225 For example, in:
226 template <class T>
227 struct A
228 {
229 template <class U>
230 struct B {};
231 };
232
39c01e4c
MM
233 A<T>::B<U> has depth two, while A<T> has depth one.
234 Both A<T>::B<int> and A<int>::B<U> have depth one, if
235 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
236 specializations.
237
238 This function is guaranteed to return 0 if passed NULL_TREE so
239 that, for example, `template_class_depth (current_class_type)' is
240 always safe. */
f84b4be9 241
e9659ab0 242static int
39c01e4c 243template_class_depth_real (type, count_specializations)
f84b4be9 244 tree type;
39c01e4c 245 int count_specializations;
f84b4be9 246{
93cdc044 247 int depth;
f84b4be9 248
2c73f9f5 249 for (depth = 0;
ed44da02
MM
250 type && TREE_CODE (type) != NAMESPACE_DECL;
251 type = (TREE_CODE (type) == FUNCTION_DECL)
4f1c5b7d 252 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
ed44da02
MM
253 {
254 if (TREE_CODE (type) != FUNCTION_DECL)
255 {
256 if (CLASSTYPE_TEMPLATE_INFO (type)
257 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
258 && ((count_specializations
370af2d5 259 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
ed44da02
MM
260 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
261 ++depth;
262 }
263 else
264 {
265 if (DECL_TEMPLATE_INFO (type)
266 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
267 && ((count_specializations
268 && DECL_TEMPLATE_SPECIALIZATION (type))
269 || uses_template_parms (DECL_TI_ARGS (type))))
270 ++depth;
271 }
272 }
f84b4be9
JM
273
274 return depth;
e1467ff2 275}
98c1c668 276
39c01e4c
MM
277/* Returns the template nesting level of the indicated class TYPE.
278 Like template_class_depth_real, but instantiations do not count in
279 the depth. */
280
281int
282template_class_depth (type)
283 tree type;
284{
285 return template_class_depth_real (type, /*count_specializations=*/0);
286}
287
cae40af6
JM
288/* Returns 1 if processing DECL as part of do_pending_inlines
289 needs us to push template parms. */
290
291static int
292inline_needs_template_parms (decl)
293 tree decl;
294{
295 if (! DECL_TEMPLATE_INFO (decl))
296 return 0;
f84b4be9 297
36a117a5 298 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
cae40af6
JM
299 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
300}
301
302/* Subroutine of maybe_begin_member_template_processing.
303 Push the template parms in PARMS, starting from LEVELS steps into the
304 chain, and ending at the beginning, since template parms are listed
305 innermost first. */
306
307static void
308push_inline_template_parms_recursive (parmlist, levels)
309 tree parmlist;
310 int levels;
311{
312 tree parms = TREE_VALUE (parmlist);
313 int i;
314
315 if (levels > 1)
316 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
786b5245 317
98c1c668 318 ++processing_template_decl;
cae40af6 319 current_template_parms
98c1c668
JM
320 = tree_cons (build_int_2 (0, processing_template_decl),
321 parms, current_template_parms);
cae40af6
JM
322 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
323
786b5245 324 pushlevel (0);
98c1c668
JM
325 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
326 {
786b5245 327 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2f939d94 328 my_friendly_assert (DECL_P (parm), 0);
cae40af6 329
98c1c668
JM
330 switch (TREE_CODE (parm))
331 {
786b5245 332 case TYPE_DECL:
73b0fce8 333 case TEMPLATE_DECL:
98c1c668
JM
334 pushdecl (parm);
335 break;
786b5245
MM
336
337 case PARM_DECL:
338 {
fc03edb3
MM
339 /* Make a CONST_DECL as is done in process_template_parm.
340 It is ugly that we recreate this here; the original
341 version built in process_template_parm is no longer
342 available. */
786b5245
MM
343 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
344 TREE_TYPE (parm));
fc03edb3 345 SET_DECL_ARTIFICIAL (decl);
786b5245 346 DECL_INITIAL (decl) = DECL_INITIAL (parm);
cd9f6678 347 SET_DECL_TEMPLATE_PARM_P (decl);
786b5245
MM
348 pushdecl (decl);
349 }
cae40af6 350 break;
786b5245 351
98c1c668
JM
352 default:
353 my_friendly_abort (0);
354 }
355 }
356}
357
cae40af6
JM
358/* Restore the template parameter context for a member template or
359 a friend template defined in a class definition. */
360
361void
362maybe_begin_member_template_processing (decl)
363 tree decl;
364{
365 tree parms;
3dcaad8b 366 int levels = 0;
cae40af6 367
3dcaad8b
MM
368 if (inline_needs_template_parms (decl))
369 {
370 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
371 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
cae40af6 372
3dcaad8b
MM
373 if (DECL_TEMPLATE_SPECIALIZATION (decl))
374 {
375 --levels;
376 parms = TREE_CHAIN (parms);
377 }
cae40af6 378
3dcaad8b 379 push_inline_template_parms_recursive (parms, levels);
cae40af6
JM
380 }
381
3dcaad8b
MM
382 /* Remember how many levels of template parameters we pushed so that
383 we can pop them later. */
384 if (!inline_parm_levels)
385 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
386 if (inline_parm_levels_used == inline_parm_levels->num_elements)
387 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
388 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
389 ++inline_parm_levels_used;
cae40af6
JM
390}
391
98c1c668
JM
392/* Undo the effects of begin_member_template_processing. */
393
394void
b370501f 395maybe_end_member_template_processing ()
98c1c668 396{
3dcaad8b
MM
397 int i;
398
399 if (!inline_parm_levels_used)
98c1c668
JM
400 return;
401
3dcaad8b
MM
402 --inline_parm_levels_used;
403 for (i = 0;
404 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
405 ++i)
cae40af6
JM
406 {
407 --processing_template_decl;
408 current_template_parms = TREE_CHAIN (current_template_parms);
409 poplevel (0, 0, 0);
410 }
98c1c668
JM
411}
412
cae40af6 413/* Returns non-zero iff T is a member template function. We must be
f84b4be9 414 careful as in
75650646
MM
415
416 template <class T> class C { void f(); }
417
418 Here, f is a template function, and a member, but not a member
419 template. This function does not concern itself with the origin of
420 T, only its present state. So if we have
421
422 template <class T> class C { template <class U> void f(U); }
423
424 then neither C<int>::f<char> nor C<T>::f<double> is considered
f181d4ae
MM
425 to be a member template. But, `template <class U> void
426 C<int>::f(U)' is considered a member template. */
98c1c668 427
cae40af6
JM
428int
429is_member_template (t)
98c1c668
JM
430 tree t;
431{
f181d4ae 432 if (!DECL_FUNCTION_TEMPLATE_P (t))
75650646 433 /* Anything that isn't a function or a template function is
aa5f3bad
MM
434 certainly not a member template. */
435 return 0;
436
cae40af6 437 /* A local class can't have member templates. */
4f1c5b7d 438 if (decl_function_context (t))
cae40af6
JM
439 return 0;
440
f181d4ae 441 return (DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))
f84b4be9
JM
442 /* If there are more levels of template parameters than
443 there are template classes surrounding the declaration,
444 then we have a member template. */
f181d4ae 445 && (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
4f1c5b7d 446 template_class_depth (DECL_CONTEXT (t))));
f84b4be9 447}
98c1c668 448
ba4f4e5d 449#if 0 /* UNUSED */
2ee4e084
MM
450/* Returns non-zero iff T is a member template class. See
451 is_member_template for a description of what precisely constitutes
452 a member template. */
453
454int
455is_member_template_class (t)
456 tree t;
457{
458 if (!DECL_CLASS_TEMPLATE_P (t))
459 /* Anything that isn't a class template, is certainly not a member
460 template. */
461 return 0;
462
463 if (!DECL_CLASS_SCOPE_P (t))
464 /* Anything whose context isn't a class type is surely not a
465 member template. */
466 return 0;
467
468 /* If there are more levels of template parameters than there are
469 template classes surrounding the declaration, then we have a
470 member template. */
36a117a5 471 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) >
2ee4e084
MM
472 template_class_depth (DECL_CONTEXT (t)));
473}
ba4f4e5d 474#endif
2ee4e084 475
36a117a5 476/* Return a new template argument vector which contains all of ARGS,
f9a7ae04 477 but has as its innermost set of arguments the EXTRA_ARGS. */
e6f1275f
JM
478
479static tree
36a117a5
MM
480add_to_template_args (args, extra_args)
481 tree args;
482 tree extra_args;
e6f1275f 483{
36a117a5
MM
484 tree new_args;
485 int extra_depth;
486 int i;
487 int j;
e6f1275f 488
36a117a5 489 extra_depth = TMPL_ARGS_DEPTH (extra_args);
f31c0a32 490 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
e6f1275f 491
36a117a5
MM
492 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
493 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
e6f1275f 494
36a117a5
MM
495 for (j = 1; j <= extra_depth; ++j, ++i)
496 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
497
e6f1275f
JM
498 return new_args;
499}
500
36a117a5
MM
501/* Like add_to_template_args, but only the outermost ARGS are added to
502 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
503 (EXTRA_ARGS) levels are added. This function is used to combine
504 the template arguments from a partial instantiation with the
505 template arguments used to attain the full instantiation from the
506 partial instantiation. */
98c1c668 507
4966381a 508static tree
36a117a5 509add_outermost_template_args (args, extra_args)
98c1c668
JM
510 tree args;
511 tree extra_args;
512{
513 tree new_args;
514
e4a84209
MM
515 /* If there are more levels of EXTRA_ARGS than there are ARGS,
516 something very fishy is going on. */
517 my_friendly_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args),
518 0);
519
520 /* If *all* the new arguments will be the EXTRA_ARGS, just return
521 them. */
522 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
523 return extra_args;
524
36a117a5
MM
525 /* For the moment, we make ARGS look like it contains fewer levels. */
526 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
527
528 new_args = add_to_template_args (args, extra_args);
98c1c668 529
36a117a5
MM
530 /* Now, we restore ARGS to its full dimensions. */
531 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
98c1c668
JM
532
533 return new_args;
534}
5566b478 535
f9a7ae04
MM
536/* Return the N levels of innermost template arguments from the ARGS. */
537
538tree
539get_innermost_template_args (args, n)
540 tree args;
541 int n;
542{
543 tree new_args;
544 int extra_levels;
545 int i;
546
547 my_friendly_assert (n >= 0, 20000603);
548
549 /* If N is 1, just return the innermost set of template arguments. */
550 if (n == 1)
551 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
552
553 /* If we're not removing anything, just return the arguments we were
554 given. */
555 extra_levels = TMPL_ARGS_DEPTH (args) - n;
556 my_friendly_assert (extra_levels >= 0, 20000603);
557 if (extra_levels == 0)
558 return args;
559
560 /* Make a new set of arguments, not containing the outer arguments. */
561 new_args = make_tree_vec (n);
562 for (i = 1; i <= n; ++i)
563 SET_TMPL_ARGS_LEVEL (new_args, i,
564 TMPL_ARGS_LEVEL (args, i + extra_levels));
565
566 return new_args;
567}
568
5566b478
MS
569/* We've got a template header coming up; push to a new level for storing
570 the parms. */
8d08fdba 571
8d08fdba
MS
572void
573begin_template_parm_list ()
574{
6757edfe
MM
575 /* We use a non-tag-transparent scope here, which causes pushtag to
576 put tags in this scope, rather than in the enclosing class or
577 namespace scope. This is the right thing, since we want
578 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
579 global template class, push_template_decl handles putting the
580 TEMPLATE_DECL into top-level scope. For a nested template class,
581 e.g.:
582
583 template <class T> struct S1 {
584 template <class T> struct S2 {};
585 };
586
587 pushtag contains special code to call pushdecl_with_scope on the
588 TEMPLATE_DECL for S2. */
74b846e0 589 begin_scope (sk_template_parms);
5156628f 590 ++processing_template_decl;
67ffc812 591 ++processing_template_parmlist;
386b8a85
JM
592 note_template_header (0);
593}
594
6c30752f
MM
595/* This routine is called when a specialization is declared. If it is
596 illegal to declare a specialization here, an error is reported. */
597
e9659ab0 598static void
6c30752f
MM
599check_specialization_scope ()
600{
601 tree scope = current_scope ();
3ddfb0e6 602
6c30752f
MM
603 /* [temp.expl.spec]
604
605 An explicit specialization shall be declared in the namespace of
606 which the template is a member, or, for member templates, in the
607 namespace of which the enclosing class or enclosing class
608 template is a member. An explicit specialization of a member
609 function, member class or static data member of a class template
610 shall be declared in the namespace of which the class template
611 is a member. */
612 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
8251199e 613 cp_error ("explicit specialization in non-namespace scope `%D'",
6c30752f 614 scope);
3ddfb0e6 615
6c30752f
MM
616 /* [temp.expl.spec]
617
618 In an explicit specialization declaration for a member of a class
619 template or a member template that appears in namespace scope,
620 the member template and some of its enclosing class templates may
621 remain unspecialized, except that the declaration shall not
622 explicitly specialize a class member template if its enclosing
623 class templates are not explicitly specialized as well. */
624 if (current_template_parms)
fd4de5ff 625 cp_error ("enclosing class templates are not explicitly specialized");
6c30752f
MM
626}
627
386b8a85
JM
628/* We've just seen template <>. */
629
630void
631begin_specialization ()
632{
74b846e0 633 begin_scope (sk_template_spec);
386b8a85 634 note_template_header (1);
6c30752f 635 check_specialization_scope ();
386b8a85
JM
636}
637
386b8a85
JM
638/* Called at then end of processing a declaration preceeded by
639 template<>. */
640
641void
642end_specialization ()
643{
74b846e0 644 finish_scope ();
386b8a85
JM
645 reset_specialization ();
646}
647
386b8a85
JM
648/* Any template <>'s that we have seen thus far are not referring to a
649 function specialization. */
650
651void
652reset_specialization ()
653{
654 processing_specialization = 0;
655 template_header_count = 0;
656}
657
386b8a85
JM
658/* We've just seen a template header. If SPECIALIZATION is non-zero,
659 it was of the form template <>. */
660
4966381a 661static void
386b8a85
JM
662note_template_header (specialization)
663 int specialization;
664{
665 processing_specialization = specialization;
666 template_header_count++;
667}
668
75650646 669/* We're beginning an explicit instantiation. */
386b8a85 670
75650646
MM
671void
672begin_explicit_instantiation ()
386b8a85 673{
75650646
MM
674 ++processing_explicit_instantiation;
675}
386b8a85 676
386b8a85 677
75650646
MM
678void
679end_explicit_instantiation ()
680{
681 my_friendly_assert(processing_explicit_instantiation > 0, 0);
682 --processing_explicit_instantiation;
683}
386b8a85 684
36a117a5
MM
685/* The TYPE is being declared. If it is a template type, that means it
686 is a partial specialization. Do appropriate error-checking. */
687
688void
689maybe_process_partial_specialization (type)
690 tree type;
691{
692 if (IS_AGGR_TYPE (type) && CLASSTYPE_USE_TEMPLATE (type))
693 {
694 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
d0f062fb 695 && !COMPLETE_TYPE_P (type))
36a117a5 696 {
700466c2
JM
697 if (current_namespace
698 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
699 {
700 cp_pedwarn ("specializing `%#T' in different namespace", type);
701 cp_pedwarn_at (" from definition of `%#D'",
702 CLASSTYPE_TI_TEMPLATE (type));
703 }
370af2d5 704 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
36a117a5
MM
705 if (processing_template_decl)
706 push_template_decl (TYPE_MAIN_DECL (type));
707 }
708 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
8251199e 709 cp_error ("specialization of `%T' after instantiation", type);
36a117a5 710 }
20496fa2
JM
711 else if (processing_specialization)
712 cp_error ("explicit specialization of non-template `%T'", type);
36a117a5
MM
713}
714
75650646
MM
715/* Retrieve the specialization (in the sense of [temp.spec] - a
716 specialization is either an instantiation or an explicit
717 specialization) of TMPL for the given template ARGS. If there is
718 no such specialization, return NULL_TREE. The ARGS are a vector of
719 arguments, or a vector of vectors of arguments, in the case of
720 templates with more than one level of parameters. */
721
722static tree
723retrieve_specialization (tmpl, args)
724 tree tmpl;
725 tree args;
726{
727 tree s;
728
729 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
730
36a117a5
MM
731 /* There should be as many levels of arguments as there are
732 levels of parameters. */
733 my_friendly_assert (TMPL_ARGS_DEPTH (args)
734 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
735 0);
736
75650646
MM
737 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
738 s != NULL_TREE;
739 s = TREE_CHAIN (s))
740 if (comp_template_args (TREE_PURPOSE (s), args))
741 return TREE_VALUE (s);
742
743 return NULL_TREE;
386b8a85
JM
744}
745
6dfbb909 746/* Like retrieve_speciailization, but for local declarations. */
9188c363
MM
747
748static tree
6dfbb909 749retrieve_local_specialization (tmpl)
9188c363 750 tree tmpl;
9188c363 751{
6dfbb909 752 return (tree) htab_find (local_specializations, tmpl);
9188c363
MM
753}
754
6757edfe
MM
755/* Returns non-zero iff DECL is a specialization of TMPL. */
756
757int
758is_specialization_of (decl, tmpl)
759 tree decl;
760 tree tmpl;
761{
762 tree t;
763
764 if (TREE_CODE (decl) == FUNCTION_DECL)
765 {
766 for (t = decl;
767 t != NULL_TREE;
768 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
769 if (t == tmpl)
770 return 1;
771 }
772 else
773 {
774 my_friendly_assert (TREE_CODE (decl) == TYPE_DECL, 0);
775
776 for (t = TREE_TYPE (decl);
777 t != NULL_TREE;
778 t = CLASSTYPE_USE_TEMPLATE (t)
779 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
9edc3913 780 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
6757edfe
MM
781 return 1;
782 }
386b8a85 783
6757edfe
MM
784 return 0;
785}
75650646
MM
786
787/* Register the specialization SPEC as a specialization of TMPL with
36a117a5
MM
788 the indicated ARGS. Returns SPEC, or an equivalent prior
789 declaration, if available. */
75650646 790
36a117a5 791static tree
75650646
MM
792register_specialization (spec, tmpl, args)
793 tree spec;
794 tree tmpl;
795 tree args;
796{
797 tree s;
798
799 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
800
36a117a5
MM
801 if (TREE_CODE (spec) == FUNCTION_DECL
802 && uses_template_parms (DECL_TI_ARGS (spec)))
803 /* This is the FUNCTION_DECL for a partial instantiation. Don't
804 register it; we want the corresponding TEMPLATE_DECL instead.
805 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
806 the more obvious `uses_template_parms (spec)' to avoid problems
807 with default function arguments. In particular, given
808 something like this:
809
810 template <class T> void f(T t1, T t = T())
811
812 the default argument expression is not substituted for in an
813 instantiation unless and until it is actually needed. */
814 return spec;
75650646 815
36a117a5
MM
816 /* There should be as many levels of arguments as there are
817 levels of parameters. */
818 my_friendly_assert (TMPL_ARGS_DEPTH (args)
819 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
820 0);
821
75650646
MM
822 for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
823 s != NULL_TREE;
824 s = TREE_CHAIN (s))
22e9174f
MM
825 {
826 tree fn = TREE_VALUE (s);
827
828 /* We can sometimes try to re-register a specialization that we've
829 already got. In particular, regenerate_decl_from_template
830 calls duplicate_decls which will update the specialization
831 list. But, we'll still get called again here anyhow. It's
832 more convenient to simply allow this than to try to prevent it. */
833 if (fn == spec)
834 return spec;
835 else if (comp_template_args (TREE_PURPOSE (s), args))
836 {
837 if (DECL_TEMPLATE_SPECIALIZATION (spec))
838 {
839 if (DECL_TEMPLATE_INSTANTIATION (fn))
840 {
841 if (TREE_USED (fn)
842 || DECL_EXPLICIT_INSTANTIATION (fn))
843 {
844 cp_error ("specialization of %D after instantiation",
845 fn);
846 return spec;
847 }
848 else
849 {
850 /* This situation should occur only if the first
851 specialization is an implicit instantiation,
852 the second is an explicit specialization, and
853 the implicit instantiation has not yet been
854 used. That situation can occur if we have
855 implicitly instantiated a member function and
856 then specialized it later.
857
858 We can also wind up here if a friend
859 declaration that looked like an instantiation
860 turns out to be a specialization:
861
862 template <class T> void foo(T);
863 class S { friend void foo<>(int) };
864 template <> void foo(int);
865
866 We transform the existing DECL in place so that
867 any pointers to it become pointers to the
868 updated declaration.
869
870 If there was a definition for the template, but
871 not for the specialization, we want this to
872 look as if there is no definition, and vice
873 versa. */
874 DECL_INITIAL (fn) = NULL_TREE;
875 duplicate_decls (spec, fn);
876
877 return fn;
878 }
879 }
880 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
881 {
882 duplicate_decls (spec, fn);
883 return fn;
884 }
885 }
886 }
75650646
MM
887 }
888
889 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
e1b3e07d 890 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
36a117a5
MM
891
892 return spec;
893}
894
895/* Unregister the specialization SPEC as a specialization of TMPL.
896 Returns nonzero if the SPEC was listed as a specialization of
897 TMPL. */
898
899static int
900unregister_specialization (spec, tmpl)
901 tree spec;
902 tree tmpl;
903{
904 tree* s;
905
906 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
907 *s != NULL_TREE;
908 s = &TREE_CHAIN (*s))
909 if (TREE_VALUE (*s) == spec)
910 {
911 *s = TREE_CHAIN (*s);
912 return 1;
913 }
914
915 return 0;
75650646
MM
916}
917
6dfbb909
MM
918/* Like register_specialization, but for local declarations. We are
919 registering SPEC, an instantiation of TMPL. */
9188c363
MM
920
921static tree
6dfbb909 922register_local_specialization (spec, tmpl)
9188c363
MM
923 tree spec;
924 tree tmpl;
9188c363 925{
6dfbb909
MM
926 void **slot;
927
928 slot = htab_find_slot (local_specializations, tmpl, INSERT);
929 *slot = spec;
9188c363
MM
930
931 return spec;
932}
933
e1467ff2
MM
934/* Print the list of candidate FNS in an error message. */
935
104bf76a 936void
e1467ff2
MM
937print_candidates (fns)
938 tree fns;
939{
940 tree fn;
941
d8e178a0 942 const char *str = "candidates are:";
e1467ff2
MM
943
944 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
945 {
d6479fe7
MM
946 tree f;
947
948 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
949 cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
e1467ff2
MM
950 str = " ";
951 }
952}
953
75650646 954/* Returns the template (one of the functions given by TEMPLATE_ID)
e1467ff2 955 which can be specialized to match the indicated DECL with the
03017874
MM
956 explicit template args given in TEMPLATE_ID. The DECL may be
957 NULL_TREE if none is available. In that case, the functions in
958 TEMPLATE_ID are non-members.
959
960 If NEED_MEMBER_TEMPLATE is non-zero the function is known to be a
961 specialization of a member template.
962
963 The template args (those explicitly specified and those deduced)
964 are output in a newly created vector *TARGS_OUT.
965
966 If it is impossible to determine the result, an error message is
bf8f3f93 967 issued. The error_mark_node is returned to indicate failure. */
75650646 968
e9659ab0 969static tree
e1467ff2 970determine_specialization (template_id, decl, targs_out,
bf8f3f93 971 need_member_template)
386b8a85 972 tree template_id;
e1467ff2 973 tree decl;
386b8a85
JM
974 tree* targs_out;
975 int need_member_template;
386b8a85 976{
03017874
MM
977 tree fns;
978 tree targs;
979 tree explicit_targs;
980 tree candidates = NULL_TREE;
981 tree templates = NULL_TREE;
386b8a85 982
e1467ff2
MM
983 *targs_out = NULL_TREE;
984
f2e48b67
BK
985 if (template_id == error_mark_node)
986 return error_mark_node;
987
988 fns = TREE_OPERAND (template_id, 0);
03017874 989 explicit_targs = TREE_OPERAND (template_id, 1);
f2e48b67 990
27fafc8d
JM
991 if (fns == error_mark_node)
992 return error_mark_node;
993
2c73f9f5 994 /* Check for baselinks. */
91e490ab 995 if (BASELINK_P (fns))
2c73f9f5 996 fns = TREE_VALUE (fns);
386b8a85 997
91e490ab
MM
998 if (!is_overloaded_fn (fns))
999 {
9dfce8fd 1000 cp_error ("`%D' is not a function template", fns);
91e490ab
MM
1001 return error_mark_node;
1002 }
1003
2c73f9f5 1004 for (; fns; fns = OVL_NEXT (fns))
386b8a85 1005 {
75650646
MM
1006 tree tmpl;
1007
9dfce8fd 1008 tree fn = OVL_CURRENT (fns);
03017874
MM
1009
1010 if (TREE_CODE (fn) == TEMPLATE_DECL)
1011 /* DECL might be a specialization of FN. */
1012 tmpl = fn;
1013 else if (need_member_template)
1014 /* FN is an ordinary member function, and we need a
1015 specialization of a member template. */
1016 continue;
1017 else if (TREE_CODE (fn) != FUNCTION_DECL)
1018 /* We can get IDENTIFIER_NODEs here in certain erroneous
1019 cases. */
1020 continue;
1021 else if (!DECL_FUNCTION_MEMBER_P (fn))
1022 /* This is just an ordinary non-member function. Nothing can
1023 be a specialization of that. */
1024 continue;
75650646 1025 else
03017874
MM
1026 {
1027 tree decl_arg_types;
386b8a85 1028
03017874
MM
1029 /* This is an ordinary member function. However, since
1030 we're here, we can assume it's enclosing class is a
1031 template class. For example,
1032
1033 template <typename T> struct S { void f(); };
1034 template <> void S<int>::f() {}
1035
1036 Here, S<int>::f is a non-template, but S<int> is a
1037 template class. If FN has the same type as DECL, we
1038 might be in business. */
1039 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1040 TREE_TYPE (TREE_TYPE (fn))))
1041 /* The return types differ. */
1042 continue;
1043
1044 /* Adjust the type of DECL in case FN is a static member. */
1045 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1046 if (DECL_STATIC_FUNCTION_P (fn)
1047 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1048 decl_arg_types = TREE_CHAIN (decl_arg_types);
1049
1050 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1051 decl_arg_types))
1052 /* They match! */
1053 candidates = tree_cons (NULL_TREE, fn, candidates);
1054
1055 continue;
1056 }
386b8a85 1057
bf8f3f93
MM
1058 /* See whether this function might be a specialization of this
1059 template. */
1060 targs = get_bindings (tmpl, decl, explicit_targs);
03017874
MM
1061
1062 if (!targs)
bf8f3f93 1063 /* We cannot deduce template arguments that when used to
03017874
MM
1064 specialize TMPL will produce DECL. */
1065 continue;
1066
1067 /* Save this template, and the arguments deduced. */
e1b3e07d 1068 templates = tree_cons (targs, tmpl, templates);
386b8a85 1069 }
03017874 1070
bf8f3f93 1071 if (templates && TREE_CHAIN (templates))
386b8a85 1072 {
03017874
MM
1073 /* We have:
1074
1075 [temp.expl.spec]
1076
1077 It is possible for a specialization with a given function
1078 signature to be instantiated from more than one function
1079 template. In such cases, explicit specification of the
1080 template arguments must be used to uniquely identify the
1081 function template specialization being specialized.
1082
1083 Note that here, there's no suggestion that we're supposed to
1084 determine which of the candidate templates is most
1085 specialized. However, we, also have:
1086
1087 [temp.func.order]
1088
1089 Partial ordering of overloaded function template
1090 declarations is used in the following contexts to select
1091 the function template to which a function template
1092 specialization refers:
1093
1094 -- when an explicit specialization refers to a function
1095 template.
1096
1097 So, we do use the partial ordering rules, at least for now.
1098 This extension can only serve to make illegal programs legal,
1099 so it's safe. And, there is strong anecdotal evidence that
1100 the committee intended the partial ordering rules to apply;
1101 the EDG front-end has that behavior, and John Spicer claims
1102 that the committee simply forgot to delete the wording in
1103 [temp.expl.spec]. */
1104 tree tmpl = most_specialized (templates, decl, explicit_targs);
1105 if (tmpl && tmpl != error_mark_node)
1106 {
1107 targs = get_bindings (tmpl, decl, explicit_targs);
e1b3e07d 1108 templates = tree_cons (targs, tmpl, NULL_TREE);
03017874 1109 }
e1467ff2
MM
1110 }
1111
03017874 1112 if (templates == NULL_TREE && candidates == NULL_TREE)
e1467ff2 1113 {
bf8f3f93
MM
1114 cp_error_at ("template-id `%D' for `%+D' does not match any template declaration",
1115 template_id, decl);
03017874 1116 return error_mark_node;
386b8a85 1117 }
03017874 1118 else if ((templates && TREE_CHAIN (templates))
bf8f3f93
MM
1119 || (candidates && TREE_CHAIN (candidates))
1120 || (templates && candidates))
386b8a85 1121 {
bf8f3f93
MM
1122 cp_error_at ("ambiguous template specialization `%D' for `%+D'",
1123 template_id, decl);
1124 chainon (candidates, templates);
1125 print_candidates (candidates);
03017874 1126 return error_mark_node;
386b8a85
JM
1127 }
1128
1129 /* We have one, and exactly one, match. */
03017874
MM
1130 if (candidates)
1131 {
1132 /* It was a specialization of an ordinary member function in a
1133 template class. */
1134 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1135 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1136 }
1137
1138 /* It was a specialization of a template. */
17aec3eb 1139 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
03017874
MM
1140 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1141 {
1142 *targs_out = copy_node (targs);
1143 SET_TMPL_ARGS_LEVEL (*targs_out,
1144 TMPL_ARGS_DEPTH (*targs_out),
1145 TREE_PURPOSE (templates));
1146 }
1147 else
1148 *targs_out = TREE_PURPOSE (templates);
e1467ff2 1149 return TREE_VALUE (templates);
8d08fdba 1150}
6757edfe 1151
386b8a85 1152/* Check to see if the function just declared, as indicated in
75650646
MM
1153 DECLARATOR, and in DECL, is a specialization of a function
1154 template. We may also discover that the declaration is an explicit
1155 instantiation at this point.
1156
e1467ff2 1157 Returns DECL, or an equivalent declaration that should be used
03017874
MM
1158 instead if all goes well. Issues an error message if something is
1159 amiss. Returns error_mark_node if the error is not easily
1160 recoverable.
75650646 1161
75650646
MM
1162 FLAGS is a bitmask consisting of the following flags:
1163
75650646
MM
1164 2: The function has a definition.
1165 4: The function is a friend.
75650646
MM
1166
1167 The TEMPLATE_COUNT is the number of references to qualifying
1168 template classes that appeared in the name of the function. For
1169 example, in
1170
1171 template <class T> struct S { void f(); };
1172 void S<int>::f();
1173
1174 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1175 classes are not counted in the TEMPLATE_COUNT, so that in
1176
1177 template <class T> struct S {};
1178 template <> struct S<int> { void f(); }
36a117a5 1179 template <> void S<int>::f();
75650646
MM
1180
1181 the TEMPLATE_COUNT would be 0. (Note that this declaration is
1182 illegal; there should be no template <>.)
1183
1184 If the function is a specialization, it is marked as such via
1185 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
1186 is set up correctly, and it is added to the list of specializations
1187 for that template. */
386b8a85 1188
e1467ff2 1189tree
27bb8339 1190check_explicit_specialization (declarator, decl, template_count, flags)
386b8a85
JM
1191 tree declarator;
1192 tree decl;
1193 int template_count;
1194 int flags;
1195{
75650646
MM
1196 int have_def = flags & 2;
1197 int is_friend = flags & 4;
1198 int specialization = 0;
e1467ff2 1199 int explicit_instantiation = 0;
fd4de5ff 1200 int member_specialization = 0;
75650646
MM
1201 tree ctype = DECL_CLASS_CONTEXT (decl);
1202 tree dname = DECL_NAME (decl);
74b846e0 1203 tmpl_spec_kind tsk;
386b8a85 1204
74b846e0 1205 tsk = current_tmpl_spec_kind (template_count);
75650646 1206
74b846e0
MM
1207 switch (tsk)
1208 {
1209 case tsk_none:
1210 if (processing_specialization)
75650646 1211 {
fd4de5ff
MM
1212 specialization = 1;
1213 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
75650646 1214 }
74b846e0 1215 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
386b8a85 1216 {
74b846e0
MM
1217 if (is_friend)
1218 /* This could be something like:
75650646 1219
74b846e0
MM
1220 template <class T> void f(T);
1221 class S { friend void f<>(int); } */
1222 specialization = 1;
1223 else
1224 {
1225 /* This case handles bogus declarations like template <>
1226 template <class T> void f<int>(); */
1227
1228 cp_error ("template-id `%D' in declaration of primary template",
1229 declarator);
1230 return decl;
1231 }
1232 }
1233 break;
1234
1235 case tsk_invalid_member_spec:
1236 /* The error has already been reported in
1237 check_specialization_scope. */
1238 return error_mark_node;
1239
1240 case tsk_invalid_expl_inst:
1241 cp_error ("template parameter list used in explicit instantiation");
1242
1243 /* Fall through. */
1244
1245 case tsk_expl_inst:
fd4de5ff
MM
1246 if (have_def)
1247 cp_error ("definition provided for explicit instantiation");
74b846e0 1248
fd4de5ff 1249 explicit_instantiation = 1;
74b846e0 1250 break;
fd4de5ff 1251
74b846e0
MM
1252 case tsk_excessive_parms:
1253 cp_error ("too many template parameter lists in declaration of `%D'",
1254 decl);
1255 return error_mark_node;
75650646 1256
74b846e0
MM
1257 /* Fall through. */
1258 case tsk_expl_spec:
1259 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1260 if (ctype)
1261 member_specialization = 1;
1262 else
1263 specialization = 1;
1264 break;
1265
1266 case tsk_insufficient_parms:
fd4de5ff
MM
1267 if (template_header_count)
1268 {
74b846e0
MM
1269 cp_error("too few template parameter lists in declaration of `%D'",
1270 decl);
fd4de5ff 1271 return decl;
c6f2ed0d 1272 }
74b846e0
MM
1273 else if (ctype != NULL_TREE
1274 && !TYPE_BEING_DEFINED (ctype)
1275 && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype)
1276 && !is_friend)
1277 {
1278 /* For backwards compatibility, we accept:
fd4de5ff 1279
74b846e0
MM
1280 template <class T> struct S { void f(); };
1281 void S<int>::f() {} // Missing template <>
fd4de5ff 1282
74b846e0
MM
1283 That used to be legal C++. */
1284 if (pedantic)
1285 cp_pedwarn
1286 ("explicit specialization not preceded by `template <>'");
1287 specialization = 1;
1288 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1289 }
1290 break;
1291
1292 case tsk_template:
1293 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
c6f2ed0d 1294 {
fd4de5ff
MM
1295 /* This case handles bogus declarations like template <>
1296 template <class T> void f<int>(); */
75650646 1297
fd4de5ff
MM
1298 cp_error ("template-id `%D' in declaration of primary template",
1299 declarator);
1300 return decl;
386b8a85 1301 }
74b846e0
MM
1302
1303 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1304 /* This is a specialization of a member template, without
1305 specialization the containing class. Something like:
1306
1307 template <class T> struct S {
1308 template <class U> void f (U);
1309 };
1310 template <> template <class U> void S<int>::f(U) {}
1311
1312 That's a specialization -- but of the entire template. */
1313 specialization = 1;
1314 break;
1315
1316 default:
1317 my_friendly_abort (20000309);
75650646 1318 }
386b8a85 1319
670960ac
JM
1320 if (specialization || member_specialization)
1321 {
1322 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1323 for (; t; t = TREE_CHAIN (t))
1324 if (TREE_PURPOSE (t))
1325 {
8251199e
JM
1326 cp_pedwarn
1327 ("default argument specified in explicit specialization");
670960ac
JM
1328 break;
1329 }
f3400fe2
JM
1330 if (current_lang_name == lang_name_c)
1331 cp_error ("template specialization with C linkage");
670960ac
JM
1332 }
1333
e1467ff2 1334 if (specialization || member_specialization || explicit_instantiation)
75650646
MM
1335 {
1336 tree tmpl = NULL_TREE;
1337 tree targs = NULL_TREE;
75650646
MM
1338
1339 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
386b8a85
JM
1340 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1341 {
1342 tree fns;
1343
1344 my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE,
1345 0);
1346 if (!ctype)
30394414 1347 fns = IDENTIFIER_NAMESPACE_VALUE (dname);
386b8a85
JM
1348 else
1349 fns = dname;
1350
75650646
MM
1351 declarator =
1352 lookup_template_function (fns, NULL_TREE);
386b8a85
JM
1353 }
1354
f2e48b67
BK
1355 if (declarator == error_mark_node)
1356 return error_mark_node;
1357
75650646
MM
1358 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1359 {
8ec2ac34 1360 if (!explicit_instantiation)
6c30752f
MM
1361 /* A specialization in class scope. This is illegal,
1362 but the error will already have been flagged by
1363 check_specialization_scope. */
1364 return error_mark_node;
8ec2ac34 1365 else
b370501f
KG
1366 {
1367 /* It's not legal to write an explicit instantiation in
1368 class scope, e.g.:
8ec2ac34 1369
b370501f 1370 class C { template void f(); }
8ec2ac34 1371
b370501f
KG
1372 This case is caught by the parser. However, on
1373 something like:
8ec2ac34 1374
b370501f 1375 template class C { void f(); };
8ec2ac34 1376
b370501f
KG
1377 (which is illegal) we can get here. The error will be
1378 issued later. */
1379 ;
1380 }
8ec2ac34 1381
e1467ff2 1382 return decl;
75650646 1383 }
8f032717
MM
1384 else if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
1385 {
1386 /* A friend declaration. We can't do much, because we don't
1387 know what this resolves to, yet. */
1388 my_friendly_assert (is_friend != 0, 0);
1389 my_friendly_assert (!explicit_instantiation, 0);
1390 SET_DECL_IMPLICIT_INSTANTIATION (decl);
1391 return decl;
1392 }
75650646
MM
1393 else if (ctype != NULL_TREE
1394 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1395 IDENTIFIER_NODE))
386b8a85 1396 {
75650646
MM
1397 /* Find the list of functions in ctype that have the same
1398 name as the declared function. */
1399 tree name = TREE_OPERAND (declarator, 0);
03017874
MM
1400 tree fns = NULL_TREE;
1401 int idx;
1402
75650646
MM
1403 if (name == constructor_name (ctype)
1404 || name == constructor_name_full (ctype))
386b8a85 1405 {
75650646
MM
1406 int is_constructor = DECL_CONSTRUCTOR_P (decl);
1407
1408 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1409 : !TYPE_HAS_DESTRUCTOR (ctype))
1410 {
1411 /* From [temp.expl.spec]:
e1467ff2 1412
75650646
MM
1413 If such an explicit specialization for the member
1414 of a class template names an implicitly-declared
1415 special member function (clause _special_), the
e1467ff2
MM
1416 program is ill-formed.
1417
1418 Similar language is found in [temp.explicit]. */
8251199e 1419 cp_error ("specialization of implicitly-declared special member function");
03017874 1420 return error_mark_node;
75650646 1421 }
386b8a85 1422
42da2fd8 1423 name = is_constructor ? ctor_identifier : dtor_identifier;
75650646 1424 }
42da2fd8 1425
421844e7 1426 if (!DECL_CONV_FN_P (decl))
03017874
MM
1427 {
1428 idx = lookup_fnfields_1 (ctype, name);
1429 if (idx >= 0)
1430 fns = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (ctype), idx);
1431 }
1432 else
1433 {
1434 tree methods;
1435
1436 /* For a type-conversion operator, we cannot do a
1437 name-based lookup. We might be looking for `operator
1438 int' which will be a specialization of `operator T'.
1439 So, we find *all* the conversion operators, and then
1440 select from them. */
1441 fns = NULL_TREE;
1442
1443 methods = CLASSTYPE_METHOD_VEC (ctype);
1444 if (methods)
1445 for (idx = 2; idx < TREE_VEC_LENGTH (methods); ++idx)
1446 {
1447 tree ovl = TREE_VEC_ELT (methods, idx);
1448
1449 if (!ovl || !DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1450 /* There are no more conversion functions. */
1451 break;
1452
1453 /* Glue all these conversion functions together
1454 with those we already have. */
1455 for (; ovl; ovl = OVL_NEXT (ovl))
1456 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1457 }
1458 }
1459
386b8a85
JM
1460 if (fns == NULL_TREE)
1461 {
b3f738da
MM
1462 cp_error ("no member function `%D' declared in `%T'",
1463 name, ctype);
03017874 1464 return error_mark_node;
386b8a85
JM
1465 }
1466 else
1467 TREE_OPERAND (declarator, 0) = fns;
1468 }
75650646 1469
e1467ff2
MM
1470 /* Figure out what exactly is being specialized at this point.
1471 Note that for an explicit instantiation, even one for a
38e01259 1472 member function, we cannot tell apriori whether the
e1467ff2 1473 instantiation is for a member template, or just a member
36a117a5
MM
1474 function of a template class. Even if a member template is
1475 being instantiated, the member template arguments may be
1476 elided if they can be deduced from the rest of the
1477 declaration. */
e1467ff2
MM
1478 tmpl = determine_specialization (declarator, decl,
1479 &targs,
bf8f3f93 1480 member_specialization);
386b8a85 1481
03017874
MM
1482 if (!tmpl || tmpl == error_mark_node)
1483 /* We couldn't figure out what this declaration was
1484 specializing. */
1485 return error_mark_node;
1486 else
386b8a85 1487 {
25aab5d0 1488 tree gen_tmpl = most_general_template (tmpl);
36a117a5 1489
e1467ff2
MM
1490 if (explicit_instantiation)
1491 {
03d0f4af 1492 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
25aab5d0
MM
1493 is done by do_decl_instantiation later. */
1494
1495 int arg_depth = TMPL_ARGS_DEPTH (targs);
1496 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
1497
1498 if (arg_depth > parm_depth)
1499 {
1500 /* If TMPL is not the most general template (for
1501 example, if TMPL is a friend template that is
1502 injected into namespace scope), then there will
1503 be too many levels fo TARGS. Remove some of them
1504 here. */
1505 int i;
1506 tree new_targs;
1507
f31c0a32 1508 new_targs = make_tree_vec (parm_depth);
25aab5d0
MM
1509 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
1510 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
1511 = TREE_VEC_ELT (targs, i);
1512 targs = new_targs;
1513 }
1514
74b846e0 1515 return instantiate_template (tmpl, targs);
e1467ff2 1516 }
74b846e0 1517
f9a7ae04
MM
1518 /* If this is a specialization of a member template of a
1519 template class. In we want to return the TEMPLATE_DECL,
1520 not the specialization of it. */
74b846e0
MM
1521 if (tsk == tsk_template)
1522 {
1523 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
f9a7ae04 1524 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
74b846e0
MM
1525 return tmpl;
1526 }
1527
36a117a5
MM
1528 /* If we though that the DECL was a member function, but it
1529 turns out to be specializing a static member function,
1530 make DECL a static member function as well. */
1531 if (DECL_STATIC_FUNCTION_P (tmpl)
1532 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
366c0f1e 1533 {
3afb32a4 1534 revert_static_member_fn (decl);
366c0f1e
MM
1535 last_function_parms = TREE_CHAIN (last_function_parms);
1536 }
e1467ff2 1537
36a117a5 1538 /* Set up the DECL_TEMPLATE_INFO for DECL. */
e1b3e07d 1539 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
36a117a5 1540
e1467ff2
MM
1541 /* Mangle the function name appropriately. Note that we do
1542 not mangle specializations of non-template member
1543 functions of template classes, e.g. with
36a117a5 1544
e1467ff2 1545 template <class T> struct S { void f(); }
36a117a5 1546
e1467ff2 1547 and given the specialization
36a117a5 1548
e1467ff2 1549 template <> void S<int>::f() {}
36a117a5 1550
e1467ff2
MM
1551 we do not mangle S<int>::f() here. That's because it's
1552 just an ordinary member function and doesn't need special
36a117a5 1553 treatment. We do this here so that the ordinary,
74b846e0 1554 non-template, name-mangling algorithm will not be used
36a117a5 1555 later. */
e1467ff2 1556 if ((is_member_template (tmpl) || ctype == NULL_TREE)
75650646 1557 && name_mangling_version >= 1)
36a117a5 1558 set_mangled_name_for_template_decl (decl);
386b8a85
JM
1559
1560 if (is_friend && !have_def)
36a117a5
MM
1561 /* This is not really a declaration of a specialization.
1562 It's just the name of an instantiation. But, it's not
1563 a request for an instantiation, either. */
fbf1c34b 1564 SET_DECL_IMPLICIT_INSTANTIATION (decl);
75650646 1565
36a117a5
MM
1566 /* Register this specialization so that we can find it
1567 again. */
1568 decl = register_specialization (decl, gen_tmpl, targs);
386b8a85
JM
1569 }
1570 }
75650646 1571
e1467ff2 1572 return decl;
386b8a85 1573}
75650646 1574
39c01e4c
MM
1575/* TYPE is being declared. Verify that the use of template headers
1576 and such is reasonable. Issue error messages if not. */
1577
1578void
1579maybe_check_template_type (type)
1580 tree type;
1581{
1582 if (template_header_count)
1583 {
1584 /* We are in the scope of some `template <...>' header. */
1585
1586 int context_depth
1587 = template_class_depth_real (TYPE_CONTEXT (type),
1588 /*count_specializations=*/1);
1589
1590 if (template_header_count <= context_depth)
1591 /* This is OK; the template headers are for the context. We
1592 are actually too lenient here; like
1593 check_explicit_specialization we should consider the number
1594 of template types included in the actual declaration. For
1595 example,
1596
1597 template <class T> struct S {
1598 template <class U> template <class V>
1599 struct I {};
1600 };
1601
1602 is illegal, but:
1603
1604 template <class T> struct S {
1605 template <class U> struct I;
1606 };
1607
1608 template <class T> template <class U.
1609 struct S<T>::I {};
1610
1611 is not. */
1612 ;
1613 else if (template_header_count > context_depth + 1)
1614 /* There are two many template parameter lists. */
8251199e 1615 cp_error ("too many template parameter lists in declaration of `%T'", type);
39c01e4c
MM
1616 }
1617}
1618
75650646
MM
1619/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
1620 parameters. These are represented in the same format used for
1621 DECL_TEMPLATE_PARMS. */
1622
1623int comp_template_parms (parms1, parms2)
1624 tree parms1;
1625 tree parms2;
1626{
1627 tree p1;
1628 tree p2;
1629
1630 if (parms1 == parms2)
1631 return 1;
1632
1633 for (p1 = parms1, p2 = parms2;
1634 p1 != NULL_TREE && p2 != NULL_TREE;
1635 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
1636 {
1637 tree t1 = TREE_VALUE (p1);
1638 tree t2 = TREE_VALUE (p2);
1639 int i;
1640
1641 my_friendly_assert (TREE_CODE (t1) == TREE_VEC, 0);
1642 my_friendly_assert (TREE_CODE (t2) == TREE_VEC, 0);
1643
1644 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
1645 return 0;
1646
1647 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
1648 {
1649 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
1650 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
1651
1652 if (TREE_CODE (parm1) != TREE_CODE (parm2))
1653 return 0;
1654
1655 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
1656 continue;
3bfdc719 1657 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
75650646
MM
1658 return 0;
1659 }
1660 }
1661
1662 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
1663 /* One set of parameters has more parameters lists than the
1664 other. */
1665 return 0;
1666
1667 return 1;
1668}
1669
f3400fe2
JM
1670/* Complain if DECL shadows a template parameter.
1671
1672 [temp.local]: A template-parameter shall not be redeclared within its
1673 scope (including nested scopes). */
1674
1675void
1676check_template_shadow (decl)
1677 tree decl;
1678{
8f032717
MM
1679 tree olddecl;
1680
b5d9b9ab
MM
1681 /* If we're not in a template, we can't possibly shadow a template
1682 parameter. */
1683 if (!current_template_parms)
1684 return;
1685
1686 /* Figure out what we're shadowing. */
8f032717
MM
1687 if (TREE_CODE (decl) == OVERLOAD)
1688 decl = OVL_CURRENT (decl);
1689 olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
f3400fe2 1690
b5d9b9ab
MM
1691 /* If there's no previous binding for this name, we're not shadowing
1692 anything, let alone a template parameter. */
1693 if (!olddecl)
1694 return;
1695
1696 /* If we're not shadowing a template parameter, we're done. Note
1697 that OLDDECL might be an OVERLOAD (or perhaps even an
1698 ERROR_MARK), so we can't just blithely assume it to be a _DECL
1699 node. */
2f939d94 1700 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
b5d9b9ab
MM
1701 return;
1702
1703 /* We check for decl != olddecl to avoid bogus errors for using a
1704 name inside a class. We check TPFI to avoid duplicate errors for
1705 inline member templates. */
1706 if (decl == olddecl
1707 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
1708 return;
1709
1710 cp_error_at ("declaration of `%#D'", decl);
1711 cp_error_at (" shadows template parm `%#D'", olddecl);
f3400fe2 1712}
22a7be53 1713
f3400fe2 1714/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
f84b4be9
JM
1715 ORIG_LEVEL, DECL, and TYPE. */
1716
1717static tree
1718build_template_parm_index (index, level, orig_level, decl, type)
1719 int index;
1720 int level;
1721 int orig_level;
1722 tree decl;
1723 tree type;
1724{
1725 tree t = make_node (TEMPLATE_PARM_INDEX);
1726 TEMPLATE_PARM_IDX (t) = index;
1727 TEMPLATE_PARM_LEVEL (t) = level;
1728 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
1729 TEMPLATE_PARM_DECL (t) = decl;
1730 TREE_TYPE (t) = type;
1731
1732 return t;
1733}
1734
f84b4be9 1735/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
93cdc044 1736 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
f84b4be9
JM
1737 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
1738 new one is created. */
1739
1740static tree
93cdc044 1741reduce_template_parm_level (index, type, levels)
f84b4be9
JM
1742 tree index;
1743 tree type;
93cdc044 1744 int levels;
f84b4be9
JM
1745{
1746 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
1747 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
93cdc044 1748 != TEMPLATE_PARM_LEVEL (index) - levels))
f84b4be9
JM
1749 {
1750 tree decl
1751 = build_decl (TREE_CODE (TEMPLATE_PARM_DECL (index)),
1752 DECL_NAME (TEMPLATE_PARM_DECL (index)),
1753 type);
1754 tree t
1755 = build_template_parm_index (TEMPLATE_PARM_IDX (index),
93cdc044 1756 TEMPLATE_PARM_LEVEL (index) - levels,
f84b4be9
JM
1757 TEMPLATE_PARM_ORIG_LEVEL (index),
1758 decl, type);
1759 TEMPLATE_PARM_DESCENDANTS (index) = t;
cae40af6
JM
1760
1761 /* Template template parameters need this. */
1762 DECL_TEMPLATE_PARMS (decl)
1763 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
f84b4be9
JM
1764 }
1765
1766 return TEMPLATE_PARM_DESCENDANTS (index);
1767}
1768
8d08fdba 1769/* Process information from new template parameter NEXT and append it to the
5566b478 1770 LIST being built. */
e92cc029 1771
8d08fdba
MS
1772tree
1773process_template_parm (list, next)
1774 tree list, next;
1775{
1776 tree parm;
1777 tree decl = 0;
a292b002 1778 tree defval;
5566b478 1779 int is_type, idx;
f84b4be9 1780
8d08fdba
MS
1781 parm = next;
1782 my_friendly_assert (TREE_CODE (parm) == TREE_LIST, 259);
a292b002
MS
1783 defval = TREE_PURPOSE (parm);
1784 parm = TREE_VALUE (parm);
1785 is_type = TREE_PURPOSE (parm) == class_type_node;
5566b478
MS
1786
1787 if (list)
1788 {
1789 tree p = TREE_VALUE (tree_last (list));
1790
1791 if (TREE_CODE (p) == TYPE_DECL)
1792 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
73b0fce8
KL
1793 else if (TREE_CODE (p) == TEMPLATE_DECL)
1794 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (DECL_TEMPLATE_RESULT (p)));
5566b478 1795 else
f84b4be9 1796 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
5566b478
MS
1797 ++idx;
1798 }
1799 else
1800 idx = 0;
1801
8d08fdba
MS
1802 if (!is_type)
1803 {
a292b002 1804 my_friendly_assert (TREE_CODE (TREE_PURPOSE (parm)) == TREE_LIST, 260);
8d08fdba 1805 /* is a const-param */
a292b002 1806 parm = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm),
c11b6f21 1807 PARM, 0, NULL_TREE);
d490621d
MM
1808
1809 /* [temp.param]
1810
1811 The top-level cv-qualifiers on the template-parameter are
1812 ignored when determining its type. */
1813 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
1814
8d08fdba
MS
1815 /* A template parameter is not modifiable. */
1816 TREE_READONLY (parm) = 1;
c91a56d2 1817 if (IS_AGGR_TYPE (TREE_TYPE (parm))
410c2fba
KL
1818 && TREE_CODE (TREE_TYPE (parm)) != TEMPLATE_TYPE_PARM
1819 && TREE_CODE (TREE_TYPE (parm)) != TYPENAME_TYPE)
8d08fdba 1820 {
8251199e 1821 cp_error ("`%#T' is not a valid type for a template constant parameter",
c91a56d2
MS
1822 TREE_TYPE (parm));
1823 if (DECL_NAME (parm) == NULL_TREE)
8251199e 1824 error (" a template type parameter must begin with `class' or `typename'");
8d08fdba
MS
1825 TREE_TYPE (parm) = void_type_node;
1826 }
37c46b43
MS
1827 else if (pedantic
1828 && (TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE
1829 || TREE_CODE (TREE_TYPE (parm)) == COMPLEX_TYPE))
8251199e 1830 cp_pedwarn ("`%T' is not a valid type for a template constant parameter",
eb66be0e 1831 TREE_TYPE (parm));
8d08fdba 1832 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
f84b4be9
JM
1833 DECL_INITIAL (parm) = DECL_INITIAL (decl)
1834 = build_template_parm_index (idx, processing_template_decl,
1835 processing_template_decl,
1836 decl, TREE_TYPE (parm));
8d08fdba
MS
1837 }
1838 else
1839 {
73b0fce8
KL
1840 tree t;
1841 parm = TREE_VALUE (parm);
1842
1843 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
1844 {
33848bb0 1845 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
73b0fce8
KL
1846 /* This is for distinguishing between real templates and template
1847 template parameters */
1848 TREE_TYPE (parm) = t;
1849 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
1850 decl = parm;
1851 }
1852 else
1853 {
33848bb0 1854 t = make_aggr_type (TEMPLATE_TYPE_PARM);
73b0fce8
KL
1855 /* parm is either IDENTIFIER_NODE or NULL_TREE */
1856 decl = build_decl (TYPE_DECL, parm, t);
1857 }
1858
d2e5ee5c
MS
1859 TYPE_NAME (t) = decl;
1860 TYPE_STUB_DECL (t) = decl;
a292b002 1861 parm = decl;
f84b4be9
JM
1862 TEMPLATE_TYPE_PARM_INDEX (t)
1863 = build_template_parm_index (idx, processing_template_decl,
1864 processing_template_decl,
1865 decl, TREE_TYPE (parm));
8d08fdba 1866 }
8ccc31eb 1867 SET_DECL_ARTIFICIAL (decl);
cd9f6678 1868 SET_DECL_TEMPLATE_PARM_P (decl);
8d08fdba 1869 pushdecl (decl);
a292b002 1870 parm = build_tree_list (defval, parm);
8d08fdba
MS
1871 return chainon (list, parm);
1872}
1873
1874/* The end of a template parameter list has been reached. Process the
1875 tree list into a parameter vector, converting each parameter into a more
1876 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
1877 as PARM_DECLs. */
1878
1879tree
1880end_template_parm_list (parms)
1881 tree parms;
1882{
5566b478 1883 int nparms;
8d08fdba 1884 tree parm;
5566b478
MS
1885 tree saved_parmlist = make_tree_vec (list_length (parms));
1886
5566b478
MS
1887 current_template_parms
1888 = tree_cons (build_int_2 (0, processing_template_decl),
1889 saved_parmlist, current_template_parms);
8d08fdba 1890
91e490ab
MM
1891 for (parm = parms, nparms = 0;
1892 parm;
1893 parm = TREE_CHAIN (parm), nparms++)
66191c20 1894 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
a292b002 1895
67ffc812
MM
1896 --processing_template_parmlist;
1897
8d08fdba
MS
1898 return saved_parmlist;
1899}
1900
5566b478
MS
1901/* end_template_decl is called after a template declaration is seen. */
1902
8d08fdba 1903void
5566b478 1904end_template_decl ()
8d08fdba 1905{
386b8a85
JM
1906 reset_specialization ();
1907
5156628f 1908 if (! processing_template_decl)
73aad9b9
JM
1909 return;
1910
5566b478 1911 /* This matches the pushlevel in begin_template_parm_list. */
74b846e0 1912 finish_scope ();
8d08fdba 1913
5566b478
MS
1914 --processing_template_decl;
1915 current_template_parms = TREE_CHAIN (current_template_parms);
5566b478 1916}
8d08fdba 1917
36a117a5
MM
1918/* Given a template argument vector containing the template PARMS.
1919 The innermost PARMS are given first. */
9a3b49ac
MS
1920
1921tree
1922current_template_args ()
5566b478 1923{
36a117a5 1924 tree header;
b370501f 1925 tree args = NULL_TREE;
36a117a5 1926 int length = TMPL_PARMS_DEPTH (current_template_parms);
98c1c668
JM
1927 int l = length;
1928
36a117a5
MM
1929 /* If there is only one level of template parameters, we do not
1930 create a TREE_VEC of TREE_VECs. Instead, we return a single
1931 TREE_VEC containing the arguments. */
1932 if (length > 1)
1933 args = make_tree_vec (length);
1934
1935 for (header = current_template_parms; header; header = TREE_CHAIN (header))
8d08fdba 1936 {
5566b478 1937 tree a = copy_node (TREE_VALUE (header));
36a117a5
MM
1938 int i;
1939
5566b478 1940 TREE_TYPE (a) = NULL_TREE;
36a117a5 1941 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
5566b478 1942 {
98c1c668
JM
1943 tree t = TREE_VEC_ELT (a, i);
1944
36a117a5 1945 /* T will be a list if we are called from within a
98c1c668
JM
1946 begin/end_template_parm_list pair, but a vector directly
1947 if within a begin/end_member_template_processing pair. */
1948 if (TREE_CODE (t) == TREE_LIST)
1949 {
1950 t = TREE_VALUE (t);
1951
73b0fce8
KL
1952 if (TREE_CODE (t) == TYPE_DECL
1953 || TREE_CODE (t) == TEMPLATE_DECL)
98c1c668
JM
1954 t = TREE_TYPE (t);
1955 else
1956 t = DECL_INITIAL (t);
36a117a5 1957 TREE_VEC_ELT (a, i) = t;
98c1c668 1958 }
5566b478 1959 }
36a117a5
MM
1960
1961 if (length > 1)
1962 TREE_VEC_ELT (args, --l) = a;
1963 else
1964 args = a;
8d08fdba
MS
1965 }
1966
9a3b49ac
MS
1967 return args;
1968}
75650646 1969
e1467ff2
MM
1970/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
1971 template PARMS. Used by push_template_decl below. */
1972
75650646
MM
1973static tree
1974build_template_decl (decl, parms)
1975 tree decl;
1976 tree parms;
1977{
1978 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
1979 DECL_TEMPLATE_PARMS (tmpl) = parms;
1980 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
1981 if (DECL_LANG_SPECIFIC (decl))
1982 {
4f1c5b7d 1983 DECL_VIRTUAL_CONTEXT (tmpl) = DECL_VIRTUAL_CONTEXT (decl);
8f032717
MM
1984 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
1985 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
11f98788 1986 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
75650646
MM
1987 }
1988
1989 return tmpl;
1990}
1991
050367a3
MM
1992struct template_parm_data
1993{
6c30752f
MM
1994 /* The level of the template parameters we are currently
1995 processing. */
050367a3 1996 int level;
6c30752f
MM
1997
1998 /* The index of the specialization argument we are currently
1999 processing. */
2000 int current_arg;
2001
2002 /* An array whose size is the number of template parameters. The
2003 elements are non-zero if the parameter has been used in any one
2004 of the arguments processed so far. */
050367a3 2005 int* parms;
6c30752f
MM
2006
2007 /* An array whose size is the number of template arguments. The
2008 elements are non-zero if the argument makes use of template
2009 parameters of this level. */
2010 int* arg_uses_template_parms;
050367a3
MM
2011};
2012
2013/* Subroutine of push_template_decl used to see if each template
2014 parameter in a partial specialization is used in the explicit
2015 argument list. If T is of the LEVEL given in DATA (which is
2016 treated as a template_parm_data*), then DATA->PARMS is marked
2017 appropriately. */
2018
2019static int
2020mark_template_parm (t, data)
2021 tree t;
2022 void* data;
2023{
2024 int level;
2025 int idx;
2026 struct template_parm_data* tpd = (struct template_parm_data*) data;
2027
2028 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2029 {
2030 level = TEMPLATE_PARM_LEVEL (t);
2031 idx = TEMPLATE_PARM_IDX (t);
2032 }
2033 else
2034 {
2035 level = TEMPLATE_TYPE_LEVEL (t);
2036 idx = TEMPLATE_TYPE_IDX (t);
2037 }
2038
2039 if (level == tpd->level)
6c30752f
MM
2040 {
2041 tpd->parms[idx] = 1;
2042 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2043 }
050367a3
MM
2044
2045 /* Return zero so that for_each_template_parm will continue the
2046 traversal of the tree; we want to mark *every* template parm. */
2047 return 0;
2048}
2049
6c30752f
MM
2050/* Process the partial specialization DECL. */
2051
e9659ab0 2052static tree
6c30752f
MM
2053process_partial_specialization (decl)
2054 tree decl;
2055{
2056 tree type = TREE_TYPE (decl);
2057 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2058 tree specargs = CLASSTYPE_TI_ARGS (type);
f9a7ae04 2059 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
6c30752f
MM
2060 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2061 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2062 int nargs = TREE_VEC_LENGTH (inner_args);
2063 int ntparms = TREE_VEC_LENGTH (inner_parms);
2064 int i;
2065 int did_error_intro = 0;
6c30752f
MM
2066 struct template_parm_data tpd;
2067 struct template_parm_data tpd2;
2068
6c30752f
MM
2069 /* We check that each of the template parameters given in the
2070 partial specialization is used in the argument list to the
2071 specialization. For example:
2072
2073 template <class T> struct S;
2074 template <class T> struct S<T*>;
2075
2076 The second declaration is OK because `T*' uses the template
2077 parameter T, whereas
2078
2079 template <class T> struct S<int>;
2080
2081 is no good. Even trickier is:
2082
2083 template <class T>
2084 struct S1
2085 {
2086 template <class U>
2087 struct S2;
2088 template <class U>
2089 struct S2<T>;
2090 };
2091
2092 The S2<T> declaration is actually illegal; it is a
2093 full-specialization. Of course,
2094
2095 template <class U>
2096 struct S2<T (*)(U)>;
2097
2098 or some such would have been OK. */
2099 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2100 tpd.parms = alloca (sizeof (int) * ntparms);
1ddb2906 2101 bzero ((PTR) tpd.parms, sizeof (int) * ntparms);
6c30752f
MM
2102
2103 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
1ddb2906 2104 bzero ((PTR) tpd.arg_uses_template_parms, sizeof (int) * nargs);
6c30752f
MM
2105 for (i = 0; i < nargs; ++i)
2106 {
2107 tpd.current_arg = i;
2108 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2109 &mark_template_parm,
2110 &tpd);
2111 }
2112 for (i = 0; i < ntparms; ++i)
2113 if (tpd.parms[i] == 0)
2114 {
2115 /* One of the template parms was not used in the
f9a7ae04 2116 specialization. */
6c30752f
MM
2117 if (!did_error_intro)
2118 {
8251199e 2119 cp_error ("template parameters not used in partial specialization:");
6c30752f
MM
2120 did_error_intro = 1;
2121 }
2122
8251199e 2123 cp_error (" `%D'",
6c30752f
MM
2124 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2125 }
2126
2127 /* [temp.class.spec]
2128
2129 The argument list of the specialization shall not be identical to
2130 the implicit argument list of the primary template. */
f9a7ae04
MM
2131 if (comp_template_args
2132 (inner_args,
2133 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2134 (maintmpl)))))
8251199e 2135 cp_error ("partial specialization `%T' does not specialize any template arguments", type);
6c30752f
MM
2136
2137 /* [temp.class.spec]
2138
2139 A partially specialized non-type argument expression shall not
2140 involve template parameters of the partial specialization except
2141 when the argument expression is a simple identifier.
2142
2143 The type of a template parameter corresponding to a specialized
2144 non-type argument shall not be dependent on a parameter of the
2145 specialization. */
2146 my_friendly_assert (nargs == DECL_NTPARMS (maintmpl), 0);
2147 tpd2.parms = 0;
2148 for (i = 0; i < nargs; ++i)
2149 {
2150 tree arg = TREE_VEC_ELT (inner_args, i);
2151 if (/* These first two lines are the `non-type' bit. */
2f939d94 2152 !TYPE_P (arg)
6c30752f
MM
2153 && TREE_CODE (arg) != TEMPLATE_DECL
2154 /* This next line is the `argument expression is not just a
2155 simple identifier' condition and also the `specialized
2156 non-type argument' bit. */
2157 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2158 {
2159 if (tpd.arg_uses_template_parms[i])
8251199e 2160 cp_error ("template argument `%E' involves template parameter(s)", arg);
6c30752f
MM
2161 else
2162 {
2163 /* Look at the corresponding template parameter,
2164 marking which template parameters its type depends
2165 upon. */
2166 tree type =
2167 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
2168 i)));
2169
2170 if (!tpd2.parms)
2171 {
2172 /* We haven't yet initialized TPD2. Do so now. */
2173 tpd2.arg_uses_template_parms
2174 = (int*) alloca (sizeof (int) * nargs);
104bf76a 2175 /* The number of parameters here is the number in the
76a83782
RH
2176 main template, which, as checked in the assertion
2177 above, is NARGS. */
6c30752f
MM
2178 tpd2.parms = (int*) alloca (sizeof (int) * nargs);
2179 tpd2.level =
2180 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2181 }
2182
104bf76a 2183 /* Mark the template parameters. But this time, we're
6c30752f
MM
2184 looking for the template parameters of the main
2185 template, not in the specialization. */
2186 tpd2.current_arg = i;
2187 tpd2.arg_uses_template_parms[i] = 0;
1ddb2906 2188 bzero ((PTR) tpd2.parms, sizeof (int) * nargs);
6c30752f
MM
2189 for_each_template_parm (type,
2190 &mark_template_parm,
2191 &tpd2);
2192
2193 if (tpd2.arg_uses_template_parms [i])
2194 {
2195 /* The type depended on some template parameters.
2196 If they are fully specialized in the
2197 specialization, that's OK. */
2198 int j;
2199 for (j = 0; j < nargs; ++j)
2200 if (tpd2.parms[j] != 0
2201 && tpd.arg_uses_template_parms [j])
2202 {
104bf76a 2203 cp_error ("type `%T' of template argument `%E' depends on template parameter(s)",
6c30752f
MM
2204 type,
2205 arg);
2206 break;
2207 }
2208 }
2209 }
2210 }
2211 }
2212
2213 if (retrieve_specialization (maintmpl, specargs))
2214 /* We've already got this specialization. */
2215 return decl;
2216
d8b64f80 2217 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
e1b3e07d
MM
2218 = tree_cons (inner_args, inner_parms,
2219 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
6c30752f
MM
2220 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2221 return decl;
2222}
2223
6ba89f8e
MM
2224/* Check that a template declaration's use of default arguments is not
2225 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
2226 non-zero if DECL is the thing declared by a primary template.
2227 IS_PARTIAL is non-zero if DECL is a partial specialization. */
2228
2229static void
2230check_default_tmpl_args (decl, parms, is_primary, is_partial)
2231 tree decl;
2232 tree parms;
2233 int is_primary;
2234 int is_partial;
2235{
d8e178a0 2236 const char *msg;
66191c20
MM
2237 int last_level_to_check;
2238 tree parm_level;
6ba89f8e
MM
2239
2240 /* [temp.param]
2241
2242 A default template-argument shall not be specified in a
2243 function template declaration or a function template definition, nor
2244 in the template-parameter-list of the definition of a member of a
2245 class template. */
2246
4f1c5b7d 2247 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
e0942dcd
MM
2248 /* You can't have a function template declaration in a local
2249 scope, nor you can you define a member of a class template in a
2250 local scope. */
2251 return;
2252
6ba89f8e
MM
2253 if (current_class_type
2254 && !TYPE_BEING_DEFINED (current_class_type)
3d7de1fa 2255 && DECL_LANG_SPECIFIC (decl)
5937a6f9
MM
2256 /* If this is either a friend defined in the scope of the class
2257 or a member function. */
4f1c5b7d
MM
2258 && ((DECL_CONTEXT (decl)
2259 && same_type_p (DECL_CONTEXT (decl), current_class_type))
2260 || (DECL_FRIEND_CONTEXT (decl)
2261 && same_type_p (DECL_FRIEND_CONTEXT (decl),
2262 current_class_type)))
5937a6f9
MM
2263 /* And, if it was a member function, it really was defined in
2264 the scope of the class. */
2265 && (!DECL_FUNCTION_MEMBER_P (decl) || DECL_DEFINED_IN_CLASS_P (decl)))
6ba89f8e 2266 /* We already checked these parameters when the template was
5937a6f9
MM
2267 declared, so there's no need to do it again now. This function
2268 was defined in class scope, but we're processing it's body now
2269 that the class is complete. */
6ba89f8e
MM
2270 return;
2271
66191c20
MM
2272 /* [temp.param]
2273
2274 If a template-parameter has a default template-argument, all
2275 subsequent template-parameters shall have a default
2276 template-argument supplied. */
2277 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2278 {
2279 tree inner_parms = TREE_VALUE (parm_level);
2280 int ntparms = TREE_VEC_LENGTH (inner_parms);
2281 int seen_def_arg_p = 0;
2282 int i;
2283
2284 for (i = 0; i < ntparms; ++i)
2285 {
2286 tree parm = TREE_VEC_ELT (inner_parms, i);
2287 if (TREE_PURPOSE (parm))
2288 seen_def_arg_p = 1;
2289 else if (seen_def_arg_p)
2290 {
2291 cp_error ("no default argument for `%D'", TREE_VALUE (parm));
2292 /* For better subsequent error-recovery, we indicate that
2293 there should have been a default argument. */
2294 TREE_PURPOSE (parm) = error_mark_node;
2295 }
2296 }
2297 }
2298
6ba89f8e
MM
2299 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2300 /* For an ordinary class template, default template arguments are
2301 allowed at the innermost level, e.g.:
2302 template <class T = int>
2303 struct S {};
2304 but, in a partial specialization, they're not allowed even
2305 there, as we have in [temp.class.spec]:
2306
2307 The template parameter list of a specialization shall not
2308 contain default template argument values.
2309
2310 So, for a partial specialization, or for a function template,
2311 we look at all of them. */
2312 ;
2313 else
2314 /* But, for a primary class template that is not a partial
2315 specialization we look at all template parameters except the
2316 innermost ones. */
2317 parms = TREE_CHAIN (parms);
2318
2319 /* Figure out what error message to issue. */
2320 if (TREE_CODE (decl) == FUNCTION_DECL)
2321 msg = "default argument for template parameter in function template `%D'";
2322 else if (is_partial)
2323 msg = "default argument in partial specialization `%D'";
2324 else
2325 msg = "default argument for template parameter for class enclosing `%D'";
2326
2327 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2328 /* If we're inside a class definition, there's no need to
104bf76a 2329 examine the parameters to the class itself. On the one
6ba89f8e
MM
2330 hand, they will be checked when the class is defined, and,
2331 on the other, default arguments are legal in things like:
2332 template <class T = double>
2333 struct S { template <class U> void f(U); };
2334 Here the default argument for `S' has no bearing on the
2335 declaration of `f'. */
2336 last_level_to_check = template_class_depth (current_class_type) + 1;
2337 else
2338 /* Check everything. */
2339 last_level_to_check = 0;
2340
66191c20
MM
2341 for (parm_level = parms;
2342 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
2343 parm_level = TREE_CHAIN (parm_level))
6ba89f8e 2344 {
66191c20
MM
2345 tree inner_parms = TREE_VALUE (parm_level);
2346 int i;
2347 int ntparms;
6ba89f8e
MM
2348
2349 ntparms = TREE_VEC_LENGTH (inner_parms);
2350 for (i = 0; i < ntparms; ++i)
2351 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2352 {
2353 if (msg)
2354 {
2355 cp_error (msg, decl);
2356 msg = 0;
2357 }
2358
2359 /* Clear out the default argument so that we are not
2360 confused later. */
2361 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2362 }
2363
2364 /* At this point, if we're still interested in issuing messages,
2365 they must apply to classes surrounding the object declared. */
2366 if (msg)
2367 msg = "default argument for template parameter for class enclosing `%D'";
2368 }
2369}
2370
3ac3d9ea 2371/* Creates a TEMPLATE_DECL for the indicated DECL using the template
f84b4be9
JM
2372 parameters given by current_template_args, or reuses a
2373 previously existing one, if appropriate. Returns the DECL, or an
6757edfe
MM
2374 equivalent one, if it is replaced via a call to duplicate_decls.
2375
2376 If IS_FRIEND is non-zero, DECL is a friend declaration. */
3ac3d9ea
MM
2377
2378tree
6757edfe 2379push_template_decl_real (decl, is_friend)
9a3b49ac 2380 tree decl;
6757edfe 2381 int is_friend;
9a3b49ac
MS
2382{
2383 tree tmpl;
f84b4be9 2384 tree args;
9a3b49ac 2385 tree info;
f84b4be9
JM
2386 tree ctx;
2387 int primary;
6ba89f8e 2388 int is_partial;
cfe507be 2389 int new_template_p = 0;
6ba89f8e
MM
2390
2391 /* See if this is a partial specialization. */
9188c363 2392 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
6ba89f8e 2393 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
370af2d5 2394 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
6757edfe
MM
2395
2396 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
f84b4be9
JM
2397
2398 if (is_friend)
2399 /* For a friend, we want the context of the friend function, not
2400 the type of which it is a friend. */
2401 ctx = DECL_CONTEXT (decl);
4f1c5b7d
MM
2402 else if (CP_DECL_CONTEXT (decl)
2403 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
f84b4be9
JM
2404 /* In the case of a virtual function, we want the class in which
2405 it is defined. */
4f1c5b7d 2406 ctx = CP_DECL_CONTEXT (decl);
f84b4be9
JM
2407 else
2408 /* Otherwise, if we're currently definining some class, the DECL
2409 is assumed to be a member of the class. */
9188c363 2410 ctx = current_scope ();
f84b4be9 2411
2c73f9f5
ML
2412 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2413 ctx = NULL_TREE;
2414
2415 if (!DECL_CONTEXT (decl))
cb0dbb9a 2416 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 2417
6ba89f8e 2418 /* See if this is a primary template. */
74b846e0 2419 primary = template_parm_scope_p ();
9a3b49ac 2420
83566abf
JM
2421 if (primary)
2422 {
2423 if (current_lang_name == lang_name_c)
8251199e 2424 cp_error ("template with C linkage");
4ce3d537
MM
2425 else if (TREE_CODE (decl) == TYPE_DECL
2426 && ANON_AGGRNAME_P (DECL_NAME (decl)))
8251199e 2427 cp_error ("template class without a name");
2aaf816d
JM
2428 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2429 && CLASS_TYPE_P (TREE_TYPE (decl)))
2430 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx))
2431 || TREE_CODE (decl) == FUNCTION_DECL)
2432 /* OK */;
2433 else
4ce3d537 2434 cp_error ("template declaration of `%#D'", decl);
83566abf
JM
2435 }
2436
6ba89f8e
MM
2437 /* Check to see that the rules regarding the use of default
2438 arguments are not being violated. */
2439 check_default_tmpl_args (decl, current_template_parms,
2440 primary, is_partial);
73aad9b9 2441
6ba89f8e
MM
2442 if (is_partial)
2443 return process_partial_specialization (decl);
d32789d8 2444
9a3b49ac
MS
2445 args = current_template_args ();
2446
f84b4be9
JM
2447 if (!ctx
2448 || TREE_CODE (ctx) == FUNCTION_DECL
2449 || TYPE_BEING_DEFINED (ctx)
2450 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
8d08fdba 2451 {
75650646 2452 if (DECL_LANG_SPECIFIC (decl)
f84b4be9
JM
2453 && DECL_TEMPLATE_INFO (decl)
2454 && DECL_TI_TEMPLATE (decl))
2455 tmpl = DECL_TI_TEMPLATE (decl);
1c10870d
AS
2456 /* If DECL is a TYPE_DECL for a class-template, then there won't
2457 be DECL_LANG_SPECIFIC. The information equivalent to
2458 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
2459 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
2460 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2461 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2462 {
2463 /* Since a template declaration already existed for this
2464 class-type, we must be redeclaring it here. Make sure
2465 that the redeclaration is legal. */
2466 redeclare_class_template (TREE_TYPE (decl),
2467 current_template_parms);
2468 /* We don't need to create a new TEMPLATE_DECL; just use the
2469 one we already had. */
2470 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2471 }
f84b4be9 2472 else
786b5245 2473 {
f84b4be9 2474 tmpl = build_template_decl (decl, current_template_parms);
cfe507be
MM
2475 new_template_p = 1;
2476
f84b4be9
JM
2477 if (DECL_LANG_SPECIFIC (decl)
2478 && DECL_TEMPLATE_SPECIALIZATION (decl))
2479 {
2480 /* A specialization of a member template of a template
2481 class. */
2482 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2483 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
2484 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
2485 }
786b5245 2486 }
8d08fdba
MS
2487 }
2488 else
2489 {
e1a5ccf7 2490 tree a, t, current, parms;
ba4f4e5d 2491 int i;
6633d636 2492
6b9ab5cc
MM
2493 if (TREE_CODE (decl) == TYPE_DECL)
2494 {
ed44da02
MM
2495 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
2496 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
2497 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2498 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2499 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
6b9ab5cc
MM
2500 else
2501 {
8251199e 2502 cp_error ("`%D' does not declare a template type", decl);
6b9ab5cc
MM
2503 return decl;
2504 }
2505 }
fc378698 2506 else if (! DECL_TEMPLATE_INFO (decl))
c91a56d2 2507 {
8251199e 2508 cp_error ("template definition of non-template `%#D'", decl);
3ac3d9ea 2509 return decl;
c91a56d2 2510 }
8d08fdba 2511 else
5566b478 2512 tmpl = DECL_TI_TEMPLATE (decl);
98c1c668 2513
e1a5ccf7
JM
2514 if (is_member_template (tmpl)
2515 && DECL_FUNCTION_TEMPLATE_P (tmpl)
2516 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
2517 && DECL_TEMPLATE_SPECIALIZATION (decl))
98c1c668 2518 {
e1a5ccf7
JM
2519 tree new_tmpl;
2520
2521 /* The declaration is a specialization of a member
2522 template, declared outside the class. Therefore, the
2523 innermost template arguments will be NULL, so we
2524 replace them with the arguments determined by the
2525 earlier call to check_explicit_specialization. */
2526 args = DECL_TI_ARGS (decl);
2527
2528 new_tmpl
2529 = build_template_decl (decl, current_template_parms);
2530 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
2531 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
2532 DECL_TI_TEMPLATE (decl) = new_tmpl;
2533 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
e1b3e07d
MM
2534 DECL_TEMPLATE_INFO (new_tmpl)
2535 = tree_cons (tmpl, args, NULL_TREE);
e1a5ccf7 2536
f9a7ae04
MM
2537 register_specialization (new_tmpl,
2538 most_general_template (tmpl),
2539 args);
e1a5ccf7 2540 return decl;
98c1c668 2541 }
98c1c668 2542
e1a5ccf7 2543 /* Make sure the template headers we got make sense. */
6633d636 2544
e1a5ccf7
JM
2545 parms = DECL_TEMPLATE_PARMS (tmpl);
2546 i = TMPL_PARMS_DEPTH (parms);
2547 if (TMPL_ARGS_DEPTH (args) != i)
98c1c668 2548 {
e1a5ccf7
JM
2549 cp_error ("expected %d levels of template parms for `%#D', got %d",
2550 i, decl, TMPL_ARGS_DEPTH (args));
98c1c668 2551 }
e1a5ccf7
JM
2552 else
2553 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
2554 {
2555 a = TMPL_ARGS_LEVEL (args, i);
2556 t = INNERMOST_TEMPLATE_PARMS (parms);
2557
2558 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
2559 {
2560 if (current == decl)
2561 cp_error ("got %d template parameters for `%#D'",
2562 TREE_VEC_LENGTH (a), decl);
2563 else
2564 cp_error ("got %d template parameters for `%#T'",
2565 TREE_VEC_LENGTH (a), current);
2566 cp_error (" but %d required", TREE_VEC_LENGTH (t));
2567 }
98c1c668 2568
e1a5ccf7
JM
2569 /* Perhaps we should also check that the parms are used in the
2570 appropriate qualifying scopes in the declarator? */
6633d636 2571
e1a5ccf7
JM
2572 if (current == decl)
2573 current = ctx;
2574 else
2575 current = TYPE_CONTEXT (current);
2576 }
5566b478 2577 }
8d08fdba 2578
5566b478
MS
2579 DECL_TEMPLATE_RESULT (tmpl) = decl;
2580 TREE_TYPE (tmpl) = TREE_TYPE (decl);
8d08fdba 2581
36a117a5
MM
2582 /* Push template declarations for global functions and types. Note
2583 that we do not try to push a global template friend declared in a
2584 template class; such a thing may well depend on the template
39c01e4c 2585 parameters of the class. */
cfe507be 2586 if (new_template_p && !ctx
36a117a5 2587 && !(is_friend && template_class_depth (current_class_type) > 0))
2c73f9f5 2588 tmpl = pushdecl_namespace_level (tmpl);
8d08fdba 2589
5566b478 2590 if (primary)
6757edfe 2591 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5566b478 2592
e1b3e07d 2593 info = tree_cons (tmpl, args, NULL_TREE);
5566b478 2594
9188c363 2595 if (DECL_IMPLICIT_TYPEDEF_P (decl))
8d08fdba 2596 {
ed44da02
MM
2597 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
2598 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
2599 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE)
75650646 2600 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
51c184be 2601 }
2aaf816d 2602 else if (DECL_LANG_SPECIFIC (decl))
5566b478 2603 DECL_TEMPLATE_INFO (decl) = info;
3ac3d9ea
MM
2604
2605 return DECL_TEMPLATE_RESULT (tmpl);
8d08fdba
MS
2606}
2607
6757edfe
MM
2608tree
2609push_template_decl (decl)
2610 tree decl;
2611{
2612 return push_template_decl_real (decl, 0);
2613}
2614
2615/* Called when a class template TYPE is redeclared with the indicated
2616 template PARMS, e.g.:
7fe6899f
MM
2617
2618 template <class T> struct S;
2619 template <class T> struct S {}; */
2620
2621void
6757edfe 2622redeclare_class_template (type, parms)
7fe6899f 2623 tree type;
6757edfe 2624 tree parms;
7fe6899f 2625{
3d7de1fa 2626 tree tmpl;
6757edfe 2627 tree tmpl_parms;
7fe6899f
MM
2628 int i;
2629
3d7de1fa
MM
2630 if (!TYPE_TEMPLATE_INFO (type))
2631 {
2632 cp_error ("`%T' is not a template type", type);
2633 return;
2634 }
2635
2636 tmpl = TYPE_TI_TEMPLATE (type);
7fe6899f
MM
2637 if (!PRIMARY_TEMPLATE_P (tmpl))
2638 /* The type is nested in some template class. Nothing to worry
2639 about here; there are no new template parameters for the nested
2640 type. */
2641 return;
2642
6757edfe
MM
2643 parms = INNERMOST_TEMPLATE_PARMS (parms);
2644 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
2645
7fe6899f
MM
2646 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
2647 {
8251199e
JM
2648 cp_error_at ("previous declaration `%D'", tmpl);
2649 cp_error ("used %d template parameter%s instead of %d",
7fe6899f
MM
2650 TREE_VEC_LENGTH (tmpl_parms),
2651 TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s",
2652 TREE_VEC_LENGTH (parms));
2653 return;
2654 }
2655
2656 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
2657 {
2658 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
2659 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2660 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
2661 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
2662
2663 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm))
2664 {
8251199e
JM
2665 cp_error_at ("template parameter `%#D'", tmpl_parm);
2666 cp_error ("redeclared here as `%#D'", parm);
7fe6899f
MM
2667 return;
2668 }
2669
2670 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
2671 {
2672 /* We have in [temp.param]:
2673
2674 A template-parameter may not be given default arguments
2675 by two different declarations in the same scope. */
8251199e
JM
2676 cp_error ("redefinition of default argument for `%#D'", parm);
2677 cp_error_at (" original definition appeared here", tmpl_parm);
7fe6899f
MM
2678 return;
2679 }
2680
2681 if (parm_default != NULL_TREE)
2682 /* Update the previous template parameters (which are the ones
2683 that will really count) with the new default value. */
2684 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
7ce74c5e
MM
2685 else if (tmpl_default != NULL_TREE)
2686 /* Update the new parameters, too; they'll be used as the
2687 parameters for any members. */
2688 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
7fe6899f
MM
2689 }
2690}
75650646 2691
75650646
MM
2692/* Attempt to convert the non-type template parameter EXPR to the
2693 indicated TYPE. If the conversion is successful, return the
2694 converted value. If the conversion is unsuccesful, return
2695 NULL_TREE if we issued an error message, or error_mark_node if we
2696 did not. We issue error messages for out-and-out bad template
2697 parameters, but not simply because the conversion failed, since we
2698 might be just trying to do argument deduction. By the time this
2699 function is called, neither TYPE nor EXPR may make use of template
2700 parameters. */
2701
2702static tree
e1467ff2 2703convert_nontype_argument (type, expr)
75650646
MM
2704 tree type;
2705 tree expr;
2706{
2707 tree expr_type = TREE_TYPE (expr);
2708
2709 /* A template-argument for a non-type, non-template
2710 template-parameter shall be one of:
2711
2712 --an integral constant-expression of integral or enumeration
2713 type; or
2714
2715 --the name of a non-type template-parameter; or
2716
2717 --the name of an object or function with external linkage,
2718 including function templates and function template-ids but
86052cc3 2719 excluding non-static class members, expressed as id-expression;
75650646
MM
2720 or
2721
2722 --the address of an object or function with external linkage,
2723 including function templates and function template-ids but
2724 excluding non-static class members, expressed as & id-expression
2725 where the & is optional if the name refers to a function or
2726 array; or
2727
2728 --a pointer to member expressed as described in _expr.unary.op_. */
2729
638dd8fc
MM
2730 /* An integral constant-expression can include const variables or
2731 enumerators. Simplify things by folding them to their values,
2732 unless we're about to bind the declaration to a reference
2733 parameter. */
fc611ce0 2734 if (INTEGRAL_TYPE_P (expr_type)
638dd8fc 2735 && TREE_CODE (type) != REFERENCE_TYPE)
86052cc3
JM
2736 expr = decl_constant_value (expr);
2737
7bf2682f
MM
2738 if (is_overloaded_fn (expr))
2739 /* OK for now. We'll check that it has external linkage later.
2740 Check this first since if expr_type is the unknown_type_node
2741 we would otherwise complain below. */
2742 ;
e08a8f45
MM
2743 else if (TYPE_PTRMEM_P (expr_type)
2744 || TYPE_PTRMEMFUNC_P (expr_type))
2745 {
2746 if (TREE_CODE (expr) != PTRMEM_CST)
2747 goto bad_argument;
2748 }
f3400fe2 2749 else if (TYPE_PTR_P (expr_type)
e08a8f45 2750 || TYPE_PTRMEM_P (expr_type)
f3400fe2
JM
2751 || TREE_CODE (expr_type) == ARRAY_TYPE
2752 || TREE_CODE (type) == REFERENCE_TYPE
75650646
MM
2753 /* If expr is the address of an overloaded function, we
2754 will get the unknown_type_node at this point. */
2755 || expr_type == unknown_type_node)
2756 {
2757 tree referent;
49bf0d6f
MM
2758 tree e = expr;
2759 STRIP_NOPS (e);
75650646 2760
f3400fe2
JM
2761 if (TREE_CODE (type) == REFERENCE_TYPE
2762 || TREE_CODE (expr_type) == ARRAY_TYPE)
2763 referent = e;
2764 else
75650646 2765 {
f3400fe2
JM
2766 if (TREE_CODE (e) != ADDR_EXPR)
2767 {
2768 bad_argument:
2769 cp_error ("`%E' is not a valid template argument", expr);
e08a8f45
MM
2770 if (TYPE_PTR_P (expr_type))
2771 {
2772 if (TREE_CODE (TREE_TYPE (expr_type)) == FUNCTION_TYPE)
2773 cp_error ("it must be the address of a function with external linkage");
2774 else
2775 cp_error ("it must be the address of an object with external linkage");
2776 }
2777 else if (TYPE_PTRMEM_P (expr_type)
2778 || TYPE_PTRMEMFUNC_P (expr_type))
2779 cp_error ("it must be a pointer-to-member of the form `&X::Y'");
2780
f3400fe2
JM
2781 return NULL_TREE;
2782 }
2783
2784 referent = TREE_OPERAND (e, 0);
2785 STRIP_NOPS (referent);
75650646
MM
2786 }
2787
75650646
MM
2788 if (TREE_CODE (referent) == STRING_CST)
2789 {
b4f4233d 2790 cp_error ("string literal %E is not a valid template argument because it is the address of an object with static linkage",
75650646 2791 referent);
75650646
MM
2792 return NULL_TREE;
2793 }
2794
2795 if (is_overloaded_fn (referent))
2796 /* We'll check that it has external linkage later. */
2797 ;
2798 else if (TREE_CODE (referent) != VAR_DECL)
2799 goto bad_argument;
2800 else if (!TREE_PUBLIC (referent))
2801 {
8251199e 2802 cp_error ("address of non-extern `%E' cannot be used as template argument", referent);
75650646
MM
2803 return error_mark_node;
2804 }
2805 }
f3400fe2
JM
2806 else if (INTEGRAL_TYPE_P (expr_type)
2807 || TYPE_PTRMEM_P (expr_type)
2808 || TYPE_PTRMEMFUNC_P (expr_type)
2809 /* The next two are g++ extensions. */
2810 || TREE_CODE (expr_type) == REAL_TYPE
2811 || TREE_CODE (expr_type) == COMPLEX_TYPE)
75650646 2812 {
f3400fe2
JM
2813 if (! TREE_CONSTANT (expr))
2814 {
2815 non_constant:
2816 cp_error ("non-constant `%E' cannot be used as template argument",
2817 expr);
2818 return NULL_TREE;
2819 }
75650646 2820 }
75650646
MM
2821 else
2822 {
8251199e 2823 cp_error ("object `%E' cannot be used as template argument", expr);
75650646
MM
2824 return NULL_TREE;
2825 }
2826
2827 switch (TREE_CODE (type))
2828 {
2829 case INTEGER_TYPE:
2830 case BOOLEAN_TYPE:
2831 case ENUMERAL_TYPE:
2832 /* For a non-type template-parameter of integral or enumeration
2833 type, integral promotions (_conv.prom_) and integral
2834 conversions (_conv.integral_) are applied. */
2835 if (!INTEGRAL_TYPE_P (expr_type))
2836 return error_mark_node;
2837
2838 /* It's safe to call digest_init in this case; we know we're
2839 just converting one integral constant expression to another. */
db02b6b9 2840 expr = digest_init (type, expr, (tree*) 0);
75650646 2841
db02b6b9 2842 if (TREE_CODE (expr) != INTEGER_CST)
f3400fe2 2843 /* Curiously, some TREE_CONSTANT integral expressions do not
db02b6b9
MM
2844 simplify to integer constants. For example, `3 % 0',
2845 remains a TRUNC_MOD_EXPR. */
2846 goto non_constant;
2847
2848 return expr;
2849
abff8e06
JM
2850 case REAL_TYPE:
2851 case COMPLEX_TYPE:
2852 /* These are g++ extensions. */
2853 if (TREE_CODE (expr_type) != TREE_CODE (type))
2854 return error_mark_node;
2855
db02b6b9
MM
2856 expr = digest_init (type, expr, (tree*) 0);
2857
2858 if (TREE_CODE (expr) != REAL_CST)
2859 goto non_constant;
2860
2861 return expr;
abff8e06 2862
75650646
MM
2863 case POINTER_TYPE:
2864 {
2865 tree type_pointed_to = TREE_TYPE (type);
2866
2867 if (TYPE_PTRMEM_P (type))
93aa462d
MM
2868 {
2869 tree e;
2870
2871 /* For a non-type template-parameter of type pointer to data
2872 member, qualification conversions (_conv.qual_) are
2873 applied. */
2874 e = perform_qualification_conversions (type, expr);
2875 if (TREE_CODE (e) == NOP_EXPR)
87533b37
MM
2876 /* The call to perform_qualification_conversions will
2877 insert a NOP_EXPR over EXPR to do express conversion,
2878 if necessary. But, that will confuse us if we use
2879 this (converted) template parameter to instantiate
2880 another template; then the thing will not look like a
2881 valid template argument. So, just make a new
2882 constant, of the appropriate type. */
2883 e = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
93aa462d
MM
2884 return e;
2885 }
75650646
MM
2886 else if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
2887 {
2888 /* For a non-type template-parameter of type pointer to
2889 function, only the function-to-pointer conversion
2890 (_conv.func_) is applied. If the template-argument
2891 represents a set of overloaded functions (or a pointer to
2892 such), the matching function is selected from the set
2893 (_over.over_). */
2894 tree fns;
2895 tree fn;
2896
7bf2682f 2897 if (TREE_CODE (expr) == ADDR_EXPR)
75650646
MM
2898 fns = TREE_OPERAND (expr, 0);
2899 else
2900 fns = expr;
2901
a05273d4 2902 fn = instantiate_type (type_pointed_to, fns, 0);
75650646
MM
2903
2904 if (fn == error_mark_node)
2905 return error_mark_node;
2906
2907 if (!TREE_PUBLIC (fn))
2908 {
2909 if (really_overloaded_fn (fns))
2910 return error_mark_node;
2911 else
2912 goto bad_argument;
2913 }
2914
2915 expr = build_unary_op (ADDR_EXPR, fn, 0);
2916
3bfdc719 2917 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
75650646
MM
2918 0);
2919 return expr;
2920 }
2921 else
2922 {
2923 /* For a non-type template-parameter of type pointer to
2924 object, qualification conversions (_conv.qual_) and the
2925 array-to-pointer conversion (_conv.array_) are applied.
2926 [Note: In particular, neither the null pointer conversion
2927 (_conv.ptr_) nor the derived-to-base conversion
2928 (_conv.ptr_) are applied. Although 0 is a valid
2929 template-argument for a non-type template-parameter of
2930 integral type, it is not a valid template-argument for a
e1467ff2
MM
2931 non-type template-parameter of pointer type.]
2932
2933 The call to decay_conversion performs the
2934 array-to-pointer conversion, if appropriate. */
2935 expr = decay_conversion (expr);
75650646
MM
2936
2937 if (expr == error_mark_node)
2938 return error_mark_node;
2939 else
2940 return perform_qualification_conversions (type, expr);
2941 }
2942 }
2943 break;
2944
2945 case REFERENCE_TYPE:
2946 {
2947 tree type_referred_to = TREE_TYPE (type);
2948
2949 if (TREE_CODE (type_referred_to) == FUNCTION_TYPE)
2950 {
2951 /* For a non-type template-parameter of type reference to
39c01e4c
MM
2952 function, no conversions apply. If the
2953 template-argument represents a set of overloaded
2954 functions, the matching function is selected from the
2955 set (_over.over_). */
75650646
MM
2956 tree fns = expr;
2957 tree fn;
2958
a05273d4 2959 fn = instantiate_type (type_referred_to, fns, 0);
e6e174e5
JM
2960
2961 if (fn == error_mark_node)
2962 return error_mark_node;
75650646
MM
2963
2964 if (!TREE_PUBLIC (fn))
2965 {
2966 if (really_overloaded_fn (fns))
2967 /* Don't issue an error here; we might get a different
2968 function if the overloading had worked out
2969 differently. */
2970 return error_mark_node;
2971 else
2972 goto bad_argument;
2973 }
2974
3bfdc719
MM
2975 my_friendly_assert (same_type_p (type_referred_to,
2976 TREE_TYPE (fn)),
75650646
MM
2977 0);
2978
2979 return fn;
2980 }
2981 else
2982 {
2983 /* For a non-type template-parameter of type reference to
2984 object, no conversions apply. The type referred to by the
2985 reference may be more cv-qualified than the (otherwise
2986 identical) type of the template-argument. The
2987 template-parameter is bound directly to the
2988 template-argument, which must be an lvalue. */
ff350acd
JM
2989 if ((TYPE_MAIN_VARIANT (expr_type)
2990 != TYPE_MAIN_VARIANT (type_referred_to))
91063b51
MM
2991 || !at_least_as_qualified_p (type_referred_to,
2992 expr_type)
75650646
MM
2993 || !real_lvalue_p (expr))
2994 return error_mark_node;
2995 else
2996 return expr;
2997 }
2998 }
2999 break;
3000
3001 case RECORD_TYPE:
3002 {
410c2fba
KL
3003 if (!TYPE_PTRMEMFUNC_P (type))
3004 /* This handles templates like
3005 template<class T, T t> void f();
3006 when T is substituted with any class. The second template
3007 parameter becomes invalid and the template candidate is
3008 rejected. */
3009 return error_mark_node;
75650646
MM
3010
3011 /* For a non-type template-parameter of type pointer to member
3012 function, no conversions apply. If the template-argument
3013 represents a set of overloaded member functions, the
3014 matching member function is selected from the set
3015 (_over.over_). */
3016
3017 if (!TYPE_PTRMEMFUNC_P (expr_type) &&
3018 expr_type != unknown_type_node)
3019 return error_mark_node;
3020
e08a8f45 3021 if (TREE_CODE (expr) == PTRMEM_CST)
75650646
MM
3022 {
3023 /* A ptr-to-member constant. */
3bfdc719 3024 if (!same_type_p (type, expr_type))
75650646
MM
3025 return error_mark_node;
3026 else
3027 return expr;
3028 }
3029
3030 if (TREE_CODE (expr) != ADDR_EXPR)
3031 return error_mark_node;
3032
d8f8dca1 3033 expr = instantiate_type (type, expr, 0);
75650646 3034
d8f8dca1 3035 if (expr == error_mark_node)
75650646
MM
3036 return error_mark_node;
3037
3bfdc719 3038 my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
75650646
MM
3039 0);
3040 return expr;
3041 }
3042 break;
3043
3044 default:
3045 /* All non-type parameters must have one of these types. */
3046 my_friendly_abort (0);
3047 break;
3048 }
3049
3050 return error_mark_node;
3051}
3052
744fac59
KL
3053/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3054 template template parameters. Both PARM_PARMS and ARG_PARMS are
3055 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
3056 or PARM_DECL.
3057
3058 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
3059 the case, then extra parameters must have default arguments.
3060
3061 Consider the example:
3062 template <class T, class Allocator = allocator> class vector;
3063 template<template <class U> class TT> class C;
3064
3065 C<vector> is a valid instantiation. PARM_PARMS for the above code
3066 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3067 T and Allocator) and OUTER_ARGS contains the argument that is used to
3068 substitute the TT parameter. */
3069
3070static int
4393e105
MM
3071coerce_template_template_parms (parm_parms, arg_parms, complain,
3072 in_decl, outer_args)
3073 tree parm_parms, arg_parms;
3074 int complain;
3075 tree in_decl, outer_args;
744fac59
KL
3076{
3077 int nparms, nargs, i;
3078 tree parm, arg;
3079
3080 my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3081 my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3082
3083 nparms = TREE_VEC_LENGTH (parm_parms);
3084 nargs = TREE_VEC_LENGTH (arg_parms);
3085
3086 /* The rule here is opposite of coerce_template_parms. */
3087 if (nargs < nparms
3088 || (nargs > nparms
3089 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3090 return 0;
3091
3092 for (i = 0; i < nparms; ++i)
3093 {
3094 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3095 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3096
3097 if (arg == NULL_TREE || arg == error_mark_node
3098 || parm == NULL_TREE || parm == error_mark_node)
3099 return 0;
3100
3101 if (TREE_CODE (arg) != TREE_CODE (parm))
3102 return 0;
3103
3104 switch (TREE_CODE (parm))
3105 {
3106 case TYPE_DECL:
3107 break;
3108
3109 case TEMPLATE_DECL:
3110 /* We encounter instantiations of templates like
3111 template <template <template <class> class> class TT>
3112 class C; */
700466c2
JM
3113 {
3114 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3115 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3116
3117 if (!coerce_template_template_parms (parmparm, argparm,
4393e105
MM
3118 complain, in_decl,
3119 outer_args))
700466c2
JM
3120 return 0;
3121 }
3122 break;
744fac59
KL
3123
3124 case PARM_DECL:
3125 /* The tsubst call is used to handle cases such as
3126 template <class T, template <T> class TT> class D;
3127 i.e. the parameter list of TT depends on earlier parameters. */
4393e105
MM
3128 if (!same_type_p (tsubst (TREE_TYPE (parm), outer_args,
3129 complain, in_decl),
3bfdc719 3130 TREE_TYPE (arg)))
744fac59
KL
3131 return 0;
3132 break;
3133
3134 default:
3135 my_friendly_abort (0);
3136 }
3137 }
3138 return 1;
3139}
3140
8b5b8b7c
MM
3141/* Convert the indicated template ARG as necessary to match the
3142 indicated template PARM. Returns the converted ARG, or
3143 error_mark_node if the conversion was unsuccessful. Error messages
3144 are issued if COMPLAIN is non-zero. This conversion is for the Ith
3145 parameter in the parameter list. ARGS is the full set of template
3146 arguments deduced so far. */
3147
3148static tree
3149convert_template_argument (parm, arg, args, complain, i, in_decl)
3150 tree parm;
3151 tree arg;
3152 tree args;
3153 int complain;
3154 int i;
3155 tree in_decl;
3156{
3157 tree val;
3158 tree inner_args;
3159 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3160
f9a7ae04 3161 inner_args = INNERMOST_TEMPLATE_ARGS (args);
8b5b8b7c
MM
3162
3163 if (TREE_CODE (arg) == TREE_LIST
3164 && TREE_TYPE (arg) != NULL_TREE
3165 && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
3166 {
3167 /* The template argument was the name of some
3168 member function. That's usually
3169 illegal, but static members are OK. In any
3170 case, grab the underlying fields/functions
3171 and issue an error later if required. */
3172 arg = TREE_VALUE (arg);
3173 TREE_TYPE (arg) = unknown_type_node;
3174 }
3175
3176 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3177 requires_type = (TREE_CODE (parm) == TYPE_DECL
3178 || requires_tmpl_type);
3179
3180 /* Check if it is a class template. If REQUIRES_TMPL_TYPE is true,
3181 we also accept implicitly created TYPE_DECL as a valid argument.
3182 This is necessary to handle the case where we pass a template name
3183 to a template template parameter in a scope where we've derived from
3184 in instantiation of that template, so the template name refers to that
3185 instantiation. We really ought to handle this better. */
3186 is_tmpl_type
3187 = ((TREE_CODE (arg) == TEMPLATE_DECL
3188 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3189 || (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7ddedda4 3190 && !TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (arg))
8b5b8b7c
MM
3191 || (TREE_CODE (arg) == RECORD_TYPE
3192 && CLASSTYPE_TEMPLATE_INFO (arg)
3193 && TREE_CODE (TYPE_NAME (arg)) == TYPE_DECL
3194 && DECL_ARTIFICIAL (TYPE_NAME (arg))
3195 && requires_tmpl_type
b54ccf71 3196 && is_base_of_enclosing_class (arg, current_class_type)));
8b5b8b7c
MM
3197 if (is_tmpl_type && TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
3198 arg = TYPE_STUB_DECL (arg);
3199 else if (is_tmpl_type && TREE_CODE (arg) == RECORD_TYPE)
3200 arg = CLASSTYPE_TI_TEMPLATE (arg);
3201
2f939d94 3202 is_type = TYPE_P (arg) || is_tmpl_type;
8b5b8b7c
MM
3203
3204 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3205 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3206 {
b4f4233d 3207 cp_pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
8b5b8b7c
MM
3208
3209 arg = make_typename_type (TREE_OPERAND (arg, 0),
3baa501d
MM
3210 TREE_OPERAND (arg, 1),
3211 complain);
8b5b8b7c
MM
3212 is_type = 1;
3213 }
3214 if (is_type != requires_type)
3215 {
3216 if (in_decl)
3217 {
3218 if (complain)
3219 {
8251199e 3220 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c
MM
3221 i + 1, in_decl);
3222 if (is_type)
8251199e 3223 cp_error (" expected a constant of type `%T', got `%T'",
8b5b8b7c
MM
3224 TREE_TYPE (parm),
3225 (is_tmpl_type ? DECL_NAME (arg) : arg));
3226 else
8251199e 3227 cp_error (" expected a type, got `%E'", arg);
8b5b8b7c
MM
3228 }
3229 }
3230 return error_mark_node;
3231 }
3232 if (is_tmpl_type ^ requires_tmpl_type)
3233 {
3234 if (in_decl && complain)
3235 {
8251199e 3236 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c
MM
3237 i + 1, in_decl);
3238 if (is_tmpl_type)
8251199e 3239 cp_error (" expected a type, got `%T'", DECL_NAME (arg));
8b5b8b7c 3240 else
8251199e 3241 cp_error (" expected a class template, got `%T'", arg);
8b5b8b7c
MM
3242 }
3243 return error_mark_node;
3244 }
3245
3246 if (is_type)
3247 {
3248 if (requires_tmpl_type)
3249 {
3250 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3251 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3252
4393e105 3253 if (coerce_template_template_parms (parmparm, argparm, complain,
8b5b8b7c
MM
3254 in_decl, inner_args))
3255 {
3256 val = arg;
3257
3258 /* TEMPLATE_TEMPLATE_PARM node is preferred over
3259 TEMPLATE_DECL. */
3260 if (val != error_mark_node
3261 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3262 val = TREE_TYPE (val);
3263 }
3264 else
3265 {
3266 if (in_decl && complain)
3267 {
8251199e 3268 cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
8b5b8b7c 3269 i + 1, in_decl);
8251199e 3270 cp_error (" expected a template of type `%D', got `%D'", parm, arg);
8b5b8b7c
MM
3271 }
3272
3273 val = error_mark_node;
3274 }
3275 }
3276 else
3277 {
3278 val = groktypename (arg);
3279 if (! processing_template_decl)
3280 {
3281 /* [basic.link]: A name with no linkage (notably, the
3282 name of a class or enumeration declared in a local
3283 scope) shall not be used to declare an entity with
3284 linkage. This implies that names with no linkage
3285 cannot be used as template arguments. */
3286 tree t = no_linkage_check (val);
3287 if (t)
3288 {
3289 if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
8251199e
JM
3290 cp_pedwarn
3291 ("template-argument `%T' uses anonymous type", val);
8b5b8b7c 3292 else
8251199e
JM
3293 cp_error
3294 ("template-argument `%T' uses local type `%T'",
8b5b8b7c
MM
3295 val, t);
3296 return error_mark_node;
3297 }
3298 }
3299 }
3300 }
3301 else
3302 {
4393e105 3303 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
8b5b8b7c
MM
3304
3305 if (processing_template_decl)
3306 arg = maybe_fold_nontype_arg (arg);
3307
3308 if (!uses_template_parms (arg) && !uses_template_parms (t))
3309 /* We used to call digest_init here. However, digest_init
3310 will report errors, which we don't want when complain
3311 is zero. More importantly, digest_init will try too
3312 hard to convert things: for example, `0' should not be
3313 converted to pointer type at this point according to
3314 the standard. Accepting this is not merely an
3315 extension, since deciding whether or not these
3316 conversions can occur is part of determining which
3317 function template to call, or whether a given epxlicit
3318 argument specification is legal. */
3319 val = convert_nontype_argument (t, arg);
3320 else
3321 val = arg;
3322
3323 if (val == NULL_TREE)
3324 val = error_mark_node;
3325 else if (val == error_mark_node && complain)
8251199e 3326 cp_error ("could not convert template argument `%E' to `%T'",
8b5b8b7c
MM
3327 arg, t);
3328 }
3329
3330 return val;
3331}
3332
3333/* Convert all template arguments to their appropriate types, and
3334 return a vector containing the innermost resulting template
3335 arguments. If any error occurs, return error_mark_node, and, if
3336 COMPLAIN is non-zero, issue an error message. Some error messages
3337 are issued even if COMPLAIN is zero; for instance, if a template
3338 argument is composed from a local class.
75650646
MM
3339
3340 If REQUIRE_ALL_ARGUMENTS is non-zero, all arguments must be
3341 provided in ARGLIST, or else trailing parameters must have default
3342 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
6dfbb909 3343 deduction for any unspecified trailing arguments. */
de575009 3344
8d08fdba 3345static tree
8b5b8b7c 3346coerce_template_parms (parms, args, in_decl,
75650646 3347 complain,
744fac59 3348 require_all_arguments)
8b5b8b7c 3349 tree parms, args;
8d08fdba 3350 tree in_decl;
75650646
MM
3351 int complain;
3352 int require_all_arguments;
8d08fdba 3353{
a292b002 3354 int nparms, nargs, i, lost = 0;
e4a84209 3355 tree inner_args;
8b5b8b7c
MM
3356 tree new_args;
3357 tree new_inner_args;
a292b002 3358
f9a7ae04 3359 inner_args = INNERMOST_TEMPLATE_ARGS (args);
e4a84209 3360 nargs = NUM_TMPL_ARGS (inner_args);
a292b002
MS
3361 nparms = TREE_VEC_LENGTH (parms);
3362
3363 if (nargs > nparms
3364 || (nargs < nparms
75650646 3365 && require_all_arguments
a292b002 3366 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
8d08fdba 3367 {
75650646
MM
3368 if (complain)
3369 {
8251199e 3370 cp_error ("wrong number of template arguments (%d, should be %d)",
e4a84209 3371 nargs, nparms);
75650646
MM
3372
3373 if (in_decl)
8251199e 3374 cp_error_at ("provided for `%D'", in_decl);
75650646
MM
3375 }
3376
8d08fdba
MS
3377 return error_mark_node;
3378 }
3379
f31c0a32 3380 new_inner_args = make_tree_vec (nparms);
8b5b8b7c
MM
3381 new_args = add_outermost_template_args (args, new_inner_args);
3382 for (i = 0; i < nparms; i++)
8d08fdba 3383 {
8b5b8b7c
MM
3384 tree arg;
3385 tree parm;
e4a84209 3386
8b5b8b7c
MM
3387 /* Get the Ith template parameter. */
3388 parm = TREE_VEC_ELT (parms, i);
75650646 3389
8b5b8b7c
MM
3390 /* Calculate the Ith argument. */
3391 if (inner_args && TREE_CODE (inner_args) == TREE_LIST)
8d08fdba 3392 {
8b5b8b7c
MM
3393 arg = TREE_VALUE (inner_args);
3394 inner_args = TREE_CHAIN (inner_args);
8d08fdba 3395 }
8b5b8b7c
MM
3396 else if (i < nargs)
3397 arg = TREE_VEC_ELT (inner_args, i);
3398 /* If no template argument was supplied, look for a default
3399 value. */
3400 else if (TREE_PURPOSE (parm) == NULL_TREE)
3401 {
3402 /* There was no default value. */
3403 my_friendly_assert (!require_all_arguments, 0);
3404 break;
3405 }
3406 else if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
4393e105 3407 arg = tsubst (TREE_PURPOSE (parm), new_args, complain, in_decl);
8b5b8b7c 3408 else
4393e105
MM
3409 arg = tsubst_expr (TREE_PURPOSE (parm), new_args, complain,
3410 in_decl);
e4a84209 3411
8b5b8b7c 3412 /* Now, convert the Ith argument, as necessary. */
75650646
MM
3413 if (arg == NULL_TREE)
3414 /* We're out of arguments. */
3415 {
3416 my_friendly_assert (!require_all_arguments, 0);
3417 break;
3418 }
8b5b8b7c 3419 else if (arg == error_mark_node)
75650646 3420 {
8251199e 3421 cp_error ("template argument %d is invalid", i + 1);
8b5b8b7c 3422 arg = error_mark_node;
8d08fdba 3423 }
8b5b8b7c
MM
3424 else
3425 arg = convert_template_argument (TREE_VALUE (parm),
3426 arg, new_args, complain, i,
3427 in_decl);
3428
3429 if (arg == error_mark_node)
8d08fdba 3430 lost++;
8b5b8b7c 3431 TREE_VEC_ELT (new_inner_args, i) = arg;
8d08fdba 3432 }
8b5b8b7c 3433
8d08fdba
MS
3434 if (lost)
3435 return error_mark_node;
8b5b8b7c
MM
3436
3437 return new_inner_args;
8d08fdba
MS
3438}
3439
34016c81
JM
3440/* Returns 1 if template args OT and NT are equivalent. */
3441
d8e178a0 3442static int
34016c81
JM
3443template_args_equal (ot, nt)
3444 tree ot, nt;
3445{
3446 if (nt == ot)
3447 return 1;
3448 if (TREE_CODE (nt) != TREE_CODE (ot))
3449 return 0;
3450 if (TREE_CODE (nt) == TREE_VEC)
3451 /* For member templates */
3452 return comp_template_args (ot, nt);
2f939d94 3453 else if (TYPE_P (ot))
3bfdc719 3454 return same_type_p (ot, nt);
34016c81
JM
3455 else
3456 return (cp_tree_equal (ot, nt) > 0);
3457}
3458
3459/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
f84b4be9
JM
3460 of template arguments. Returns 0 otherwise. */
3461
6757edfe 3462int
5566b478
MS
3463comp_template_args (oldargs, newargs)
3464 tree oldargs, newargs;
3465{
3466 int i;
3467
386b8a85
JM
3468 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3469 return 0;
3470
5566b478
MS
3471 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3472 {
3473 tree nt = TREE_VEC_ELT (newargs, i);
3474 tree ot = TREE_VEC_ELT (oldargs, i);
3475
34016c81 3476 if (! template_args_equal (ot, nt))
61a127b3 3477 return 0;
5566b478
MS
3478 }
3479 return 1;
3480}
3481
8d08fdba
MS
3482/* Given class template name and parameter list, produce a user-friendly name
3483 for the instantiation. */
e92cc029 3484
8d08fdba 3485static char *
36a117a5 3486mangle_class_name_for_template (name, parms, arglist)
8d08fdba
MS
3487 char *name;
3488 tree parms, arglist;
3489{
3490 static struct obstack scratch_obstack;
3491 static char *scratch_firstobj;
3492 int i, nparms;
8d08fdba
MS
3493
3494 if (!scratch_firstobj)
fc378698 3495 gcc_obstack_init (&scratch_obstack);
8d08fdba
MS
3496 else
3497 obstack_free (&scratch_obstack, scratch_firstobj);
fc378698 3498 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
8d08fdba 3499
8d08fdba 3500#define ccat(c) obstack_1grow (&scratch_obstack, (c));
8d08fdba 3501#define cat(s) obstack_grow (&scratch_obstack, (s), strlen (s))
8d08fdba
MS
3502
3503 cat (name);
3504 ccat ('<');
3505 nparms = TREE_VEC_LENGTH (parms);
f9a7ae04 3506 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
8d08fdba
MS
3507 my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3508 for (i = 0; i < nparms; i++)
3509 {
a292b002
MS
3510 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3511 tree arg = TREE_VEC_ELT (arglist, i);
8d08fdba
MS
3512
3513 if (i)
3514 ccat (',');
3515
a292b002 3516 if (TREE_CODE (parm) == TYPE_DECL)
8d08fdba 3517 {
9e93bc9d 3518 cat (type_as_string (arg, TS_CHASE_TYPEDEFS));
8d08fdba
MS
3519 continue;
3520 }
73b0fce8
KL
3521 else if (TREE_CODE (parm) == TEMPLATE_DECL)
3522 {
3523 if (TREE_CODE (arg) == TEMPLATE_DECL)
2c73f9f5
ML
3524 {
3525 /* Already substituted with real template. Just output
3526 the template name here */
cb0dbb9a 3527 tree context = DECL_CONTEXT (arg);
ec4f972f
AS
3528 if (context)
3529 {
3530 /* The template may be defined in a namespace, or
3531 may be a member template. */
3532 my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3533 || CLASS_TYPE_P (context),
3534 980422);
2c73f9f5
ML
3535 cat(decl_as_string (DECL_CONTEXT (arg), 0));
3536 cat("::");
3537 }
3538 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3539 }
73b0fce8
KL
3540 else
3541 /* Output the parameter declaration */
9e93bc9d 3542 cat (type_as_string (arg, TS_CHASE_TYPEDEFS));
73b0fce8
KL
3543 continue;
3544 }
8d08fdba
MS
3545 else
3546 my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3547
3548 if (TREE_CODE (arg) == TREE_LIST)
3549 {
3550 /* New list cell was built because old chain link was in
3551 use. */
3552 my_friendly_assert (TREE_PURPOSE (arg) == NULL_TREE, 270);
3553 arg = TREE_VALUE (arg);
3554 }
3555 /* No need to check arglist against parmlist here; we did that
3556 in coerce_template_parms, called from lookup_template_class. */
3557 cat (expr_as_string (arg, 0));
3558 }
3559 {
3560 char *bufp = obstack_next_free (&scratch_obstack);
3561 int offset = 0;
3562 while (bufp[offset - 1] == ' ')
3563 offset--;
3564 obstack_blank_fast (&scratch_obstack, offset);
3565
3566 /* B<C<char> >, not B<C<char>> */
3567 if (bufp[offset - 1] == '>')
3568 ccat (' ');
3569 }
3570 ccat ('>');
3571 ccat ('\0');
3572 return (char *) obstack_base (&scratch_obstack);
8d08fdba
MS
3573}
3574
bd6dd845 3575static tree
5566b478
MS
3576classtype_mangled_name (t)
3577 tree t;
3578{
3579 if (CLASSTYPE_TEMPLATE_INFO (t)
36a117a5
MM
3580 /* Specializations have already had their names set up in
3581 lookup_template_class. */
370af2d5 3582 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9fbf56f7
MM
3583 {
3584 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3585
36a117a5
MM
3586 /* For non-primary templates, the template parameters are
3587 implicit from their surrounding context. */
9fbf56f7
MM
3588 if (PRIMARY_TEMPLATE_P (tmpl))
3589 {
3590 tree name = DECL_NAME (tmpl);
3591 char *mangled_name = mangle_class_name_for_template
3592 (IDENTIFIER_POINTER (name),
3593 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3594 CLASSTYPE_TI_ARGS (t));
3595 tree id = get_identifier (mangled_name);
3596 IDENTIFIER_TEMPLATE (id) = name;
3597 return id;
3598 }
5566b478 3599 }
9fbf56f7
MM
3600
3601 return TYPE_IDENTIFIER (t);
5566b478
MS
3602}
3603
3604static void
3605add_pending_template (d)
3606 tree d;
3607{
2f939d94 3608 tree ti = (TYPE_P (d)) ? CLASSTYPE_TEMPLATE_INFO (d) : DECL_TEMPLATE_INFO (d);
e92cc029 3609
824b9a4c 3610 if (TI_PENDING_TEMPLATE_FLAG (ti))
5566b478
MS
3611 return;
3612
e1b3e07d 3613 *template_tail = tree_cons (build_srcloc_here (), d, NULL_TREE);
5566b478 3614 template_tail = &TREE_CHAIN (*template_tail);
824b9a4c 3615 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5566b478
MS
3616}
3617
386b8a85
JM
3618
3619/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which
3620 may be either a _DECL or an overloaded function or an
3621 IDENTIFIER_NODE), and ARGLIST. */
3622
3623tree
3624lookup_template_function (fns, arglist)
3625 tree fns, arglist;
3626{
2c73f9f5 3627 tree type;
050367a3 3628
386b8a85
JM
3629 if (fns == NULL_TREE)
3630 {
8251199e 3631 cp_error ("non-template used as template");
386b8a85
JM
3632 return error_mark_node;
3633 }
3634
2c73f9f5
ML
3635 type = TREE_TYPE (fns);
3636 if (TREE_CODE (fns) == OVERLOAD || !type)
3637 type = unknown_type_node;
3638
672476cb
MM
3639 if (processing_template_decl)
3640 return build_min (TEMPLATE_ID_EXPR, type, fns, arglist);
3641 else
3642 return build (TEMPLATE_ID_EXPR, type, fns, arglist);
386b8a85
JM
3643}
3644
a2b60a0e
MM
3645/* Within the scope of a template class S<T>, the name S gets bound
3646 (in build_self_reference) to a TYPE_DECL for the class, not a
3647 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
3648 or one of its enclosing classes, and that type is a template,
3649 return the associated TEMPLATE_DECL. Otherwise, the original
3650 DECL is returned. */
3651
e9659ab0 3652static tree
a2b60a0e
MM
3653maybe_get_template_decl_from_type_decl (decl)
3654 tree decl;
3655{
3656 return (decl != NULL_TREE
3657 && TREE_CODE (decl) == TYPE_DECL
3658 && DECL_ARTIFICIAL (decl)
511b60ff 3659 && CLASS_TYPE_P (TREE_TYPE (decl))
a2b60a0e
MM
3660 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
3661 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3662}
386b8a85 3663
8d08fdba
MS
3664/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3665 parameters, find the desired type.
3666
3667 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
36a117a5
MM
3668 (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC. It will
3669 be a TREE_LIST if called directly from the parser, and a TREE_VEC
0a2c2fd1 3670 otherwise.) Since ARGLIST is build on the temp_decl_obstack, we must
36a117a5
MM
3671 copy it here to keep it from being reclaimed when the decl storage
3672 is reclaimed.
8d08fdba
MS
3673
3674 IN_DECL, if non-NULL, is the template declaration we are trying to
75650646
MM
3675 instantiate.
3676
36a117a5
MM
3677 If ENTERING_SCOPE is non-zero, we are about to enter the scope of
3678 the class we are looking up.
3679
75650646
MM
3680 If the template class is really a local class in a template
3681 function, then the FUNCTION_CONTEXT is the function in which it is
3682 being instantiated. */
e92cc029 3683
8d08fdba 3684tree
36a117a5 3685lookup_template_class (d1, arglist, in_decl, context, entering_scope)
8d08fdba
MS
3686 tree d1, arglist;
3687 tree in_decl;
e1467ff2 3688 tree context;
36a117a5 3689 int entering_scope;
8d08fdba 3690{
a703fb38 3691 tree template = NULL_TREE, parmlist;
dbfe2124 3692 tree t;
5566b478
MS
3693
3694 if (TREE_CODE (d1) == IDENTIFIER_NODE)
3695 {
f181d4ae
MM
3696 if (IDENTIFIER_VALUE (d1)
3697 && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3698 template = IDENTIFIER_VALUE (d1);
73b0fce8
KL
3699 else
3700 {
2c73f9f5
ML
3701 if (context)
3702 push_decl_namespace (context);
3ebc5c52
MM
3703 template = lookup_name (d1, /*prefer_type=*/0);
3704 template = maybe_get_template_decl_from_type_decl (template);
2c73f9f5
ML
3705 if (context)
3706 pop_decl_namespace ();
73b0fce8 3707 }
8d019cef
JM
3708 if (template)
3709 context = DECL_CONTEXT (template);
5566b478 3710 }
c91a56d2
MS
3711 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3712 {
802dbc34
JM
3713 tree type = TREE_TYPE (d1);
3714
3715 /* If we are declaring a constructor, say A<T>::A<T>, we will get
3716 an implicit typename for the second A. Deal with it. */
3717 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3718 type = TREE_TYPE (type);
3719
3720 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 3721 {
802dbc34 3722 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
3723 d1 = DECL_NAME (template);
3724 }
c91a56d2 3725 }
ed44da02 3726 else if (TREE_CODE (d1) == ENUMERAL_TYPE
2f939d94 3727 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5566b478 3728 {
ed44da02 3729 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
3730 d1 = DECL_NAME (template);
3731 }
93cdc044 3732 else if (TREE_CODE (d1) == TEMPLATE_DECL
17aec3eb 3733 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
93cdc044
JM
3734 {
3735 template = d1;
3736 d1 = DECL_NAME (template);
3737 context = DECL_CONTEXT (template);
3738 }
5566b478
MS
3739 else
3740 my_friendly_abort (272);
8d08fdba 3741
8d08fdba 3742 /* With something like `template <class T> class X class X { ... };'
f181d4ae
MM
3743 we could end up with D1 having nothing but an IDENTIFIER_VALUE.
3744 We don't want to do that, but we have to deal with the situation,
3745 so let's give them some syntax errors to chew on instead of a
3746 crash. */
8d08fdba 3747 if (! template)
f3400fe2
JM
3748 {
3749 cp_error ("`%T' is not a template", d1);
3750 return error_mark_node;
3751 }
2c73f9f5 3752
c3baf4b5
JM
3753 if (context == NULL_TREE)
3754 context = global_namespace;
2c73f9f5 3755
8d08fdba
MS
3756 if (TREE_CODE (template) != TEMPLATE_DECL)
3757 {
8251199e 3758 cp_error ("non-template type `%T' used as a template", d1);
8d08fdba 3759 if (in_decl)
8251199e 3760 cp_error_at ("for template declaration `%D'", in_decl);
8d08fdba
MS
3761 return error_mark_node;
3762 }
8d08fdba 3763
73b0fce8
KL
3764 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
3765 {
3766 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
3767 template arguments */
3768
3769 tree parm = copy_template_template_parm (TREE_TYPE (template));
3770 tree template2 = TYPE_STUB_DECL (parm);
3771 tree arglist2;
3772
73b0fce8
KL
3773 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
3774
744fac59 3775 arglist2 = coerce_template_parms (parmlist, arglist, template, 1, 1);
73b0fce8
KL
3776 if (arglist2 == error_mark_node)
3777 return error_mark_node;
3778
7ddedda4 3779 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm)
e1b3e07d 3780 = tree_cons (template2, arglist2, NULL_TREE);
73b0fce8
KL
3781 TYPE_SIZE (parm) = 0;
3782 return parm;
3783 }
36a117a5 3784 else
8d08fdba 3785 {
36a117a5 3786 tree template_type = TREE_TYPE (template);
7ac7b28f 3787 tree gen_tmpl;
36a117a5
MM
3788 tree type_decl;
3789 tree found = NULL_TREE;
3790 int arg_depth;
3791 int parm_depth;
dbfe2124 3792 int is_partial_instantiation;
830bfa74 3793
7ac7b28f
MM
3794 gen_tmpl = most_general_template (template);
3795 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
3796 parm_depth = TMPL_PARMS_DEPTH (parmlist);
3797 arg_depth = TMPL_ARGS_DEPTH (arglist);
3798
3799 if (arg_depth == 1 && parm_depth > 1)
3800 {
39c01e4c 3801 /* We've been given an incomplete set of template arguments.
36a117a5
MM
3802 For example, given:
3803
3804 template <class T> struct S1 {
3805 template <class U> struct S2 {};
3806 template <class U> struct S2<U*> {};
3807 };
3808
3809 we will be called with an ARGLIST of `U*', but the
3810 TEMPLATE will be `template <class T> template
3811 <class U> struct S1<T>::S2'. We must fill in the missing
3812 arguments. */
7ac7b28f
MM
3813 arglist
3814 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
3815 arglist);
36a117a5
MM
3816 arg_depth = TMPL_ARGS_DEPTH (arglist);
3817 }
5566b478 3818
7ac7b28f 3819 /* Now we should enough arguments. */
36a117a5
MM
3820 my_friendly_assert (parm_depth == arg_depth, 0);
3821
7ac7b28f
MM
3822 /* From here on, we're only interested in the most general
3823 template. */
3824 template = gen_tmpl;
3825
36a117a5
MM
3826 /* Calculate the BOUND_ARGS. These will be the args that are
3827 actually tsubst'd into the definition to create the
3828 instantiation. */
3829 if (parm_depth > 1)
830bfa74
MM
3830 {
3831 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 3832 int i;
e4a84209 3833 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 3834
f31c0a32 3835 tree bound_args = make_tree_vec (parm_depth);
830bfa74 3836
e4a84209 3837 for (i = saved_depth,
830bfa74 3838 t = DECL_TEMPLATE_PARMS (template);
e4a84209 3839 i > 0 && t != NULL_TREE;
830bfa74 3840 --i, t = TREE_CHAIN (t))
e4a84209
MM
3841 {
3842 tree a = coerce_template_parms (TREE_VALUE (t),
3843 arglist, template, 1, 1);
3844 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
3845
3846 /* We temporarily reduce the length of the ARGLIST so
3847 that coerce_template_parms will see only the arguments
3848 corresponding to the template parameters it is
3849 examining. */
3850 TREE_VEC_LENGTH (arglist)--;
3851 }
3852
3853 /* Restore the ARGLIST to its full size. */
3854 TREE_VEC_LENGTH (arglist) = saved_depth;
3855
36a117a5 3856 arglist = bound_args;
830bfa74
MM
3857 }
3858 else
36a117a5
MM
3859 arglist
3860 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
f9a7ae04 3861 INNERMOST_TEMPLATE_ARGS (arglist),
36a117a5
MM
3862 template, 1, 1);
3863
3864 if (arglist == error_mark_node)
3865 /* We were unable to bind the arguments. */
5566b478 3866 return error_mark_node;
5566b478 3867
36a117a5
MM
3868 /* In the scope of a template class, explicit references to the
3869 template class refer to the type of the template, not any
3870 instantiation of it. For example, in:
3871
3872 template <class T> class C { void f(C<T>); }
3873
3874 the `C<T>' is just the same as `C'. Outside of the
3875 class, however, such a reference is an instantiation. */
ed44da02 3876 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
3877 arglist))
3878 {
3879 found = template_type;
3880
3881 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 3882 {
36a117a5
MM
3883 tree ctx;
3884
3885 /* Note that we use DECL_CONTEXT, rather than
3886 CP_DECL_CONTEXT, so that the termination test is
3887 always just `ctx'. We're not interested in namepace
3888 scopes. */
3889 for (ctx = current_class_type;
3890 ctx;
2f939d94 3891 ctx = (TYPE_P (ctx)) ? TYPE_CONTEXT (ctx) : DECL_CONTEXT (ctx))
3bfdc719 3892 if (same_type_p (ctx, template_type))
36a117a5
MM
3893 break;
3894
3895 if (!ctx)
3896 /* We're not in the scope of the class, so the
3897 TEMPLATE_TYPE is not the type we want after
3898 all. */
3899 found = NULL_TREE;
5566b478
MS
3900 }
3901 }
36a117a5
MM
3902
3903 if (!found)
75650646 3904 {
36a117a5
MM
3905 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3906 found; found = TREE_CHAIN (found))
3907 if (comp_template_args (TREE_PURPOSE (found), arglist))
3908 break;
75650646 3909
36a117a5
MM
3910 if (found)
3911 found = TREE_VALUE (found);
8d08fdba 3912 }
3ebc5c52 3913
36a117a5 3914 if (found)
f31c0a32 3915 return found;
5566b478 3916
dbfe2124 3917 /* This type is a "partial instantiation" if any of the template
486e4077
MM
3918 arguments still inolve template parameters. Note that we set
3919 IS_PARTIAL_INSTANTIATION for partial specializations as
3920 well. */
dbfe2124
MM
3921 is_partial_instantiation = uses_template_parms (arglist);
3922
3ebc5c52
MM
3923 if (!is_partial_instantiation
3924 && !PRIMARY_TEMPLATE_P (template)
3925 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
3926 {
3ebc5c52
MM
3927 found = xref_tag_from_type (TREE_TYPE (template),
3928 DECL_NAME (template),
3929 /*globalize=*/1);
3930 return found;
3931 }
3ebc5c52 3932
36a117a5 3933 /* Create the type. */
ed44da02
MM
3934 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
3935 {
dbfe2124 3936 if (!is_partial_instantiation)
61a127b3 3937 t = start_enum (TYPE_IDENTIFIER (template_type));
ed44da02 3938 else
dbfe2124 3939 /* We don't want to call start_enum for this type, since
ed44da02
MM
3940 the values for the enumeration constants may involve
3941 template parameters. And, no one should be interested
3942 in the enumeration constants for such a type. */
3943 t = make_node (ENUMERAL_TYPE);
3944 }
3945 else
3946 {
33848bb0 3947 t = make_aggr_type (TREE_CODE (template_type));
ed44da02
MM
3948 CLASSTYPE_DECLARED_CLASS (t)
3949 = CLASSTYPE_DECLARED_CLASS (template_type);
3950 CLASSTYPE_GOT_SEMICOLON (t) = 1;
3951 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 3952 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ae673f14
JM
3953
3954 /* A local class. Make sure the decl gets registered properly. */
3955 if (context == current_function_decl)
3956 pushtag (DECL_NAME (template), t, 0);
ed44da02
MM
3957 }
3958
ae673f14
JM
3959 /* If we called start_enum or pushtag above, this information
3960 will already be set up. */
ed44da02
MM
3961 if (!TYPE_NAME (t))
3962 {
3963 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
36a117a5 3964
9188c363 3965 type_decl = create_implicit_typedef (DECL_NAME (template), t);
ed44da02 3966 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9188c363 3967 TYPE_STUB_DECL (t) = type_decl;
ed44da02
MM
3968 DECL_SOURCE_FILE (type_decl)
3969 = DECL_SOURCE_FILE (TYPE_STUB_DECL (template_type));
3970 DECL_SOURCE_LINE (type_decl)
3971 = DECL_SOURCE_LINE (TYPE_STUB_DECL (template_type));
ed44da02
MM
3972 }
3973 else
3974 type_decl = TYPE_NAME (t);
36a117a5 3975
9fbf56f7
MM
3976 /* Set up the template information. We have to figure out which
3977 template is the immediate parent if this is a full
3978 instantiation. */
3979 if (parm_depth == 1 || is_partial_instantiation
3980 || !PRIMARY_TEMPLATE_P (template))
3981 /* This case is easy; there are no member templates involved. */
3982 found = template;
3983 else
3984 {
3985 /* This is a full instantiation of a member template. There
3986 should be some partial instantiation of which this is an
3987 instance. */
3988
3989 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3990 found; found = TREE_CHAIN (found))
3991 {
3992 int success;
3993 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
3994
3995 /* We only want partial instantiations, here, not
3996 specializations or full instantiations. */
370af2d5 3997 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
9fbf56f7
MM
3998 || !uses_template_parms (TREE_VALUE (found)))
3999 continue;
4000
4001 /* Temporarily reduce by one the number of levels in the
4002 ARGLIST and in FOUND so as to avoid comparing the
4003 last set of arguments. */
4004 TREE_VEC_LENGTH (arglist)--;
4005 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4006
4007 /* See if the arguments match. If they do, then TMPL is
4008 the partial instantiation we want. */
4009 success = comp_template_args (TREE_PURPOSE (found), arglist);
4010
4011 /* Restore the argument vectors to their full size. */
4012 TREE_VEC_LENGTH (arglist)++;
4013 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4014
4015 if (success)
4016 {
4017 found = tmpl;
4018 break;
4019 }
4020 }
4021
4022 if (!found)
4023 my_friendly_abort (0);
4024 }
4025
ed44da02 4026 SET_TYPE_TEMPLATE_INFO (t,
9fbf56f7 4027 tree_cons (found, arglist, NULL_TREE));
dbfe2124
MM
4028 DECL_TEMPLATE_INSTANTIATIONS (template)
4029 = tree_cons (arglist, t,
4030 DECL_TEMPLATE_INSTANTIATIONS (template));
4031
4032 if (TREE_CODE (t) == ENUMERAL_TYPE
4033 && !is_partial_instantiation)
61a127b3
MM
4034 /* Now that the type has been registered on the instantiations
4035 list, we set up the enumerators. Because the enumeration
4036 constants may involve the enumeration type itself, we make
4037 sure to register the type first, and then create the
4038 constants. That way, doing tsubst_expr for the enumeration
4039 constants won't result in recursive calls here; we'll find
4040 the instantiation and exit above. */
4041 tsubst_enum (template_type, t, arglist);
dbfe2124 4042
36a117a5
MM
4043 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4044 is set up. */
ed44da02
MM
4045 if (TREE_CODE (t) != ENUMERAL_TYPE)
4046 DECL_NAME (type_decl) = classtype_mangled_name (t);
36a117a5 4047 DECL_ASSEMBLER_NAME (type_decl) = DECL_NAME (type_decl);
dbfe2124 4048 if (!is_partial_instantiation)
36a117a5
MM
4049 {
4050 DECL_ASSEMBLER_NAME (type_decl)
4051 = get_identifier (build_overload_name (t, 1, 1));
50a6dbd7
JM
4052
4053 /* For backwards compatibility; code that uses
4054 -fexternal-templates expects looking up a template to
4055 instantiate it. I think DDD still relies on this.
4056 (jason 8/20/1998) */
ed44da02
MM
4057 if (TREE_CODE (t) != ENUMERAL_TYPE
4058 && flag_external_templates
36a117a5
MM
4059 && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4060 && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4061 add_pending_template (t);
4062 }
4063 else
077e7015
MM
4064 /* If the type makes use of template parameters, the
4065 code that generates debugging information will crash. */
4066 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 4067
36a117a5
MM
4068 return t;
4069 }
8d08fdba
MS
4070}
4071\f
8dfaeb63 4072struct pair_fn_data
8d08fdba 4073{
8dfaeb63
MM
4074 tree_fn_t fn;
4075 void *data;
4076};
4077
4078/* Called from for_each_template_parm via walk_tree. */
581d38d0 4079
8dfaeb63
MM
4080static tree
4081for_each_template_parm_r (tp, walk_subtrees, d)
4082 tree *tp;
4083 int *walk_subtrees;
4084 void *d;
4085{
4086 tree t = *tp;
4087 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4088 tree_fn_t fn = pfd->fn;
4089 void *data = pfd->data;
4090
2f939d94 4091 if (TYPE_P (t)
581d38d0 4092 && for_each_template_parm (TYPE_CONTEXT (t), fn, data))
8dfaeb63 4093 return error_mark_node;
581d38d0 4094
8d08fdba
MS
4095 switch (TREE_CODE (t))
4096 {
8d08fdba 4097 case RECORD_TYPE:
b7484fbe 4098 if (TYPE_PTRMEMFUNC_FLAG (t))
8dfaeb63 4099 break;
ed44da02
MM
4100 /* Fall through. */
4101
8d08fdba 4102 case UNION_TYPE:
ed44da02 4103 case ENUMERAL_TYPE:
8dfaeb63
MM
4104 if (!TYPE_TEMPLATE_INFO (t))
4105 *walk_subtrees = 0;
4106 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4107 fn, data))
4108 return error_mark_node;
4109 break;
4110
588c2d1c 4111 case METHOD_TYPE:
8dfaeb63
MM
4112 /* Since we're not going to walk subtrees, we have to do this
4113 explicitly here. */
588c2d1c 4114 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data))
8dfaeb63 4115 return error_mark_node;
588c2d1c
MM
4116
4117 case FUNCTION_TYPE:
8dfaeb63
MM
4118 /* Check the return type. */
4119 if (for_each_template_parm (TREE_TYPE (t), fn, data))
4120 return error_mark_node;
4121
588c2d1c
MM
4122 /* Check the parameter types. Since default arguments are not
4123 instantiated until they are needed, the TYPE_ARG_TYPES may
4124 contain expressions that involve template parameters. But,
4125 no-one should be looking at them yet. And, once they're
4126 instantiated, they don't contain template parameters, so
4127 there's no point in looking at them then, either. */
4128 {
4129 tree parm;
4130
4131 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4132 if (for_each_template_parm (TREE_VALUE (parm), fn, data))
8dfaeb63 4133 return error_mark_node;
5566b478 4134
8dfaeb63
MM
4135 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4136 want walk_tree walking into them itself. */
4137 *walk_subtrees = 0;
4138 }
4139 break;
3ac3d9ea 4140
8d08fdba 4141 case FUNCTION_DECL:
5566b478 4142 case VAR_DECL:
5566b478 4143 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
050367a3 4144 && for_each_template_parm (DECL_TI_ARGS (t), fn, data))
8dfaeb63
MM
4145 return error_mark_node;
4146 /* Fall through. */
4147
4148 case CONST_DECL:
8d08fdba 4149 case PARM_DECL:
050367a3
MM
4150 if (DECL_CONTEXT (t)
4151 && for_each_template_parm (DECL_CONTEXT (t), fn, data))
8dfaeb63
MM
4152 return error_mark_node;
4153 break;
8d08fdba 4154
73b0fce8 4155 case TEMPLATE_TEMPLATE_PARM:
744fac59 4156 /* Record template parameters such as `T' inside `TT<T>'. */
7ddedda4
MM
4157 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t)
4158 && for_each_template_parm (TYPE_TI_ARGS (t), fn, data))
8dfaeb63
MM
4159 return error_mark_node;
4160 /* Fall through. */
4161
744fac59 4162 case TEMPLATE_TYPE_PARM:
f84b4be9 4163 case TEMPLATE_PARM_INDEX:
8dfaeb63
MM
4164 if (fn && (*fn)(t, data))
4165 return error_mark_node;
4166 else if (!fn)
4167 return error_mark_node;
4168 break;
5156628f 4169
8dfaeb63
MM
4170 case TEMPLATE_DECL:
4171 /* A template template parameter is encountered */
4172 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4173 && for_each_template_parm (TREE_TYPE (t), fn, data))
4174 return error_mark_node;
db5ae43f 4175
8dfaeb63
MM
4176 /* Already substituted template template parameter */
4177 *walk_subtrees = 0;
4178 break;
b8865407 4179
4699c561 4180 case TYPENAME_TYPE:
8dfaeb63
MM
4181 if (!fn || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn, data))
4182 return error_mark_node;
4183 break;
4699c561 4184
8dfaeb63
MM
4185 case CONSTRUCTOR:
4186 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4187 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4188 (TREE_TYPE (t)), fn, data))
4189 return error_mark_node;
4190 break;
4191
b8865407
MM
4192 case INDIRECT_REF:
4193 case COMPONENT_REF:
4699c561 4194 /* If there's no type, then this thing must be some expression
b8865407 4195 involving template parameters. */
4699c561 4196 if (!fn && !TREE_TYPE (t))
8dfaeb63
MM
4197 return error_mark_node;
4198 break;
b8865407 4199
42976354
BK
4200 case MODOP_EXPR:
4201 case CAST_EXPR:
4202 case REINTERPRET_CAST_EXPR:
4203 case CONST_CAST_EXPR:
4204 case STATIC_CAST_EXPR:
4205 case DYNAMIC_CAST_EXPR:
42976354
BK
4206 case ARROW_EXPR:
4207 case DOTSTAR_EXPR:
4208 case TYPEID_EXPR:
b8865407 4209 case LOOKUP_EXPR:
40242ccf 4210 case PSEUDO_DTOR_EXPR:
b8865407 4211 if (!fn)
8dfaeb63
MM
4212 return error_mark_node;
4213 break;
abff8e06 4214
8d08fdba 4215 default:
8dfaeb63 4216 break;
8d08fdba 4217 }
8dfaeb63
MM
4218
4219 /* We didn't find any template parameters we liked. */
4220 return NULL_TREE;
4221}
4222
4223/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, or
4224 TEMPLATE_PARM_INDEX in T, call FN with the parameter and the DATA.
4225 If FN returns non-zero, the iteration is terminated, and
4226 for_each_template_parm returns 1. Otherwise, the iteration
4227 continues. If FN never returns a non-zero value, the value
4228 returned by for_each_template_parm is 0. If FN is NULL, it is
4229 considered to be the function which always returns 1. */
4230
4231static int
4232for_each_template_parm (t, fn, data)
4233 tree t;
4234 tree_fn_t fn;
4235 void* data;
4236{
4237 struct pair_fn_data pfd;
4238
4239 /* Set up. */
4240 pfd.fn = fn;
4241 pfd.data = data;
4242
4243 /* Walk the tree. */
4244 return walk_tree (&t, for_each_template_parm_r, &pfd) != NULL_TREE;
8d08fdba
MS
4245}
4246
050367a3
MM
4247int
4248uses_template_parms (t)
4249 tree t;
4250{
4251 return for_each_template_parm (t, 0, 0);
4252}
4253
27fafc8d
JM
4254static struct tinst_level *current_tinst_level;
4255static struct tinst_level *free_tinst_level;
4256static int tinst_depth;
e9f32eb5 4257extern int max_tinst_depth;
5566b478 4258#ifdef GATHER_STATISTICS
27fafc8d 4259int depth_reached;
5566b478 4260#endif
8dfaeb63
MM
4261static int tinst_level_tick;
4262static int last_template_error_tick;
8d08fdba 4263
7bae46f4 4264/* Print out all the template instantiations that we are currently
27fafc8d
JM
4265 working on. If ERR, we are being called from cp_thing, so do
4266 the right thing for an error message. */
7bae46f4 4267
27fafc8d
JM
4268static void
4269print_template_context (err)
4270 int err;
7bae46f4
JM
4271{
4272 struct tinst_level *p = current_tinst_level;
4273 int line = lineno;
3b304f5b 4274 const char *file = input_filename;
7bae46f4 4275
49e04385 4276 if (err && p)
27fafc8d 4277 {
49e04385
MM
4278 if (current_function_decl != p->decl
4279 && current_function_decl != NULL_TREE)
4280 /* We can get here during the processing of some synthesized
4281 method. Then, p->decl will be the function that's causing
4282 the synthesis. */
4283 ;
27fafc8d 4284 else
27fafc8d 4285 {
49e04385
MM
4286 if (current_function_decl == p->decl)
4287 /* Avoid redundancy with the the "In function" line. */;
4288 else
4289 fprintf (stderr, "%s: In instantiation of `%s':\n",
9e93bc9d 4290 file, decl_as_string (p->decl, TS_DECL_TYPE | TS_FUNC_NORETURN));
49e04385 4291
038fb86f
JM
4292 line = p->line;
4293 file = p->file;
27fafc8d
JM
4294 p = p->next;
4295 }
4296 }
4297
7bae46f4
JM
4298 for (; p; p = p->next)
4299 {
038fb86f 4300 fprintf (stderr, "%s:%d: instantiated from `%s'\n", file, line,
9e93bc9d 4301 decl_as_string (p->decl, TS_DECL_TYPE | TS_FUNC_NORETURN));
038fb86f
JM
4302 line = p->line;
4303 file = p->file;
7bae46f4 4304 }
038fb86f 4305 fprintf (stderr, "%s:%d: instantiated from here\n", file, line);
7bae46f4
JM
4306}
4307
27fafc8d
JM
4308/* Called from cp_thing to print the template context for an error. */
4309
4310void
4311maybe_print_template_context ()
4312{
4313 if (last_template_error_tick == tinst_level_tick
4314 || current_tinst_level == 0)
4315 return;
4316
4317 last_template_error_tick = tinst_level_tick;
4318 print_template_context (1);
4319}
4320
bd6dd845 4321static int
5566b478
MS
4322push_tinst_level (d)
4323 tree d;
8d08fdba
MS
4324{
4325 struct tinst_level *new;
8d08fdba 4326
7215f9a0
MS
4327 if (tinst_depth >= max_tinst_depth)
4328 {
8adf5b5e
JM
4329 /* If the instantiation in question still has unbound template parms,
4330 we don't really care if we can't instantiate it, so just return.
4331 This happens with base instantiation for implicit `typename'. */
4332 if (uses_template_parms (d))
4333 return 0;
4334
1139b3d8 4335 last_template_error_tick = tinst_level_tick;
b4f4233d
GDR
4336 cp_error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
4337 max_tinst_depth, d);
5566b478 4338
27fafc8d 4339 print_template_context (0);
5566b478 4340
7215f9a0
MS
4341 return 0;
4342 }
4343
8d08fdba
MS
4344 if (free_tinst_level)
4345 {
4346 new = free_tinst_level;
4347 free_tinst_level = new->next;
4348 }
4349 else
4350 new = (struct tinst_level *) xmalloc (sizeof (struct tinst_level));
4351
5566b478
MS
4352 new->decl = d;
4353 new->line = lineno;
4354 new->file = input_filename;
8d08fdba
MS
4355 new->next = current_tinst_level;
4356 current_tinst_level = new;
5566b478 4357
7215f9a0 4358 ++tinst_depth;
5566b478
MS
4359#ifdef GATHER_STATISTICS
4360 if (tinst_depth > depth_reached)
4361 depth_reached = tinst_depth;
4362#endif
4363
27fafc8d 4364 ++tinst_level_tick;
7215f9a0 4365 return 1;
8d08fdba
MS
4366}
4367
4368void
4369pop_tinst_level ()
4370{
4371 struct tinst_level *old = current_tinst_level;
4372
ae58fa02
MM
4373 /* Restore the filename and line number stashed away when we started
4374 this instantiation. */
4375 lineno = old->line;
4376 input_filename = old->file;
5f2c99c4 4377 extract_interface_info ();
ae58fa02 4378
8d08fdba
MS
4379 current_tinst_level = old->next;
4380 old->next = free_tinst_level;
4381 free_tinst_level = old;
7215f9a0 4382 --tinst_depth;
27fafc8d 4383 ++tinst_level_tick;
8d08fdba
MS
4384}
4385
4386struct tinst_level *
4387tinst_for_decl ()
4388{
4389 struct tinst_level *p = current_tinst_level;
4390
4391 if (p)
4392 for (; p->next ; p = p->next )
4393 ;
4394 return p;
4395}
4396
f84b4be9
JM
4397/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
4398 vector of template arguments, as for tsubst.
4399
4400 Returns an appropriate tsbust'd friend declaration. */
4401
4402static tree
4403tsubst_friend_function (decl, args)
4404 tree decl;
4405 tree args;
4406{
4407 tree new_friend;
27fafc8d 4408 int line = lineno;
3b304f5b 4409 const char *file = input_filename;
27fafc8d
JM
4410
4411 lineno = DECL_SOURCE_LINE (decl);
4412 input_filename = DECL_SOURCE_FILE (decl);
4413
f84b4be9
JM
4414 if (TREE_CODE (decl) == FUNCTION_DECL
4415 && DECL_TEMPLATE_INSTANTIATION (decl)
4416 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4417 /* This was a friend declared with an explicit template
4418 argument list, e.g.:
4419
4420 friend void f<>(T);
4421
4422 to indicate that f was a template instantiation, not a new
4423 function declaration. Now, we have to figure out what
4424 instantiation of what template. */
4425 {
4426 tree template_id;
4427 tree new_args;
4428 tree tmpl;
f84b4be9
JM
4429
4430 template_id
4431 = lookup_template_function (tsubst_expr (DECL_TI_TEMPLATE (decl),
4393e105
MM
4432 args, /*complain=*/1,
4433 NULL_TREE),
f84b4be9 4434 tsubst (DECL_TI_ARGS (decl),
4393e105
MM
4435 args, /*complain=*/1,
4436 NULL_TREE));
4393e105 4437 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
36a117a5
MM
4438 tmpl = determine_specialization (template_id, new_friend,
4439 &new_args,
bf8f3f93 4440 /*need_member_template=*/0);
27fafc8d
JM
4441 new_friend = instantiate_template (tmpl, new_args);
4442 goto done;
f84b4be9 4443 }
36a117a5 4444
4393e105 4445 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
f84b4be9 4446
36a117a5 4447 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
4448 compiler, but is not an instantiation from the point of view of
4449 the language. For example, we might have had:
4450
4451 template <class T> struct S {
4452 template <class U> friend void f(T, U);
4453 };
4454
4455 Then, in S<int>, template <class U> void f(int, U) is not an
4456 instantiation of anything. */
4457 DECL_USE_TEMPLATE (new_friend) = 0;
4458 if (TREE_CODE (decl) == TEMPLATE_DECL)
4459 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
36a117a5
MM
4460
4461 /* The mangled name for the NEW_FRIEND is incorrect. The call to
4462 tsubst will have resulted in a call to
4463 set_mangled_name_for_template_decl. But, the function is not a
4464 template instantiation and should not be mangled like one.
4465 Therefore, we remangle the function name. We don't have to do
4466 this if the NEW_FRIEND is a template since
4467 set_mangled_name_for_template_decl doesn't do anything if the
4468 function declaration still uses template arguments. */
4469 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4470 {
4471 set_mangled_name_for_decl (new_friend);
4472 DECL_RTL (new_friend) = 0;
4473 make_decl_rtl (new_friend, NULL_PTR, 1);
4474 }
4475
6eb3bb27 4476 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 4477 {
36a117a5 4478 tree old_decl;
fbf1c34b
MM
4479 tree new_friend_template_info;
4480 tree new_friend_result_template_info;
92da7074 4481 tree ns;
fbf1c34b
MM
4482 int new_friend_is_defn;
4483
4484 /* We must save some information from NEW_FRIEND before calling
4485 duplicate decls since that function will free NEW_FRIEND if
4486 possible. */
4487 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
f84b4be9 4488 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
4489 {
4490 /* This declaration is a `primary' template. */
4491 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4492
4493 new_friend_is_defn
17aec3eb 4494 = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
fbf1c34b 4495 new_friend_result_template_info
17aec3eb 4496 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
fbf1c34b
MM
4497 }
4498 else
4499 {
4500 new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4501 new_friend_result_template_info = NULL_TREE;
4502 }
36a117a5 4503
1c227897
MM
4504 /* Inside pushdecl_namespace_level, we will push into the
4505 current namespace. However, the friend function should go
4506 into the namespace of the template. */
92da7074
ML
4507 ns = decl_namespace_context (new_friend);
4508 push_nested_namespace (ns);
36a117a5 4509 old_decl = pushdecl_namespace_level (new_friend);
92da7074 4510 pop_nested_namespace (ns);
36a117a5
MM
4511
4512 if (old_decl != new_friend)
4513 {
4514 /* This new friend declaration matched an existing
4515 declaration. For example, given:
4516
4517 template <class T> void f(T);
4518 template <class U> class C {
4519 template <class T> friend void f(T) {}
4520 };
4521
4522 the friend declaration actually provides the definition
4523 of `f', once C has been instantiated for some type. So,
4524 old_decl will be the out-of-class template declaration,
4525 while new_friend is the in-class definition.
4526
4527 But, if `f' was called before this point, the
4528 instantiation of `f' will have DECL_TI_ARGS corresponding
4529 to `T' but not to `U', references to which might appear
4530 in the definition of `f'. Previously, the most general
4531 template for an instantiation of `f' was the out-of-class
4532 version; now it is the in-class version. Therefore, we
4533 run through all specialization of `f', adding to their
4534 DECL_TI_ARGS appropriately. In particular, they need a
4535 new set of outer arguments, corresponding to the
4536 arguments for this class instantiation.
4537
4538 The same situation can arise with something like this:
4539
4540 friend void f(int);
4541 template <class T> class C {
4542 friend void f(T) {}
4543 };
4544
4545 when `C<int>' is instantiated. Now, `f(int)' is defined
4546 in the class. */
4547
fbf1c34b
MM
4548 if (!new_friend_is_defn)
4549 /* On the other hand, if the in-class declaration does
4550 *not* provide a definition, then we don't want to alter
4551 existing definitions. We can just leave everything
4552 alone. */
36a117a5 4553 ;
fbf1c34b 4554 else
36a117a5 4555 {
fbf1c34b
MM
4556 /* Overwrite whatever template info was there before, if
4557 any, with the new template information pertaining to
4558 the declaration. */
4559 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4560
4561 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4562 /* duplicate_decls will take care of this case. */
4563 ;
4564 else
36a117a5 4565 {
fbf1c34b
MM
4566 tree t;
4567 tree new_friend_args;
4568
17aec3eb 4569 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
fbf1c34b
MM
4570 = new_friend_result_template_info;
4571
4572 new_friend_args = TI_ARGS (new_friend_template_info);
4573 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
4574 t != NULL_TREE;
4575 t = TREE_CHAIN (t))
4576 {
4577 tree spec = TREE_VALUE (t);
36a117a5 4578
fbf1c34b
MM
4579 DECL_TI_ARGS (spec)
4580 = add_outermost_template_args (new_friend_args,
4581 DECL_TI_ARGS (spec));
fbf1c34b
MM
4582 }
4583
4584 /* Now, since specializations are always supposed to
4585 hang off of the most general template, we must move
4586 them. */
4587 t = most_general_template (old_decl);
4588 if (t != old_decl)
4589 {
4590 DECL_TEMPLATE_SPECIALIZATIONS (t)
4591 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4592 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4593 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4594 }
36a117a5
MM
4595 }
4596 }
4597
4598 /* The information from NEW_FRIEND has been merged into OLD_DECL
4599 by duplicate_decls. */
4600 new_friend = old_decl;
4601 }
f84b4be9 4602 }
d0f062fb 4603 else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
f84b4be9
JM
4604 {
4605 /* Check to see that the declaration is really present, and,
4606 possibly obtain an improved declaration. */
4607 tree fn = check_classfn (DECL_CONTEXT (new_friend),
4608 new_friend);
4609
4610 if (fn)
4611 new_friend = fn;
4612 }
4613
27fafc8d
JM
4614 done:
4615 lineno = line;
4616 input_filename = file;
f84b4be9
JM
4617 return new_friend;
4618}
4619
1aed5355
MM
4620/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
4621 template arguments, as for tsubst.
6757edfe
MM
4622
4623 Returns an appropriate tsbust'd friend type. */
4624
4625static tree
1aed5355
MM
4626tsubst_friend_class (friend_tmpl, args)
4627 tree friend_tmpl;
6757edfe
MM
4628 tree args;
4629{
1aed5355 4630 tree friend_type;
25aab5d0 4631 tree tmpl;
6757edfe 4632
25aab5d0
MM
4633 /* First, we look for a class template. */
4634 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
4635
4636 /* But, if we don't find one, it might be because we're in a
4637 situation like this:
4638
4639 template <class T>
4640 struct S {
4641 template <class U>
4642 friend struct S;
4643 };
4644
4645 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4646 for `S<int>', not the TEMPLATE_DECL. */
bc639f90 4647 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
25aab5d0
MM
4648 {
4649 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4650 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4651 }
6757edfe 4652
25aab5d0 4653 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
4654 {
4655 /* The friend template has already been declared. Just
36a117a5
MM
4656 check to see that the declarations match, and install any new
4657 default parameters. We must tsubst the default parameters,
4658 of course. We only need the innermost template parameters
4659 because that is all that redeclare_class_template will look
4660 at. */
4661 tree parms
4662 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
4393e105 4663 args, /*complain=*/1);
36a117a5 4664 redeclare_class_template (TREE_TYPE (tmpl), parms);
6757edfe
MM
4665 friend_type = TREE_TYPE (tmpl);
4666 }
4667 else
4668 {
4669 /* The friend template has not already been declared. In this
4670 case, the instantiation of the template class will cause the
4671 injection of this template into the global scope. */
4393e105 4672 tmpl = tsubst (friend_tmpl, args, /*complain=*/1, NULL_TREE);
6757edfe
MM
4673
4674 /* The new TMPL is not an instantiation of anything, so we
4675 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
4676 the new type because that is supposed to be the corresponding
4677 template decl, i.e., TMPL. */
4678 DECL_USE_TEMPLATE (tmpl) = 0;
4679 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
4680 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
4681
4682 /* Inject this template into the global scope. */
4683 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
4684 }
4685
4686 return friend_type;
4687}
f84b4be9 4688
8d08fdba 4689tree
5566b478
MS
4690instantiate_class_template (type)
4691 tree type;
8d08fdba 4692{
61a127b3 4693 tree template, args, pattern, t;
36a117a5 4694 tree typedecl;
8d08fdba 4695
5566b478 4696 if (type == error_mark_node)
8d08fdba
MS
4697 return error_mark_node;
4698
d0f062fb 4699 if (TYPE_BEING_DEFINED (type) || COMPLETE_TYPE_P (type))
5566b478
MS
4700 return type;
4701
6bdb985f 4702 /* Figure out which template is being instantiated. */
36a117a5 4703 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5566b478 4704 my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
73aad9b9 4705
6bdb985f
MM
4706 /* Figure out which arguments are being used to do the
4707 instantiation. */
4708 args = CLASSTYPE_TI_ARGS (type);
4c571114 4709 PARTIAL_INSTANTIATION_P (type) = uses_template_parms (args);
6bdb985f 4710
4c571114
MM
4711 if (pedantic && PARTIAL_INSTANTIATION_P (type))
4712 /* If this is a partial instantiation, then we can't instantiate
4713 the type; there's no telling whether or not one of the
4714 template parameters might eventually be instantiated to some
4715 value that results in a specialization being used. For
4716 example, consider:
4717
4718 template <class T>
4719 struct S {};
4720
4721 template <class U>
4722 void f(S<U>);
4723
4724 template <>
4725 struct S<int> {};
4726
4727 Now, the `S<U>' in `f<int>' is the specialization, not an
5db698f6 4728 instantiation of the original template. */
f31c0a32 4729 return type;
4c571114
MM
4730
4731 /* Determine what specialization of the original template to
4732 instantiate. */
4733 if (PARTIAL_INSTANTIATION_P (type))
6bdb985f
MM
4734 /* There's no telling which specialization is appropriate at this
4735 point. Since all peeking at the innards of this partial
4736 instantiation are extensions (like the "implicit typename"
4737 extension, which allows users to omit the keyword `typename' on
4738 names that are declared as types in template base classes), we
4739 are free to do what we please.
4740
4741 Trying to figure out which partial instantiation to use can
4742 cause a crash. (Some of the template arguments don't even have
4743 types.) So, we just use the most general version. */
4744 t = NULL_TREE;
4745 else
73aad9b9 4746 {
6bdb985f
MM
4747 t = most_specialized_class (template, args);
4748
4749 if (t == error_mark_node)
73aad9b9 4750 {
d8e178a0 4751 const char *str = "candidates are:";
6bdb985f
MM
4752 cp_error ("ambiguous class template instantiation for `%#T'", type);
4753 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
4754 t = TREE_CHAIN (t))
73aad9b9 4755 {
6bdb985f
MM
4756 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4757 args))
4758 {
4759 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
4760 str = " ";
4761 }
73aad9b9 4762 }
6bdb985f 4763 TYPE_BEING_DEFINED (type) = 1;
f31c0a32 4764 return error_mark_node;
73aad9b9 4765 }
73aad9b9 4766 }
6bdb985f
MM
4767
4768 if (t)
73aad9b9
JM
4769 pattern = TREE_TYPE (t);
4770 else
4771 pattern = TREE_TYPE (template);
5566b478 4772
4c571114
MM
4773 /* If the template we're instantiating is incomplete, then clearly
4774 there's nothing we can do. */
d0f062fb 4775 if (!COMPLETE_TYPE_P (pattern))
f31c0a32 4776 return type;
5566b478 4777
4c571114
MM
4778 /* If this is a partial instantiation, don't tsubst anything. We will
4779 only use this type for implicit typename, so the actual contents don't
4780 matter. All that matters is whether a particular name is a type. */
4781 if (PARTIAL_INSTANTIATION_P (type))
4782 {
4783 /* The fields set here must be kept in sync with those cleared
4784 in begin_class_definition. */
4785 TYPE_BINFO_BASETYPES (type) = TYPE_BINFO_BASETYPES (pattern);
4786 TYPE_FIELDS (type) = TYPE_FIELDS (pattern);
4787 TYPE_METHODS (type) = TYPE_METHODS (pattern);
4788 CLASSTYPE_TAGS (type) = CLASSTYPE_TAGS (pattern);
4789 /* Pretend that the type is complete, so that we will look
4790 inside it during name lookup and such. */
867580ce 4791 TYPE_SIZE (type) = bitsize_zero_node;
f31c0a32 4792 return type;
4c571114
MM
4793 }
4794
4795 /* If we've recursively instantiated too many templates, stop. */
4796 if (! push_tinst_level (type))
f31c0a32 4797 return type;
4c571114
MM
4798
4799 /* Now we're really doing the instantiation. Mark the type as in
4800 the process of being defined. */
4801 TYPE_BEING_DEFINED (type) = 1;
4802
4803 maybe_push_to_top_level (uses_template_parms (type));
4c571114 4804
73aad9b9 4805 if (t)
36a117a5
MM
4806 {
4807 /* This TYPE is actually a instantiation of of a partial
4808 specialization. We replace the innermost set of ARGS with
4809 the arguments appropriate for substitution. For example,
4810 given:
4811
4812 template <class T> struct S {};
4813 template <class T> struct S<T*> {};
4814
4815 and supposing that we are instantiating S<int*>, ARGS will
4816 present be {int*} but we need {int}. */
4817 tree inner_args
4818 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4819 args);
4820
4821 /* If there were multiple levels in ARGS, replacing the
4822 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
4823 want, so we make a copy first. */
4824 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
4825 {
4826 args = copy_node (args);
4827 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
4828 }
4829 else
4830 args = inner_args;
4831 }
8d019cef 4832
5566b478
MS
4833 if (flag_external_templates)
4834 {
4835 if (flag_alt_external_templates)
4836 {
4837 CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
4838 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
4839 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
2604412d
JM
4840 = (! CLASSTYPE_INTERFACE_ONLY (type)
4841 && CLASSTYPE_INTERFACE_KNOWN (type));
5566b478
MS
4842 }
4843 else
4844 {
4845 CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
4846 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
4847 (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
4848 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
2604412d
JM
4849 = (! CLASSTYPE_INTERFACE_ONLY (type)
4850 && CLASSTYPE_INTERFACE_KNOWN (type));
5566b478
MS
4851 }
4852 }
4853 else
8d08fdba 4854 {
5566b478
MS
4855 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
4856 CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1;
8d08fdba
MS
4857 }
4858
f7da6097
MS
4859 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
4860 TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
f7da6097
MS
4861 TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
4862 TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
4863 TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
834c6dff
MM
4864 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
4865 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
f7da6097
MS
4866 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
4867 TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
4868 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
4869 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
4870 TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
4871 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
4872 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
4873 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
4874 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
4c6b7393
MM
4875 TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
4876 = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
f7da6097
MS
4877 TYPE_USES_MULTIPLE_INHERITANCE (type)
4878 = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
4879 TYPE_USES_VIRTUAL_BASECLASSES (type)
4880 = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
4881 TYPE_PACKED (type) = TYPE_PACKED (pattern);
4882 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
eff71ab0 4883 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
4884 if (ANON_AGGR_TYPE_P (pattern))
4885 SET_ANON_AGGR_TYPE_P (type);
f7da6097 4886
3fd71a52
MM
4887 if (TYPE_BINFO_BASETYPES (pattern))
4888 {
4889 tree base_list = NULL_TREE;
4890 tree pbases = TYPE_BINFO_BASETYPES (pattern);
4891 int i;
5566b478 4892
3fd71a52
MM
4893 /* Substitute into each of the bases to determine the actual
4894 basetypes. */
4895 for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
4896 {
4897 tree base;
4898 tree access;
4899 tree pbase;
5566b478 4900
3fd71a52 4901 pbase = TREE_VEC_ELT (pbases, i);
711734a9 4902
3fd71a52
MM
4903 /* Substitue to figure out the base class. */
4904 base = tsubst (BINFO_TYPE (pbase), args,
4905 /*complain=*/1, NULL_TREE);
4906 if (base == error_mark_node)
4907 continue;
711734a9 4908
3fd71a52
MM
4909 /* Calculate the correct access node. */
4910 if (TREE_VIA_VIRTUAL (pbase))
4911 {
4912 if (TREE_VIA_PUBLIC (pbase))
4913 access = access_public_virtual_node;
4914 else if (TREE_VIA_PROTECTED (pbase))
4915 access = access_protected_virtual_node;
d6479fe7 4916 else
3fd71a52
MM
4917 access = access_private_virtual_node;
4918 }
4919 else
4920 {
4921 if (TREE_VIA_PUBLIC (pbase))
4922 access = access_public_node;
4923 else if (TREE_VIA_PROTECTED (pbase))
4924 access = access_protected_node;
d6479fe7 4925 else
3fd71a52
MM
4926 access = access_private_node;
4927 }
dfbcd65a 4928
3fd71a52
MM
4929 base_list = tree_cons (access, base, base_list);
4930 }
dfbcd65a 4931
3fd71a52
MM
4932 /* The list is now in reverse order; correct that. */
4933 base_list = nreverse (base_list);
4934
4935 /* Now call xref_basetypes to set up all the base-class
4936 information. */
4937 xref_basetypes (TREE_CODE (pattern) == RECORD_TYPE
4938 ? (CLASSTYPE_DECLARED_CLASS (pattern)
4939 ? class_type_node : record_type_node)
4940 : union_type_node,
4941 DECL_NAME (TYPE_NAME (pattern)),
4942 type,
4943 base_list);
4944 }
5566b478 4945
b74a0560
MM
4946 /* Now that our base classes are set up, enter the scope of the
4947 class, so that name lookups into base classes, etc. will work
4948 corectly. This is precisely analagous to what we do in
4949 begin_class_definition when defining an ordinary non-template
4950 class. */
4951 pushclass (type, 1);
4952
5566b478 4953 for (t = CLASSTYPE_TAGS (pattern); t; t = TREE_CHAIN (t))
8d08fdba 4954 {
5566b478 4955 tree tag = TREE_VALUE (t);
36a117a5
MM
4956 tree name = TYPE_IDENTIFIER (tag);
4957 tree newtag;
5566b478 4958
4393e105 4959 newtag = tsubst (tag, args, /*complain=*/1, NULL_TREE);
61a127b3 4960 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
ed44da02 4961 {
486e4077
MM
4962 if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
4963 /* Unfortunately, lookup_template_class sets
4964 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
4965 instantiation (i.e., for the type of a member template
4966 class nested within a template class.) This behavior is
4967 required for maybe_process_partial_specialization to work
4968 correctly, but is not accurate in this case; the TAG is not
4969 an instantiation of anything. (The corresponding
4970 TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
4971 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
4972
ed44da02
MM
4973 /* Now, we call pushtag to put this NEWTAG into the scope of
4974 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
4975 pushtag calling push_template_decl. We don't have to do
4976 this for enums because it will already have been done in
4977 tsubst_enum. */
4978 if (name)
4979 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
4980 pushtag (name, newtag, /*globalize=*/0);
4981 }
8d08fdba
MS
4982 }
4983
5566b478
MS
4984 /* Don't replace enum constants here. */
4985 for (t = TYPE_FIELDS (pattern); t; t = TREE_CHAIN (t))
8dd3f57a 4986 if (TREE_CODE (t) != CONST_DECL)
5566b478 4987 {
ae58fa02
MM
4988 tree r;
4989
4990 /* The the file and line for this declaration, to assist in
4991 error message reporting. Since we called push_tinst_level
4992 above, we don't need to restore these. */
4993 lineno = DECL_SOURCE_LINE (t);
4994 input_filename = DECL_SOURCE_FILE (t);
4995
4393e105 4996 r = tsubst (t, args, /*complain=*/1, NULL_TREE);
5566b478
MS
4997 if (TREE_CODE (r) == VAR_DECL)
4998 {
fa8d6e85
MM
4999 tree init;
5000
94c82a77 5001 if (DECL_DEFINED_IN_CLASS_P (r))
fa8d6e85
MM
5002 init = tsubst_expr (DECL_INITIAL (t), args,
5003 /*complain=*/1, NULL_TREE);
5004 else
5005 init = NULL_TREE;
5006
5007 finish_static_data_member_decl (r, init,
5008 /*asmspec_tree=*/NULL_TREE,
fa8d6e85
MM
5009 /*flags=*/0);
5010
6ba89f8e
MM
5011 if (DECL_DEFINED_IN_CLASS_P (r))
5012 check_static_variable_definition (r, TREE_TYPE (r));
5566b478 5013 }
61a127b3
MM
5014
5015 /* R will have a TREE_CHAIN if and only if it has already been
5016 processed by finish_member_declaration. This can happen
5017 if, for example, it is a TYPE_DECL for a class-scoped
5018 ENUMERAL_TYPE; such a thing will already have been added to
5019 the field list by tsubst_enum above. */
5020 if (!TREE_CHAIN (r))
5021 {
5022 set_current_access_from_decl (r);
5023 finish_member_declaration (r);
5024 }
5566b478 5025 }
8d08fdba 5026
61a127b3
MM
5027 /* Set up the list (TYPE_METHODS) and vector (CLASSTYPE_METHOD_VEC)
5028 for this instantiation. */
5029 for (t = TYPE_METHODS (pattern); t; t = TREE_CHAIN (t))
5030 {
4393e105 5031 tree r = tsubst (t, args, /*complain=*/1, NULL_TREE);
61a127b3
MM
5032 set_current_access_from_decl (r);
5033 finish_member_declaration (r);
5034 }
8d08fdba 5035
2604412d
JM
5036 /* Construct the DECL_FRIENDLIST for the new class type. */
5037 typedecl = TYPE_MAIN_DECL (type);
5038 for (t = DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern));
5039 t != NULL_TREE;
5040 t = TREE_CHAIN (t))
f84b4be9 5041 {
2604412d 5042 tree friends;
f84b4be9 5043
2604412d
JM
5044 for (friends = TREE_VALUE (t);
5045 friends != NULL_TREE;
5046 friends = TREE_CHAIN (friends))
0c0aac2f
MM
5047 if (TREE_PURPOSE (friends) == error_mark_node)
5048 add_friend (type,
5049 tsubst_friend_function (TREE_VALUE (friends),
5050 args));
5051 else
4f1c5b7d 5052 my_friendly_abort (20000216);
2604412d 5053 }
5566b478 5054
6757edfe
MM
5055 for (t = CLASSTYPE_FRIEND_CLASSES (pattern);
5056 t != NULL_TREE;
5057 t = TREE_CHAIN (t))
5058 {
5059 tree friend_type = TREE_VALUE (t);
1aed5355 5060 tree new_friend_type;
6757edfe 5061
36a117a5
MM
5062 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5063 new_friend_type = tsubst_friend_class (friend_type, args);
5064 else if (uses_template_parms (friend_type))
4393e105
MM
5065 new_friend_type = tsubst (friend_type, args, /*complain=*/1,
5066 NULL_TREE);
36a117a5 5067 else
61fc8c9e
MM
5068 {
5069 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
36a117a5 5070
61fc8c9e
MM
5071 /* The call to xref_tag_from_type does injection for friend
5072 classes. */
5073 push_nested_namespace (ns);
5074 new_friend_type =
5075 xref_tag_from_type (friend_type, NULL_TREE, 1);
5076 pop_nested_namespace (ns);
5077 }
1aed5355
MM
5078
5079 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5080 /* Trick make_friend_class into realizing that the friend
5081 we're adding is a template, not an ordinary class. It's
5082 important that we use make_friend_class since it will
5083 perform some error-checking and output cross-reference
5084 information. */
5085 ++processing_template_decl;
5086
5087 make_friend_class (type, new_friend_type);
fc378698 5088
1aed5355
MM
5089 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5090 --processing_template_decl;
6757edfe 5091 }
fc378698 5092
2604412d
JM
5093 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5094 if (TREE_CODE (t) == FIELD_DECL)
5095 {
5096 TREE_TYPE (t) = complete_type (TREE_TYPE (t));
5097 require_complete_type (t);
5098 }
5566b478 5099
61a127b3
MM
5100 /* Set the file and line number information to whatever is given for
5101 the class itself. This puts error messages involving generated
5102 implicit functions at a predictable point, and the same point
5103 that would be used for non-template classes. */
5104 lineno = DECL_SOURCE_LINE (typedecl);
5105 input_filename = DECL_SOURCE_FILE (typedecl);
5106
5107 unreverse_member_declarations (type);
9f33663b 5108 finish_struct_1 (type);
2604412d 5109 CLASSTYPE_GOT_SEMICOLON (type) = 1;
e92cc029 5110
5524676d
JM
5111 /* Clear this now so repo_template_used is happy. */
5112 TYPE_BEING_DEFINED (type) = 0;
2604412d 5113 repo_template_used (type);
8d08fdba 5114
9188c363
MM
5115 /* Now that the class is complete, instantiate default arguments for
5116 any member functions. We don't do this earlier because the
5117 default arguments may reference members of the class. */
5118 if (!PRIMARY_TEMPLATE_P (template))
5119 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5120 if (TREE_CODE (t) == FUNCTION_DECL
5121 /* Implicitly generated member functions will not have tmplate
5122 information; they are not instantiations, but instead are
5123 created "fresh" for each instantiation. */
5124 && DECL_TEMPLATE_INFO (t))
5125 tsubst_default_arguments (t);
5126
b74a0560 5127 popclass ();
5566b478
MS
5128 pop_from_top_level ();
5129 pop_tinst_level ();
5130
5131 return type;
8d08fdba
MS
5132}
5133
5134static int
5135list_eq (t1, t2)
5136 tree t1, t2;
5137{
5138 if (t1 == NULL_TREE)
5139 return t2 == NULL_TREE;
5140 if (t2 == NULL_TREE)
5141 return 0;
5142 /* Don't care if one declares its arg const and the other doesn't -- the
5143 main variant of the arg type is all that matters. */
5144 if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5145 != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5146 return 0;
5147 return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5148}
5149
00d3396f
JM
5150/* If arg is a non-type template parameter that does not depend on template
5151 arguments, fold it like we weren't in the body of a template. */
5152
5153static tree
5154maybe_fold_nontype_arg (arg)
5155 tree arg;
5156{
7610f2ce
JM
5157 /* If we're not in a template, ARG is already as simple as it's going to
5158 get, and trying to reprocess the trees will break. */
5159 if (! processing_template_decl)
5160 return arg;
5161
2f939d94 5162 if (!TYPE_P (arg) && !uses_template_parms (arg))
00d3396f
JM
5163 {
5164 /* Sometimes, one of the args was an expression involving a
5165 template constant parameter, like N - 1. Now that we've
5166 tsubst'd, we might have something like 2 - 1. This will
5167 confuse lookup_template_class, so we do constant folding
5168 here. We have to unset processing_template_decl, to
5169 fool build_expr_from_tree() into building an actual
5170 tree. */
5171
5172 int saved_processing_template_decl = processing_template_decl;
5173 processing_template_decl = 0;
5174 arg = fold (build_expr_from_tree (arg));
5175 processing_template_decl = saved_processing_template_decl;
5176 }
5177 return arg;
5178}
5179
830bfa74
MM
5180/* Substitute ARGS into the vector of template arguments T. */
5181
e9659ab0 5182static tree
4393e105 5183tsubst_template_arg_vector (t, args, complain)
830bfa74
MM
5184 tree t;
5185 tree args;
4393e105 5186 int complain;
830bfa74
MM
5187{
5188 int len = TREE_VEC_LENGTH (t), need_new = 0, i;
5189 tree *elts = (tree *) alloca (len * sizeof (tree));
5190
5191 bzero ((char *) elts, len * sizeof (tree));
5192
5193 for (i = 0; i < len; i++)
5194 {
5195 if (TREE_VEC_ELT (t, i) != NULL_TREE
5196 && TREE_CODE (TREE_VEC_ELT (t, i)) == TREE_VEC)
4393e105
MM
5197 elts[i] = tsubst_template_arg_vector (TREE_VEC_ELT (t, i),
5198 args, complain);
830bfa74
MM
5199 else
5200 elts[i] = maybe_fold_nontype_arg
4393e105
MM
5201 (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
5202 NULL_TREE));
830bfa74
MM
5203
5204 if (elts[i] != TREE_VEC_ELT (t, i))
5205 need_new = 1;
5206 }
5207
5208 if (!need_new)
5209 return t;
5210
f31c0a32 5211 t = make_tree_vec (len);
830bfa74
MM
5212 for (i = 0; i < len; i++)
5213 TREE_VEC_ELT (t, i) = elts[i];
5214
5215 return t;
5216}
5217
36a117a5
MM
5218/* Return the result of substituting ARGS into the template parameters
5219 given by PARMS. If there are m levels of ARGS and m + n levels of
5220 PARMS, then the result will contain n levels of PARMS. For
5221 example, if PARMS is `template <class T> template <class U>
5222 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5223 result will be `template <int*, double, class V>'. */
5224
e9659ab0 5225static tree
4393e105 5226tsubst_template_parms (parms, args, complain)
36a117a5
MM
5227 tree parms;
5228 tree args;
4393e105 5229 int complain;
36a117a5 5230{
f71f87f9
MM
5231 tree r = NULL_TREE;
5232 tree* new_parms;
36a117a5
MM
5233
5234 for (new_parms = &r;
5235 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5236 new_parms = &(TREE_CHAIN (*new_parms)),
5237 parms = TREE_CHAIN (parms))
5238 {
5239 tree new_vec =
5240 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5241 int i;
5242
5243 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5244 {
5245 tree default_value =
5246 TREE_PURPOSE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5247 tree parm_decl =
5248 TREE_VALUE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5249
5250 TREE_VEC_ELT (new_vec, i)
4393e105
MM
5251 = build_tree_list (tsubst (default_value, args, complain,
5252 NULL_TREE),
5253 tsubst (parm_decl, args, complain,
5254 NULL_TREE));
36a117a5
MM
5255 }
5256
5257 *new_parms =
5258 tree_cons (build_int_2 (0, (TMPL_PARMS_DEPTH (parms)
5259 - TMPL_ARGS_DEPTH (args))),
5260 new_vec, NULL_TREE);
5261 }
5262
5263 return r;
5264}
5265
ed44da02
MM
5266/* Substitute the ARGS into the indicated aggregate (or enumeration)
5267 type T. If T is not an aggregate or enumeration type, it is
5268 handled as if by tsubst. IN_DECL is as for tsubst. If
5269 ENTERING_SCOPE is non-zero, T is the context for a template which
5270 we are presently tsubst'ing. Return the subsituted value. */
36a117a5 5271
e9659ab0 5272static tree
4393e105 5273tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
36a117a5
MM
5274 tree t;
5275 tree args;
4393e105 5276 int complain;
36a117a5
MM
5277 tree in_decl;
5278 int entering_scope;
5279{
5280 if (t == NULL_TREE)
5281 return NULL_TREE;
5282
5283 switch (TREE_CODE (t))
5284 {
5285 case RECORD_TYPE:
5286 if (TYPE_PTRMEMFUNC_P (t))
5287 {
5288 tree r = build_ptrmemfunc_type
4393e105 5289 (tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl));
adecb3f4
MM
5290 return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5291 complain);
36a117a5
MM
5292 }
5293
5294 /* else fall through */
ed44da02 5295 case ENUMERAL_TYPE:
36a117a5 5296 case UNION_TYPE:
5db698f6 5297 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
5298 {
5299 tree argvec;
5300 tree context;
5301 tree r;
5302
5303 /* First, determine the context for the type we are looking
5304 up. */
5305 if (TYPE_CONTEXT (t) != NULL_TREE)
5306 context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
4393e105 5307 complain,
36a117a5
MM
5308 in_decl, /*entering_scope=*/1);
5309 else
5310 context = NULL_TREE;
5311
5312 /* Then, figure out what arguments are appropriate for the
5313 type we are trying to find. For example, given:
5314
5315 template <class T> struct S;
5316 template <class T, class U> void f(T, U) { S<U> su; }
5317
5318 and supposing that we are instantiating f<int, double>,
5319 then our ARGS will be {int, double}, but, when looking up
5320 S we only want {double}. */
4393e105
MM
5321 argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
5322 complain);
36a117a5
MM
5323
5324 r = lookup_template_class (t, argvec, in_decl, context,
5325 entering_scope);
5326
adecb3f4
MM
5327 return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5328 complain);
36a117a5
MM
5329 }
5330 else
5331 /* This is not a template type, so there's nothing to do. */
5332 return t;
5333
5334 default:
4393e105 5335 return tsubst (t, args, complain, in_decl);
36a117a5
MM
5336 }
5337}
5338
9188c363
MM
5339/* Substitute into the default argument ARG (a default argument for
5340 FN), which has the indicated TYPE. */
5341
5342tree
5343tsubst_default_argument (fn, type, arg)
5344 tree fn;
5345 tree type;
5346 tree arg;
5347{
5348 /* This default argument came from a template. Instantiate the
5349 default argument here, not in tsubst. In the case of
5350 something like:
5351
5352 template <class T>
5353 struct S {
5354 static T t();
5355 void f(T = t());
5356 };
5357
5358 we must be careful to do name lookup in the scope of S<T>,
5359 rather than in the current class. */
5360 if (DECL_CLASS_SCOPE_P (fn))
4f1c5b7d 5361 pushclass (DECL_CONTEXT (fn), 2);
9188c363
MM
5362
5363 arg = tsubst_expr (arg, DECL_TI_ARGS (fn), /*complain=*/1, NULL_TREE);
5364
5365 if (DECL_CLASS_SCOPE_P (fn))
5366 popclass ();
5367
5368 /* Make sure the default argument is reasonable. */
5369 arg = check_default_argument (type, arg);
5370
5371 return arg;
5372}
5373
5374/* Substitute into all the default arguments for FN. */
5375
5376static void
5377tsubst_default_arguments (fn)
5378 tree fn;
5379{
5380 tree arg;
5381 tree tmpl_args;
5382
5383 tmpl_args = DECL_TI_ARGS (fn);
5384
5385 /* If this function is not yet instantiated, we certainly don't need
5386 its default arguments. */
5387 if (uses_template_parms (tmpl_args))
5388 return;
5389
5390 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
5391 arg;
5392 arg = TREE_CHAIN (arg))
5393 if (TREE_PURPOSE (arg))
5394 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
5395 TREE_VALUE (arg),
5396 TREE_PURPOSE (arg));
5397}
5398
ae58fa02
MM
5399/* Substitute the ARGS into the T, which is a _DECL. TYPE is the
5400 (already computed) substitution of ARGS into TREE_TYPE (T), if
5401 appropriate. Return the result of the substitution. IN_DECL is as
5402 for tsubst. */
00d3396f 5403
e9659ab0 5404static tree
ae58fa02
MM
5405tsubst_decl (t, args, type, in_decl)
5406 tree t;
5407 tree args;
5408 tree type;
8d08fdba
MS
5409 tree in_decl;
5410{
ae58fa02 5411 int saved_lineno;
3b304f5b 5412 const char *saved_filename;
b370501f 5413 tree r = NULL_TREE;
830bfa74 5414
ae58fa02
MM
5415 /* Set the filename and linenumber to improve error-reporting. */
5416 saved_lineno = lineno;
5417 saved_filename = input_filename;
5418 lineno = DECL_SOURCE_LINE (t);
5419 input_filename = DECL_SOURCE_FILE (t);
b7484fbe 5420
8d08fdba
MS
5421 switch (TREE_CODE (t))
5422 {
98c1c668
JM
5423 case TEMPLATE_DECL:
5424 {
5425 /* We can get here when processing a member template function
5426 of a template class. */
98c1c668 5427 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 5428 tree spec;
db2767b6 5429 int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
98c1c668 5430
db2767b6
MM
5431 if (!is_template_template_parm)
5432 {
36a117a5
MM
5433 /* We might already have an instance of this template.
5434 The ARGS are for the surrounding class type, so the
5435 full args contain the tsubst'd args for the context,
5436 plus the innermost args from the template decl. */
5437 tree tmpl_args = DECL_CLASS_TEMPLATE_P (t)
5438 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
17aec3eb 5439 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7ddedda4
MM
5440 tree full_args;
5441
4393e105
MM
5442 full_args = tsubst_template_arg_vector (tmpl_args, args,
5443 /*complain=*/1);
36a117a5
MM
5444
5445 /* tsubst_template_arg_vector doesn't copy the vector if
5446 nothing changed. But, *something* should have
5447 changed. */
5448 my_friendly_assert (full_args != tmpl_args, 0);
5449
5450 spec = retrieve_specialization (t, full_args);
db2767b6 5451 if (spec != NULL_TREE)
ae58fa02
MM
5452 {
5453 r = spec;
5454 break;
5455 }
db2767b6 5456 }
98c1c668
JM
5457
5458 /* Make a new template decl. It will be similar to the
5459 original, but will record the current template arguments.
5460 We also create a new function declaration, which is just
5461 like the old one, but points to this new template, rather
5462 than the old one. */
0acf7199 5463 r = copy_decl (t);
ae58fa02
MM
5464 my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5465 TREE_CHAIN (r) = NULL_TREE;
db2767b6
MM
5466
5467 if (is_template_template_parm)
5468 {
4393e105 5469 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
17aec3eb 5470 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
5471 TREE_TYPE (r) = TREE_TYPE (new_decl);
5472 break;
db2767b6
MM
5473 }
5474
ae58fa02 5475 DECL_CONTEXT (r)
4f1c5b7d 5476 = tsubst_aggr_type (DECL_CONTEXT (t), args,
4393e105
MM
5477 /*complain=*/1, in_decl,
5478 /*entering_scope=*/1);
4f1c5b7d
MM
5479 DECL_VIRTUAL_CONTEXT (r)
5480 = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args,
5481 /*complain=*/1, in_decl,
5482 /*entering_scope=*/1);
ae58fa02 5483 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
5484
5485 if (TREE_CODE (decl) == TYPE_DECL)
5486 {
4393e105
MM
5487 tree new_type = tsubst (TREE_TYPE (t), args,
5488 /*complain=*/1, in_decl);
ae58fa02
MM
5489 TREE_TYPE (r) = new_type;
5490 CLASSTYPE_TI_TEMPLATE (new_type) = r;
17aec3eb 5491 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
ae58fa02 5492 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
93cdc044
JM
5493 }
5494 else
5495 {
4393e105 5496 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
17aec3eb
RK
5497
5498 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
5499 DECL_TI_TEMPLATE (new_decl) = r;
5500 TREE_TYPE (r) = TREE_TYPE (new_decl);
5501 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
93cdc044
JM
5502 }
5503
ae58fa02
MM
5504 SET_DECL_IMPLICIT_INSTANTIATION (r);
5505 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5506 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
5507
5508 /* The template parameters for this new template are all the
5509 template parameters for the old template, except the
5510 outermost level of parameters. */
ae58fa02 5511 DECL_TEMPLATE_PARMS (r)
4393e105
MM
5512 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5513 /*complain=*/1);
98c1c668 5514
93cdc044 5515 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 5516 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 5517
8d019cef 5518 /* We don't partially instantiate partial specializations. */
93cdc044 5519 if (TREE_CODE (decl) == TYPE_DECL)
ae58fa02 5520 break;
93cdc044 5521
75650646
MM
5522 for (spec = DECL_TEMPLATE_SPECIALIZATIONS (t);
5523 spec != NULL_TREE;
5524 spec = TREE_CHAIN (spec))
5525 {
5526 /* It helps to consider example here. Consider:
5527
5528 template <class T>
5529 struct S {
5530 template <class U>
5531 void f(U u);
5532
5533 template <>
5534 void f(T* t) {}
5535 };
5536
5537 Now, for example, we are instantiating S<int>::f(U u).
5538 We want to make a template:
5539
5540 template <class U>
5541 void S<int>::f(U);
5542
5543 It will have a specialization, for the case U = int*, of
5544 the form:
5545
5546 template <>
5547 void S<int>::f<int*>(int*);
5548
5549 This specialization will be an instantiation of
5550 the specialization given in the declaration of S, with
5551 argument list int*. */
5552
5553 tree fn = TREE_VALUE (spec);
5554 tree spec_args;
5555 tree new_fn;
5556
5557 if (!DECL_TEMPLATE_SPECIALIZATION (fn))
5558 /* Instantiations are on the same list, but they're of
5559 no concern to us. */
5560 continue;
5561
36a117a5
MM
5562 if (TREE_CODE (fn) != TEMPLATE_DECL)
5563 /* A full specialization. There's no need to record
5564 that here. */
5565 continue;
5566
4393e105
MM
5567 spec_args = tsubst (DECL_TI_ARGS (fn), args,
5568 /*complain=*/1, in_decl);
17aec3eb
RK
5569 new_fn
5570 = tsubst (DECL_TEMPLATE_RESULT (most_general_template (fn)),
5571 spec_args, /*complain=*/1, in_decl);
36a117a5 5572 DECL_TI_TEMPLATE (new_fn) = fn;
ae58fa02 5573 register_specialization (new_fn, r,
f9a7ae04 5574 INNERMOST_TEMPLATE_ARGS (spec_args));
75650646
MM
5575 }
5576
5577 /* Record this partial instantiation. */
ae58fa02 5578 register_specialization (r, t,
17aec3eb 5579 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
75650646 5580
98c1c668 5581 }
ae58fa02 5582 break;
8d08fdba
MS
5583
5584 case FUNCTION_DECL:
5585 {
386b8a85 5586 tree ctx;
87603ed0 5587 tree argvec = NULL_TREE;
cf38f48a 5588 tree *friends;
36a117a5 5589 tree gen_tmpl;
5566b478 5590 int member;
d8c4447d
MM
5591 int args_depth;
5592 int parms_depth;
5566b478 5593
36a117a5
MM
5594 /* Nobody should be tsubst'ing into non-template functions. */
5595 my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5596
5597 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5598 {
5599 tree spec;
5600
5601 /* Calculate the most general template of which R is a
5602 specialization, and the complete set of arguments used to
5603 specialize R. */
5604 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7ddedda4
MM
5605 argvec
5606 = tsubst_template_arg_vector (DECL_TI_ARGS
5607 (DECL_TEMPLATE_RESULT (gen_tmpl)),
4393e105 5608 args, /*complain=*/1);
36a117a5
MM
5609
5610 /* Check to see if we already have this specialization. */
5611 spec = retrieve_specialization (gen_tmpl, argvec);
7ddedda4 5612
36a117a5 5613 if (spec)
ae58fa02
MM
5614 {
5615 r = spec;
5616 break;
5617 }
d8c4447d 5618
f9a7ae04
MM
5619 /* We can see more levels of arguments than parameters if
5620 there was a specialization of a member template, like
5621 this:
5622
5623 template <class T> struct S { template <class U> void f(); }
5624 template <> template <class U> void S<int>::f(U);
5625
5626 Here, we'll be subtituting into the specialization,
5627 because that's where we can find the code we actually
5628 want to generate, but we'll have enough arguments for
5629 the most general template.
5630
5631 We also deal with the peculiar case:
d8c4447d
MM
5632
5633 template <class T> struct S {
5634 template <class U> friend void f();
5635 };
74b846e0 5636 template <class U> void f() {}
d8c4447d
MM
5637 template S<int>;
5638 template void f<double>();
5639
5640 Here, the ARGS for the instantiation of will be {int,
5641 double}. But, we only need as many ARGS as there are
5642 levels of template parameters in CODE_PATTERN. We are
5643 careful not to get fooled into reducing the ARGS in
5644 situations like:
5645
5646 template <class T> struct S { template <class U> void f(U); }
5647 template <class T> template <> void S<T>::f(int) {}
5648
5649 which we can spot because the pattern will be a
5650 specialization in this case. */
5651 args_depth = TMPL_ARGS_DEPTH (args);
5652 parms_depth =
5653 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
5654 if (args_depth > parms_depth
5655 && !DECL_TEMPLATE_SPECIALIZATION (t))
f9a7ae04 5656 args = get_innermost_template_args (args, parms_depth);
36a117a5
MM
5657 }
5658 else
5659 {
5660 /* This special case arises when we have something like this:
5661
5662 template <class T> struct S {
5663 friend void f<int>(int, double);
5664 };
5665
5666 Here, the DECL_TI_TEMPLATE for the friend declaration
39c01e4c
MM
5667 will be a LOOKUP_EXPR or an IDENTIFIER_NODE. We are
5668 being called from tsubst_friend_function, and we want
5669 only to create a new decl (R) with appropriate types so
5670 that we can call determine_specialization. */
5671 my_friendly_assert ((TREE_CODE (DECL_TI_TEMPLATE (t))
5672 == LOOKUP_EXPR)
5673 || (TREE_CODE (DECL_TI_TEMPLATE (t))
5674 == IDENTIFIER_NODE), 0);
36a117a5
MM
5675 gen_tmpl = NULL_TREE;
5676 }
5677
6eb3bb27 5678 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 5679 {
5566b478
MS
5680 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5681 member = 2;
5682 else
5683 member = 1;
4f1c5b7d 5684 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
4393e105 5685 /*complain=*/1, t,
36a117a5 5686 /*entering_scope=*/1);
5566b478
MS
5687 }
5688 else
5689 {
5690 member = 0;
4f1c5b7d 5691 ctx = DECL_CONTEXT (t);
5566b478 5692 }
4393e105 5693 type = tsubst (type, args, /*complain=*/1, in_decl);
b3da7bb1
MM
5694 if (type == error_mark_node)
5695 return error_mark_node;
8d08fdba 5696
5566b478
MS
5697 /* We do NOT check for matching decls pushed separately at this
5698 point, as they may not represent instantiations of this
5699 template, and in any case are considered separate under the
312e7d50 5700 discrete model. Instead, see add_maybe_template. */
0acf7199 5701 r = copy_decl (t);
e1467ff2 5702 DECL_USE_TEMPLATE (r) = 0;
5566b478
MS
5703 TREE_TYPE (r) = type;
5704
4f1c5b7d
MM
5705 DECL_CONTEXT (r) = ctx;
5706 DECL_VIRTUAL_CONTEXT (r)
5707 = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args,
5708 /*complain=*/1, t,
4393e105 5709 /*entering_scope=*/1);
5566b478 5710
421844e7 5711 if (member && DECL_CONV_FN_P (r))
f181d4ae
MM
5712 /* Type-conversion operator. Reconstruct the name, in
5713 case it's the name of one of the template's parameters. */
5714 DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
5566b478 5715
4393e105
MM
5716 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
5717 /*complain=*/1, t);
17aec3eb 5718 DECL_TEMPLATE_RESULT (r) = NULL_TREE;
711734a9
JM
5719
5720 TREE_STATIC (r) = 0;
5721 TREE_PUBLIC (r) = TREE_PUBLIC (t);
5722 DECL_EXTERNAL (r) = 1;
5723 DECL_INTERFACE_KNOWN (r) = 0;
5724 DECL_DEFER_OUTPUT (r) = 0;
5725 TREE_CHAIN (r) = NULL_TREE;
5726 DECL_PENDING_INLINE_INFO (r) = 0;
59026e79 5727 DECL_PENDING_INLINE_P (r) = 0;
711734a9 5728 TREE_USED (r) = 0;
db9b2174
MM
5729 if (DECL_CLONED_FUNCTION (r))
5730 {
5731 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
5732 args, /*complain=*/1, t);
5733 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
5734 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
5735 }
711734a9 5736
36a117a5
MM
5737 /* Set up the DECL_TEMPLATE_INFO for R and compute its mangled
5738 name. There's no need to do this in the special friend
5739 case mentioned above where GEN_TMPL is NULL. */
5740 if (gen_tmpl)
386b8a85 5741 {
36a117a5 5742 DECL_TEMPLATE_INFO (r)
e1b3e07d 5743 = tree_cons (gen_tmpl, argvec, NULL_TREE);
36a117a5
MM
5744 SET_DECL_IMPLICIT_INSTANTIATION (r);
5745 register_specialization (r, gen_tmpl, argvec);
5746
5747 /* Set the mangled name for R. */
5748 if (DECL_DESTRUCTOR_P (t))
5749 DECL_ASSEMBLER_NAME (r) = build_destructor_name (ctx);
5750 else
386b8a85 5751 {
36a117a5
MM
5752 /* Instantiations of template functions must be mangled
5753 specially, in order to conform to 14.5.5.1
5754 [temp.over.link]. */
5755 tree tmpl = DECL_TI_TEMPLATE (t);
386b8a85 5756
36a117a5
MM
5757 /* TMPL will be NULL if this is a specialization of a
5758 member function of a template class. */
5759 if (name_mangling_version < 1
5760 || tmpl == NULL_TREE
5761 || (member && !is_member_template (tmpl)
5762 && !DECL_TEMPLATE_INFO (tmpl)))
5763 set_mangled_name_for_decl (r);
75650646 5764 else
36a117a5 5765 set_mangled_name_for_template_decl (r);
386b8a85 5766 }
36a117a5
MM
5767
5768 DECL_RTL (r) = 0;
5769 make_decl_rtl (r, NULL_PTR, 1);
5770
5771 /* Like grokfndecl. If we don't do this, pushdecl will
5772 mess up our TREE_CHAIN because it doesn't find a
5773 previous decl. Sigh. */
5774 if (member
c36ae80f 5775 && ! uses_template_parms (r)
36a117a5
MM
5776 && (IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r))
5777 == NULL_TREE))
5778 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r), r);
9188c363
MM
5779
5780 /* We're not supposed to instantiate default arguments
5781 until they are called, for a template. But, for a
5782 declaration like:
5783
5784 template <class T> void f ()
5785 { extern void g(int i = T()); }
5786
5787 we should do the substitution when the template is
5788 instantiated. We handle the member function case in
5789 instantiate_class_template since the default arguments
5790 might refer to other members of the class. */
5791 if (!member
5792 && !PRIMARY_TEMPLATE_P (gen_tmpl)
5793 && !uses_template_parms (argvec))
5794 tsubst_default_arguments (r);
386b8a85 5795 }
f181d4ae 5796
cf38f48a
MM
5797 /* Copy the list of befriending classes. */
5798 for (friends = &DECL_BEFRIENDING_CLASSES (r);
5799 *friends;
5800 friends = &TREE_CHAIN (*friends))
5801 {
5802 *friends = copy_node (*friends);
5803 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
5804 args, /*complain=*/1,
5805 in_decl);
5806 }
5807
212e7048 5808 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
f181d4ae
MM
5809 {
5810 maybe_retrofit_in_chrg (r);
212e7048
MM
5811 if (DECL_CONSTRUCTOR_P (r))
5812 grok_ctor_properties (ctx, r);
f181d4ae 5813 }
596ea4e5 5814 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
f181d4ae 5815 grok_op_properties (r, DECL_VIRTUAL_P (r), DECL_FRIEND_P (r));
8d08fdba 5816 }
ae58fa02 5817 break;
8d08fdba
MS
5818
5819 case PARM_DECL:
5820 {
ae58fa02 5821 r = copy_node (t);
5566b478 5822 TREE_TYPE (r) = type;
1b8899d1
MM
5823 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5824
db2767b6
MM
5825 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
5826 DECL_INITIAL (r) = TREE_TYPE (r);
5827 else
4393e105
MM
5828 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
5829 /*complain=*/1, in_decl);
db2767b6 5830
5566b478 5831 DECL_CONTEXT (r) = NULL_TREE;
fa56377d
JJ
5832 if (PROMOTE_PROTOTYPES
5833 && (TREE_CODE (type) == INTEGER_TYPE
5834 || TREE_CODE (type) == ENUMERAL_TYPE)
f83b0cb6
JM
5835 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5836 DECL_ARG_TYPE (r) = integer_type_node;
8d08fdba 5837 if (TREE_CHAIN (t))
4393e105
MM
5838 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
5839 /*complain=*/1, TREE_CHAIN (t));
8d08fdba 5840 }
ae58fa02 5841 break;
8d08fdba 5842
5566b478
MS
5843 case FIELD_DECL:
5844 {
0acf7199 5845 r = copy_decl (t);
1b8899d1
MM
5846 TREE_TYPE (r) = type;
5847 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5848
5849 /* We don't have to set DECL_CONTEXT here; it is set by
5850 finish_member_declaration. */
4393e105
MM
5851 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
5852 /*complain=*/1, in_decl);
5566b478 5853 TREE_CHAIN (r) = NULL_TREE;
4393e105 5854 if (TREE_CODE (type) == VOID_TYPE)
8251199e 5855 cp_error_at ("instantiation of `%D' as type void", r);
5566b478 5856 }
ae58fa02 5857 break;
5566b478
MS
5858
5859 case USING_DECL:
5860 {
ae58fa02 5861 r = copy_node (t);
5566b478 5862 DECL_INITIAL (r)
4393e105 5863 = tsubst_copy (DECL_INITIAL (t), args, /*complain=*/1, in_decl);
5566b478 5864 TREE_CHAIN (r) = NULL_TREE;
5566b478 5865 }
ae58fa02 5866 break;
5566b478 5867
9188c363
MM
5868 case TYPE_DECL:
5869 if (DECL_IMPLICIT_TYPEDEF_P (t))
5870 {
5871 /* For an implicit typedef, we just want the implicit
5872 typedef for the tsubst'd type. We've already got the
5873 tsubst'd type, as TYPE, so we just need it's associated
5874 declaration. */
5875 r = TYPE_NAME (type);
5876 break;
5877 }
6dfbb909
MM
5878 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
5879 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
9188c363
MM
5880 {
5881 /* For a template type parameter, we don't have to do
5882 anything special. */
b9f39201 5883 r = TYPE_NAME (type);
9188c363
MM
5884 break;
5885 }
5886
5887 /* Fall through. */
5888
5566b478
MS
5889 case VAR_DECL:
5890 {
1cea0434
KG
5891 tree argvec = NULL_TREE;
5892 tree gen_tmpl = NULL_TREE;
36a117a5 5893 tree spec;
1cea0434 5894 tree tmpl = NULL_TREE;
9188c363 5895 tree ctx;
6dfbb909 5896 int local_p;
9188c363 5897
6dfbb909
MM
5898 /* Assume this is a non-local variable. */
5899 local_p = 0;
5566b478 5900
de96bf57 5901 if (TYPE_P (CP_DECL_CONTEXT (t)))
9188c363
MM
5902 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
5903 /*complain=*/1,
5904 in_decl, /*entering_scope=*/1);
5905 else
6dfbb909
MM
5906 {
5907 /* Subsequent calls to pushdecl will fill this in. */
5908 ctx = NULL_TREE;
5909 if (!DECL_NAMESPACE_SCOPE_P (t))
5910 local_p = 1;
5911 }
9188c363 5912
36a117a5 5913 /* Check to see if we already have this specialization. */
6dfbb909
MM
5914 if (!local_p)
5915 {
5916 tmpl = DECL_TI_TEMPLATE (t);
5917 gen_tmpl = most_general_template (tmpl);
5918 argvec = tsubst (DECL_TI_ARGS (t), args, /*complain=*/1, in_decl);
5919 spec = retrieve_specialization (gen_tmpl, argvec);
5920 }
9188c363 5921 else
6dfbb909 5922 spec = retrieve_local_specialization (t);
9188c363 5923
36a117a5 5924 if (spec)
ae58fa02
MM
5925 {
5926 r = spec;
5927 break;
5928 }
5566b478 5929
0acf7199 5930 r = copy_decl (t);
5566b478 5931 TREE_TYPE (r) = type;
1b8899d1 5932 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5566b478 5933 DECL_CONTEXT (r) = ctx;
d11ad92e
MS
5934
5935 /* Don't try to expand the initializer until someone tries to use
5936 this variable; otherwise we run into circular dependencies. */
5937 DECL_INITIAL (r) = NULL_TREE;
5566b478 5938 DECL_RTL (r) = 0;
06ceef4e 5939 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
5566b478 5940
f9817201
MM
5941 /* For __PRETTY_FUNCTION__ we have to adjust the initializer. */
5942 if (DECL_PRETTY_FUNCTION_P (r))
5943 {
5944 DECL_INITIAL (r) = tsubst (DECL_INITIAL (t),
5945 args,
5946 /*complain=*/1,
5947 NULL_TREE);
5948 TREE_TYPE (r) = TREE_TYPE (DECL_INITIAL (r));
5949 }
5950
e0942dcd
MM
5951 /* Even if the original location is out of scope, the newly
5952 substituted one is not. */
5953 if (TREE_CODE (r) == VAR_DECL)
5954 DECL_DEAD_FOR_LOCAL (r) = 0;
5955
6dfbb909
MM
5956 if (!local_p)
5957 {
5958 /* A static data member declaration is always marked
5959 external when it is declared in-class, even if an
5960 initializer is present. We mimic the non-template
5961 processing here. */
5962 DECL_EXTERNAL (r) = 1;
fa8d6e85 5963
6dfbb909
MM
5964 register_specialization (r, gen_tmpl, argvec);
5965 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
5966 SET_DECL_IMPLICIT_INSTANTIATION (r);
5967 }
9188c363 5968 else
6dfbb909 5969 register_local_specialization (r, t);
5566b478 5970
5566b478 5971 TREE_CHAIN (r) = NULL_TREE;
9188c363 5972 if (TREE_CODE (r) == VAR_DECL && TREE_CODE (type) == VOID_TYPE)
8251199e 5973 cp_error_at ("instantiation of `%D' as type void", r);
5566b478 5974 }
ae58fa02 5975 break;
5566b478 5976
ae58fa02
MM
5977 default:
5978 my_friendly_abort (0);
5979 }
5980
5981 /* Restore the file and line information. */
5982 lineno = saved_lineno;
5983 input_filename = saved_filename;
5984
5985 return r;
5986}
5987
cabc336a
MM
5988/* Substitue into the ARG_TYPES of a function type. */
5989
e9659ab0 5990static tree
4393e105 5991tsubst_arg_types (arg_types, args, complain, in_decl)
cabc336a
MM
5992 tree arg_types;
5993 tree args;
4393e105 5994 int complain;
cabc336a
MM
5995 tree in_decl;
5996{
5997 tree remaining_arg_types;
cabc336a
MM
5998 tree type;
5999
6000 if (!arg_types || arg_types == void_list_node)
6001 return arg_types;
6002
6003 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
6004 args, complain, in_decl);
6005 if (remaining_arg_types == error_mark_node)
6006 return error_mark_node;
6007
6008 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6009 if (type == error_mark_node)
6010 return error_mark_node;
cabc336a 6011
4393e105
MM
6012 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6013 top-level qualifiers as required. */
6014 type = TYPE_MAIN_VARIANT (type_decays_to (type));
cabc336a
MM
6015
6016 /* Note that we do not substitute into default arguments here. The
6017 standard mandates that they be instantiated only when needed,
6018 which is done in build_over_call. */
51632249
JM
6019 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6020 remaining_arg_types);
cabc336a
MM
6021
6022}
6023
4393e105
MM
6024/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6025 *not* handle the exception-specification for FNTYPE, because the
6026 initial substitution of explicitly provided template parameters
6027 during argument deduction forbids substitution into the
6028 exception-specification:
6029
6030 [temp.deduct]
6031
6032 All references in the function type of the function template to the
6033 corresponding template parameters are replaced by the specified tem-
6034 plate argument values. If a substitution in a template parameter or
6035 in the function type of the function template results in an invalid
6036 type, type deduction fails. [Note: The equivalent substitution in
6037 exception specifications is done only when the function is instanti-
6038 ated, at which point a program is ill-formed if the substitution
6039 results in an invalid type.] */
6040
6041static tree
6042tsubst_function_type (t, args, complain, in_decl)
6043 tree t;
6044 tree args;
6045 int complain;
6046 tree in_decl;
6047{
6048 tree return_type;
6049 tree arg_types;
6050 tree fntype;
6051
8dd3f57a 6052 /* The TYPE_CONTEXT is not used for function/method types. */
4393e105
MM
6053 my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6054
6055 /* Substitue the return type. */
6056 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6057 if (return_type == error_mark_node)
6058 return error_mark_node;
6059
6060 /* Substitue the argument types. */
6061 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6062 complain, in_decl);
6063 if (arg_types == error_mark_node)
6064 return error_mark_node;
6065
6066 /* Construct a new type node and return it. */
6067 if (TREE_CODE (t) == FUNCTION_TYPE)
6068 fntype = build_function_type (return_type, arg_types);
6069 else
6070 {
6071 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6072 if (! IS_AGGR_TYPE (r))
6073 {
6074 /* [temp.deduct]
6075
6076 Type deduction may fail for any of the following
6077 reasons:
6078
6079 -- Attempting to create "pointer to member of T" when T
6080 is not a class type. */
6081 if (complain)
6082 cp_error ("creating pointer to member function of non-class type `%T'",
6083 r);
6084 return error_mark_node;
6085 }
6086
6087 fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6088 (arg_types));
6089 }
6090 fntype = build_qualified_type (fntype, TYPE_QUALS (t));
ada846eb 6091 fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
4393e105
MM
6092
6093 return fntype;
6094}
6095
297e73d8
MM
6096/* Substitute into the PARMS of a call-declarator. */
6097
e9659ab0 6098static tree
4393e105 6099tsubst_call_declarator_parms (parms, args, complain, in_decl)
297e73d8
MM
6100 tree parms;
6101 tree args;
4393e105 6102 int complain;
297e73d8
MM
6103 tree in_decl;
6104{
6105 tree new_parms;
6106 tree type;
6107 tree defarg;
6108
6109 if (!parms || parms == void_list_node)
6110 return parms;
6111
6112 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
4393e105 6113 args, complain, in_decl);
297e73d8
MM
6114
6115 /* Figure out the type of this parameter. */
4393e105 6116 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
297e73d8
MM
6117
6118 /* Figure out the default argument as well. Note that we use
4393e105
MM
6119 tsubst_expr since the default argument is really an expression. */
6120 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
297e73d8
MM
6121
6122 /* Chain this parameter on to the front of those we have already
6123 processed. We don't use hash_tree_cons because that function
6124 doesn't check TREE_PARMLIST. */
6125 new_parms = tree_cons (defarg, type, new_parms);
6126
6127 /* And note that these are parameters. */
6128 TREE_PARMLIST (new_parms) = 1;
6129
6130 return new_parms;
6131}
6132
4393e105
MM
6133/* Take the tree structure T and replace template parameters used
6134 therein with the argument vector ARGS. IN_DECL is an associated
6135 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6136 An appropriate error message is issued only if COMPLAIN is
6137 non-zero. Note that we must be relatively non-tolerant of
6138 extensions here, in order to preserve conformance; if we allow
6139 substitutions that should not be allowed, we may allow argument
6140 deductions that should not succeed, and therefore report ambiguous
6141 overload situations where there are none. In theory, we could
6142 allow the substitution, but indicate that it should have failed,
6143 and allow our caller to make sure that the right thing happens, but
6144 we don't try to do this yet.
6145
6146 This function is used for dealing with types, decls and the like;
6147 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02
MM
6148
6149tree
4393e105 6150tsubst (t, args, complain, in_decl)
ae58fa02 6151 tree t, args;
4393e105 6152 int complain;
ae58fa02
MM
6153 tree in_decl;
6154{
0ecfe0b4 6155 tree type, r;
ae58fa02
MM
6156
6157 if (t == NULL_TREE || t == error_mark_node
6158 || t == integer_type_node
6159 || t == void_type_node
6160 || t == char_type_node
6161 || TREE_CODE (t) == NAMESPACE_DECL)
6162 return t;
6163
6164 if (TREE_CODE (t) == IDENTIFIER_NODE)
6165 type = IDENTIFIER_TYPE_VALUE (t);
6166 else
6167 type = TREE_TYPE (t);
6168 if (type == unknown_type_node)
6169 my_friendly_abort (42);
6170
6171 if (type && TREE_CODE (t) != FUNCTION_DECL
6172 && TREE_CODE (t) != TYPENAME_TYPE
6173 && TREE_CODE (t) != TEMPLATE_DECL
4393e105
MM
6174 && TREE_CODE (t) != IDENTIFIER_NODE
6175 && TREE_CODE (t) != FUNCTION_TYPE
6176 && TREE_CODE (t) != METHOD_TYPE)
6177 type = tsubst (type, args, complain, in_decl);
6178 if (type == error_mark_node)
6179 return error_mark_node;
ae58fa02 6180
2f939d94 6181 if (DECL_P (t))
ae58fa02
MM
6182 return tsubst_decl (t, args, type, in_decl);
6183
6184 switch (TREE_CODE (t))
6185 {
6186 case RECORD_TYPE:
6187 case UNION_TYPE:
6188 case ENUMERAL_TYPE:
4393e105
MM
6189 return tsubst_aggr_type (t, args, complain, in_decl,
6190 /*entering_scope=*/0);
ae58fa02
MM
6191
6192 case ERROR_MARK:
6193 case IDENTIFIER_NODE:
6194 case OP_IDENTIFIER:
6195 case VOID_TYPE:
6196 case REAL_TYPE:
6197 case COMPLEX_TYPE:
6198 case BOOLEAN_TYPE:
6199 case INTEGER_CST:
6200 case REAL_CST:
6201 case STRING_CST:
6202 return t;
6203
6204 case INTEGER_TYPE:
6205 if (t == integer_type_node)
6206 return t;
6207
6208 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6209 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6210 return t;
d2e5ee5c 6211
5566b478 6212 {
ddce3528 6213 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 6214
ddce3528 6215 max = tsubst_expr (omax, args, complain, in_decl);
4393e105
MM
6216 if (max == error_mark_node)
6217 return error_mark_node;
6218
8dd3f57a
MM
6219 /* See if we can reduce this expression to something simpler. */
6220 max = maybe_fold_nontype_arg (max);
fc611ce0 6221 if (!processing_template_decl)
8dd3f57a
MM
6222 max = decl_constant_value (max);
6223
856216bb
MM
6224 if (processing_template_decl
6225 /* When providing explicit arguments to a template
6226 function, but leaving some arguments for subsequent
6227 deduction, MAX may be template-dependent even if we're
c95cd22e
JM
6228 not PROCESSING_TEMPLATE_DECL. We still need to check for
6229 template parms, though; MAX won't be an INTEGER_CST for
6230 dynamic arrays, either. */
6231 || (TREE_CODE (max) != INTEGER_CST
6232 && uses_template_parms (max)))
ae58fa02 6233 {
8dd3f57a
MM
6234 tree itype = make_node (INTEGER_TYPE);
6235 TYPE_MIN_VALUE (itype) = size_zero_node;
6236 TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6237 integer_one_node);
6238 return itype;
ae58fa02
MM
6239 }
6240
ddce3528
JM
6241 if (integer_zerop (omax))
6242 {
6243 /* Still allow an explicit array of size zero. */
6244 if (pedantic)
6245 pedwarn ("creating array with size zero");
6246 }
07c88314
MM
6247 else if (integer_zerop (max)
6248 || (TREE_CODE (max) == INTEGER_CST
6249 && INT_CST_LT (max, integer_zero_node)))
0ecfe0b4 6250 {
4393e105
MM
6251 /* [temp.deduct]
6252
6253 Type deduction may fail for any of the following
6254 reasons:
6255
bf8f3f93
MM
6256 Attempting to create an array with a size that is
6257 zero or negative. */
4393e105 6258 if (complain)
16bb3387 6259 cp_error ("creating array with size zero (`%E')", max);
4393e105
MM
6260
6261 return error_mark_node;
0ecfe0b4
JM
6262 }
6263
c95cd22e 6264 return compute_array_index_type (NULL_TREE, max);
ae58fa02
MM
6265 }
6266
6267 case TEMPLATE_TYPE_PARM:
6268 case TEMPLATE_TEMPLATE_PARM:
6269 case TEMPLATE_PARM_INDEX:
6270 {
6271 int idx;
6272 int level;
6273 int levels;
0ecfe0b4
JM
6274
6275 r = NULL_TREE;
ae58fa02
MM
6276
6277 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6278 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6279 {
6280 idx = TEMPLATE_TYPE_IDX (t);
6281 level = TEMPLATE_TYPE_LEVEL (t);
6282 }
6283 else
6284 {
6285 idx = TEMPLATE_PARM_IDX (t);
6286 level = TEMPLATE_PARM_LEVEL (t);
6287 }
6288
6289 if (TREE_VEC_LENGTH (args) > 0)
6290 {
6291 tree arg = NULL_TREE;
6292
6293 levels = TMPL_ARGS_DEPTH (args);
6294 if (level <= levels)
6295 arg = TMPL_ARG (args, level, idx);
6296
8b5b8b7c
MM
6297 if (arg == error_mark_node)
6298 return error_mark_node;
6299 else if (arg != NULL_TREE)
ae58fa02
MM
6300 {
6301 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6302 {
2f939d94 6303 my_friendly_assert (TYPE_P (arg), 0);
adecb3f4
MM
6304 return cp_build_qualified_type_real
6305 (arg, CP_TYPE_QUALS (arg) | CP_TYPE_QUALS (t),
6306 complain);
ae58fa02
MM
6307 }
6308 else if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6309 {
7ddedda4 6310 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
ae58fa02
MM
6311 {
6312 /* We are processing a type constructed from
6313 a template template parameter */
7ddedda4 6314 tree argvec = tsubst (TYPE_TI_ARGS (t),
4393e105
MM
6315 args, complain, in_decl);
6316 if (argvec == error_mark_node)
6317 return error_mark_node;
6318
ae58fa02
MM
6319 /* We can get a TEMPLATE_TEMPLATE_PARM here when
6320 we are resolving nested-types in the signature of
6321 a member function templates.
6322 Otherwise ARG is a TEMPLATE_DECL and is the real
6323 template to be instantiated. */
6324 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6325 arg = TYPE_NAME (arg);
6326
6327 r = lookup_template_class (DECL_NAME (arg),
6328 argvec, in_decl,
6329 DECL_CONTEXT (arg),
6330 /*entering_scope=*/0);
adecb3f4
MM
6331 return cp_build_qualified_type_real (r,
6332 TYPE_QUALS (t),
6333 complain);
ae58fa02
MM
6334 }
6335 else
6336 /* We are processing a template argument list. */
6337 return arg;
6338 }
6339 else
6340 return arg;
6341 }
6342 }
51924768
JM
6343 else
6344 my_friendly_abort (981018);
ae58fa02
MM
6345
6346 if (level == 1)
6347 /* This can happen during the attempted tsubst'ing in
6348 unify. This means that we don't yet have any information
6349 about the template parameter in question. */
6350 return t;
6351
6352 /* If we get here, we must have been looking at a parm for a
6353 more deeply nested template. Make a new version of this
6354 template parameter, but with a lower level. */
6355 switch (TREE_CODE (t))
6356 {
6357 case TEMPLATE_TYPE_PARM:
6358 case TEMPLATE_TEMPLATE_PARM:
6359 r = copy_node (t);
6360 TEMPLATE_TYPE_PARM_INDEX (r)
6361 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6362 r, levels);
6363 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6364 TYPE_MAIN_VARIANT (r) = r;
6365 TYPE_POINTER_TO (r) = NULL_TREE;
6366 TYPE_REFERENCE_TO (r) = NULL_TREE;
6367
6368 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7ddedda4 6369 && TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
ae58fa02 6370 {
4393e105
MM
6371 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6372 complain, in_decl);
6373 if (argvec == error_mark_node)
6374 return error_mark_node;
6375
7ddedda4 6376 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
e1b3e07d 6377 = tree_cons (TYPE_NAME (t), argvec, NULL_TREE);
ae58fa02
MM
6378 }
6379 break;
6380
6381 case TEMPLATE_PARM_INDEX:
6382 r = reduce_template_parm_level (t, type, levels);
6383 break;
6384
6385 default:
6386 my_friendly_abort (0);
6387 }
6388
5566b478 6389 return r;
ae58fa02 6390 }
5566b478 6391
8d08fdba
MS
6392 case TREE_LIST:
6393 {
6394 tree purpose, value, chain, result;
8d08fdba
MS
6395
6396 if (t == void_list_node)
6397 return t;
6398
8d08fdba
MS
6399 purpose = TREE_PURPOSE (t);
6400 if (purpose)
4393e105
MM
6401 {
6402 purpose = tsubst (purpose, args, complain, in_decl);
6403 if (purpose == error_mark_node)
6404 return error_mark_node;
6405 }
8d08fdba
MS
6406 value = TREE_VALUE (t);
6407 if (value)
4393e105
MM
6408 {
6409 value = tsubst (value, args, complain, in_decl);
6410 if (value == error_mark_node)
6411 return error_mark_node;
6412 }
8d08fdba
MS
6413 chain = TREE_CHAIN (t);
6414 if (chain && chain != void_type_node)
4393e105
MM
6415 {
6416 chain = tsubst (chain, args, complain, in_decl);
6417 if (chain == error_mark_node)
6418 return error_mark_node;
6419 }
8d08fdba
MS
6420 if (purpose == TREE_PURPOSE (t)
6421 && value == TREE_VALUE (t)
6422 && chain == TREE_CHAIN (t))
6423 return t;
51632249 6424 result = hash_tree_cons (purpose, value, chain);
8d08fdba
MS
6425 TREE_PARMLIST (result) = TREE_PARMLIST (t);
6426 return result;
6427 }
6428 case TREE_VEC:
5566b478
MS
6429 if (type != NULL_TREE)
6430 {
1ceaad38
JM
6431 /* A binfo node. We always need to make a copy, of the node
6432 itself and of its BINFO_BASETYPES. */
85b71cf2 6433
5566b478
MS
6434 t = copy_node (t);
6435
c7449f2b
JM
6436 /* Make sure type isn't a typedef copy. */
6437 type = BINFO_TYPE (TYPE_BINFO (type));
6438
5566b478 6439 TREE_TYPE (t) = complete_type (type);
6633d636
MS
6440 if (IS_AGGR_TYPE (type))
6441 {
6442 BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6443 BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6444 if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6445 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6446 }
5566b478
MS
6447 return t;
6448 }
85b71cf2
JM
6449
6450 /* Otherwise, a vector of template arguments. */
4393e105 6451 return tsubst_template_arg_vector (t, args, complain);
8d08fdba 6452
8d08fdba
MS
6453 case POINTER_TYPE:
6454 case REFERENCE_TYPE:
6455 {
8d08fdba 6456 enum tree_code code;
79a7c7fa 6457
8d08fdba
MS
6458 if (type == TREE_TYPE (t))
6459 return t;
6460
6461 code = TREE_CODE (t);
4393e105
MM
6462
6463
6464 /* [temp.deduct]
6465
6466 Type deduction may fail for any of the following
6467 reasons:
6468
6469 -- Attempting to create a pointer to reference type.
6470 -- Attempting to create a reference to a reference type or
6471 a reference to void. */
0ecfe0b4
JM
6472 if (TREE_CODE (type) == REFERENCE_TYPE
6473 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa
JM
6474 {
6475 static int last_line = 0;
3b304f5b 6476 static const char* last_file = 0;
79a7c7fa
JM
6477
6478 /* We keep track of the last time we issued this error
6479 message to avoid spewing a ton of messages during a
6480 single bad template instantiation. */
4393e105
MM
6481 if (complain && (last_line != lineno ||
6482 last_file != input_filename))
79a7c7fa 6483 {
0ecfe0b4
JM
6484 if (TREE_CODE (type) == VOID_TYPE)
6485 cp_error ("forming reference to void");
6486 else
6487 cp_error ("forming %s to reference type `%T'",
6488 (code == POINTER_TYPE) ? "pointer" : "reference",
6489 type);
79a7c7fa
JM
6490 last_line = lineno;
6491 last_file = input_filename;
6492 }
6493
4393e105 6494 return error_mark_node;
79a7c7fa
JM
6495 }
6496 else if (code == POINTER_TYPE)
8d08fdba
MS
6497 r = build_pointer_type (type);
6498 else
6499 r = build_reference_type (type);
adecb3f4 6500 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
79a7c7fa 6501
8d08fdba
MS
6502 /* Will this ever be needed for TYPE_..._TO values? */
6503 layout_type (r);
6504 return r;
6505 }
a4443a08 6506 case OFFSET_TYPE:
0ecfe0b4 6507 {
4393e105
MM
6508 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6509 if (r == error_mark_node || !IS_AGGR_TYPE (r))
6510 {
6511 /* [temp.deduct]
6512
6513 Type deduction may fail for any of the following
6514 reasons:
6515
6516 -- Attempting to create "pointer to member of T" when T
6517 is not a class type. */
6518 if (complain)
6519 cp_error ("creating pointer to member of non-class type `%T'",
6520 r);
6521 return error_mark_node;
6522 }
0ecfe0b4
JM
6523 return build_offset_type (r, type);
6524 }
8d08fdba
MS
6525 case FUNCTION_TYPE:
6526 case METHOD_TYPE:
6527 {
c11b6f21 6528 tree fntype;
4393e105 6529 tree raises;
8d08fdba 6530
4393e105
MM
6531 fntype = tsubst_function_type (t, args, complain, in_decl);
6532 if (fntype == error_mark_node)
6533 return error_mark_node;
cabc336a
MM
6534
6535 /* Substitue the exception specification. */
6536 raises = TYPE_RAISES_EXCEPTIONS (t);
c11b6f21
MS
6537 if (raises)
6538 {
4cc1d462
NS
6539 tree list = NULL_TREE;
6540
6541 if (! TREE_VALUE (raises))
6542 list = raises;
6543 else
6544 for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6545 {
6546 tree spec = TREE_VALUE (raises);
6547
6548 spec = tsubst (spec, args, complain, in_decl);
6549 if (spec == error_mark_node)
6550 return spec;
6551 list = add_exception_specifier (list, spec, complain);
6552 }
6553 fntype = build_exception_variant (fntype, list);
c11b6f21
MS
6554 }
6555 return fntype;
8d08fdba
MS
6556 }
6557 case ARRAY_TYPE:
6558 {
4393e105
MM
6559 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6560 if (domain == error_mark_node)
6561 return error_mark_node;
6562
6563 /* As an optimization, we avoid regenerating the array type if
6564 it will obviously be the same as T. */
8d08fdba
MS
6565 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6566 return t;
0ecfe0b4 6567
4393e105
MM
6568 /* These checks should match the ones in grokdeclarator.
6569
6570 [temp.deduct]
6571
6572 The deduction may fail for any of the following reasons:
6573
6574 -- Attempting to create an array with an element type that
6575 is void, a function type, or a reference type. */
6576 if (TREE_CODE (type) == VOID_TYPE
6577 || TREE_CODE (type) == FUNCTION_TYPE
6578 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 6579 {
4393e105
MM
6580 if (complain)
6581 cp_error ("creating array of `%T'", type);
6582 return error_mark_node;
0ecfe0b4
JM
6583 }
6584
8d08fdba
MS
6585 r = build_cplus_array_type (type, domain);
6586 return r;
6587 }
6588
8d08fdba 6589 case PLUS_EXPR:
5566b478 6590 case MINUS_EXPR:
4393e105
MM
6591 {
6592 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6593 in_decl);
6594 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain,
6595 in_decl);
6596
6597 if (e1 == error_mark_node || e2 == error_mark_node)
6598 return error_mark_node;
6599
6600 return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6601 }
8d08fdba
MS
6602
6603 case NEGATE_EXPR:
6604 case NOP_EXPR:
4393e105
MM
6605 {
6606 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6607 in_decl);
6608 if (e == error_mark_node)
6609 return error_mark_node;
6610
6611 return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6612 }
8d08fdba 6613
5566b478
MS
6614 case TYPENAME_TYPE:
6615 {
4393e105
MM
6616 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6617 in_decl, /*entering_scope=*/1);
6618 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6619 complain, in_decl);
6620
6621 if (ctx == error_mark_node || f == error_mark_node)
6622 return error_mark_node;
ae58fa02 6623
bf8f3f93
MM
6624 if (!IS_AGGR_TYPE (ctx))
6625 {
6626 if (complain)
6627 cp_error ("`%T' is not a class, struct, or union type",
6628 ctx);
6629 return error_mark_node;
6630 }
6631 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6632 {
6633 /* Normally, make_typename_type does not require that the CTX
6634 have complete type in order to allow things like:
ae58fa02 6635
bf8f3f93 6636 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 6637
bf8f3f93
MM
6638 But, such constructs have already been resolved by this
6639 point, so here CTX really should have complete type, unless
6640 it's a partial instantiation. */
4393e105 6641 ctx = complete_type (ctx);
d0f062fb 6642 if (!COMPLETE_TYPE_P (ctx))
4393e105
MM
6643 {
6644 if (complain)
6645 incomplete_type_error (NULL_TREE, ctx);
6646 return error_mark_node;
6647 }
6648 }
ae58fa02 6649
3baa501d 6650 f = make_typename_type (ctx, f, complain);
f0bcd168
MM
6651 if (f == error_mark_node)
6652 return f;
adecb3f4
MM
6653 return cp_build_qualified_type_real (f,
6654 CP_TYPE_QUALS (f)
6655 | CP_TYPE_QUALS (t),
6656 complain);
5566b478
MS
6657 }
6658
6659 case INDIRECT_REF:
4393e105
MM
6660 {
6661 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6662 in_decl);
6663 if (e == error_mark_node)
6664 return error_mark_node;
6665 return make_pointer_declarator (type, e);
6666 }
6667
5566b478 6668 case ADDR_EXPR:
4393e105
MM
6669 {
6670 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6671 in_decl);
6672 if (e == error_mark_node)
6673 return error_mark_node;
6674 return make_reference_declarator (type, e);
6675 }
5566b478
MS
6676
6677 case ARRAY_REF:
4393e105
MM
6678 {
6679 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6680 in_decl);
6fb2c05a
JM
6681 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain,
6682 in_decl);
4393e105
MM
6683 if (e1 == error_mark_node || e2 == error_mark_node)
6684 return error_mark_node;
6685
6686 return build_parse_node (ARRAY_REF, e1, e2, tsubst_expr);
6687 }
5566b478
MS
6688
6689 case CALL_EXPR:
4393e105
MM
6690 {
6691 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6692 in_decl);
43f887f9
MM
6693 tree e2 = (tsubst_call_declarator_parms
6694 (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
6695 tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
6696 complain, in_decl);
4393e105
MM
6697
6698 if (e1 == error_mark_node || e2 == error_mark_node
6699 || e3 == error_mark_node)
6700 return error_mark_node;
6701
43f887f9 6702 return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
4393e105 6703 }
5566b478 6704
fc378698 6705 case SCOPE_REF:
4393e105
MM
6706 {
6707 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6708 in_decl);
6709 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6710 if (e1 == error_mark_node || e2 == error_mark_node)
6711 return error_mark_node;
6712
6713 return build_parse_node (TREE_CODE (t), e1, e2);
6714 }
fc378698 6715
b894fc05 6716 case TYPEOF_TYPE:
4393e105
MM
6717 {
6718 tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain,
6719 in_decl);
6720 if (e1 == error_mark_node)
6721 return error_mark_node;
6722
6723 return TREE_TYPE (e1);
6724 }
b894fc05 6725
f9817201
MM
6726 case FUNCTION_NAME:
6727 {
6728 const char *name;
6729 int len;
6730 tree type;
6731 tree str;
6732
6733 /* This code should match declare_hidden_char_array in
6734 c-common.c. */
6735 name = (*decl_printable_name) (current_function_decl, 2);
6736 len = strlen (name) + 1;
6737 type = build_array_type (char_type_node,
6738 build_index_type (build_int_2 (len, 0)));
6739 str = build_string (len, name);
6740 TREE_TYPE (str) = type;
6741 return str;
6742 }
6743
8d08fdba 6744 default:
5566b478 6745 sorry ("use of `%s' in template",
8d08fdba
MS
6746 tree_code_name [(int) TREE_CODE (t)]);
6747 return error_mark_node;
6748 }
6749}
6750
00d3396f
JM
6751/* Like tsubst, but deals with expressions. This function just replaces
6752 template parms; to finish processing the resultant expression, use
6753 tsubst_expr. */
6754
5566b478 6755tree
4393e105 6756tsubst_copy (t, args, complain, in_decl)
98c1c668 6757 tree t, args;
4393e105 6758 int complain;
5566b478
MS
6759 tree in_decl;
6760{
6761 enum tree_code code;
8452b1d3 6762 tree r;
8d08fdba 6763
5566b478
MS
6764 if (t == NULL_TREE || t == error_mark_node)
6765 return t;
6766
6767 code = TREE_CODE (t);
b7484fbe 6768
5566b478
MS
6769 switch (code)
6770 {
6771 case PARM_DECL:
a759e627 6772 return do_identifier (DECL_NAME (t), 0, NULL_TREE);
5566b478
MS
6773
6774 case CONST_DECL:
ed44da02
MM
6775 {
6776 tree enum_type;
6777 tree v;
6778
6779 if (!DECL_CONTEXT (t))
6780 /* This is a global enumeration constant. */
6781 return t;
6782
6783 /* Unfortunately, we cannot just call lookup_name here.
9188c363
MM
6784 Consider:
6785
6786 template <int I> int f() {
6787 enum E { a = I };
6788 struct S { void g() { E e = a; } };
6789 };
6790
6791 When we instantiate f<7>::S::g(), say, lookup_name is not
6792 clever enough to find f<7>::a. */
ed44da02 6793 enum_type
4393e105 6794 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
6795 /*entering_scope=*/0);
6796
6797 for (v = TYPE_VALUES (enum_type);
6798 v != NULL_TREE;
6799 v = TREE_CHAIN (v))
6800 if (TREE_PURPOSE (v) == DECL_NAME (t))
6801 return TREE_VALUE (v);
6802
6803 /* We didn't find the name. That should never happen; if
6804 name-lookup found it during preliminary parsing, we
6805 should find it again here during instantiation. */
6806 my_friendly_abort (0);
6807 }
db04386f 6808 return t;
ed44da02 6809
5566b478
MS
6810 case FIELD_DECL:
6811 if (DECL_CONTEXT (t))
6812 {
0978790f 6813 tree ctx;
0978790f 6814
4393e105 6815 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 6816 /*entering_scope=*/1);
0978790f 6817 if (ctx != DECL_CONTEXT (t))
5566b478
MS
6818 return lookup_field (ctx, DECL_NAME (t), 0, 0);
6819 }
6820 return t;
6821
6822 case VAR_DECL:
6823 case FUNCTION_DECL:
6824 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
4393e105 6825 t = tsubst (t, args, complain, in_decl);
5566b478
MS
6826 mark_used (t);
6827 return t;
6828
98c1c668
JM
6829 case TEMPLATE_DECL:
6830 if (is_member_template (t))
4393e105 6831 return tsubst (t, args, complain, in_decl);
98c1c668
JM
6832 else
6833 return t;
6834
672476cb
MM
6835 case LOOKUP_EXPR:
6836 {
6837 /* We must tsbust into a LOOKUP_EXPR in case the names to
6838 which it refers is a conversion operator; in that case the
6839 name will change. We avoid making unnecessary copies,
6840 however. */
6841
4393e105 6842 tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
672476cb
MM
6843
6844 if (id != TREE_OPERAND (t, 0))
6845 {
8452b1d3 6846 r = build_nt (LOOKUP_EXPR, id);
672476cb
MM
6847 LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
6848 t = r;
6849 }
6850
6851 return t;
6852 }
6853
5566b478
MS
6854 case CAST_EXPR:
6855 case REINTERPRET_CAST_EXPR:
e92cc029
MS
6856 case CONST_CAST_EXPR:
6857 case STATIC_CAST_EXPR:
6858 case DYNAMIC_CAST_EXPR:
51924768 6859 case NOP_EXPR:
5566b478 6860 return build1
4393e105
MM
6861 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
6862 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
6863
6864 case INDIRECT_REF:
6865 case PREDECREMENT_EXPR:
6866 case PREINCREMENT_EXPR:
6867 case POSTDECREMENT_EXPR:
6868 case POSTINCREMENT_EXPR:
6869 case NEGATE_EXPR:
6870 case TRUTH_NOT_EXPR:
b87692e5 6871 case BIT_NOT_EXPR:
5566b478
MS
6872 case ADDR_EXPR:
6873 case CONVERT_EXPR: /* Unary + */
6874 case SIZEOF_EXPR:
abff8e06 6875 case ALIGNOF_EXPR:
5566b478 6876 case ARROW_EXPR:
fc378698 6877 case THROW_EXPR:
5156628f 6878 case TYPEID_EXPR:
f5733617
SS
6879 case REALPART_EXPR:
6880 case IMAGPART_EXPR:
5566b478 6881 return build1
6a629cac 6882 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 6883 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
6884
6885 case PLUS_EXPR:
6886 case MINUS_EXPR:
6887 case MULT_EXPR:
6888 case TRUNC_DIV_EXPR:
6889 case CEIL_DIV_EXPR:
6890 case FLOOR_DIV_EXPR:
6891 case ROUND_DIV_EXPR:
6892 case EXACT_DIV_EXPR:
6893 case BIT_AND_EXPR:
6894 case BIT_ANDTC_EXPR:
6895 case BIT_IOR_EXPR:
6896 case BIT_XOR_EXPR:
6897 case TRUNC_MOD_EXPR:
6898 case FLOOR_MOD_EXPR:
6899 case TRUTH_ANDIF_EXPR:
6900 case TRUTH_ORIF_EXPR:
6901 case TRUTH_AND_EXPR:
6902 case TRUTH_OR_EXPR:
6903 case RSHIFT_EXPR:
6904 case LSHIFT_EXPR:
6905 case RROTATE_EXPR:
6906 case LROTATE_EXPR:
6907 case EQ_EXPR:
6908 case NE_EXPR:
6909 case MAX_EXPR:
6910 case MIN_EXPR:
6911 case LE_EXPR:
6912 case GE_EXPR:
6913 case LT_EXPR:
6914 case GT_EXPR:
6915 case COMPONENT_REF:
6916 case ARRAY_REF:
6917 case COMPOUND_EXPR:
6918 case SCOPE_REF:
6919 case DOTSTAR_EXPR:
6920 case MEMBER_REF:
6921 return build_nt
4393e105
MM
6922 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6923 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
6924
6925 case CALL_EXPR:
6926 {
6927 tree fn = TREE_OPERAND (t, 0);
f84b4be9 6928 if (is_overloaded_fn (fn))
4393e105 6929 fn = tsubst_copy (get_first_fn (fn), args, complain, in_decl);
5566b478 6930 else
f84b4be9 6931 /* Sometimes FN is a LOOKUP_EXPR. */
4393e105 6932 fn = tsubst_copy (fn, args, complain, in_decl);
5566b478 6933 return build_nt
4393e105
MM
6934 (code, fn, tsubst_copy (TREE_OPERAND (t, 1), args, complain,
6935 in_decl),
5566b478
MS
6936 NULL_TREE);
6937 }
6938
6939 case METHOD_CALL_EXPR:
6940 {
6941 tree name = TREE_OPERAND (t, 0);
6942 if (TREE_CODE (name) == BIT_NOT_EXPR)
6943 {
4393e105
MM
6944 name = tsubst_copy (TREE_OPERAND (name, 0), args,
6945 complain, in_decl);
7bae46f4 6946 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
5566b478
MS
6947 }
6948 else if (TREE_CODE (name) == SCOPE_REF
6949 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
6950 {
4393e105
MM
6951 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
6952 complain, in_decl);
5566b478 6953 name = TREE_OPERAND (name, 1);
4393e105
MM
6954 name = tsubst_copy (TREE_OPERAND (name, 0), args,
6955 complain, in_decl);
11686454 6956 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
5566b478
MS
6957 name = build_nt (SCOPE_REF, base, name);
6958 }
6959 else
4393e105 6960 name = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
5566b478 6961 return build_nt
4393e105
MM
6962 (code, name, tsubst_copy (TREE_OPERAND (t, 1), args,
6963 complain, in_decl),
6964 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl),
5566b478
MS
6965 NULL_TREE);
6966 }
6967
558475f0
MM
6968 case STMT_EXPR:
6969 /* This processing should really occur in tsubst_expr, However,
6970 tsubst_expr does not recurse into expressions, since it
6971 assumes that there aren't any statements inside them.
6972 Instead, it simply calls build_expr_from_tree. So, we need
6973 to expand the STMT_EXPR here. */
6974 if (!processing_template_decl)
6975 {
b5ac18ea 6976 tree stmt_expr = begin_stmt_expr ();
447cfcb9
MM
6977 tsubst_expr (STMT_EXPR_STMT (t), args,
6978 complain, in_decl);
b5ac18ea 6979 return finish_stmt_expr (stmt_expr);
558475f0 6980 }
9d9169de
MM
6981
6982 return t;
558475f0 6983
5566b478
MS
6984 case COND_EXPR:
6985 case MODOP_EXPR:
40242ccf 6986 case PSEUDO_DTOR_EXPR:
67da3287 6987 {
8452b1d3 6988 r = build_nt
4393e105
MM
6989 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6990 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
6991 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
67da3287
MM
6992 return r;
6993 }
5566b478
MS
6994
6995 case NEW_EXPR:
6996 {
8452b1d3 6997 r = build_nt
4393e105
MM
6998 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6999 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7000 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
7001 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7002 return r;
7003 }
7004
7005 case DELETE_EXPR:
7006 {
8452b1d3 7007 r = build_nt
4393e105
MM
7008 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7009 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
7010 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7011 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7012 return r;
7013 }
7014
386b8a85
JM
7015 case TEMPLATE_ID_EXPR:
7016 {
00d3396f 7017 /* Substituted template arguments */
4393e105
MM
7018 tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7019 in_decl);
856216bb
MM
7020
7021 if (targs && TREE_CODE (targs) == TREE_LIST)
7022 {
7023 tree chain;
7024 for (chain = targs; chain; chain = TREE_CHAIN (chain))
7025 TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
7026 }
7027 else if (targs)
7028 {
7029 int i;
7030 for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
7031 TREE_VEC_ELT (targs, i)
7032 = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
7033 }
00d3396f
JM
7034
7035 return lookup_template_function
4393e105 7036 (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
386b8a85
JM
7037 }
7038
5566b478
MS
7039 case TREE_LIST:
7040 {
7041 tree purpose, value, chain;
7042
7043 if (t == void_list_node)
7044 return t;
7045
7046 purpose = TREE_PURPOSE (t);
7047 if (purpose)
4393e105 7048 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
7049 value = TREE_VALUE (t);
7050 if (value)
4393e105 7051 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
7052 chain = TREE_CHAIN (t);
7053 if (chain && chain != void_type_node)
4393e105 7054 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
7055 if (purpose == TREE_PURPOSE (t)
7056 && value == TREE_VALUE (t)
7057 && chain == TREE_CHAIN (t))
7058 return t;
7059 return tree_cons (purpose, value, chain);
7060 }
7061
7062 case RECORD_TYPE:
7063 case UNION_TYPE:
7064 case ENUMERAL_TYPE:
7065 case INTEGER_TYPE:
7066 case TEMPLATE_TYPE_PARM:
73b0fce8 7067 case TEMPLATE_TEMPLATE_PARM:
f84b4be9 7068 case TEMPLATE_PARM_INDEX:
5566b478
MS
7069 case POINTER_TYPE:
7070 case REFERENCE_TYPE:
7071 case OFFSET_TYPE:
7072 case FUNCTION_TYPE:
7073 case METHOD_TYPE:
7074 case ARRAY_TYPE:
7075 case TYPENAME_TYPE:
f84b4be9 7076 case TYPE_DECL:
4393e105 7077 return tsubst (t, args, complain, in_decl);
5566b478 7078
e92cc029 7079 case IDENTIFIER_NODE:
421844e7
MM
7080 if (IDENTIFIER_TYPENAME_P (t))
7081 return (build_typename_overload
7082 (tsubst (TREE_TYPE (t), args, complain, in_decl)));
e92cc029
MS
7083 else
7084 return t;
7085
5156628f 7086 case CONSTRUCTOR:
8452b1d3
JM
7087 {
7088 r = build
4393e105
MM
7089 (CONSTRUCTOR, tsubst (TREE_TYPE (t), args, complain, in_decl),
7090 NULL_TREE, tsubst_copy (CONSTRUCTOR_ELTS (t), args,
7091 complain, in_decl));
8452b1d3
JM
7092 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7093 return r;
7094 }
5156628f 7095
371534a9
MM
7096 case VA_ARG_EXPR:
7097 return build_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7098 in_decl),
7099 tsubst (TREE_TYPE (t), args, complain, in_decl));
f9817201
MM
7100
7101 case FUNCTION_NAME:
7102 return tsubst (t, args, complain, in_decl);
7103
5566b478
MS
7104 default:
7105 return t;
7106 }
7107}
7108
558475f0 7109/* Like tsubst_copy, but also does semantic processing. */
00d3396f 7110
5566b478 7111tree
4393e105 7112tsubst_expr (t, args, complain, in_decl)
98c1c668 7113 tree t, args;
4393e105 7114 int complain;
5566b478
MS
7115 tree in_decl;
7116{
558475f0
MM
7117 tree stmt;
7118
5566b478
MS
7119 if (t == NULL_TREE || t == error_mark_node)
7120 return t;
7121
5156628f 7122 if (processing_template_decl)
4393e105 7123 return tsubst_copy (t, args, complain, in_decl);
5566b478
MS
7124
7125 switch (TREE_CODE (t))
8d08fdba 7126 {
558475f0 7127 case RETURN_INIT:
a7e4cfa0 7128 prep_stmt (t);
558475f0
MM
7129 finish_named_return_value
7130 (TREE_OPERAND (t, 0),
7131 tsubst_expr (TREE_OPERAND (t, 1), args, /*complain=*/1, in_decl));
7132 tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7133 break;
7134
7135 case CTOR_INITIALIZER:
a7e4cfa0 7136 prep_stmt (t);
558475f0
MM
7137 current_member_init_list
7138 = tsubst_expr_values (TREE_OPERAND (t, 0), args);
7139 current_base_init_list
7140 = tsubst_expr_values (TREE_OPERAND (t, 1), args);
7141 setup_vtbl_ptr ();
7142 tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7143 break;
7144
5566b478 7145 case RETURN_STMT:
a7e4cfa0 7146 prep_stmt (t);
ad321293 7147 finish_return_stmt (tsubst_expr (RETURN_EXPR (t),
4393e105 7148 args, complain, in_decl));
5566b478
MS
7149 break;
7150
7151 case EXPR_STMT:
a7e4cfa0 7152 prep_stmt (t);
ad321293 7153 finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
4393e105 7154 args, complain, in_decl));
5566b478
MS
7155 break;
7156
7157 case DECL_STMT:
7158 {
e0942dcd
MM
7159 tree decl;
7160 tree init;
5566b478 7161
a7e4cfa0 7162 prep_stmt (t);
e0942dcd 7163 decl = DECL_STMT_DECL (t);
acef433b
MM
7164 if (TREE_CODE (decl) == LABEL_DECL)
7165 finish_label_decl (DECL_NAME (decl));
7166 else
7167 {
7168 init = DECL_INITIAL (decl);
7169 decl = tsubst (decl, args, complain, in_decl);
7170 init = tsubst_expr (init, args, complain, in_decl);
24bef158
MM
7171 if (init)
7172 DECL_INITIAL (decl) = error_mark_node;
b7b8bcd2
MM
7173 /* By marking the declaration as instantiated, we avoid
7174 trying to instantiate it. Since instantiate_decl can't
7175 handle local variables, and since we've already done
7176 all that needs to be done, that's the right thing to
7177 do. */
acef433b
MM
7178 if (TREE_CODE (decl) == VAR_DECL)
7179 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7180 maybe_push_decl (decl);
cd9f6678 7181 cp_finish_decl (decl, init, NULL_TREE, 0);
acef433b 7182 }
e0942dcd 7183 return decl;
5566b478 7184 }
8d08fdba 7185
5566b478
MS
7186 case FOR_STMT:
7187 {
7188 tree tmp;
a7e4cfa0 7189 prep_stmt (t);
5566b478 7190
558475f0 7191 stmt = begin_for_stmt ();
ad321293 7192 for (tmp = FOR_INIT_STMT (t); tmp; tmp = TREE_CHAIN (tmp))
4393e105 7193 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7194 finish_for_init_stmt (stmt);
ad321293 7195 finish_for_cond (tsubst_expr (FOR_COND (t), args,
4393e105 7196 complain, in_decl),
558475f0 7197 stmt);
4393e105 7198 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
558475f0 7199 finish_for_expr (tmp, stmt);
4393e105 7200 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
558475f0 7201 finish_for_stmt (tmp, stmt);
5566b478
MS
7202 }
7203 break;
8d08fdba 7204
5566b478
MS
7205 case WHILE_STMT:
7206 {
a7e4cfa0 7207 prep_stmt (t);
558475f0 7208 stmt = begin_while_stmt ();
ad321293 7209 finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
4393e105 7210 args, complain, in_decl),
558475f0 7211 stmt);
4393e105 7212 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
558475f0 7213 finish_while_stmt (stmt);
5566b478
MS
7214 }
7215 break;
8d08fdba 7216
5566b478
MS
7217 case DO_STMT:
7218 {
a7e4cfa0 7219 prep_stmt (t);
558475f0 7220 stmt = begin_do_stmt ();
4393e105 7221 tsubst_expr (DO_BODY (t), args, complain, in_decl);
558475f0 7222 finish_do_body (stmt);
ad321293 7223 finish_do_stmt (tsubst_expr (DO_COND (t), args,
4393e105 7224 complain, in_decl),
558475f0 7225 stmt);
5566b478
MS
7226 }
7227 break;
a0a33927 7228
5566b478 7229 case IF_STMT:
8d08fdba 7230 {
5566b478 7231 tree tmp;
5566b478 7232
a7e4cfa0 7233 prep_stmt (t);
558475f0 7234 stmt = begin_if_stmt ();
ad321293 7235 finish_if_stmt_cond (tsubst_expr (IF_COND (t),
4393e105 7236 args, complain, in_decl),
558475f0 7237 stmt);
db5ae43f 7238
ad321293 7239 if (tmp = THEN_CLAUSE (t), tmp)
db5ae43f 7240 {
4393e105 7241 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7242 finish_then_clause (stmt);
db5ae43f
MS
7243 }
7244
ad321293
MM
7245 if (tmp = ELSE_CLAUSE (t), tmp)
7246 {
7247 begin_else_clause ();
4393e105 7248 tsubst_expr (tmp, args, complain, in_decl);
558475f0 7249 finish_else_clause (stmt);
ad321293 7250 }
8d08fdba 7251
ad321293 7252 finish_if_stmt ();
8d08fdba 7253 }
5566b478 7254 break;
8d08fdba 7255
5566b478
MS
7256 case COMPOUND_STMT:
7257 {
ad321293 7258 tree substmt;
8d08fdba 7259
a7e4cfa0 7260 prep_stmt (t);
558475f0 7261 stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
ad321293
MM
7262 for (substmt = COMPOUND_BODY (t);
7263 substmt != NULL_TREE;
7264 substmt = TREE_CHAIN (substmt))
4393e105 7265 tsubst_expr (substmt, args, complain, in_decl);
558475f0 7266 return finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t), stmt);
5566b478
MS
7267 }
7268 break;
8d08fdba 7269
5566b478 7270 case BREAK_STMT:
a7e4cfa0 7271 prep_stmt (t);
ad321293 7272 finish_break_stmt ();
5566b478 7273 break;
8d08fdba 7274
6467930b 7275 case CONTINUE_STMT:
a7e4cfa0 7276 prep_stmt (t);
ad321293 7277 finish_continue_stmt ();
6467930b
MS
7278 break;
7279
5566b478
MS
7280 case SWITCH_STMT:
7281 {
558475f0 7282 tree val;
5566b478 7283
a7e4cfa0 7284 prep_stmt (t);
527f0080 7285 stmt = begin_switch_stmt ();
4393e105 7286 val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
527f0080 7287 finish_switch_cond (val, stmt);
558475f0
MM
7288 tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7289 finish_switch_stmt (val, stmt);
5566b478
MS
7290 }
7291 break;
7292
7293 case CASE_LABEL:
a7e4cfa0 7294 prep_stmt (t);
4393e105
MM
7295 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7296 tsubst_expr (CASE_HIGH (t), args, complain, in_decl));
5566b478
MS
7297 break;
7298
acef433b
MM
7299 case LABEL_STMT:
7300 lineno = STMT_LINENO (t);
7301 finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
5566b478
MS
7302 break;
7303
7304 case GOTO_STMT:
a7e4cfa0 7305 prep_stmt (t);
aa09da44 7306 t = GOTO_DESTINATION (t);
3fa56191 7307 if (TREE_CODE (t) != LABEL_DECL)
aa09da44
MM
7308 /* Computed goto's must be tsubst'd into. On the other hand,
7309 non-computed gotos must not be; the identifier in question
7310 will have no binding. */
4393e105 7311 t = tsubst_expr (t, args, complain, in_decl);
3fa56191
MM
7312 else
7313 t = DECL_NAME (t);
aa09da44 7314 finish_goto_stmt (t);
ad321293
MM
7315 break;
7316
7317 case ASM_STMT:
a7e4cfa0 7318 prep_stmt (t);
3ebc5c52 7319 finish_asm_stmt (ASM_CV_QUAL (t),
4393e105
MM
7320 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7321 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7322 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
7323 tsubst_expr (ASM_CLOBBERS (t), args, complain,
7324 in_decl));
5566b478 7325 break;
faf5394a
MS
7326
7327 case TRY_BLOCK:
a7e4cfa0 7328 prep_stmt (t);
f1dedc31 7329 if (CLEANUP_P (t))
62409b39 7330 {
57b52417 7331 stmt = begin_try_block ();
62409b39
MM
7332 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7333 finish_cleanup_try_block (stmt);
7334 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7335 complain, in_decl),
7336 stmt);
7337 }
f1dedc31
MM
7338 else
7339 {
62409b39
MM
7340 tree handler;
7341
7342 if (FN_TRY_BLOCK_P (t))
7343 stmt = begin_function_try_block ();
7344 else
7345 stmt = begin_try_block ();
7346
7347 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7348
7349 if (FN_TRY_BLOCK_P (t))
7350 finish_function_try_block (stmt);
7351 else
7352 finish_try_block (stmt);
7353
7354 handler = TRY_HANDLERS (t);
f1dedc31
MM
7355 for (; handler; handler = TREE_CHAIN (handler))
7356 tsubst_expr (handler, args, complain, in_decl);
84df082b
MM
7357 if (FN_TRY_BLOCK_P (t))
7358 finish_function_handler_sequence (stmt);
7359 else
7360 finish_handler_sequence (stmt);
f1dedc31 7361 }
faf5394a 7362 break;
b35d4555 7363
faf5394a 7364 case HANDLER:
b35d4555
MM
7365 {
7366 tree decl;
7367 tree blocks;
7368
7369 prep_stmt (t);
7370 stmt = begin_handler ();
7371 if (HANDLER_PARMS (t))
7372 {
7373 decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7374 decl = tsubst (decl, args, complain, in_decl);
f8191e64
MM
7375 /* Prevent instantiate_decl from trying to instantiate
7376 this variable. We've already done all that needs to be
7377 done. */
7378 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
b35d4555
MM
7379 }
7380 else
7381 decl = NULL_TREE;
7382 blocks = finish_handler_parms (decl, stmt);
7383 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7384 finish_handler (blocks, stmt);
7385 }
faf5394a
MS
7386 break;
7387
b87692e5 7388 case TAG_DEFN:
a7e4cfa0 7389 prep_stmt (t);
b87692e5 7390 t = TREE_TYPE (t);
ae673f14 7391 tsubst (t, args, complain, NULL_TREE);
b87692e5
MS
7392 break;
7393
5566b478 7394 default:
4393e105 7395 return build_expr_from_tree (tsubst_copy (t, args, complain, in_decl));
5566b478
MS
7396 }
7397 return NULL_TREE;
8d08fdba
MS
7398}
7399
db9b2174
MM
7400/* TMPL is a TEMPLATE_DECL for a cloned constructor or destructor.
7401 Instantiate it with the ARGS. */
7402
7403static tree
7404instantiate_clone (tmpl, args)
7405 tree tmpl;
7406 tree args;
7407{
7408 tree spec;
7409 tree clone;
7410
7411 /* Instantiated the cloned function, rather than the clone. */
7412 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), args);
7413
7414 /* Then, see if we've already cloned the instantiation. */
7415 for (clone = TREE_CHAIN (spec);
7416 clone && DECL_CLONED_FUNCTION_P (clone);
7417 clone = TREE_CHAIN (clone))
7418 if (DECL_NAME (clone) == DECL_NAME (tmpl))
7419 return clone;
7420
7421 /* If we haven't, do so know. */
7422 if (!clone)
7423 clone_function_decl (spec, /*update_method_vec_p=*/0);
7424
7425 /* Look again. */
7426 for (clone = TREE_CHAIN (spec);
7427 clone && DECL_CLONED_FUNCTION_P (clone);
7428 clone = TREE_CHAIN (clone))
7429 if (DECL_NAME (clone) == DECL_NAME (tmpl))
7430 return clone;
7431
7432 /* We should always have found the clone by now. */
7433 my_friendly_abort (20000411);
7434 return NULL_TREE;
7435}
7436
6ba89f8e 7437/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
7438 the template arguments in TARG_PTR. */
7439
5566b478
MS
7440tree
7441instantiate_template (tmpl, targ_ptr)
98c1c668 7442 tree tmpl, targ_ptr;
8d08fdba 7443{
5566b478 7444 tree fndecl;
36a117a5
MM
7445 tree gen_tmpl;
7446 tree spec;
5566b478 7447 int i, len;
36a117a5 7448 tree inner_args;
5566b478 7449
27fafc8d
JM
7450 if (tmpl == error_mark_node)
7451 return error_mark_node;
7452
386b8a85
JM
7453 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
7454
db9b2174
MM
7455 /* If this function is a clone, handle it specially. */
7456 if (DECL_CLONED_FUNCTION_P (tmpl))
7457 return instantiate_clone (tmpl, targ_ptr);
7458
36a117a5
MM
7459 /* Check to see if we already have this specialization. */
7460 spec = retrieve_specialization (tmpl, targ_ptr);
7461 if (spec != NULL_TREE)
7462 return spec;
7463
f9a7ae04
MM
7464 gen_tmpl = most_general_template (tmpl);
7465 if (tmpl != gen_tmpl)
386b8a85 7466 {
36a117a5
MM
7467 /* The TMPL is a partial instantiation. To get a full set of
7468 arguments we must add the arguments used to perform the
7469 partial instantiation. */
7470 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
7471 targ_ptr);
36a117a5
MM
7472
7473 /* Check to see if we already have this specialization. */
7474 spec = retrieve_specialization (gen_tmpl, targ_ptr);
75650646
MM
7475 if (spec != NULL_TREE)
7476 return spec;
386b8a85
JM
7477 }
7478
36a117a5 7479 len = DECL_NTPARMS (gen_tmpl);
f9a7ae04 7480 inner_args = INNERMOST_TEMPLATE_ARGS (targ_ptr);
5566b478
MS
7481 i = len;
7482 while (i--)
8d08fdba 7483 {
36a117a5 7484 tree t = TREE_VEC_ELT (inner_args, i);
2f939d94 7485 if (TYPE_P (t))
5566b478
MS
7486 {
7487 tree nt = target_type (t);
ec255269 7488 if (IS_AGGR_TYPE (nt) && decl_function_context (TYPE_MAIN_DECL (nt)))
5566b478 7489 {
8251199e
JM
7490 cp_error ("type `%T' composed from a local class is not a valid template-argument", t);
7491 cp_error (" trying to instantiate `%D'", gen_tmpl);
454fa7a7 7492 return error_mark_node;
5566b478
MS
7493 }
7494 }
8d08fdba
MS
7495 }
7496
5566b478 7497 /* substitute template parameters */
17aec3eb
RK
7498 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
7499 targ_ptr, /*complain=*/1, gen_tmpl);
36a117a5
MM
7500 /* The DECL_TI_TEMPLATE should always be the immediate parent
7501 template, not the most general template. */
7502 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 7503
824b9a4c
MS
7504 if (flag_external_templates)
7505 add_pending_template (fndecl);
7506
5566b478 7507 return fndecl;
8d08fdba 7508}
5566b478
MS
7509
7510/* Push the name of the class template into the scope of the instantiation. */
8d08fdba
MS
7511
7512void
5566b478
MS
7513overload_template_name (type)
7514 tree type;
8d08fdba 7515{
5566b478
MS
7516 tree id = DECL_NAME (CLASSTYPE_TI_TEMPLATE (type));
7517 tree decl;
8d08fdba 7518
5566b478
MS
7519 if (IDENTIFIER_CLASS_VALUE (id)
7520 && TREE_TYPE (IDENTIFIER_CLASS_VALUE (id)) == type)
7521 return;
8d08fdba 7522
5566b478
MS
7523 decl = build_decl (TYPE_DECL, id, type);
7524 SET_DECL_ARTIFICIAL (decl);
7525 pushdecl_class_level (decl);
8d08fdba
MS
7526}
7527
4393e105
MM
7528/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
7529 arguments that are being used when calling it. TARGS is a vector
7530 into which the deduced template arguments are placed.
8d08fdba
MS
7531
7532 Return zero for success, 2 for an incomplete match that doesn't resolve
7533 all the types, and 1 for complete failure. An error message will be
7534 printed only for an incomplete match.
7535
4393e105
MM
7536 If FN is a conversion operator, RETURN_TYPE is the type desired as
7537 the result of the conversion operator.
8d08fdba 7538
4393e105 7539 TPARMS is a vector of template parameters.
9f54c803
MM
7540
7541 The EXPLICIT_TARGS are explicit template arguments provided via a
7542 template-id.
6467930b 7543
830bfa74
MM
7544 The parameter STRICT is one of:
7545
7546 DEDUCE_CALL:
7547 We are deducing arguments for a function call, as in
7548 [temp.deduct.call].
7549
7550 DEDUCE_CONV:
7551 We are deducing arguments for a conversion function, as in
7552 [temp.deduct.conv].
7553
7554 DEDUCE_EXACT:
7555 We are deducing arguments when calculating the partial
7556 ordering between specializations of function or class
7557 templates, as in [temp.func.order] and [temp.class.order],
7558 when doing an explicit instantiation as in [temp.explicit],
9f54c803 7559 when determining an explicit specialization as in
830bfa74 7560 [temp.expl.spec], or when taking the address of a function
4393e105
MM
7561 template, as in [temp.deduct.funcaddr].
7562
4393e105 7563 The other arguments are as for type_unification. */
8d08fdba
MS
7564
7565int
4393e105 7566fn_type_unification (fn, explicit_targs, targs, args, return_type,
03017874 7567 strict)
4393e105 7568 tree fn, explicit_targs, targs, args, return_type;
830bfa74 7569 unification_kind_t strict;
386b8a85 7570{
4393e105
MM
7571 tree parms;
7572 tree fntype;
adecb3f4 7573 int result;
386b8a85 7574
4393e105
MM
7575 my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
7576
7577 fntype = TREE_TYPE (fn);
7578 if (explicit_targs)
75650646 7579 {
4393e105
MM
7580 /* [temp.deduct]
7581
7582 The specified template arguments must match the template
7583 parameters in kind (i.e., type, nontype, template), and there
7584 must not be more arguments than there are parameters;
7585 otherwise type deduction fails.
7586
7587 Nontype arguments must match the types of the corresponding
7588 nontype template parameters, or must be convertible to the
7589 types of the corresponding nontype parameters as specified in
7590 _temp.arg.nontype_, otherwise type deduction fails.
7591
7592 All references in the function type of the function template
7593 to the corresponding template parameters are replaced by the
7594 specified template argument values. If a substitution in a
7595 template parameter or in the function type of the function
7596 template results in an invalid type, type deduction fails. */
7597 int i;
7598 tree converted_args;
75650646 7599
4393e105
MM
7600 converted_args
7601 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7602 explicit_targs, NULL_TREE, /*complain=*/0,
7603 /*require_all_arguments=*/0));
7604 if (converted_args == error_mark_node)
75650646 7605 return 1;
386b8a85 7606
4393e105
MM
7607 fntype = tsubst (fntype, converted_args, /*complain=*/0, NULL_TREE);
7608 if (fntype == error_mark_node)
7609 return 1;
050367a3 7610
4393e105
MM
7611 /* Place the explicitly specified arguments in TARGS. */
7612 for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
7613 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 7614 }
4393e105
MM
7615
7616 parms = TYPE_ARG_TYPES (fntype);
386b8a85 7617
4393e105
MM
7618 if (DECL_CONV_FN_P (fn))
7619 {
8d3631f8 7620 /* This is a template conversion operator. Remove `this', since
edef8288 7621 we could be comparing conversions from different classes. */
8d3631f8
NS
7622 parms = TREE_CHAIN (parms);
7623 args = TREE_CHAIN (args);
7624 my_friendly_assert (return_type != NULL_TREE, 20000227);
7625 }
7626
7627 if (return_type)
7628 {
7629 /* We've been given a return type to match, prepend it. */
7630 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
7631 args = tree_cons (NULL_TREE, return_type, args);
4393e105
MM
7632 }
7633
4393e105
MM
7634 /* We allow incomplete unification without an error message here
7635 because the standard doesn't seem to explicitly prohibit it. Our
7636 callers must be ready to deal with unification failures in any
7637 event. */
adecb3f4
MM
7638 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7639 targs, parms, args, /*subr=*/0,
7640 strict, /*allow_incomplete*/1);
7641
7642 if (result == 0)
7643 /* All is well so far. Now, check:
7644
7645 [temp.deduct]
7646
7647 When all template arguments have been deduced, all uses of
7648 template parameters in nondeduced contexts are replaced with
7649 the corresponding deduced argument values. If the
7650 substitution results in an invalid type, as described above,
7651 type deduction fails. */
7652 if (tsubst (TREE_TYPE (fn), targs, /*complain=*/0, NULL_TREE)
7653 == error_mark_node)
7654 return 1;
7655
7656 return result;
830bfa74
MM
7657}
7658
7659/* Adjust types before performing type deduction, as described in
7660 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
7661 sections are symmetric. PARM is the type of a function parameter
7662 or the return type of the conversion function. ARG is the type of
7663 the argument passed to the call, or the type of the value
7664 intialized with the result of the conversion function. */
386b8a85 7665
e9659ab0 7666static void
830bfa74
MM
7667maybe_adjust_types_for_deduction (strict, parm, arg)
7668 unification_kind_t strict;
7669 tree* parm;
7670 tree* arg;
7671{
7672 switch (strict)
7673 {
7674 case DEDUCE_CALL:
7675 break;
7676
7677 case DEDUCE_CONV:
7678 {
4c7d0dff
MM
7679 /* Swap PARM and ARG throughout the remainder of this
7680 function; the handling is precisely symmetric since PARM
7681 will initialize ARG rather than vice versa. */
830bfa74
MM
7682 tree* temp = parm;
7683 parm = arg;
7684 arg = temp;
7685 break;
7686 }
7687
7688 case DEDUCE_EXACT:
7689 /* There is nothing to do in this case. */
7690 return;
7691
7692 default:
7693 my_friendly_abort (0);
7694 }
7695
7696 if (TREE_CODE (*parm) != REFERENCE_TYPE)
7697 {
7698 /* [temp.deduct.call]
7699
7700 If P is not a reference type:
7701
7702 --If A is an array type, the pointer type produced by the
7703 array-to-pointer standard conversion (_conv.array_) is
7704 used in place of A for type deduction; otherwise,
7705
7706 --If A is a function type, the pointer type produced by
7707 the function-to-pointer standard conversion
7708 (_conv.func_) is used in place of A for type deduction;
7709 otherwise,
7710
7711 --If A is a cv-qualified type, the top level
7712 cv-qualifiers of A's type are ignored for type
7713 deduction. */
7714 if (TREE_CODE (*arg) == ARRAY_TYPE)
7715 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 7716 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
7717 *arg = build_pointer_type (*arg);
7718 else
7719 *arg = TYPE_MAIN_VARIANT (*arg);
7720 }
7721
7722 /* [temp.deduct.call]
7723
7724 If P is a cv-qualified type, the top level cv-qualifiers
7725 of P's type are ignored for type deduction. If P is a
7726 reference type, the type referred to by P is used for
7727 type deduction. */
7728 *parm = TYPE_MAIN_VARIANT (*parm);
7729 if (TREE_CODE (*parm) == REFERENCE_TYPE)
7730 *parm = TREE_TYPE (*parm);
386b8a85
JM
7731}
7732
4393e105 7733/* Like type_unfication.
9f54c803
MM
7734
7735 If SUBR is 1, we're being called recursively (to unify the
7736 arguments of a function or method parameter of a function
7737 template). */
386b8a85 7738
4966381a 7739static int
3b3ba9f0 7740type_unification_real (tparms, targs, parms, args, subr,
4393e105 7741 strict, allow_incomplete)
050367a3 7742 tree tparms, targs, parms, args;
830bfa74
MM
7743 int subr;
7744 unification_kind_t strict;
7745 int allow_incomplete;
8d08fdba
MS
7746{
7747 tree parm, arg;
7748 int i;
7749 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 7750 int sub_strict;
8d08fdba
MS
7751
7752 my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
386b8a85
JM
7753 my_friendly_assert (parms == NULL_TREE
7754 || TREE_CODE (parms) == TREE_LIST, 290);
51c184be 7755 /* ARGS could be NULL (via a call from parse.y to
8d08fdba
MS
7756 build_x_function_call). */
7757 if (args)
7758 my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
7759 my_friendly_assert (ntparms > 0, 292);
7760
830bfa74
MM
7761 switch (strict)
7762 {
7763 case DEDUCE_CALL:
7764 sub_strict = UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_DERIVED;
7765 break;
7766
7767 case DEDUCE_CONV:
7768 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
7769 break;
7770
7771 case DEDUCE_EXACT:
7772 sub_strict = UNIFY_ALLOW_NONE;
7773 break;
7774
7775 default:
7776 my_friendly_abort (0);
7777 }
7778
8d08fdba
MS
7779 while (parms
7780 && parms != void_list_node
7781 && args
7782 && args != void_list_node)
7783 {
7784 parm = TREE_VALUE (parms);
7785 parms = TREE_CHAIN (parms);
7786 arg = TREE_VALUE (args);
7787 args = TREE_CHAIN (args);
7788
7789 if (arg == error_mark_node)
7790 return 1;
7791 if (arg == unknown_type_node)
34016c81
JM
7792 /* We can't deduce anything from this, but we might get all the
7793 template args from other function args. */
7794 continue;
b7484fbe 7795
03e70705
JM
7796 /* Conversions will be performed on a function argument that
7797 corresponds with a function parameter that contains only
7798 non-deducible template parameters and explicitly specified
7799 template parameters. */
7800 if (! uses_template_parms (parm))
b7484fbe 7801 {
03e70705
JM
7802 tree type;
7803
2f939d94 7804 if (!TYPE_P (arg))
03e70705
JM
7805 type = TREE_TYPE (arg);
7806 else
7807 {
7808 type = arg;
7809 arg = NULL_TREE;
7810 }
7811
830bfa74 7812 if (strict == DEDUCE_EXACT)
03e70705 7813 {
3bfdc719 7814 if (same_type_p (parm, type))
03e70705
JM
7815 continue;
7816 }
03e70705 7817 else
343c89cd
JM
7818 /* It might work; we shouldn't check now, because we might
7819 get into infinite recursion. Overload resolution will
7820 handle it. */
7821 continue;
03e70705 7822
b7484fbe
MS
7823 return 1;
7824 }
7825
2f939d94 7826 if (!TYPE_P (arg))
8d08fdba
MS
7827 {
7828 my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
34016c81 7829 if (type_unknown_p (arg))
28cbf42c 7830 {
34016c81
JM
7831 /* [temp.deduct.type] A template-argument can be deduced from
7832 a pointer to function or pointer to member function
7833 argument if the set of overloaded functions does not
7834 contain function templates and at most one of a set of
7835 overloaded functions provides a unique match. */
7836
7837 if (resolve_overloaded_unification
4393e105 7838 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
7839 != 0)
7840 return 1;
7841 continue;
28cbf42c 7842 }
8d08fdba
MS
7843 arg = TREE_TYPE (arg);
7844 }
4393e105 7845
830bfa74
MM
7846 if (!subr)
7847 maybe_adjust_types_for_deduction (strict, &parm, &arg);
db5ae43f 7848
4393e105 7849 switch (unify (tparms, targs, parm, arg, sub_strict))
8d08fdba
MS
7850 {
7851 case 0:
7852 break;
7853 case 1:
7854 return 1;
7855 }
7856 }
7857 /* Fail if we've reached the end of the parm list, and more args
7858 are present, and the parm list isn't variadic. */
7859 if (args && args != void_list_node && parms == void_list_node)
7860 return 1;
7861 /* Fail if parms are left and they don't have default values. */
7862 if (parms
7863 && parms != void_list_node
7864 && TREE_PURPOSE (parms) == NULL_TREE)
7865 return 1;
7866 if (!subr)
7867 for (i = 0; i < ntparms; i++)
050367a3 7868 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8d08fdba 7869 {
386b8a85 7870 if (!allow_incomplete)
8251199e 7871 error ("incomplete type unification");
8d08fdba
MS
7872 return 2;
7873 }
7874 return 0;
7875}
7876
34016c81
JM
7877/* Subroutine of type_unification_real. Args are like the variables at the
7878 call site. ARG is an overloaded function (or template-id); we try
7879 deducing template args from each of the overloads, and if only one
7880 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
7881
7882static int
7883resolve_overloaded_unification (tparms, targs, parm, arg, strict,
4393e105 7884 sub_strict)
34016c81
JM
7885 tree tparms, targs, parm, arg;
7886 unification_kind_t strict;
7887 int sub_strict;
34016c81
JM
7888{
7889 tree tempargs = copy_node (targs);
7890 int good = 0;
7891
7892 if (TREE_CODE (arg) == ADDR_EXPR)
7893 arg = TREE_OPERAND (arg, 0);
9f3d9e46 7894
d8f8dca1
MM
7895 if (TREE_CODE (arg) == COMPONENT_REF)
7896 /* Handle `&x' where `x' is some static or non-static member
7897 function name. */
7898 arg = TREE_OPERAND (arg, 1);
7899
05e0b2f4
JM
7900 if (TREE_CODE (arg) == OFFSET_REF)
7901 arg = TREE_OPERAND (arg, 1);
7902
9f3d9e46
JM
7903 /* Strip baselink information. */
7904 while (TREE_CODE (arg) == TREE_LIST)
7905 arg = TREE_VALUE (arg);
7906
34016c81
JM
7907 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
7908 {
7909 /* If we got some explicit template args, we need to plug them into
7910 the affected templates before we try to unify, in case the
7911 explicit args will completely resolve the templates in question. */
7912
7913 tree expl_subargs = TREE_OPERAND (arg, 1);
7914 arg = TREE_OPERAND (arg, 0);
7915
7916 for (; arg; arg = OVL_NEXT (arg))
7917 {
7918 tree fn = OVL_CURRENT (arg);
7919 tree subargs, elem;
7920
7921 if (TREE_CODE (fn) != TEMPLATE_DECL)
7922 continue;
7923
17aec3eb
RK
7924 subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
7925 expl_subargs);
34016c81
JM
7926 if (subargs)
7927 {
4393e105
MM
7928 elem = tsubst (TREE_TYPE (fn), subargs, /*complain=*/0,
7929 NULL_TREE);
d8f8dca1
MM
7930 if (TREE_CODE (elem) == METHOD_TYPE)
7931 elem = build_ptrmemfunc_type (build_pointer_type (elem));
e97e5263 7932 good += try_one_overload (tparms, targs, tempargs, parm, elem,
4393e105 7933 strict, sub_strict);
34016c81
JM
7934 }
7935 }
7936 }
7937 else if (TREE_CODE (arg) == OVERLOAD)
7938 {
7939 for (; arg; arg = OVL_NEXT (arg))
d8f8dca1
MM
7940 {
7941 tree type = TREE_TYPE (OVL_CURRENT (arg));
7942 if (TREE_CODE (type) == METHOD_TYPE)
7943 type = build_ptrmemfunc_type (build_pointer_type (type));
7944 good += try_one_overload (tparms, targs, tempargs, parm,
7945 type,
4393e105 7946 strict, sub_strict);
d8f8dca1 7947 }
34016c81
JM
7948 }
7949 else
7950 my_friendly_abort (981006);
7951
7952 /* [temp.deduct.type] A template-argument can be deduced from a pointer
7953 to function or pointer to member function argument if the set of
7954 overloaded functions does not contain function templates and at most
7955 one of a set of overloaded functions provides a unique match.
7956
7957 So if we found multiple possibilities, we return success but don't
7958 deduce anything. */
7959
7960 if (good == 1)
7961 {
7962 int i = TREE_VEC_LENGTH (targs);
7963 for (; i--; )
7964 if (TREE_VEC_ELT (tempargs, i))
7965 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
7966 }
7967 if (good)
7968 return 0;
7969
7970 return 1;
7971}
7972
7973/* Subroutine of resolve_overloaded_unification; does deduction for a single
7974 overload. Fills TARGS with any deduced arguments, or error_mark_node if
7975 different overloads deduce different arguments for a given parm.
7976 Returns 1 on success. */
7977
7978static int
e97e5263 7979try_one_overload (tparms, orig_targs, targs, parm, arg, strict,
4393e105 7980 sub_strict)
e97e5263 7981 tree tparms, orig_targs, targs, parm, arg;
34016c81
JM
7982 unification_kind_t strict;
7983 int sub_strict;
34016c81
JM
7984{
7985 int nargs;
7986 tree tempargs;
7987 int i;
7988
7989 /* [temp.deduct.type] A template-argument can be deduced from a pointer
7990 to function or pointer to member function argument if the set of
7991 overloaded functions does not contain function templates and at most
7992 one of a set of overloaded functions provides a unique match.
7993
7994 So if this is a template, just return success. */
7995
7996 if (uses_template_parms (arg))
7997 return 1;
7998
7999 maybe_adjust_types_for_deduction (strict, &parm, &arg);
8000
8001 /* We don't copy orig_targs for this because if we have already deduced
8002 some template args from previous args, unify would complain when we
8003 try to deduce a template parameter for the same argument, even though
8004 there isn't really a conflict. */
8005 nargs = TREE_VEC_LENGTH (targs);
f31c0a32 8006 tempargs = make_tree_vec (nargs);
34016c81 8007
4393e105 8008 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
8009 return 0;
8010
8011 /* First make sure we didn't deduce anything that conflicts with
e97e5263 8012 explicitly specified args. */
34016c81
JM
8013 for (i = nargs; i--; )
8014 {
8015 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 8016 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81
JM
8017
8018 if (elt == NULL_TREE)
8019 continue;
8020 else if (uses_template_parms (elt))
8021 {
8022 /* Since we're unifying against ourselves, we will fill in template
8023 args used in the function parm list with our own template parms.
8024 Discard them. */
8025 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
8026 continue;
8027 }
8028 else if (oldelt && ! template_args_equal (oldelt, elt))
8029 return 0;
8030 }
8031
8032 for (i = nargs; i--; )
8033 {
8034 tree elt = TREE_VEC_ELT (tempargs, i);
8035
8036 if (elt)
8037 TREE_VEC_ELT (targs, i) = elt;
8038 }
8039
8040 return 1;
8041}
8042
4393e105
MM
8043/* PARM is a template class (perhaps with unbound template
8044 parameters). ARG is a fully instantiated type. If ARG can be
8045 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
8046 TARGS are as for unify. */
fcfb9f96
MM
8047
8048static tree
4393e105 8049try_class_unification (tparms, targs, parm, arg)
fcfb9f96
MM
8050 tree tparms;
8051 tree targs;
4393e105
MM
8052 tree parm;
8053 tree arg;
8054{
8055 int i;
8056 tree copy_of_targs;
8057
8058 if (!CLASSTYPE_TEMPLATE_INFO (arg)
8059 || CLASSTYPE_TI_TEMPLATE (arg) != CLASSTYPE_TI_TEMPLATE (parm))
8060 return NULL_TREE;
8061
8062 /* We need to make a new template argument vector for the call to
8063 unify. If we used TARGS, we'd clutter it up with the result of
8064 the attempted unification, even if this class didn't work out.
8065 We also don't want to commit ourselves to all the unifications
8066 we've already done, since unification is supposed to be done on
8067 an argument-by-argument basis. In other words, consider the
8068 following pathological case:
8069
8070 template <int I, int J, int K>
8071 struct S {};
8072
8073 template <int I, int J>
8074 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
8075
8076 template <int I, int J, int K>
8077 void f(S<I, J, K>, S<I, I, I>);
8078
8079 void g() {
8080 S<0, 0, 0> s0;
8081 S<0, 1, 2> s2;
8082
8083 f(s0, s2);
8084 }
8085
8086 Now, by the time we consider the unification involving `s2', we
8087 already know that we must have `f<0, 0, 0>'. But, even though
8088 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is not legal
8089 because there are two ways to unify base classes of S<0, 1, 2>
8090 with S<I, I, I>. If we kept the already deduced knowledge, we
8091 would reject the possibility I=1. */
f31c0a32 8092 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
4393e105
MM
8093 i = unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
8094 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE);
4393e105
MM
8095
8096 /* If unification failed, we're done. */
8097 if (i != 0)
8098 return NULL_TREE;
8099 else
8100 return arg;
8101}
8102
8103/* Subroutine of get_template_base. RVAL, if non-NULL, is a base we
8104 have alreay discovered to be satisfactory. ARG_BINFO is the binfo
8105 for the base class of ARG that we are currently examining. */
8106
8107static tree
8108get_template_base_recursive (tparms, targs, parm,
8109 arg_binfo, rval, flags)
8110 tree tparms;
8111 tree targs;
8112 tree arg_binfo;
fcfb9f96 8113 tree rval;
4393e105
MM
8114 tree parm;
8115 int flags;
fcfb9f96
MM
8116{
8117 tree binfos;
8118 int i, n_baselinks;
4393e105 8119 tree arg = BINFO_TYPE (arg_binfo);
fcfb9f96 8120
4393e105 8121 if (!(flags & GTB_IGNORE_TYPE))
fcfb9f96 8122 {
4393e105
MM
8123 tree r = try_class_unification (tparms, targs,
8124 parm, arg);
fcfb9f96 8125
4393e105 8126 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 8127
4393e105
MM
8128 [temp.deduct.call]
8129
8130 If they yield more than one possible deduced A, the type
8131 deduction fails.
8132
8133 applies. */
8134 if (r && rval && !same_type_p (r, rval))
8135 return error_mark_node;
8136 else if (r)
8137 rval = r;
fcfb9f96
MM
8138 }
8139
4393e105 8140 binfos = BINFO_BASETYPES (arg_binfo);
fcfb9f96
MM
8141 n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
8142
8143 /* Process base types. */
8144 for (i = 0; i < n_baselinks; i++)
8145 {
8146 tree base_binfo = TREE_VEC_ELT (binfos, i);
4393e105 8147 int this_virtual;
fcfb9f96 8148
4393e105
MM
8149 /* Skip this base, if we've already seen it. */
8150 if (BINFO_MARKED (base_binfo))
8151 continue;
8152
8153 this_virtual =
8154 (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
8155
8156 /* When searching for a non-virtual, we cannot mark virtually
8157 found binfos. */
8158 if (! this_virtual)
8159 SET_BINFO_MARKED (base_binfo);
8160
8161 rval = get_template_base_recursive (tparms, targs,
8162 parm,
8163 base_binfo,
8164 rval,
8165 GTB_VIA_VIRTUAL * this_virtual);
8166
8167 /* If we discovered more than one matching base class, we can
8168 stop now. */
8169 if (rval == error_mark_node)
8170 return error_mark_node;
fcfb9f96
MM
8171 }
8172
8173 return rval;
8174}
8175
4393e105
MM
8176/* Given a template type PARM and a class type ARG, find the unique
8177 base type in ARG that is an instance of PARM. We do not examine
8178 ARG itself; only its base-classes. If there is no appropriate base
8179 class, return NULL_TREE. If there is more than one, return
8180 error_mark_node. PARM may be the type of a partial specialization,
8181 as well as a plain template type. Used by unify. */
fcfb9f96
MM
8182
8183static tree
4393e105 8184get_template_base (tparms, targs, parm, arg)
fcfb9f96
MM
8185 tree tparms;
8186 tree targs;
4393e105
MM
8187 tree parm;
8188 tree arg;
fcfb9f96 8189{
4393e105
MM
8190 tree rval;
8191 tree arg_binfo;
fcfb9f96 8192
4393e105
MM
8193 my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
8194
8195 arg_binfo = TYPE_BINFO (complete_type (arg));
8196 rval = get_template_base_recursive (tparms, targs,
8197 parm, arg_binfo,
8198 NULL_TREE,
8199 GTB_IGNORE_TYPE);
fcfb9f96 8200
4393e105
MM
8201 /* Since get_template_base_recursive marks the bases classes, we
8202 must unmark them here. */
d6479fe7 8203 dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
fcfb9f96
MM
8204
8205 return rval;
8206}
8207
db2767b6
MM
8208/* Returns the level of DECL, which declares a template parameter. */
8209
e9659ab0 8210static int
db2767b6
MM
8211template_decl_level (decl)
8212 tree decl;
8213{
8214 switch (TREE_CODE (decl))
8215 {
8216 case TYPE_DECL:
8217 case TEMPLATE_DECL:
8218 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
8219
8220 case PARM_DECL:
8221 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
8222
8223 default:
8224 my_friendly_abort (0);
5ffe581d 8225 return 0;
db2767b6
MM
8226 }
8227}
8228
830bfa74
MM
8229/* Decide whether ARG can be unified with PARM, considering only the
8230 cv-qualifiers of each type, given STRICT as documented for unify.
8231 Returns non-zero iff the unification is OK on that basis.*/
e92cc029 8232
e9659ab0 8233static int
830bfa74
MM
8234check_cv_quals_for_unify (strict, arg, parm)
8235 int strict;
8236 tree arg;
8237 tree parm;
8238{
ef637255
MM
8239 if (!(strict & UNIFY_ALLOW_MORE_CV_QUAL)
8240 && !at_least_as_qualified_p (arg, parm))
8241 return 0;
8242
8243 if (!(strict & UNIFY_ALLOW_LESS_CV_QUAL)
8244 && !at_least_as_qualified_p (parm, arg))
8245 return 0;
8246
ef637255 8247 return 1;
830bfa74
MM
8248}
8249
8250/* Takes parameters as for type_unification. Returns 0 if the
8251 type deduction suceeds, 1 otherwise. The parameter STRICT is a
8252 bitwise or of the following flags:
8253
8254 UNIFY_ALLOW_NONE:
8255 Require an exact match between PARM and ARG.
8256 UNIFY_ALLOW_MORE_CV_QUAL:
8257 Allow the deduced ARG to be more cv-qualified than ARG.
8258 UNIFY_ALLOW_LESS_CV_QUAL:
8259 Allow the deduced ARG to be less cv-qualified than ARG.
8260 UNIFY_ALLOW_DERIVED:
8261 Allow the deduced ARG to be a template base class of ARG,
8262 or a pointer to a template base class of the type pointed to by
161c12b0
JM
8263 ARG.
8264 UNIFY_ALLOW_INTEGER:
8265 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
8266 case for more information. */
830bfa74 8267
e9659ab0 8268static int
4393e105 8269unify (tparms, targs, parm, arg, strict)
050367a3 8270 tree tparms, targs, parm, arg;
830bfa74 8271 int strict;
8d08fdba
MS
8272{
8273 int idx;
050367a3 8274 tree targ;
db2767b6 8275 tree tparm;
8d08fdba
MS
8276
8277 /* I don't think this will do the right thing with respect to types.
8278 But the only case I've seen it in so far has been array bounds, where
8279 signedness is the only information lost, and I think that will be
8280 okay. */
8281 while (TREE_CODE (parm) == NOP_EXPR)
8282 parm = TREE_OPERAND (parm, 0);
8283
8284 if (arg == error_mark_node)
8285 return 1;
8286 if (arg == unknown_type_node)
34016c81
JM
8287 /* We can't deduce anything from this, but we might get all the
8288 template args from other function args. */
8289 return 0;
8290
db2767b6 8291 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 8292 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
8293 template parameters. We might need them if we're trying to
8294 figure out which of two things is more specialized. */
8295 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
8296 return 0;
8297
830bfa74
MM
8298 /* Immediately reject some pairs that won't unify because of
8299 cv-qualification mismatches. */
8300 if (TREE_CODE (arg) == TREE_CODE (parm)
2f939d94 8301 && TYPE_P (arg)
830bfa74
MM
8302 /* We check the cv-qualifiers when unifying with template type
8303 parameters below. We want to allow ARG `const T' to unify with
8304 PARM `T' for example, when computing which of two templates
8305 is more specialized, for example. */
8306 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
8307 && !check_cv_quals_for_unify (strict, arg, parm))
49432171
JM
8308 return 1;
8309
8d08fdba
MS
8310 switch (TREE_CODE (parm))
8311 {
2ca340ae
JM
8312 case TYPENAME_TYPE:
8313 /* In a type which contains a nested-name-specifier, template
8314 argument values cannot be deduced for template parameters used
8315 within the nested-name-specifier. */
8316 return 0;
8317
8d08fdba 8318 case TEMPLATE_TYPE_PARM:
73b0fce8 8319 case TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
8320 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8321
8322 if (TEMPLATE_TYPE_LEVEL (parm)
8323 != template_decl_level (tparm))
8324 /* The PARM is not one we're trying to unify. Just check
8325 to see if it matches ARG. */
8326 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 8327 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 8328 idx = TEMPLATE_TYPE_IDX (parm);
050367a3 8329 targ = TREE_VEC_ELT (targs, idx);
db2767b6 8330 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 8331
73b0fce8 8332 /* Check for mixed types and values. */
db2767b6
MM
8333 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
8334 && TREE_CODE (tparm) != TYPE_DECL)
8335 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
8336 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
8337 return 1;
8338
db2767b6 8339 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
73b0fce8 8340 {
7ddedda4 8341 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm))
db2767b6
MM
8342 {
8343 /* We arrive here when PARM does not involve template
8344 specialization. */
73b0fce8 8345
db2767b6
MM
8346 /* ARG must be constructed from a template class. */
8347 if (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg))
8348 return 1;
73b0fce8 8349
db2767b6 8350 {
7ddedda4
MM
8351 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
8352 tree parmvec = TYPE_TI_ARGS (parm);
db2767b6
MM
8353 tree argvec = CLASSTYPE_TI_ARGS (arg);
8354 tree argtmplvec
8355 = DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (arg));
8356 int i;
8357
8358 /* The parameter and argument roles have to be switched here
8359 in order to handle default arguments properly. For example,
8360 template<template <class> class TT> void f(TT<int>)
8361 should be able to accept vector<int> which comes from
744fac59 8362 template <class T, class Allocator = allocator>
73b0fce8
KL
8363 class vector. */
8364
fcfcdfc8 8365 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
db2767b6
MM
8366 == error_mark_node)
8367 return 1;
73b0fce8 8368
6b9b6b15
JM
8369 /* Deduce arguments T, i from TT<T> or TT<i>.
8370 We check each element of PARMVEC and ARGVEC individually
8371 rather than the whole TREE_VEC since they can have
8372 different number of elements. */
8373
db2767b6
MM
8374 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
8375 {
8376 tree t = TREE_VEC_ELT (parmvec, i);
73b0fce8 8377
830bfa74
MM
8378 if (unify (tparms, targs, t,
8379 TREE_VEC_ELT (argvec, i),
4393e105 8380 UNIFY_ALLOW_NONE))
db2767b6
MM
8381 return 1;
8382 }
73b0fce8 8383 }
db2767b6
MM
8384 arg = CLASSTYPE_TI_TEMPLATE (arg);
8385 }
8386 }
8387 else
8388 {
830bfa74
MM
8389 /* If PARM is `const T' and ARG is only `int', we don't have
8390 a match unless we are allowing additional qualification.
8391 If ARG is `const int' and PARM is just `T' that's OK;
8392 that binds `const int' to `T'. */
8393 if (!check_cv_quals_for_unify (strict | UNIFY_ALLOW_LESS_CV_QUAL,
8394 arg, parm))
db2767b6
MM
8395 return 1;
8396
830bfa74
MM
8397 /* Consider the case where ARG is `const volatile int' and
8398 PARM is `const T'. Then, T should be `volatile int'. */
8399 arg =
adecb3f4
MM
8400 cp_build_qualified_type_real (arg,
8401 CP_TYPE_QUALS (arg)
8402 & ~CP_TYPE_QUALS (parm),
8403 /*complain=*/0);
8404 if (arg == error_mark_node)
8405 return 1;
73b0fce8
KL
8406 }
8407
8408 /* Simple cases: Value already set, does match or doesn't. */
4393e105 8409 if (targ != NULL_TREE && same_type_p (targ, arg))
73b0fce8 8410 return 0;
050367a3 8411 else if (targ)
73b0fce8 8412 return 1;
61cd552e
MM
8413
8414 /* Make sure that ARG is not a variable-sized array. (Note that
8415 were talking about variable-sized arrays (like `int[n]'),
8416 rather than arrays of unknown size (like `int[]').) We'll
8417 get very confused by such a type since the bound of the array
8418 will not be computable in an instantiation. Besides, such
8419 types are not allowed in ISO C++, so we can do as we please
8420 here. */
8421 if (TREE_CODE (arg) == ARRAY_TYPE
8422 && !uses_template_parms (arg)
8423 && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
8424 != INTEGER_CST))
8425 return 1;
8426
050367a3 8427 TREE_VEC_ELT (targs, idx) = arg;
73b0fce8
KL
8428 return 0;
8429
f84b4be9 8430 case TEMPLATE_PARM_INDEX:
db2767b6
MM
8431 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8432
8433 if (TEMPLATE_PARM_LEVEL (parm)
8434 != template_decl_level (tparm))
8435 /* The PARM is not one we're trying to unify. Just check
8436 to see if it matches ARG. */
8437 return (TREE_CODE (arg) == TREE_CODE (parm)
67ffc812 8438 && cp_tree_equal (parm, arg) > 0) ? 0 : 1;
db2767b6 8439
f84b4be9 8440 idx = TEMPLATE_PARM_IDX (parm);
050367a3 8441 targ = TREE_VEC_ELT (targs, idx);
db2767b6 8442
050367a3 8443 if (targ)
8d08fdba 8444 {
67ffc812 8445 int i = (cp_tree_equal (targ, arg) > 0);
312e7d50
JM
8446 if (i == 1)
8447 return 0;
8448 else if (i == 0)
8449 return 1;
8450 else
8451 my_friendly_abort (42);
8d08fdba 8452 }
8d08fdba 8453
161c12b0
JM
8454 /* [temp.deduct.type] If, in the declaration of a function template
8455 with a non-type template-parameter, the non-type
8456 template-parameter is used in an expression in the function
8457 parameter-list and, if the corresponding template-argument is
8458 deduced, the template-argument type shall match the type of the
8459 template-parameter exactly, except that a template-argument
8460 deduced from an array bound may be of any integral type. */
8461 if (same_type_p (TREE_TYPE (arg), TREE_TYPE (parm)))
8462 /* OK */;
8463 else if ((strict & UNIFY_ALLOW_INTEGER)
8464 && (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
8465 || TREE_CODE (TREE_TYPE (parm)) == BOOLEAN_TYPE))
8466 /* OK */;
8467 else
8468 return 1;
8469
2a1e9fdd 8470 TREE_VEC_ELT (targs, idx) = arg;
8d08fdba
MS
8471 return 0;
8472
8473 case POINTER_TYPE:
830bfa74
MM
8474 {
8475 int sub_strict;
4ac14744 8476
830bfa74
MM
8477 if (TREE_CODE (arg) != POINTER_TYPE)
8478 return 1;
8479
8480 /* [temp.deduct.call]
8481
8482 A can be another pointer or pointer to member type that can
8483 be converted to the deduced A via a qualification
8484 conversion (_conv.qual_).
8485
8486 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
8487 This will allow for additional cv-qualification of the
8488 pointed-to types if appropriate. In general, this is a bit
8489 too generous; we are only supposed to allow qualification
8490 conversions and this method will allow an ARG of char** and
8491 a deduced ARG of const char**. However, overload
8492 resolution will subsequently invalidate the candidate, so
8493 this is probably OK. */
8494 sub_strict = strict;
8495
a7a64a77 8496 if (TREE_CODE (TREE_TYPE (arg)) != RECORD_TYPE)
830bfa74
MM
8497 /* The derived-to-base conversion only persists through one
8498 level of pointers. */
8499 sub_strict &= ~UNIFY_ALLOW_DERIVED;
8500
a7a64a77
MM
8501 return unify (tparms, targs, TREE_TYPE (parm),
8502 TREE_TYPE (arg), sub_strict);
830bfa74 8503 }
8d08fdba
MS
8504
8505 case REFERENCE_TYPE:
830bfa74
MM
8506 if (TREE_CODE (arg) != REFERENCE_TYPE)
8507 return 1;
8508 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8509 UNIFY_ALLOW_NONE);
8d08fdba
MS
8510
8511 case ARRAY_TYPE:
8512 if (TREE_CODE (arg) != ARRAY_TYPE)
8513 return 1;
3042d5be
MM
8514 if ((TYPE_DOMAIN (parm) == NULL_TREE)
8515 != (TYPE_DOMAIN (arg) == NULL_TREE))
8516 return 1;
8517 if (TYPE_DOMAIN (parm) != NULL_TREE
830bfa74 8518 && unify (tparms, targs, TYPE_DOMAIN (parm),
4393e105 8519 TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
8d08fdba 8520 return 1;
830bfa74 8521 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8522 UNIFY_ALLOW_NONE);
8d08fdba
MS
8523
8524 case REAL_TYPE:
37c46b43 8525 case COMPLEX_TYPE:
8d08fdba 8526 case INTEGER_TYPE:
42976354 8527 case BOOLEAN_TYPE:
5ad5a526 8528 case VOID_TYPE:
f376e137
MS
8529 if (TREE_CODE (arg) != TREE_CODE (parm))
8530 return 1;
8531
514a1f18
JM
8532 if (TREE_CODE (parm) == INTEGER_TYPE
8533 && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
8d08fdba
MS
8534 {
8535 if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
830bfa74 8536 && unify (tparms, targs, TYPE_MIN_VALUE (parm),
4393e105 8537 TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
8538 return 1;
8539 if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
830bfa74 8540 && unify (tparms, targs, TYPE_MAX_VALUE (parm),
4393e105 8541 TYPE_MAX_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
8542 return 1;
8543 }
9edc3913 8544 /* We have already checked cv-qualification at the top of the
514a1f18 8545 function. */
9edc3913 8546 else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
ca79f85d
JM
8547 return 1;
8548
8d08fdba
MS
8549 /* As far as unification is concerned, this wins. Later checks
8550 will invalidate it if necessary. */
8551 return 0;
8552
8553 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 8554 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 8555 case INTEGER_CST:
bd6dd845
MS
8556 while (TREE_CODE (arg) == NOP_EXPR)
8557 arg = TREE_OPERAND (arg, 0);
8558
8d08fdba
MS
8559 if (TREE_CODE (arg) != INTEGER_CST)
8560 return 1;
8561 return !tree_int_cst_equal (parm, arg);
8562
8d08fdba
MS
8563 case TREE_VEC:
8564 {
8565 int i;
8566 if (TREE_CODE (arg) != TREE_VEC)
8567 return 1;
8568 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
8569 return 1;
8570 for (i = TREE_VEC_LENGTH (parm) - 1; i >= 0; i--)
830bfa74 8571 if (unify (tparms, targs,
8d08fdba 8572 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 8573 UNIFY_ALLOW_NONE))
8d08fdba
MS
8574 return 1;
8575 return 0;
8576 }
8577
8d08fdba 8578 case RECORD_TYPE:
f181d4ae 8579 case UNION_TYPE:
f181d4ae 8580 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 8581 return 1;
830bfa74 8582
a7a64a77
MM
8583 if (TYPE_PTRMEMFUNC_P (parm))
8584 {
8585 if (!TYPE_PTRMEMFUNC_P (arg))
8586 return 1;
8587
8588 return unify (tparms, targs,
8589 TYPE_PTRMEMFUNC_FN_TYPE (parm),
8590 TYPE_PTRMEMFUNC_FN_TYPE (arg),
8591 strict);
8592 }
8593
5db698f6 8594 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 8595 {
6467930b 8596 tree t = NULL_TREE;
4393e105 8597
830bfa74 8598 if (strict & UNIFY_ALLOW_DERIVED)
4393e105
MM
8599 {
8600 /* First, we try to unify the PARM and ARG directly. */
8601 t = try_class_unification (tparms, targs,
8602 parm, arg);
8603
8604 if (!t)
8605 {
8606 /* Fallback to the special case allowed in
8607 [temp.deduct.call]:
8608
8609 If P is a class, and P has the form
8610 template-id, then A can be a derived class of
8611 the deduced A. Likewise, if P is a pointer to
8612 a class of the form template-id, A can be a
8613 pointer to a derived class pointed to by the
8614 deduced A. */
8615 t = get_template_base (tparms, targs,
8616 parm, arg);
8617
8618 if (! t || t == error_mark_node)
8619 return 1;
8620 }
8621 }
6df47b06 8622 else if (CLASSTYPE_TEMPLATE_INFO (arg)
9fbf56f7
MM
8623 && (CLASSTYPE_TI_TEMPLATE (parm)
8624 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
8625 /* Perhaps PARM is something like S<U> and ARG is S<int>.
8626 Then, we should unify `int' and `U'. */
6467930b 8627 t = arg;
4393e105
MM
8628 else
8629 /* There's no chance of unication succeeding. */
5566b478 8630 return 1;
6467930b 8631
830bfa74 8632 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 8633 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 8634 }
9edc3913 8635 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
5566b478 8636 return 1;
a4443a08 8637 return 0;
8d08fdba
MS
8638
8639 case METHOD_TYPE:
8d08fdba 8640 case FUNCTION_TYPE:
830bfa74 8641 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 8642 return 1;
830bfa74
MM
8643
8644 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 8645 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 8646 return 1;
386b8a85 8647 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
3b3ba9f0 8648 TYPE_ARG_TYPES (arg), 1,
4393e105 8649 DEDUCE_EXACT, 0);
a4443a08
MS
8650
8651 case OFFSET_TYPE:
8652 if (TREE_CODE (arg) != OFFSET_TYPE)
8653 return 1;
830bfa74 8654 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 8655 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 8656 return 1;
830bfa74 8657 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8658 strict);
a4443a08 8659
f62dbf03 8660 case CONST_DECL:
830bfa74 8661 if (arg != decl_constant_value (parm))
f62dbf03
JM
8662 return 1;
8663 return 0;
8664
027905b4
KL
8665 case TEMPLATE_DECL:
8666 /* Matched cases are handled by the ARG == PARM test above. */
8667 return 1;
8668
53929c47
JM
8669 case MINUS_EXPR:
8670 if (TREE_CODE (TREE_OPERAND (parm, 1)) == INTEGER_CST)
8671 {
8672 /* We handle this case specially, since it comes up with
8673 arrays. In particular, something like:
8674
8675 template <int N> void f(int (&x)[N]);
8676
8677 Here, we are trying to unify the range type, which
8678 looks like [0 ... (N - 1)]. */
8679 tree t, t1, t2;
8680 t1 = TREE_OPERAND (parm, 0);
8681 t2 = TREE_OPERAND (parm, 1);
8682
24e2e58e 8683 t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
53929c47 8684
4393e105 8685 return unify (tparms, targs, t1, t, strict);
53929c47
JM
8686 }
8687 /* else fall through */
8688
8d08fdba 8689 default:
050367a3 8690 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
4393e105
MM
8691 /* We're looking at an expression. This can happen with
8692 something like:
8693
8694 template <int I>
8695 void foo(S<I>, S<I + 2>);
050367a3 8696
4393e105 8697 This is a "nondeduced context":
050367a3 8698
4393e105
MM
8699 [deduct.type]
8700
8701 The nondeduced contexts are:
050367a3 8702
4393e105
MM
8703 --A type that is a template-id in which one or more of
8704 the template-arguments is an expression that references
8705 a template-parameter.
050367a3 8706
4393e105
MM
8707 In these cases, we assume deduction succeeded, but don't
8708 actually infer any unifications. */
8709 return 0;
050367a3 8710 else
b4c4a9ec
MM
8711 sorry ("use of `%s' in template type unification",
8712 tree_code_name [(int) TREE_CODE (parm)]);
050367a3 8713
8d08fdba
MS
8714 return 1;
8715 }
8716}
8d08fdba 8717\f
03d0f4af
MM
8718/* Called if RESULT is explicitly instantiated, or is a member of an
8719 explicitly instantiated class, or if using -frepo and the
8720 instantiation of RESULT has been assigned to this file. */
8721
faae18ab 8722void
5566b478 8723mark_decl_instantiated (result, extern_p)
faae18ab
MS
8724 tree result;
8725 int extern_p;
8726{
75650646
MM
8727 if (TREE_CODE (result) != FUNCTION_DECL)
8728 /* The TREE_PUBLIC flag for function declarations will have been
8729 set correctly by tsubst. */
8730 TREE_PUBLIC (result) = 1;
faae18ab
MS
8731
8732 if (! extern_p)
8733 {
8734 DECL_INTERFACE_KNOWN (result) = 1;
8735 DECL_NOT_REALLY_EXTERN (result) = 1;
a7d87521 8736
1a408d07
JM
8737 /* Always make artificials weak. */
8738 if (DECL_ARTIFICIAL (result) && flag_weak)
8739 comdat_linkage (result);
a7d87521
JM
8740 /* For WIN32 we also want to put explicit instantiations in
8741 linkonce sections. */
1a408d07 8742 else if (TREE_PUBLIC (result))
b385c841 8743 maybe_make_one_only (result);
faae18ab 8744 }
f49422da 8745 else if (TREE_CODE (result) == FUNCTION_DECL)
56e770bf 8746 defer_fn (result);
faae18ab
MS
8747}
8748
e1467ff2
MM
8749/* Given two function templates PAT1 and PAT2, and explicit template
8750 arguments EXPLICIT_ARGS return:
6467930b
MS
8751
8752 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
8753 -1 if PAT2 is more specialized than PAT1.
8754 0 if neither is more specialized. */
8755
8756int
e1467ff2
MM
8757more_specialized (pat1, pat2, explicit_args)
8758 tree pat1, pat2, explicit_args;
6467930b 8759{
98c1c668 8760 tree targs;
73aad9b9 8761 int winner = 0;
6467930b 8762
17aec3eb
RK
8763 targs
8764 = get_bindings_overload (pat1, DECL_TEMPLATE_RESULT (pat2), explicit_args);
73aad9b9 8765 if (targs)
36a117a5 8766 --winner;
6467930b 8767
17aec3eb
RK
8768 targs
8769 = get_bindings_overload (pat2, DECL_TEMPLATE_RESULT (pat1), explicit_args);
73aad9b9 8770 if (targs)
36a117a5 8771 ++winner;
6467930b 8772
73aad9b9
JM
8773 return winner;
8774}
6467930b 8775
73aad9b9 8776/* Given two class template specialization list nodes PAT1 and PAT2, return:
6467930b 8777
73aad9b9
JM
8778 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
8779 -1 if PAT2 is more specialized than PAT1.
8780 0 if neither is more specialized. */
8781
8782int
8783more_specialized_class (pat1, pat2)
8784 tree pat1, pat2;
8785{
8786 tree targs;
8787 int winner = 0;
8788
36a117a5
MM
8789 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
8790 TREE_PURPOSE (pat2));
73aad9b9
JM
8791 if (targs)
8792 --winner;
8793
36a117a5
MM
8794 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
8795 TREE_PURPOSE (pat1));
73aad9b9 8796 if (targs)
6467930b
MS
8797 ++winner;
8798
8799 return winner;
8800}
73aad9b9
JM
8801
8802/* Return the template arguments that will produce the function signature
e1467ff2 8803 DECL from the function template FN, with the explicit template
76b9a14d 8804 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
4393e105
MM
8805 also match. Return NULL_TREE if no satisfactory arguments could be
8806 found. */
73aad9b9 8807
76b9a14d
JM
8808static tree
8809get_bindings_real (fn, decl, explicit_args, check_rettype)
e1467ff2 8810 tree fn, decl, explicit_args;
76b9a14d 8811 int check_rettype;
73aad9b9 8812{
98c1c668 8813 int ntparms = DECL_NTPARMS (fn);
f31c0a32 8814 tree targs = make_tree_vec (ntparms);
4393e105 8815 tree decl_type;
03017874 8816 tree decl_arg_types;
98c1c668
JM
8817 int i;
8818
4393e105
MM
8819 /* Substitute the explicit template arguments into the type of DECL.
8820 The call to fn_type_unification will handle substitution into the
8821 FN. */
8822 decl_type = TREE_TYPE (decl);
8823 if (explicit_args && uses_template_parms (decl_type))
8824 {
8825 tree tmpl;
8826 tree converted_args;
8827
8828 if (DECL_TEMPLATE_INFO (decl))
8829 tmpl = DECL_TI_TEMPLATE (decl);
8830 else
8831 /* We can get here for some illegal specializations. */
8832 return NULL_TREE;
8833
8834 converted_args
8835 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
8836 explicit_args, NULL_TREE,
8837 /*complain=*/0,
8838 /*require_all_arguments=*/0));
8839 if (converted_args == error_mark_node)
8840 return NULL_TREE;
8841
8842 decl_type = tsubst (decl_type, converted_args, /*complain=*/0,
8843 NULL_TREE);
8844 if (decl_type == error_mark_node)
8845 return NULL_TREE;
8846 }
8847
03017874
MM
8848 /* If FN is a static member function, adjust the type of DECL
8849 appropriately. */
4393e105 8850 decl_arg_types = TYPE_ARG_TYPES (decl_type);
d7684f2d
MM
8851 if (DECL_STATIC_FUNCTION_P (fn)
8852 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
03017874 8853 decl_arg_types = TREE_CHAIN (decl_arg_types);
d7684f2d 8854
e1467ff2 8855 i = fn_type_unification (fn, explicit_args, targs,
03017874 8856 decl_arg_types,
8d3631f8
NS
8857 (check_rettype || DECL_CONV_FN_P (fn)
8858 ? TREE_TYPE (decl_type) : NULL_TREE),
03017874 8859 DEDUCE_EXACT);
98c1c668 8860
76b9a14d
JM
8861 if (i != 0)
8862 return NULL_TREE;
8863
76b9a14d
JM
8864 return targs;
8865}
8866
8867/* For most uses, we want to check the return type. */
8868
8869tree
8870get_bindings (fn, decl, explicit_args)
8871 tree fn, decl, explicit_args;
8872{
8873 return get_bindings_real (fn, decl, explicit_args, 1);
8874}
8875
8876/* But for more_specialized, we only care about the parameter types. */
8877
8878static tree
8879get_bindings_overload (fn, decl, explicit_args)
8880 tree fn, decl, explicit_args;
8881{
8882 return get_bindings_real (fn, decl, explicit_args, 0);
73aad9b9
JM
8883}
8884
36a117a5
MM
8885/* Return the innermost template arguments that, when applied to a
8886 template specialization whose innermost template parameters are
8887 TPARMS, and whose specialization arguments are ARGS, yield the
8888 ARGS.
8889
8890 For example, suppose we have:
8891
8892 template <class T, class U> struct S {};
8893 template <class T> struct S<T*, int> {};
8894
8895 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
8896 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
8897 int}. The resulting vector will be {double}, indicating that `T'
8898 is bound to `double'. */
8899
bd6dd845 8900static tree
36a117a5
MM
8901get_class_bindings (tparms, parms, args)
8902 tree tparms, parms, args;
73aad9b9 8903{
3b3ba9f0 8904 int i, ntparms = TREE_VEC_LENGTH (tparms);
f31c0a32 8905 tree vec = make_tree_vec (ntparms);
73aad9b9 8906
f9a7ae04 8907 args = INNERMOST_TEMPLATE_ARGS (args);
8d019cef 8908
4393e105 8909 if (unify (tparms, vec, parms, args, UNIFY_ALLOW_NONE))
fcfb9f96 8910 return NULL_TREE;
73aad9b9
JM
8911
8912 for (i = 0; i < ntparms; ++i)
8913 if (! TREE_VEC_ELT (vec, i))
8914 return NULL_TREE;
8915
8916 return vec;
8917}
8918
104bf76a
MM
8919/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
8920 Pick the most specialized template, and return the corresponding
8921 instantiation, or if there is no corresponding instantiation, the
8922 template itself. EXPLICIT_ARGS is any template arguments explicity
8923 mentioned in a template-id. If there is no most specialized
5186142b 8924 template, error_mark_node is returned. If there are no templates
104bf76a 8925 at all, NULL_TREE is returned. */
73aad9b9
JM
8926
8927tree
104bf76a
MM
8928most_specialized_instantiation (instantiations, explicit_args)
8929 tree instantiations;
8930 tree explicit_args;
73aad9b9 8931{
104bf76a 8932 tree fn, champ;
73aad9b9
JM
8933 int fate;
8934
104bf76a 8935 if (!instantiations)
73aad9b9
JM
8936 return NULL_TREE;
8937
104bf76a
MM
8938 champ = instantiations;
8939 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
73aad9b9 8940 {
104bf76a
MM
8941 fate = more_specialized (TREE_VALUE (champ),
8942 TREE_VALUE (fn), explicit_args);
73aad9b9
JM
8943 if (fate == 1)
8944 ;
8945 else
8946 {
8947 if (fate == 0)
8948 {
8949 fn = TREE_CHAIN (fn);
8950 if (! fn)
8951 return error_mark_node;
8952 }
104bf76a 8953 champ = fn;
73aad9b9
JM
8954 }
8955 }
8956
104bf76a 8957 for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
73aad9b9 8958 {
104bf76a
MM
8959 fate = more_specialized (TREE_VALUE (champ),
8960 TREE_VALUE (fn), explicit_args);
73aad9b9
JM
8961 if (fate != 1)
8962 return error_mark_node;
8963 }
8964
104bf76a
MM
8965 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
8966}
8967
8968/* Return the most specialized of the list of templates in FNS that can
8969 produce an instantiation matching DECL, given the explicit template
8970 arguments EXPLICIT_ARGS. */
8971
e9659ab0 8972static tree
104bf76a
MM
8973most_specialized (fns, decl, explicit_args)
8974 tree fns, decl, explicit_args;
8975{
8976 tree candidates = NULL_TREE;
8977 tree fn, args;
8978
8979 for (fn = fns; fn; fn = TREE_CHAIN (fn))
8980 {
8981 tree candidate = TREE_VALUE (fn);
8982
8983 args = get_bindings (candidate, decl, explicit_args);
8984 if (args)
e1b3e07d 8985 candidates = tree_cons (NULL_TREE, candidate, candidates);
104bf76a
MM
8986 }
8987
8988 return most_specialized_instantiation (candidates, explicit_args);
73aad9b9
JM
8989}
8990
36a117a5 8991/* If DECL is a specialization of some template, return the most
f9a7ae04
MM
8992 general such template. Otherwise, returns NULL_TREE.
8993
8994 For example, given:
36a117a5
MM
8995
8996 template <class T> struct S { template <class U> void f(U); };
8997
8998 if TMPL is `template <class U> void S<int>::f(U)' this will return
8999 the full template. This function will not trace past partial
9000 specializations, however. For example, given in addition:
9001
9002 template <class T> struct S<T*> { template <class U> void f(U); };
9003
9004 if TMPL is `template <class U> void S<int*>::f(U)' this will return
9005 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 9006
612c671a 9007tree
36a117a5
MM
9008most_general_template (decl)
9009 tree decl;
73aad9b9 9010{
f9a7ae04
MM
9011 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
9012 an immediate specialization. */
9013 if (TREE_CODE (decl) == FUNCTION_DECL)
9014 {
9015 if (DECL_TEMPLATE_INFO (decl)) {
9016 decl = DECL_TI_TEMPLATE (decl);
9017
9018 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
9019 template friend. */
9020 if (TREE_CODE (decl) != TEMPLATE_DECL)
9021 return NULL_TREE;
9022 } else
9023 return NULL_TREE;
9024 }
9025
9026 /* Look for more and more general templates. */
9027 while (DECL_TEMPLATE_INFO (decl))
9028 {
9029 /* The DECL_TI_TEMPLATE can be a LOOKUP_EXPR or IDENTIFIER_NODE
9030 in some cases. (See cp-tree.h for details.) */
9031 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
9032 break;
9033
9034 /* Stop if we run into an explicitly specialized class template. */
9035 if (!DECL_NAMESPACE_SCOPE_P (decl)
9036 && DECL_CONTEXT (decl)
9037 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
9038 break;
9039
9040 decl = DECL_TI_TEMPLATE (decl);
9041 }
36a117a5
MM
9042
9043 return decl;
9044}
9045
9046/* Return the most specialized of the class template specializations
9047 of TMPL which can produce an instantiation matching ARGS, or
9048 error_mark_node if the choice is ambiguous. */
9049
e9659ab0 9050static tree
36a117a5
MM
9051most_specialized_class (tmpl, args)
9052 tree tmpl;
9053 tree args;
9054{
9055 tree list = NULL_TREE;
9056 tree t;
9057 tree champ;
73aad9b9
JM
9058 int fate;
9059
36a117a5
MM
9060 tmpl = most_general_template (tmpl);
9061 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 9062 {
36a117a5
MM
9063 tree spec_args
9064 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
9065 if (spec_args)
73aad9b9
JM
9066 {
9067 list = decl_tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
9068 TREE_TYPE (list) = TREE_TYPE (t);
9069 }
9070 }
9071
9072 if (! list)
9073 return NULL_TREE;
9074
9075 t = list;
9076 champ = t;
9077 t = TREE_CHAIN (t);
9078 for (; t; t = TREE_CHAIN (t))
9079 {
9080 fate = more_specialized_class (champ, t);
9081 if (fate == 1)
9082 ;
9083 else
9084 {
9085 if (fate == 0)
9086 {
9087 t = TREE_CHAIN (t);
9088 if (! t)
9089 return error_mark_node;
9090 }
9091 champ = t;
9092 }
9093 }
9094
9095 for (t = list; t && t != champ; t = TREE_CHAIN (t))
9096 {
85b71cf2 9097 fate = more_specialized_class (champ, t);
73aad9b9
JM
9098 if (fate != 1)
9099 return error_mark_node;
9100 }
9101
9102 return champ;
9103}
9104
8d08fdba 9105/* called from the parser. */
e92cc029 9106
8d08fdba 9107void
6633d636 9108do_decl_instantiation (declspecs, declarator, storage)
f0e01782 9109 tree declspecs, declarator, storage;
8d08fdba 9110{
c11b6f21 9111 tree decl = grokdeclarator (declarator, declspecs, NORMAL, 0, NULL_TREE);
8d08fdba 9112 tree result = NULL_TREE;
faae18ab 9113 int extern_p = 0;
e8abc66f 9114
3fa56191
MM
9115 if (!decl)
9116 /* An error ocurred, for which grokdeclarator has already issued
9117 an appropriate message. */
9118 return;
9119 else if (! DECL_LANG_SPECIFIC (decl))
ec255269 9120 {
8251199e 9121 cp_error ("explicit instantiation of non-template `%#D'", decl);
ec255269
MS
9122 return;
9123 }
03d0f4af 9124 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 9125 {
03d0f4af
MM
9126 /* There is an asymmetry here in the way VAR_DECLs and
9127 FUNCTION_DECLs are handled by grokdeclarator. In the case of
9128 the latter, the DECL we get back will be marked as a
9129 template instantiation, and the appropriate
9130 DECL_TEMPLATE_INFO will be set up. This does not happen for
9131 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
9132 should handle VAR_DECLs as it currently handles
9133 FUNCTION_DECLs. */
6633d636
MS
9134 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, 0);
9135 if (result && TREE_CODE (result) != VAR_DECL)
03d0f4af 9136 {
8251199e 9137 cp_error ("no matching template for `%D' found", result);
03d0f4af
MM
9138 return;
9139 }
6633d636
MS
9140 }
9141 else if (TREE_CODE (decl) != FUNCTION_DECL)
9142 {
8251199e 9143 cp_error ("explicit instantiation of `%#D'", decl);
6633d636
MS
9144 return;
9145 }
03d0f4af
MM
9146 else
9147 result = decl;
672476cb 9148
03d0f4af
MM
9149 /* Check for various error cases. Note that if the explicit
9150 instantiation is legal the RESULT will currently be marked as an
9151 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
9152 until we get here. */
9153
9154 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 9155 {
03d0f4af
MM
9156 /* [temp.spec]
9157
9158 No program shall both explicitly instantiate and explicitly
9159 specialize a template. */
6f1b4c42
JM
9160 cp_pedwarn ("explicit instantiation of `%#D' after", result);
9161 cp_pedwarn_at ("explicit specialization here", result);
672476cb
MM
9162 return;
9163 }
03d0f4af
MM
9164 else if (DECL_EXPLICIT_INSTANTIATION (result))
9165 {
9166 /* [temp.spec]
98c1c668 9167
03d0f4af
MM
9168 No program shall explicitly instantiate any template more
9169 than once.
9170
2aaf816d
JM
9171 We check DECL_INTERFACE_KNOWN so as not to complain when the first
9172 instantiation was `extern' and the second is not, and EXTERN_P for
9173 the opposite case. If -frepo, chances are we already got marked
9174 as an explicit instantion because of the repo file. */
9175 if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
6f1b4c42 9176 cp_pedwarn ("duplicate explicit instantiation of `%#D'", result);
03d0f4af
MM
9177
9178 /* If we've already instantiated the template, just return now. */
9179 if (DECL_INTERFACE_KNOWN (result))
9180 return;
9181 }
9182 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 9183 {
8251199e 9184 cp_error ("no matching template for `%D' found", result);
faae18ab
MS
9185 return;
9186 }
03d0f4af 9187 else if (!DECL_TEMPLATE_INFO (result))
6633d636 9188 {
8251199e 9189 cp_pedwarn ("explicit instantiation of non-template `%#D'", result);
6633d636
MS
9190 return;
9191 }
9192
a0a33927
MS
9193 if (flag_external_templates)
9194 return;
9195
f0e01782 9196 if (storage == NULL_TREE)
00595019 9197 ;
faae18ab 9198 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af
MM
9199 {
9200 if (pedantic)
cab1f180 9201 cp_pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
03d0f4af
MM
9202 extern_p = 1;
9203 }
f0e01782 9204 else
8251199e 9205 cp_error ("storage class `%D' applied to template instantiation",
f0e01782 9206 storage);
5566b478 9207
03d0f4af 9208 SET_DECL_EXPLICIT_INSTANTIATION (result);
5566b478 9209 mark_decl_instantiated (result, extern_p);
44a8d0b3 9210 repo_template_instantiated (result, extern_p);
c91a56d2 9211 if (! extern_p)
16d53b64 9212 instantiate_decl (result, /*defer_ok=*/1);
7177d104
MS
9213}
9214
faae18ab
MS
9215void
9216mark_class_instantiated (t, extern_p)
9217 tree t;
9218 int extern_p;
9219{
9220 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
9221 SET_CLASSTYPE_INTERFACE_KNOWN (t);
9222 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
9223 CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
9224 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
9225 if (! extern_p)
9226 {
9227 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
9228 rest_of_type_compilation (t, 1);
9229 }
9230}
e8abc66f 9231
7177d104 9232void
ca79f85d
JM
9233do_type_instantiation (t, storage)
9234 tree t, storage;
7177d104 9235{
e8abc66f
MS
9236 int extern_p = 0;
9237 int nomem_p = 0;
5566b478
MS
9238 int static_p = 0;
9239
ca79f85d
JM
9240 if (TREE_CODE (t) == TYPE_DECL)
9241 t = TREE_TYPE (t);
9242
7ddedda4 9243 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 9244 {
8251199e 9245 cp_error ("explicit instantiation of non-template type `%T'", t);
ca79f85d
JM
9246 return;
9247 }
9248
5566b478 9249 complete_type (t);
7177d104 9250
a292b002
MS
9251 /* With -fexternal-templates, explicit instantiations are treated the same
9252 as implicit ones. */
a0a33927
MS
9253 if (flag_external_templates)
9254 return;
9255
d0f062fb 9256 if (!COMPLETE_TYPE_P (t))
f0e01782 9257 {
8251199e 9258 cp_error ("explicit instantiation of `%#T' before definition of template",
f0e01782
MS
9259 t);
9260 return;
9261 }
9262
03d0f4af 9263 if (storage != NULL_TREE)
f0e01782 9264 {
03d0f4af 9265 if (pedantic)
cab1f180 9266 cp_pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations",
8251199e 9267 IDENTIFIER_POINTER (storage));
03d0f4af
MM
9268
9269 if (storage == ridpointers[(int) RID_INLINE])
9270 nomem_p = 1;
9271 else if (storage == ridpointers[(int) RID_EXTERN])
9272 extern_p = 1;
9273 else if (storage == ridpointers[(int) RID_STATIC])
9274 static_p = 1;
9275 else
9276 {
8251199e 9277 cp_error ("storage class `%D' applied to template instantiation",
03d0f4af
MM
9278 storage);
9279 extern_p = 0;
9280 }
f0e01782
MS
9281 }
9282
370af2d5 9283 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
03d0f4af
MM
9284 {
9285 /* [temp.spec]
a292b002 9286
03d0f4af
MM
9287 No program shall both explicitly instantiate and explicitly
9288 specialize a template. */
8251199e
JM
9289 cp_error ("explicit instantiation of `%#T' after", t);
9290 cp_error_at ("explicit specialization here", t);
03d0f4af
MM
9291 return;
9292 }
9293 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 9294 {
03d0f4af
MM
9295 /* [temp.spec]
9296
9297 No program shall explicitly instantiate any template more
9298 than once.
9299
2aaf816d
JM
9300 If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
9301 was `extern'. If EXTERN_P then the second is. If -frepo, chances
9302 are we already got marked as an explicit instantion because of the
9303 repo file. All these cases are OK. */
9304 if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository)
9305 cp_pedwarn ("duplicate explicit instantiation of `%#T'", t);
03d0f4af
MM
9306
9307 /* If we've already instantiated the template, just return now. */
9308 if (!CLASSTYPE_INTERFACE_ONLY (t))
9309 return;
44a8d0b3 9310 }
e8abc66f 9311
03d0f4af
MM
9312 mark_class_instantiated (t, extern_p);
9313 repo_template_instantiated (t, extern_p);
9314
e8abc66f
MS
9315 if (nomem_p)
9316 return;
9317
7177d104 9318 {
db5ae43f 9319 tree tmp;
5566b478 9320
03d0f4af
MM
9321 /* In contrast to implicit instantiation, where only the
9322 declarations, and not the definitions, of members are
9323 instantiated, we have here:
9324
9325 [temp.explicit]
9326
9327 The explicit instantiation of a class template specialization
9328 implies the instantiation of all of its members not
9329 previously explicitly specialized in the translation unit
9330 containing the explicit instantiation.
9331
9332 Of course, we can't instantiate member template classes, since
9333 we don't have any arguments for them. Note that the standard
9334 is unclear on whether the instatiation of the members are
9335 *explicit* instantiations or not. We choose to be generous,
9336 and not set DECL_EXPLICIT_INSTANTIATION. Therefore, we allow
9337 the explicit instantiation of a class where some of the members
9338 have no definition in the current translation unit. */
9339
5566b478
MS
9340 if (! static_p)
9341 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 9342 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 9343 && DECL_TEMPLATE_INSTANTIATION (tmp))
5566b478
MS
9344 {
9345 mark_decl_instantiated (tmp, extern_p);
9346 repo_template_instantiated (tmp, extern_p);
9347 if (! extern_p)
16d53b64 9348 instantiate_decl (tmp, /*defer_ok=*/1);
5566b478
MS
9349 }
9350
9351 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
9352 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
863adfc0 9353 {
5566b478 9354 mark_decl_instantiated (tmp, extern_p);
863adfc0 9355 repo_template_instantiated (tmp, extern_p);
5566b478 9356 if (! extern_p)
16d53b64 9357 instantiate_decl (tmp, /*defer_ok=*/1);
863adfc0 9358 }
7177d104 9359
a292b002 9360 for (tmp = CLASSTYPE_TAGS (t); tmp; tmp = TREE_CHAIN (tmp))
e4a84209
MM
9361 if (IS_AGGR_TYPE (TREE_VALUE (tmp))
9362 && !uses_template_parms (CLASSTYPE_TI_ARGS (TREE_VALUE (tmp))))
f376e137 9363 do_type_instantiation (TYPE_MAIN_DECL (TREE_VALUE (tmp)), storage);
a292b002 9364 }
8d08fdba 9365}
a28e3c7f 9366
36a117a5
MM
9367/* Given a function DECL, which is a specialization of TMPL, modify
9368 DECL to be a re-instantiation of TMPL with the same template
9369 arguments. TMPL should be the template into which tsubst'ing
9370 should occur for DECL, not the most general template.
830bfa74
MM
9371
9372 One reason for doing this is a scenario like this:
9373
9374 template <class T>
9375 void f(const T&, int i);
9376
9377 void g() { f(3, 7); }
9378
9379 template <class T>
9380 void f(const T& t, const int i) { }
9381
9382 Note that when the template is first instantiated, with
9383 instantiate_template, the resulting DECL will have no name for the
9384 first parameter, and the wrong type for the second. So, when we go
9385 to instantiate the DECL, we regenerate it. */
9386
e9659ab0 9387static void
830bfa74
MM
9388regenerate_decl_from_template (decl, tmpl)
9389 tree decl;
9390 tree tmpl;
9391{
f9a7ae04
MM
9392 /* The most general version of TMPL. */
9393 tree gen_tmpl;
9394 /* The arguments used to instantiate DECL, from the most general
9395 template. */
830bfa74 9396 tree args;
830bfa74
MM
9397 tree code_pattern;
9398 tree new_decl;
36a117a5 9399 int unregistered;
830bfa74
MM
9400
9401 args = DECL_TI_ARGS (decl);
9402 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
9403
8251199e
JM
9404 /* Unregister the specialization so that when we tsubst we will not
9405 just return DECL. We don't have to unregister DECL from TMPL
9406 because if would only be registered there if it were a partial
9407 instantiation of a specialization, which it isn't: it's a full
9408 instantiation. */
36a117a5
MM
9409 gen_tmpl = most_general_template (tmpl);
9410 unregistered = unregister_specialization (decl, gen_tmpl);
9411
9412 /* If the DECL was not unregistered then something peculiar is
9413 happening: we created a specialization but did not call
9414 register_specialization for it. */
9415 my_friendly_assert (unregistered, 0);
9416
61a127b3
MM
9417 if (TREE_CODE (decl) == VAR_DECL)
9418 /* Make sure that we can see identifiers, and compute access
9419 correctly, for the class members used in the declaration of
9420 this static variable. */
9421 pushclass (DECL_CONTEXT (decl), 2);
9422
d8c4447d 9423 /* Do the substitution to get the new declaration. */
4393e105 9424 new_decl = tsubst (code_pattern, args, /*complain=*/1, NULL_TREE);
830bfa74
MM
9425
9426 if (TREE_CODE (decl) == VAR_DECL)
9427 {
9428 /* Set up DECL_INITIAL, since tsubst doesn't. */
830bfa74 9429 DECL_INITIAL (new_decl) =
d8c4447d 9430 tsubst_expr (DECL_INITIAL (code_pattern), args,
4393e105 9431 /*complain=*/1, DECL_TI_TEMPLATE (decl));
61a127b3 9432 /* Pop the class context we pushed above. */
b74a0560 9433 popclass ();
830bfa74 9434 }
2b0a63a3 9435 else if (TREE_CODE (decl) == FUNCTION_DECL)
fbf1c34b
MM
9436 {
9437 /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
9438 new decl. */
9439 DECL_INITIAL (new_decl) = error_mark_node;
9440 /* And don't complain about a duplicate definition. */
9441 DECL_INITIAL (decl) = NULL_TREE;
9442 }
36a117a5
MM
9443
9444 /* The immediate parent of the new template is still whatever it was
9445 before, even though tsubst sets DECL_TI_TEMPLATE up as the most
9446 general template. We also reset the DECL_ASSEMBLER_NAME since
9447 tsubst always calculates the name as if the function in question
9448 were really a template instance, and sometimes, with friend
9449 functions, this is not so. See tsubst_friend_function for
9450 details. */
9451 DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
9452 DECL_ASSEMBLER_NAME (new_decl) = DECL_ASSEMBLER_NAME (decl);
9453 DECL_RTL (new_decl) = DECL_RTL (decl);
9454
9455 /* Call duplicate decls to merge the old and new declarations. */
830bfa74
MM
9456 duplicate_decls (new_decl, decl);
9457
36a117a5
MM
9458 /* Now, re-register the specialization. */
9459 register_specialization (decl, gen_tmpl, args);
830bfa74
MM
9460}
9461
16d53b64
MM
9462/* Produce the definition of D, a _DECL generated from a template. If
9463 DEFER_OK is non-zero, then we don't have to actually do the
9464 instantiation now; we just have to do it sometime. */
f84b4be9 9465
a28e3c7f 9466tree
16d53b64 9467instantiate_decl (d, defer_ok)
5566b478 9468 tree d;
16d53b64 9469 int defer_ok;
a28e3c7f 9470{
36a117a5
MM
9471 tree tmpl = DECL_TI_TEMPLATE (d);
9472 tree args = DECL_TI_ARGS (d);
830bfa74 9473 tree td;
36a117a5
MM
9474 tree code_pattern;
9475 tree spec;
9476 tree gen_tmpl;
5566b478 9477 int pattern_defined;
c27be9b9 9478 int line = lineno;
3b304f5b 9479 const char *file = input_filename;
5566b478 9480
36a117a5
MM
9481 /* This function should only be used to instantiate templates for
9482 functions and static member variables. */
9483 my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
9484 || TREE_CODE (d) == VAR_DECL, 0);
9485
db9b2174
MM
9486 /* Don't instantiate cloned functions. Instead, instantiate the
9487 functions they cloned. */
9488 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
9489 d = DECL_CLONED_FUNCTION (d);
9490
fbf1c34b 9491 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af
MM
9492 /* D has already been instantiated. It might seem reasonable to
9493 check whether or not D is an explict instantiation, and, if so,
9494 stop here. But when an explicit instantiation is deferred
9495 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
9496 is set, even though we still need to do the instantiation. */
36a117a5
MM
9497 return d;
9498
9499 /* If we already have a specialization of this declaration, then
9500 there's no reason to instantiate it. Note that
9501 retrieve_specialization gives us both instantiations and
9502 specializations, so we must explicitly check
9503 DECL_TEMPLATE_SPECIALIZATION. */
9504 gen_tmpl = most_general_template (tmpl);
9505 spec = retrieve_specialization (gen_tmpl, args);
9506 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
9507 return spec;
9508
9509 /* This needs to happen before any tsubsting. */
9510 if (! push_tinst_level (d))
9511 return d;
9512
4d85e00e
MM
9513 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
9514 for the instantiation. This is not always the most general
9515 template. Consider, for example:
9516
9517 template <class T>
9518 struct S { template <class U> void f();
9519 template <> void f<int>(); };
9520
9521 and an instantiation of S<double>::f<int>. We want TD to be the
9522 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
9523 td = tmpl;
f9a7ae04
MM
9524 while (/* An instantiation cannot have a definition, so we need a
9525 more general template. */
9526 DECL_TEMPLATE_INSTANTIATION (td)
9527 /* We must also deal with friend templates. Given:
9528
9529 template <class T> struct S {
9530 template <class U> friend void f() {};
9531 };
9532
9533 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
9534 so far as the language is concerned, but that's still
9535 where we get the pattern for the instantiation from. On
9536 ther hand, if the definition comes outside the class, say:
9537
9538 template <class T> struct S {
9539 template <class U> friend void f();
9540 };
9541 template <class U> friend void f() {}
9542
9543 we don't need to look any further. That's what the check for
9544 DECL_INITIAL is for. */
9545 || (TREE_CODE (d) == FUNCTION_DECL
9546 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (td)
9547 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (td))))
4d85e00e
MM
9548 {
9549 /* The present template, TD, should not be a definition. If it
9550 were a definition, we should be using it! Note that we
9551 cannot restructure the loop to just keep going until we find
9552 a template with a definition, since that might go too far if
9553 a specialization was declared, but not defined. */
4d85e00e
MM
9554 my_friendly_assert (!(TREE_CODE (d) == VAR_DECL
9555 && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (td))),
9556 0);
9557
9558 /* Fetch the more general template. */
9559 td = DECL_TI_TEMPLATE (td);
9560 }
27bb8339 9561
fee23f54 9562 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 9563
5566b478 9564 if (TREE_CODE (d) == FUNCTION_DECL)
39c76b4f 9565 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
5566b478 9566 else
36a117a5 9567 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
de22184b
MS
9568
9569 push_to_top_level ();
9570 lineno = DECL_SOURCE_LINE (d);
9571 input_filename = DECL_SOURCE_FILE (d);
9572
de22184b 9573 if (pattern_defined)
5566b478
MS
9574 {
9575 repo_template_used (d);
9576
9577 if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
9578 {
9579 if (flag_alt_external_templates)
9580 {
9581 if (interface_unknown)
9582 warn_if_unknown_interface (d);
9583 }
fee23f54 9584 else if (DECL_INTERFACE_KNOWN (code_pattern))
5566b478
MS
9585 {
9586 DECL_INTERFACE_KNOWN (d) = 1;
fee23f54 9587 DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
5566b478
MS
9588 }
9589 else
fee23f54 9590 warn_if_unknown_interface (code_pattern);
5566b478
MS
9591 }
9592
e92cc029 9593 if (at_eof)
5566b478
MS
9594 import_export_decl (d);
9595 }
9596
c4ae3f91
JM
9597 /* Reject all external templates except inline functions. */
9598 if (DECL_INTERFACE_KNOWN (d)
9599 && ! DECL_NOT_REALLY_EXTERN (d)
9600 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
9601 goto out;
9602
16d53b64
MM
9603 /* We need to set up DECL_INITIAL regardless of pattern_defined if
9604 the variable is a static const initialized in the class body. */
67ffc812 9605 if (TREE_CODE (d) == VAR_DECL
711734a9 9606 && TREE_READONLY (d)
67ffc812
MM
9607 && DECL_INITIAL (d) == NULL_TREE
9608 && DECL_INITIAL (code_pattern) != NULL_TREE)
16d53b64
MM
9609 ;
9610 /* Defer all other templates, unless we have been explicitly
9611 forbidden from doing so. We restore the source position here
9612 because it's used by add_pending_template. */
9613 else if (! pattern_defined || defer_ok)
9614 {
c27be9b9
JM
9615 lineno = line;
9616 input_filename = file;
9617
03d0f4af
MM
9618 if (at_eof && !pattern_defined
9619 && DECL_EXPLICIT_INSTANTIATION (d))
9620 /* [temp.explicit]
9621
9622 The definition of a non-exported function template, a
9623 non-exported member function template, or a non-exported
9624 member function or static data member of a class template
9625 shall be present in every translation unit in which it is
9626 explicitly instantiated. */
8251199e 9627 cp_error ("explicit instantiation of `%D' but no definition available",
03d0f4af
MM
9628 d);
9629
5566b478 9630 add_pending_template (d);
de22184b 9631 goto out;
5566b478
MS
9632 }
9633
2b0a63a3
MM
9634 /* We're now committed to instantiating this template. Mark it as
9635 instantiated so that recursive calls to instantiate_decl do not
9636 try to instantiate it again. */
fbf1c34b 9637 DECL_TEMPLATE_INSTANTIATED (d) = 1;
120722ac 9638
2b0a63a3
MM
9639 /* Regenerate the declaration in case the template has been modified
9640 by a subsequent redeclaration. */
9641 regenerate_decl_from_template (d, td);
9642
120722ac
MM
9643 /* We already set the file and line above. Reset them now in case
9644 they changed as a result of calling regenerate_decl_from_template. */
5156628f
MS
9645 lineno = DECL_SOURCE_LINE (d);
9646 input_filename = DECL_SOURCE_FILE (d);
9647
5566b478
MS
9648 if (TREE_CODE (d) == VAR_DECL)
9649 {
9650 DECL_IN_AGGR_P (d) = 0;
9651 if (DECL_INTERFACE_KNOWN (d))
9652 DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
9653 else
9654 {
9655 DECL_EXTERNAL (d) = 1;
9656 DECL_NOT_REALLY_EXTERN (d) = 1;
9657 }
cd9f6678 9658 cp_finish_decl (d, DECL_INITIAL (d), NULL_TREE, 0);
5566b478
MS
9659 }
9660 else if (TREE_CODE (d) == FUNCTION_DECL)
9661 {
6bbf1598
MM
9662 htab_t saved_local_specializations;
9663
9664 /* Save away the current list, in case we are instantiating one
9665 template from within the body of another. */
9666 saved_local_specializations = local_specializations;
9667
6dfbb909 9668 /* Set up the list of local specializations. */
6dfbb909
MM
9669 local_specializations = htab_create (37,
9670 htab_hash_pointer,
9671 htab_eq_pointer,
9672 NULL);
9673
558475f0 9674 /* Set up context. */
a8f73d4b 9675 start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
5566b478
MS
9676 store_parm_decls ();
9677
f9817201
MM
9678 /* We already set up __FUNCTION__, etc., so we don't want to do
9679 it again now. */
9680 current_function_name_declared = 1;
9681
558475f0
MM
9682 /* Substitute into the body of the function. */
9683 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
9684 /*complain=*/1, tmpl);
9685
6dfbb909
MM
9686 /* We don't need the local specializations any more. */
9687 htab_delete (local_specializations);
6bbf1598 9688 local_specializations = saved_local_specializations;
6dfbb909 9689
4d6abc1c 9690 /* Finish the function. */
0acf7199 9691 expand_body (finish_function (0));
5566b478
MS
9692 }
9693
971cbc14
MM
9694 /* We're not deferring instantiation any more. */
9695 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
9696
de22184b 9697out:
c27be9b9
JM
9698 lineno = line;
9699 input_filename = file;
9700
5566b478 9701 pop_from_top_level ();
5566b478 9702 pop_tinst_level ();
a28e3c7f 9703
a28e3c7f
MS
9704 return d;
9705}
5566b478 9706
0aafb128
MM
9707/* Run through the list of templates that we wish we could
9708 instantiate, and instantiate any we can. */
9709
9710int
9711instantiate_pending_templates ()
9712{
9713 tree *t;
9714 int instantiated_something = 0;
9715 int reconsider;
9716
9717 do
9718 {
9719 reconsider = 0;
9720
9721 t = &pending_templates;
9722 while (*t)
9723 {
9724 tree srcloc = TREE_PURPOSE (*t);
9725 tree instantiation = TREE_VALUE (*t);
9726
9727 input_filename = SRCLOC_FILE (srcloc);
9728 lineno = SRCLOC_LINE (srcloc);
9729
2f939d94 9730 if (TYPE_P (instantiation))
0aafb128
MM
9731 {
9732 tree fn;
9733
d0f062fb 9734 if (!COMPLETE_TYPE_P (instantiation))
0aafb128
MM
9735 {
9736 instantiate_class_template (instantiation);
9737 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
9738 for (fn = TYPE_METHODS (instantiation);
9739 fn;
9740 fn = TREE_CHAIN (fn))
9741 if (! DECL_ARTIFICIAL (fn))
16d53b64 9742 instantiate_decl (fn, /*defer_ok=*/0);
d0f062fb 9743 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
9744 {
9745 instantiated_something = 1;
9746 reconsider = 1;
9747 }
9748 }
9749
d0f062fb 9750 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
9751 /* If INSTANTIATION has been instantiated, then we don't
9752 need to consider it again in the future. */
9753 *t = TREE_CHAIN (*t);
9754 else
9755 t = &TREE_CHAIN (*t);
9756 }
9757 else
9758 {
16d53b64 9759 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
9760 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
9761 {
16d53b64
MM
9762 instantiation = instantiate_decl (instantiation,
9763 /*defer_ok=*/0);
0aafb128
MM
9764 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
9765 {
9766 instantiated_something = 1;
9767 reconsider = 1;
9768 }
9769 }
9770
16d53b64 9771 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
9772 || DECL_TEMPLATE_INSTANTIATED (instantiation))
9773 /* If INSTANTIATION has been instantiated, then we don't
9774 need to consider it again in the future. */
9775 *t = TREE_CHAIN (*t);
9776 else
9777 t = &TREE_CHAIN (*t);
9778 }
9779 }
9780 template_tail = t;
9781
9782 /* Go through the things that are template instantiations if we are
9783 using guiding declarations. */
9784 t = &maybe_templates;
9785 while (*t)
9786 {
9787 tree template;
9788 tree fn;
9789 tree args;
9790
9791 fn = TREE_VALUE (*t);
9792
9793 if (DECL_INITIAL (fn))
9794 /* If the FN is already defined, then it was either already
9795 instantiated or, even though guiding declarations were
9796 allowed, a non-template definition was provided. */
9797 ;
9798 else
9799 {
9800 template = TREE_PURPOSE (*t);
9801 args = get_bindings (template, fn, NULL_TREE);
9802 fn = instantiate_template (template, args);
16d53b64 9803 instantiate_decl (fn, /*defer_ok=*/0);
0aafb128
MM
9804 reconsider = 1;
9805 }
9806
9807 /* Remove this entry from the chain. */
9808 *t = TREE_CHAIN (*t);
9809 }
9810 maybe_template_tail = t;
9811 }
9812 while (reconsider);
9813
9814 return instantiated_something;
9815}
9816
4393e105
MM
9817/* Substitute ARGVEC into T, which is a TREE_LIST. In particular, it
9818 is an initializer list: the TREE_PURPOSEs are DECLs, and the
9819 TREE_VALUEs are initializer values. Used by instantiate_decl. */
9820
824b9a4c 9821static tree
5566b478
MS
9822tsubst_expr_values (t, argvec)
9823 tree t, argvec;
9824{
9825 tree first = NULL_TREE;
9826 tree *p = &first;
9827
9828 for (; t; t = TREE_CHAIN (t))
9829 {
4393e105
MM
9830 tree pur = tsubst_copy (TREE_PURPOSE (t), argvec,
9831 /*complain=*/1, NULL_TREE);
9832 tree val = tsubst_expr (TREE_VALUE (t), argvec, /*complain=*/1,
9833 NULL_TREE);
5566b478
MS
9834 *p = build_tree_list (pur, val);
9835 p = &TREE_CHAIN (*p);
9836 }
9837 return first;
9838}
9839
73aad9b9
JM
9840/* D is an undefined function declaration in the presence of templates with
9841 the same name, listed in FNS. If one of them can produce D as an
9842 instantiation, remember this so we can instantiate it at EOF if D has
9843 not been defined by that time. */
9844
9845void
9846add_maybe_template (d, fns)
9847 tree d, fns;
9848{
9849 tree t;
9850
9851 if (DECL_MAYBE_TEMPLATE (d))
9852 return;
9853
e1467ff2 9854 t = most_specialized (fns, d, NULL_TREE);
73aad9b9
JM
9855 if (! t)
9856 return;
9857 if (t == error_mark_node)
9858 {
8251199e 9859 cp_error ("ambiguous template instantiation for `%D'", d);
73aad9b9
JM
9860 return;
9861 }
9862
e1b3e07d 9863 *maybe_template_tail = tree_cons (t, d, NULL_TREE);
73aad9b9
JM
9864 maybe_template_tail = &TREE_CHAIN (*maybe_template_tail);
9865 DECL_MAYBE_TEMPLATE (d) = 1;
9866}
b87692e5 9867
61a127b3
MM
9868/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
9869
9870static void
9871set_current_access_from_decl (decl)
9872 tree decl;
9873{
9874 if (TREE_PRIVATE (decl))
9875 current_access_specifier = access_private_node;
9876 else if (TREE_PROTECTED (decl))
9877 current_access_specifier = access_protected_node;
9878 else
9879 current_access_specifier = access_public_node;
9880}
9881
dbfe2124
MM
9882/* Instantiate an enumerated type. TAG is the template type, NEWTAG
9883 is the instantiation (which should have been created with
9884 start_enum) and ARGS are the template arguments to use. */
b87692e5 9885
dbfe2124
MM
9886static void
9887tsubst_enum (tag, newtag, args)
9888 tree tag;
9889 tree newtag;
9890 tree args;
b87692e5 9891{
dbfe2124 9892 tree e;
b87692e5
MS
9893
9894 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
9895 {
61a127b3 9896 tree value;
58595203 9897
61a127b3
MM
9898 /* Note that in a template enum, the TREE_VALUE is the
9899 CONST_DECL, not the corresponding INTEGER_CST. */
9900 value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)),
4393e105
MM
9901 args, /*complain=*/1,
9902 NULL_TREE);
61a127b3
MM
9903
9904 /* Give this enumeration constant the correct access. */
9905 set_current_access_from_decl (TREE_VALUE (e));
9906
9907 /* Actually build the enumerator itself. */
58595203 9908 build_enumerator (TREE_PURPOSE (e), value, newtag);
dbfe2124 9909 }
b3d5a58b 9910
dbfe2124 9911 finish_enum (newtag);
b87692e5 9912}
36a117a5
MM
9913
9914/* Set the DECL_ASSEMBLER_NAME for DECL, which is a FUNCTION_DECL that
9915 is either an instantiation or specialization of a template
9916 function. */
9917
9918static void
9919set_mangled_name_for_template_decl (decl)
9920 tree decl;
9921{
b370501f 9922 tree context = NULL_TREE;
36a117a5
MM
9923 tree fn_type;
9924 tree ret_type;
9925 tree parm_types;
9926 tree tparms;
9927 tree targs;
9928 tree tmpl;
9929 int parm_depth;
9930
9931 my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL, 0);
9932 my_friendly_assert (DECL_TEMPLATE_INFO (decl) != NULL_TREE, 0);
9933
9934 /* The names of template functions must be mangled so as to indicate
9935 what template is being specialized with what template arguments.
9936 For example, each of the following three functions must get
9937 different mangled names:
9938
9939 void f(int);
9940 template <> void f<7>(int);
9941 template <> void f<8>(int); */
9942
9943 targs = DECL_TI_ARGS (decl);
9944 if (uses_template_parms (targs))
9945 /* This DECL is for a partial instantiation. There's no need to
9946 mangle the name of such an entity. */
9947 return;
9948
9949 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9950 tparms = DECL_TEMPLATE_PARMS (tmpl);
9951 parm_depth = TMPL_PARMS_DEPTH (tparms);
9952
9953 /* There should be as many levels of arguments as there are levels
9954 of parameters. */
9955 my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
9956
9957 /* We now compute the PARMS and RET_TYPE to give to
9958 build_decl_overload_real. The PARMS and RET_TYPE are the
9959 parameter and return types of the template, after all but the
9960 innermost template arguments have been substituted, not the
9961 parameter and return types of the function DECL. For example,
9962 given:
9963
9964 template <class T> T f(T);
9965
9966 both PARMS and RET_TYPE should be `T' even if DECL is `int f(int)'.
9967 A more subtle example is:
9968
9969 template <class T> struct S { template <class U> void f(T, U); }
9970
9971 Here, if DECL is `void S<int>::f(int, double)', PARMS should be
9972 {int, U}. Thus, the args that we want to subsitute into the
9973 return and parameter type for the function are those in TARGS,
9974 with the innermost level omitted. */
9975 fn_type = TREE_TYPE (tmpl);
9976 if (DECL_STATIC_FUNCTION_P (decl))
4f1c5b7d 9977 context = DECL_CONTEXT (decl);
36a117a5
MM
9978
9979 if (parm_depth == 1)
9980 /* No substitution is necessary. */
9981 ;
9982 else
9983 {
9984 int i;
9985 tree partial_args;
9986
9987 /* Replace the innermost level of the TARGS with NULL_TREEs to
9988 let tsubst know not to subsitute for those parameters. */
f9a7ae04 9989 partial_args = make_tree_vec (TMPL_ARGS_DEPTH (targs));
36a117a5
MM
9990 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
9991 SET_TMPL_ARGS_LEVEL (partial_args, i,
9992 TMPL_ARGS_LEVEL (targs, i));
9993 SET_TMPL_ARGS_LEVEL (partial_args,
9994 TMPL_ARGS_DEPTH (targs),
f31c0a32 9995 make_tree_vec (DECL_NTPARMS (tmpl)));
36a117a5
MM
9996
9997 /* Now, do the (partial) substitution to figure out the
9998 appropriate function type. */
4393e105 9999 fn_type = tsubst (fn_type, partial_args, /*complain=*/1, NULL_TREE);
36a117a5 10000 if (DECL_STATIC_FUNCTION_P (decl))
4393e105 10001 context = tsubst (context, partial_args, /*complain=*/1, NULL_TREE);
36a117a5
MM
10002
10003 /* Substitute into the template parameters to obtain the real
10004 innermost set of parameters. This step is important if the
10005 innermost set of template parameters contains value
10006 parameters whose types depend on outer template parameters. */
10007 TREE_VEC_LENGTH (partial_args)--;
4393e105 10008 tparms = tsubst_template_parms (tparms, partial_args, /*complain=*/1);
36a117a5
MM
10009 }
10010
10011 /* Now, get the innermost parameters and arguments, and figure out
10012 the parameter and return types. */
10013 tparms = INNERMOST_TEMPLATE_PARMS (tparms);
f9a7ae04 10014 targs = INNERMOST_TEMPLATE_ARGS (targs);
36a117a5
MM
10015 ret_type = TREE_TYPE (fn_type);
10016 parm_types = TYPE_ARG_TYPES (fn_type);
10017
10018 /* For a static member function, we generate a fake `this' pointer,
10019 for the purposes of mangling. This indicates of which class the
10020 function is a member. Because of:
10021
10022 [class.static]
10023
10024 There shall not be a static and a nonstatic member function
10025 with the same name and the same parameter types
10026
10027 we don't have to worry that this will result in a clash with a
10028 non-static member function. */
10029 if (DECL_STATIC_FUNCTION_P (decl))
10030 parm_types = hash_tree_chain (build_pointer_type (context), parm_types);
10031
10032 /* There should be the same number of template parameters as
10033 template arguments. */
10034 my_friendly_assert (TREE_VEC_LENGTH (tparms) == TREE_VEC_LENGTH (targs),
10035 0);
10036
36a117a5
MM
10037 /* Actually set the DCL_ASSEMBLER_NAME. */
10038 DECL_ASSEMBLER_NAME (decl)
596ea4e5 10039 = build_decl_overload_real (decl, parm_types, ret_type,
36a117a5
MM
10040 tparms, targs,
10041 DECL_FUNCTION_MEMBER_P (decl)
db9b2174 10042 + DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl));
36a117a5 10043}
This page took 2.861247 seconds and 5 git commands to generate.