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