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