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