]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/pt.c
sparc-signal.h (INIT_FPE, INIT_SEGV): SA_NODEFER added to signal options to allow...
[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);
67ffc812 3616 if (current_class_type != NULL_TREE)
7ac7b28f 3617 template =
67ffc812 3618 maybe_get_template_decl_from_type_decl
744aa133 3619 (IDENTIFIER_CLASS_VALUE (d1));
a2b60a0e 3620 if (template == NULL_TREE)
2c73f9f5
ML
3621 template = lookup_name_nonclass (d1);
3622 if (context)
3623 pop_decl_namespace ();
73b0fce8 3624 }
8d019cef
JM
3625 if (template)
3626 context = DECL_CONTEXT (template);
5566b478 3627 }
c91a56d2
MS
3628 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3629 {
802dbc34
JM
3630 tree type = TREE_TYPE (d1);
3631
3632 /* If we are declaring a constructor, say A<T>::A<T>, we will get
3633 an implicit typename for the second A. Deal with it. */
3634 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3635 type = TREE_TYPE (type);
3636
3637 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 3638 {
802dbc34 3639 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
3640 d1 = DECL_NAME (template);
3641 }
c91a56d2 3642 }
ed44da02
MM
3643 else if (TREE_CODE (d1) == ENUMERAL_TYPE
3644 || (TREE_CODE_CLASS (TREE_CODE (d1)) == 't'
3645 && IS_AGGR_TYPE (d1)))
5566b478 3646 {
ed44da02 3647 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
3648 d1 = DECL_NAME (template);
3649 }
93cdc044
JM
3650 else if (TREE_CODE (d1) == TEMPLATE_DECL
3651 && TREE_CODE (DECL_RESULT (d1)) == TYPE_DECL)
3652 {
3653 template = d1;
3654 d1 = DECL_NAME (template);
3655 context = DECL_CONTEXT (template);
3656 }
5566b478
MS
3657 else
3658 my_friendly_abort (272);
8d08fdba 3659
8d08fdba 3660 /* With something like `template <class T> class X class X { ... };'
f181d4ae
MM
3661 we could end up with D1 having nothing but an IDENTIFIER_VALUE.
3662 We don't want to do that, but we have to deal with the situation,
3663 so let's give them some syntax errors to chew on instead of a
3664 crash. */
8d08fdba 3665 if (! template)
f3400fe2
JM
3666 {
3667 cp_error ("`%T' is not a template", d1);
3668 return error_mark_node;
3669 }
2c73f9f5 3670
c3baf4b5
JM
3671 if (context == NULL_TREE)
3672 context = global_namespace;
2c73f9f5 3673
8d08fdba
MS
3674 if (TREE_CODE (template) != TEMPLATE_DECL)
3675 {
8251199e 3676 cp_error ("non-template type `%T' used as a template", d1);
8d08fdba 3677 if (in_decl)
8251199e 3678 cp_error_at ("for template declaration `%D'", in_decl);
8d08fdba
MS
3679 return error_mark_node;
3680 }
8d08fdba 3681
73b0fce8
KL
3682 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
3683 {
3684 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
3685 template arguments */
3686
3687 tree parm = copy_template_template_parm (TREE_TYPE (template));
3688 tree template2 = TYPE_STUB_DECL (parm);
3689 tree arglist2;
3690
73b0fce8
KL
3691 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
3692
744fac59 3693 arglist2 = coerce_template_parms (parmlist, arglist, template, 1, 1);
73b0fce8
KL
3694 if (arglist2 == error_mark_node)
3695 return error_mark_node;
3696
3697 arglist2 = copy_to_permanent (arglist2);
7ddedda4 3698 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm)
73b0fce8
KL
3699 = perm_tree_cons (template2, arglist2, NULL_TREE);
3700 TYPE_SIZE (parm) = 0;
3701 return parm;
3702 }
36a117a5 3703 else
8d08fdba 3704 {
36a117a5 3705 tree template_type = TREE_TYPE (template);
7ac7b28f 3706 tree gen_tmpl;
36a117a5
MM
3707 tree type_decl;
3708 tree found = NULL_TREE;
3709 int arg_depth;
3710 int parm_depth;
dbfe2124 3711 int is_partial_instantiation;
830bfa74 3712
7ac7b28f
MM
3713 gen_tmpl = most_general_template (template);
3714 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
3715 parm_depth = TMPL_PARMS_DEPTH (parmlist);
3716 arg_depth = TMPL_ARGS_DEPTH (arglist);
3717
7ddedda4
MM
3718 /* We build up the coerced arguments and such on the
3719 momentary_obstack. */
3720 push_momentary ();
3721
36a117a5
MM
3722 if (arg_depth == 1 && parm_depth > 1)
3723 {
39c01e4c 3724 /* We've been given an incomplete set of template arguments.
36a117a5
MM
3725 For example, given:
3726
3727 template <class T> struct S1 {
3728 template <class U> struct S2 {};
3729 template <class U> struct S2<U*> {};
3730 };
3731
3732 we will be called with an ARGLIST of `U*', but the
3733 TEMPLATE will be `template <class T> template
3734 <class U> struct S1<T>::S2'. We must fill in the missing
3735 arguments. */
7ac7b28f
MM
3736 arglist
3737 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
3738 arglist);
36a117a5
MM
3739 arg_depth = TMPL_ARGS_DEPTH (arglist);
3740 }
5566b478 3741
7ac7b28f 3742 /* Now we should enough arguments. */
36a117a5
MM
3743 my_friendly_assert (parm_depth == arg_depth, 0);
3744
7ac7b28f
MM
3745 /* From here on, we're only interested in the most general
3746 template. */
3747 template = gen_tmpl;
3748
36a117a5
MM
3749 /* Calculate the BOUND_ARGS. These will be the args that are
3750 actually tsubst'd into the definition to create the
3751 instantiation. */
3752 if (parm_depth > 1)
830bfa74
MM
3753 {
3754 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 3755 int i;
e4a84209 3756 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 3757
cabc336a 3758 tree bound_args = make_temp_vec (parm_depth);
830bfa74 3759
e4a84209 3760 for (i = saved_depth,
830bfa74 3761 t = DECL_TEMPLATE_PARMS (template);
e4a84209 3762 i > 0 && t != NULL_TREE;
830bfa74 3763 --i, t = TREE_CHAIN (t))
e4a84209
MM
3764 {
3765 tree a = coerce_template_parms (TREE_VALUE (t),
3766 arglist, template, 1, 1);
3767 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
3768
3769 /* We temporarily reduce the length of the ARGLIST so
3770 that coerce_template_parms will see only the arguments
3771 corresponding to the template parameters it is
3772 examining. */
3773 TREE_VEC_LENGTH (arglist)--;
3774 }
3775
3776 /* Restore the ARGLIST to its full size. */
3777 TREE_VEC_LENGTH (arglist) = saved_depth;
3778
36a117a5 3779 arglist = bound_args;
830bfa74
MM
3780 }
3781 else
36a117a5
MM
3782 arglist
3783 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
3784 innermost_args (arglist),
3785 template, 1, 1);
3786
3787 if (arglist == error_mark_node)
3788 /* We were unable to bind the arguments. */
5566b478 3789 return error_mark_node;
5566b478 3790
36a117a5
MM
3791 /* In the scope of a template class, explicit references to the
3792 template class refer to the type of the template, not any
3793 instantiation of it. For example, in:
3794
3795 template <class T> class C { void f(C<T>); }
3796
3797 the `C<T>' is just the same as `C'. Outside of the
3798 class, however, such a reference is an instantiation. */
ed44da02 3799 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
3800 arglist))
3801 {
3802 found = template_type;
3803
3804 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 3805 {
36a117a5
MM
3806 tree ctx;
3807
3808 /* Note that we use DECL_CONTEXT, rather than
3809 CP_DECL_CONTEXT, so that the termination test is
3810 always just `ctx'. We're not interested in namepace
3811 scopes. */
3812 for (ctx = current_class_type;
3813 ctx;
3814 ctx = (TREE_CODE_CLASS (TREE_CODE (ctx)) == 't')
3815 ? TYPE_CONTEXT (ctx) : DECL_CONTEXT (ctx))
3bfdc719 3816 if (same_type_p (ctx, template_type))
36a117a5
MM
3817 break;
3818
3819 if (!ctx)
3820 /* We're not in the scope of the class, so the
3821 TEMPLATE_TYPE is not the type we want after
3822 all. */
3823 found = NULL_TREE;
5566b478
MS
3824 }
3825 }
36a117a5
MM
3826
3827 if (!found)
75650646 3828 {
36a117a5
MM
3829 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3830 found; found = TREE_CHAIN (found))
3831 if (comp_template_args (TREE_PURPOSE (found), arglist))
3832 break;
75650646 3833
36a117a5
MM
3834 if (found)
3835 found = TREE_VALUE (found);
8d08fdba 3836 }
36a117a5
MM
3837
3838 if (found)
8d08fdba 3839 {
7ddedda4 3840 pop_momentary ();
36a117a5 3841 return found;
8d08fdba 3842 }
5566b478 3843
36a117a5
MM
3844 /* Since we didn't find the type, we'll have to create it.
3845 Since we'll be saving this type on the
3846 DECL_TEMPLATE_INSTANTIATIONS list, it must be permanent. */
3847 push_obstacks (&permanent_obstack, &permanent_obstack);
3848
dbfe2124 3849 /* This type is a "partial instantiation" if any of the template
486e4077
MM
3850 arguments still inolve template parameters. Note that we set
3851 IS_PARTIAL_INSTANTIATION for partial specializations as
3852 well. */
dbfe2124
MM
3853 is_partial_instantiation = uses_template_parms (arglist);
3854
36a117a5 3855 /* Create the type. */
ed44da02
MM
3856 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
3857 {
dbfe2124 3858 if (!is_partial_instantiation)
61a127b3 3859 t = start_enum (TYPE_IDENTIFIER (template_type));
ed44da02 3860 else
dbfe2124 3861 /* We don't want to call start_enum for this type, since
ed44da02
MM
3862 the values for the enumeration constants may involve
3863 template parameters. And, no one should be interested
3864 in the enumeration constants for such a type. */
3865 t = make_node (ENUMERAL_TYPE);
3866 }
3867 else
3868 {
3869 t = make_lang_type (TREE_CODE (template_type));
3870 CLASSTYPE_DECLARED_CLASS (t)
3871 = CLASSTYPE_DECLARED_CLASS (template_type);
3872 CLASSTYPE_GOT_SEMICOLON (t) = 1;
3873 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 3874 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ed44da02
MM
3875 }
3876
61a127b3 3877 /* If we called start_enum above, this information will already
ed44da02
MM
3878 be set up. */
3879 if (!TYPE_NAME (t))
3880 {
3881 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
36a117a5 3882
ed44da02
MM
3883 /* Create a stub TYPE_DECL for it. */
3884 type_decl = build_decl (TYPE_DECL, DECL_NAME (template), t);
3885 SET_DECL_ARTIFICIAL (type_decl);
3886 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
3887 DECL_SOURCE_FILE (type_decl)
3888 = DECL_SOURCE_FILE (TYPE_STUB_DECL (template_type));
3889 DECL_SOURCE_LINE (type_decl)
3890 = DECL_SOURCE_LINE (TYPE_STUB_DECL (template_type));
3891 TYPE_STUB_DECL (t) = TYPE_NAME (t) = type_decl;
3892 }
3893 else
3894 type_decl = TYPE_NAME (t);
36a117a5 3895
9fbf56f7
MM
3896 /* Set up the template information. We have to figure out which
3897 template is the immediate parent if this is a full
3898 instantiation. */
3899 if (parm_depth == 1 || is_partial_instantiation
3900 || !PRIMARY_TEMPLATE_P (template))
3901 /* This case is easy; there are no member templates involved. */
3902 found = template;
3903 else
3904 {
3905 /* This is a full instantiation of a member template. There
3906 should be some partial instantiation of which this is an
3907 instance. */
3908
3909 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3910 found; found = TREE_CHAIN (found))
3911 {
3912 int success;
3913 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
3914
3915 /* We only want partial instantiations, here, not
3916 specializations or full instantiations. */
3917 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
3918 || !uses_template_parms (TREE_VALUE (found)))
3919 continue;
3920
3921 /* Temporarily reduce by one the number of levels in the
3922 ARGLIST and in FOUND so as to avoid comparing the
3923 last set of arguments. */
3924 TREE_VEC_LENGTH (arglist)--;
3925 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
3926
3927 /* See if the arguments match. If they do, then TMPL is
3928 the partial instantiation we want. */
3929 success = comp_template_args (TREE_PURPOSE (found), arglist);
3930
3931 /* Restore the argument vectors to their full size. */
3932 TREE_VEC_LENGTH (arglist)++;
3933 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
3934
3935 if (success)
3936 {
3937 found = tmpl;
3938 break;
3939 }
3940 }
3941
3942 if (!found)
3943 my_friendly_abort (0);
3944 }
3945
5566b478 3946 arglist = copy_to_permanent (arglist);
ed44da02 3947 SET_TYPE_TEMPLATE_INFO (t,
9fbf56f7 3948 tree_cons (found, arglist, NULL_TREE));
dbfe2124
MM
3949 DECL_TEMPLATE_INSTANTIATIONS (template)
3950 = tree_cons (arglist, t,
3951 DECL_TEMPLATE_INSTANTIATIONS (template));
3952
3953 if (TREE_CODE (t) == ENUMERAL_TYPE
3954 && !is_partial_instantiation)
61a127b3
MM
3955 /* Now that the type has been registered on the instantiations
3956 list, we set up the enumerators. Because the enumeration
3957 constants may involve the enumeration type itself, we make
3958 sure to register the type first, and then create the
3959 constants. That way, doing tsubst_expr for the enumeration
3960 constants won't result in recursive calls here; we'll find
3961 the instantiation and exit above. */
3962 tsubst_enum (template_type, t, arglist);
dbfe2124
MM
3963
3964 /* We're done with the permanent obstack, now. */
3965 pop_obstacks ();
7ddedda4
MM
3966 /* We're also done with the momentary allocation we started
3967 above. */
3968 pop_momentary ();
5566b478 3969
36a117a5
MM
3970 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
3971 is set up. */
ed44da02
MM
3972 if (TREE_CODE (t) != ENUMERAL_TYPE)
3973 DECL_NAME (type_decl) = classtype_mangled_name (t);
36a117a5 3974 DECL_ASSEMBLER_NAME (type_decl) = DECL_NAME (type_decl);
dbfe2124 3975 if (!is_partial_instantiation)
36a117a5
MM
3976 {
3977 DECL_ASSEMBLER_NAME (type_decl)
3978 = get_identifier (build_overload_name (t, 1, 1));
50a6dbd7
JM
3979
3980 /* For backwards compatibility; code that uses
3981 -fexternal-templates expects looking up a template to
3982 instantiate it. I think DDD still relies on this.
3983 (jason 8/20/1998) */
ed44da02
MM
3984 if (TREE_CODE (t) != ENUMERAL_TYPE
3985 && flag_external_templates
36a117a5
MM
3986 && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
3987 && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
3988 add_pending_template (t);
3989 }
3990 else
077e7015
MM
3991 /* If the type makes use of template parameters, the
3992 code that generates debugging information will crash. */
3993 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 3994
36a117a5
MM
3995 return t;
3996 }
8d08fdba
MS
3997}
3998\f
050367a3
MM
3999/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, or
4000 TEMPLATE_PARM_INDEX in T, call FN with the parameter and the DATA.
4001 If FN returns non-zero, the iteration is terminated, and
4002 for_each_template_parm returns 1. Otherwise, the iteration
4003 continues. If FN never returns a non-zero value, the value
4004 returned by for_each_template_parm is 0. If FN is NULL, it is
4005 considered to be the function which always returns 1. */
4006
e9659ab0 4007static int
050367a3 4008for_each_template_parm (t, fn, data)
8d08fdba 4009 tree t;
050367a3
MM
4010 tree_fn_t fn;
4011 void* data;
8d08fdba
MS
4012{
4013 if (!t)
4014 return 0;
581d38d0
MM
4015
4016 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't'
4017 && for_each_template_parm (TYPE_CONTEXT (t), fn, data))
4018 return 1;
4019
8d08fdba
MS
4020 switch (TREE_CODE (t))
4021 {
297e73d8 4022 case ARRAY_REF:
05e0b2f4 4023 case OFFSET_REF:
297e73d8
MM
4024 return (for_each_template_parm (TREE_OPERAND (t, 0), fn, data)
4025 || for_each_template_parm (TREE_OPERAND (t, 1), fn, data));
4026
8d08fdba
MS
4027 case IDENTIFIER_NODE:
4028 if (!IDENTIFIER_TEMPLATE (t))
4029 return 0;
5566b478 4030 my_friendly_abort (42);
8d08fdba
MS
4031
4032 /* aggregates of tree nodes */
4033 case TREE_VEC:
4034 {
4035 int i = TREE_VEC_LENGTH (t);
4036 while (i--)
050367a3 4037 if (for_each_template_parm (TREE_VEC_ELT (t, i), fn, data))
8d08fdba
MS
4038 return 1;
4039 return 0;
4040 }
4041 case TREE_LIST:
050367a3
MM
4042 if (for_each_template_parm (TREE_PURPOSE (t), fn, data)
4043 || for_each_template_parm (TREE_VALUE (t), fn, data))
8d08fdba 4044 return 1;
050367a3 4045 return for_each_template_parm (TREE_CHAIN (t), fn, data);
8d08fdba 4046
2c73f9f5
ML
4047 case OVERLOAD:
4048 if (for_each_template_parm (OVL_FUNCTION (t), fn, data))
4049 return 1;
4050 return for_each_template_parm (OVL_CHAIN (t), fn, data);
4051
8d08fdba
MS
4052 /* constructed type nodes */
4053 case POINTER_TYPE:
4054 case REFERENCE_TYPE:
050367a3 4055 return for_each_template_parm (TREE_TYPE (t), fn, data);
ed44da02 4056
8d08fdba 4057 case RECORD_TYPE:
b7484fbe 4058 if (TYPE_PTRMEMFUNC_FLAG (t))
050367a3
MM
4059 return for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE (t),
4060 fn, data);
ed44da02
MM
4061 /* Fall through. */
4062
8d08fdba 4063 case UNION_TYPE:
ed44da02
MM
4064 case ENUMERAL_TYPE:
4065 if (! TYPE_TEMPLATE_INFO (t))
8d08fdba 4066 return 0;
050367a3 4067 return for_each_template_parm (TREE_VALUE
ed44da02 4068 (TYPE_TEMPLATE_INFO (t)),
050367a3 4069 fn, data);
588c2d1c
MM
4070 case METHOD_TYPE:
4071 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data))
8d08fdba 4072 return 1;
588c2d1c
MM
4073 /* Fall through. */
4074
4075 case FUNCTION_TYPE:
4076 /* Check the parameter types. Since default arguments are not
4077 instantiated until they are needed, the TYPE_ARG_TYPES may
4078 contain expressions that involve template parameters. But,
4079 no-one should be looking at them yet. And, once they're
4080 instantiated, they don't contain template parameters, so
4081 there's no point in looking at them then, either. */
4082 {
4083 tree parm;
4084
4085 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4086 if (for_each_template_parm (TREE_VALUE (parm), fn, data))
4087 return 1;
4088 }
4089
4090 /* Check the return type, too. */
050367a3 4091 return for_each_template_parm (TREE_TYPE (t), fn, data);
588c2d1c 4092
8d08fdba 4093 case ARRAY_TYPE:
050367a3 4094 if (for_each_template_parm (TYPE_DOMAIN (t), fn, data))
8d08fdba 4095 return 1;
050367a3 4096 return for_each_template_parm (TREE_TYPE (t), fn, data);
8d08fdba 4097 case OFFSET_TYPE:
050367a3 4098 if (for_each_template_parm (TYPE_OFFSET_BASETYPE (t), fn, data))
8d08fdba 4099 return 1;
050367a3 4100 return for_each_template_parm (TREE_TYPE (t), fn, data);
8d08fdba
MS
4101
4102 /* decl nodes */
4103 case TYPE_DECL:
050367a3 4104 return for_each_template_parm (TREE_TYPE (t), fn, data);
5566b478 4105
73b0fce8
KL
4106 case TEMPLATE_DECL:
4107 /* A template template parameter is encountered */
4108 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
744fac59
KL
4109 return for_each_template_parm (TREE_TYPE (t), fn, data);
4110 /* Already substituted template template parameter */
73b0fce8
KL
4111 return 0;
4112
3ac3d9ea 4113 case CONST_DECL:
050367a3 4114 if (for_each_template_parm (DECL_INITIAL (t), fn, data))
3ac3d9ea
MM
4115 return 1;
4116 goto check_type_and_context;
4117
8d08fdba 4118 case FUNCTION_DECL:
5566b478
MS
4119 case VAR_DECL:
4120 /* ??? What about FIELD_DECLs? */
4121 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
050367a3 4122 && for_each_template_parm (DECL_TI_ARGS (t), fn, data))
8d08fdba
MS
4123 return 1;
4124 /* fall through */
8d08fdba 4125 case PARM_DECL:
3ac3d9ea 4126 check_type_and_context:
050367a3 4127 if (for_each_template_parm (TREE_TYPE (t), fn, data))
5566b478 4128 return 1;
050367a3
MM
4129 if (DECL_CONTEXT (t)
4130 && for_each_template_parm (DECL_CONTEXT (t), fn, data))
8d08fdba 4131 return 1;
8d08fdba
MS
4132 return 0;
4133
4134 case CALL_EXPR:
297e73d8
MM
4135 return (for_each_template_parm (TREE_OPERAND (t, 0), fn, data)
4136 || for_each_template_parm (TREE_OPERAND (t, 1), fn, data));
4137
8d08fdba 4138 case ADDR_EXPR:
050367a3 4139 return for_each_template_parm (TREE_OPERAND (t, 0), fn, data);
8d08fdba
MS
4140
4141 /* template parm nodes */
73b0fce8 4142 case TEMPLATE_TEMPLATE_PARM:
744fac59 4143 /* Record template parameters such as `T' inside `TT<T>'. */
7ddedda4
MM
4144 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t)
4145 && for_each_template_parm (TYPE_TI_ARGS (t), fn, data))
744fac59
KL
4146 return 1;
4147 case TEMPLATE_TYPE_PARM:
f84b4be9 4148 case TEMPLATE_PARM_INDEX:
050367a3
MM
4149 if (fn)
4150 return (*fn)(t, data);
4151 else
4152 return 1;
8d08fdba
MS
4153
4154 /* simple type nodes */
4155 case INTEGER_TYPE:
050367a3 4156 if (for_each_template_parm (TYPE_MIN_VALUE (t), fn, data))
8d08fdba 4157 return 1;
050367a3 4158 return for_each_template_parm (TYPE_MAX_VALUE (t), fn, data);
8d08fdba
MS
4159
4160 case REAL_TYPE:
37c46b43 4161 case COMPLEX_TYPE:
8d08fdba 4162 case VOID_TYPE:
2986ae00 4163 case BOOLEAN_TYPE:
2c73f9f5 4164 case NAMESPACE_DECL:
8d08fdba
MS
4165 return 0;
4166
4167 /* constants */
4168 case INTEGER_CST:
4169 case REAL_CST:
4170 case STRING_CST:
4171 return 0;
4172
4173 case ERROR_MARK:
4174 /* Non-error_mark_node ERROR_MARKs are bad things. */
4175 my_friendly_assert (t == error_mark_node, 274);
4176 /* NOTREACHED */
4177 return 0;
4178
61a127b3
MM
4179 case PTRMEM_CST:
4180 return for_each_template_parm (TREE_TYPE (t), fn, data);
4181
5156628f 4182 case SCOPE_REF:
050367a3 4183 return for_each_template_parm (TREE_OPERAND (t, 0), fn, data);
5156628f 4184
db5ae43f
MS
4185 case CONSTRUCTOR:
4186 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
050367a3
MM
4187 return for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4188 (TREE_TYPE (t)), fn, data);
4189 return for_each_template_parm (TREE_OPERAND (t, 1), fn, data);
db5ae43f 4190
b8865407
MM
4191 case SIZEOF_EXPR:
4192 case ALIGNOF_EXPR:
4193 return for_each_template_parm (TREE_OPERAND (t, 0), fn, data);
4194
4195 case INDIRECT_REF:
4196 case COMPONENT_REF:
4197 /* We assume that the object must be instantiated in order to build
4198 the COMPONENT_REF, so we test only whether the type of the
4199 COMPONENT_REF uses template parms. On the other hand, if
4200 there's no type, then this thing must be some expression
4201 involving template parameters. */
4202 if (TREE_TYPE (t))
4203 return for_each_template_parm (TREE_TYPE (t), fn, data);
4204 /* Fall through. */
4205
42976354
BK
4206 case MODOP_EXPR:
4207 case CAST_EXPR:
4208 case REINTERPRET_CAST_EXPR:
4209 case CONST_CAST_EXPR:
4210 case STATIC_CAST_EXPR:
4211 case DYNAMIC_CAST_EXPR:
42976354
BK
4212 case ARROW_EXPR:
4213 case DOTSTAR_EXPR:
4214 case TYPEID_EXPR:
b8865407
MM
4215 case LOOKUP_EXPR:
4216 case TYPENAME_TYPE:
4217 if (!fn)
4218 return 1;
4219 /* Fall through. */
abff8e06 4220
8d08fdba
MS
4221 default:
4222 switch (TREE_CODE_CLASS (TREE_CODE (t)))
4223 {
4224 case '1':
4225 case '2':
ec255269 4226 case 'e':
8d08fdba
MS
4227 case '<':
4228 {
4229 int i;
bbc06b4b 4230 for (i = first_rtl_op (TREE_CODE (t)); --i >= 0;)
050367a3 4231 if (for_each_template_parm (TREE_OPERAND (t, i), fn, data))
8d08fdba
MS
4232 return 1;
4233 return 0;
4234 }
4235 default:
4236 break;
4237 }
4238 sorry ("testing %s for template parms",
4239 tree_code_name [(int) TREE_CODE (t)]);
4240 my_friendly_abort (82);
4241 /* NOTREACHED */
4242 return 0;
4243 }
4244}
4245
050367a3
MM
4246int
4247uses_template_parms (t)
4248 tree t;
4249{
4250 return for_each_template_parm (t, 0, 0);
4251}
4252
27fafc8d
JM
4253static struct tinst_level *current_tinst_level;
4254static struct tinst_level *free_tinst_level;
4255static int tinst_depth;
e9f32eb5 4256extern int max_tinst_depth;
5566b478 4257#ifdef GATHER_STATISTICS
27fafc8d 4258int depth_reached;
5566b478 4259#endif
27fafc8d
JM
4260int tinst_level_tick;
4261int last_template_error_tick;
8d08fdba 4262
7bae46f4 4263/* Print out all the template instantiations that we are currently
27fafc8d
JM
4264 working on. If ERR, we are being called from cp_thing, so do
4265 the right thing for an error message. */
7bae46f4 4266
27fafc8d
JM
4267static void
4268print_template_context (err)
4269 int err;
7bae46f4
JM
4270{
4271 struct tinst_level *p = current_tinst_level;
4272 int line = lineno;
4273 char *file = input_filename;
4274
49e04385 4275 if (err && p)
27fafc8d 4276 {
49e04385
MM
4277 if (current_function_decl != p->decl
4278 && current_function_decl != NULL_TREE)
4279 /* We can get here during the processing of some synthesized
4280 method. Then, p->decl will be the function that's causing
4281 the synthesis. */
4282 ;
27fafc8d 4283 else
27fafc8d 4284 {
49e04385
MM
4285 if (current_function_decl == p->decl)
4286 /* Avoid redundancy with the the "In function" line. */;
4287 else
4288 fprintf (stderr, "%s: In instantiation of `%s':\n",
4289 file, decl_as_string (p->decl, 0));
4290
038fb86f
JM
4291 line = p->line;
4292 file = p->file;
27fafc8d
JM
4293 p = p->next;
4294 }
4295 }
4296
7bae46f4
JM
4297 for (; p; p = p->next)
4298 {
038fb86f
JM
4299 fprintf (stderr, "%s:%d: instantiated from `%s'\n", file, line,
4300 decl_as_string (p->decl, 0));
4301 line = p->line;
4302 file = p->file;
7bae46f4 4303 }
038fb86f 4304 fprintf (stderr, "%s:%d: instantiated from here\n", file, line);
7bae46f4
JM
4305}
4306
27fafc8d
JM
4307/* Called from cp_thing to print the template context for an error. */
4308
4309void
4310maybe_print_template_context ()
4311{
4312 if (last_template_error_tick == tinst_level_tick
4313 || current_tinst_level == 0)
4314 return;
4315
4316 last_template_error_tick = tinst_level_tick;
4317 print_template_context (1);
4318}
4319
bd6dd845 4320static int
5566b478
MS
4321push_tinst_level (d)
4322 tree d;
8d08fdba
MS
4323{
4324 struct tinst_level *new;
8d08fdba 4325
7215f9a0
MS
4326 if (tinst_depth >= max_tinst_depth)
4327 {
8adf5b5e
JM
4328 /* If the instantiation in question still has unbound template parms,
4329 we don't really care if we can't instantiate it, so just return.
4330 This happens with base instantiation for implicit `typename'. */
4331 if (uses_template_parms (d))
4332 return 0;
4333
1139b3d8 4334 last_template_error_tick = tinst_level_tick;
8251199e 4335 error ("template instantiation depth exceeds maximum of %d",
7215f9a0 4336 max_tinst_depth);
8251199e
JM
4337 error (" (use -ftemplate-depth-NN to increase the maximum)");
4338 cp_error (" instantiating `%D'", d);
5566b478 4339
27fafc8d 4340 print_template_context (0);
5566b478 4341
7215f9a0
MS
4342 return 0;
4343 }
4344
8d08fdba
MS
4345 if (free_tinst_level)
4346 {
4347 new = free_tinst_level;
4348 free_tinst_level = new->next;
4349 }
4350 else
4351 new = (struct tinst_level *) xmalloc (sizeof (struct tinst_level));
4352
5566b478
MS
4353 new->decl = d;
4354 new->line = lineno;
4355 new->file = input_filename;
8d08fdba
MS
4356 new->next = current_tinst_level;
4357 current_tinst_level = new;
5566b478 4358
7215f9a0 4359 ++tinst_depth;
5566b478
MS
4360#ifdef GATHER_STATISTICS
4361 if (tinst_depth > depth_reached)
4362 depth_reached = tinst_depth;
4363#endif
4364
27fafc8d 4365 ++tinst_level_tick;
7215f9a0 4366 return 1;
8d08fdba
MS
4367}
4368
4369void
4370pop_tinst_level ()
4371{
4372 struct tinst_level *old = current_tinst_level;
4373
ae58fa02
MM
4374 /* Restore the filename and line number stashed away when we started
4375 this instantiation. */
4376 lineno = old->line;
4377 input_filename = old->file;
5f2c99c4 4378 extract_interface_info ();
ae58fa02 4379
8d08fdba
MS
4380 current_tinst_level = old->next;
4381 old->next = free_tinst_level;
4382 free_tinst_level = old;
7215f9a0 4383 --tinst_depth;
27fafc8d 4384 ++tinst_level_tick;
8d08fdba
MS
4385}
4386
4387struct tinst_level *
4388tinst_for_decl ()
4389{
4390 struct tinst_level *p = current_tinst_level;
4391
4392 if (p)
4393 for (; p->next ; p = p->next )
4394 ;
4395 return p;
4396}
4397
f84b4be9
JM
4398/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
4399 vector of template arguments, as for tsubst.
4400
4401 Returns an appropriate tsbust'd friend declaration. */
4402
4403static tree
4404tsubst_friend_function (decl, args)
4405 tree decl;
4406 tree args;
4407{
4408 tree new_friend;
27fafc8d
JM
4409 int line = lineno;
4410 char *file = input_filename;
4411
4412 lineno = DECL_SOURCE_LINE (decl);
4413 input_filename = DECL_SOURCE_FILE (decl);
4414
f84b4be9
JM
4415 if (TREE_CODE (decl) == FUNCTION_DECL
4416 && DECL_TEMPLATE_INSTANTIATION (decl)
4417 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4418 /* This was a friend declared with an explicit template
4419 argument list, e.g.:
4420
4421 friend void f<>(T);
4422
4423 to indicate that f was a template instantiation, not a new
4424 function declaration. Now, we have to figure out what
4425 instantiation of what template. */
4426 {
4427 tree template_id;
4428 tree new_args;
4429 tree tmpl;
f84b4be9
JM
4430
4431 template_id
4432 = lookup_template_function (tsubst_expr (DECL_TI_TEMPLATE (decl),
4393e105
MM
4433 args, /*complain=*/1,
4434 NULL_TREE),
f84b4be9 4435 tsubst (DECL_TI_ARGS (decl),
4393e105
MM
4436 args, /*complain=*/1,
4437 NULL_TREE));
39c01e4c
MM
4438 /* FIXME: The decl we create via the next tsubst could be
4439 created on a temporary obstack. */
4393e105 4440 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
36a117a5
MM
4441 tmpl = determine_specialization (template_id, new_friend,
4442 &new_args,
bf8f3f93 4443 /*need_member_template=*/0);
27fafc8d
JM
4444 new_friend = instantiate_template (tmpl, new_args);
4445 goto done;
f84b4be9 4446 }
36a117a5 4447
4393e105 4448 new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
f84b4be9 4449
36a117a5 4450 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
4451 compiler, but is not an instantiation from the point of view of
4452 the language. For example, we might have had:
4453
4454 template <class T> struct S {
4455 template <class U> friend void f(T, U);
4456 };
4457
4458 Then, in S<int>, template <class U> void f(int, U) is not an
4459 instantiation of anything. */
4460 DECL_USE_TEMPLATE (new_friend) = 0;
4461 if (TREE_CODE (decl) == TEMPLATE_DECL)
4462 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
36a117a5
MM
4463
4464 /* The mangled name for the NEW_FRIEND is incorrect. The call to
4465 tsubst will have resulted in a call to
4466 set_mangled_name_for_template_decl. But, the function is not a
4467 template instantiation and should not be mangled like one.
4468 Therefore, we remangle the function name. We don't have to do
4469 this if the NEW_FRIEND is a template since
4470 set_mangled_name_for_template_decl doesn't do anything if the
4471 function declaration still uses template arguments. */
4472 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4473 {
4474 set_mangled_name_for_decl (new_friend);
4475 DECL_RTL (new_friend) = 0;
4476 make_decl_rtl (new_friend, NULL_PTR, 1);
4477 }
4478
6eb3bb27 4479 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 4480 {
36a117a5 4481 tree old_decl;
fbf1c34b
MM
4482 tree new_friend_template_info;
4483 tree new_friend_result_template_info;
4484 int new_friend_is_defn;
4485
4486 /* We must save some information from NEW_FRIEND before calling
4487 duplicate decls since that function will free NEW_FRIEND if
4488 possible. */
4489 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
f84b4be9 4490 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
4491 {
4492 /* This declaration is a `primary' template. */
4493 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4494
4495 new_friend_is_defn
4496 = DECL_INITIAL (DECL_RESULT (new_friend)) != NULL_TREE;
4497 new_friend_result_template_info
4498 = DECL_TEMPLATE_INFO (DECL_RESULT (new_friend));
4499 }
4500 else
4501 {
4502 new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4503 new_friend_result_template_info = NULL_TREE;
4504 }
36a117a5 4505
36a117a5
MM
4506 old_decl = pushdecl_namespace_level (new_friend);
4507
4508 if (old_decl != new_friend)
4509 {
4510 /* This new friend declaration matched an existing
4511 declaration. For example, given:
4512
4513 template <class T> void f(T);
4514 template <class U> class C {
4515 template <class T> friend void f(T) {}
4516 };
4517
4518 the friend declaration actually provides the definition
4519 of `f', once C has been instantiated for some type. So,
4520 old_decl will be the out-of-class template declaration,
4521 while new_friend is the in-class definition.
4522
4523 But, if `f' was called before this point, the
4524 instantiation of `f' will have DECL_TI_ARGS corresponding
4525 to `T' but not to `U', references to which might appear
4526 in the definition of `f'. Previously, the most general
4527 template for an instantiation of `f' was the out-of-class
4528 version; now it is the in-class version. Therefore, we
4529 run through all specialization of `f', adding to their
4530 DECL_TI_ARGS appropriately. In particular, they need a
4531 new set of outer arguments, corresponding to the
4532 arguments for this class instantiation.
4533
4534 The same situation can arise with something like this:
4535
4536 friend void f(int);
4537 template <class T> class C {
4538 friend void f(T) {}
4539 };
4540
4541 when `C<int>' is instantiated. Now, `f(int)' is defined
4542 in the class. */
4543
fbf1c34b
MM
4544 if (!new_friend_is_defn)
4545 /* On the other hand, if the in-class declaration does
4546 *not* provide a definition, then we don't want to alter
4547 existing definitions. We can just leave everything
4548 alone. */
36a117a5 4549 ;
fbf1c34b 4550 else
36a117a5 4551 {
fbf1c34b
MM
4552 /* Overwrite whatever template info was there before, if
4553 any, with the new template information pertaining to
4554 the declaration. */
4555 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4556
4557 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4558 /* duplicate_decls will take care of this case. */
4559 ;
4560 else
36a117a5 4561 {
fbf1c34b
MM
4562 tree t;
4563 tree new_friend_args;
4564
4565 DECL_TEMPLATE_INFO (DECL_RESULT (old_decl))
4566 = new_friend_result_template_info;
4567
4568 new_friend_args = TI_ARGS (new_friend_template_info);
4569 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
4570 t != NULL_TREE;
4571 t = TREE_CHAIN (t))
4572 {
4573 tree spec = TREE_VALUE (t);
36a117a5 4574
fbf1c34b
MM
4575 DECL_TI_ARGS (spec)
4576 = add_outermost_template_args (new_friend_args,
4577 DECL_TI_ARGS (spec));
4578 DECL_TI_ARGS (spec)
4579 = copy_to_permanent (DECL_TI_ARGS (spec));
4580 }
4581
4582 /* Now, since specializations are always supposed to
4583 hang off of the most general template, we must move
4584 them. */
4585 t = most_general_template (old_decl);
4586 if (t != old_decl)
4587 {
4588 DECL_TEMPLATE_SPECIALIZATIONS (t)
4589 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4590 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4591 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4592 }
36a117a5
MM
4593 }
4594 }
4595
4596 /* The information from NEW_FRIEND has been merged into OLD_DECL
4597 by duplicate_decls. */
4598 new_friend = old_decl;
4599 }
f84b4be9
JM
4600 }
4601 else if (TYPE_SIZE (DECL_CONTEXT (new_friend)))
4602 {
4603 /* Check to see that the declaration is really present, and,
4604 possibly obtain an improved declaration. */
4605 tree fn = check_classfn (DECL_CONTEXT (new_friend),
4606 new_friend);
4607
4608 if (fn)
4609 new_friend = fn;
4610 }
4611
27fafc8d
JM
4612 done:
4613 lineno = line;
4614 input_filename = file;
f84b4be9
JM
4615 return new_friend;
4616}
4617
1aed5355
MM
4618/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
4619 template arguments, as for tsubst.
6757edfe
MM
4620
4621 Returns an appropriate tsbust'd friend type. */
4622
4623static tree
1aed5355
MM
4624tsubst_friend_class (friend_tmpl, args)
4625 tree friend_tmpl;
6757edfe
MM
4626 tree args;
4627{
1aed5355 4628 tree friend_type;
25aab5d0 4629 tree tmpl;
6757edfe 4630
25aab5d0
MM
4631 /* First, we look for a class template. */
4632 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
4633
4634 /* But, if we don't find one, it might be because we're in a
4635 situation like this:
4636
4637 template <class T>
4638 struct S {
4639 template <class U>
4640 friend struct S;
4641 };
4642
4643 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4644 for `S<int>', not the TEMPLATE_DECL. */
bc639f90 4645 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
25aab5d0
MM
4646 {
4647 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4648 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4649 }
6757edfe 4650
25aab5d0 4651 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
4652 {
4653 /* The friend template has already been declared. Just
36a117a5
MM
4654 check to see that the declarations match, and install any new
4655 default parameters. We must tsubst the default parameters,
4656 of course. We only need the innermost template parameters
4657 because that is all that redeclare_class_template will look
4658 at. */
4659 tree parms
4660 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
4393e105 4661 args, /*complain=*/1);
36a117a5 4662 redeclare_class_template (TREE_TYPE (tmpl), parms);
6757edfe
MM
4663 friend_type = TREE_TYPE (tmpl);
4664 }
4665 else
4666 {
4667 /* The friend template has not already been declared. In this
4668 case, the instantiation of the template class will cause the
4669 injection of this template into the global scope. */
4393e105 4670 tmpl = tsubst (friend_tmpl, args, /*complain=*/1, NULL_TREE);
6757edfe
MM
4671
4672 /* The new TMPL is not an instantiation of anything, so we
4673 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
4674 the new type because that is supposed to be the corresponding
4675 template decl, i.e., TMPL. */
4676 DECL_USE_TEMPLATE (tmpl) = 0;
4677 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
4678 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
4679
4680 /* Inject this template into the global scope. */
4681 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
4682 }
4683
4684 return friend_type;
4685}
f84b4be9 4686
8d08fdba 4687tree
5566b478
MS
4688instantiate_class_template (type)
4689 tree type;
8d08fdba 4690{
61a127b3 4691 tree template, args, pattern, t;
36a117a5 4692 tree typedecl;
8d08fdba 4693
5566b478 4694 if (type == error_mark_node)
8d08fdba
MS
4695 return error_mark_node;
4696
5566b478
MS
4697 if (TYPE_BEING_DEFINED (type) || TYPE_SIZE (type))
4698 return type;
4699
7ddedda4
MM
4700 /* We want to allocate temporary vectors of template arguments and
4701 template argument expressions on the momentary obstack, not on
4702 the expression obstack. Otherwise, all the space allocated in
4703 argument coercion and such is simply lost. */
4704 push_momentary ();
4705
6bdb985f 4706 /* Figure out which template is being instantiated. */
36a117a5 4707 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5566b478 4708 my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
73aad9b9 4709
6bdb985f
MM
4710 /* Figure out which arguments are being used to do the
4711 instantiation. */
4712 args = CLASSTYPE_TI_ARGS (type);
4c571114 4713 PARTIAL_INSTANTIATION_P (type) = uses_template_parms (args);
6bdb985f 4714
4c571114
MM
4715 if (pedantic && PARTIAL_INSTANTIATION_P (type))
4716 /* If this is a partial instantiation, then we can't instantiate
4717 the type; there's no telling whether or not one of the
4718 template parameters might eventually be instantiated to some
4719 value that results in a specialization being used. For
4720 example, consider:
4721
4722 template <class T>
4723 struct S {};
4724
4725 template <class U>
4726 void f(S<U>);
4727
4728 template <>
4729 struct S<int> {};
4730
4731 Now, the `S<U>' in `f<int>' is the specialization, not an
5db698f6 4732 instantiation of the original template. */
4c571114
MM
4733 goto end;
4734
4735 /* Determine what specialization of the original template to
4736 instantiate. */
4737 if (PARTIAL_INSTANTIATION_P (type))
6bdb985f
MM
4738 /* There's no telling which specialization is appropriate at this
4739 point. Since all peeking at the innards of this partial
4740 instantiation are extensions (like the "implicit typename"
4741 extension, which allows users to omit the keyword `typename' on
4742 names that are declared as types in template base classes), we
4743 are free to do what we please.
4744
4745 Trying to figure out which partial instantiation to use can
4746 cause a crash. (Some of the template arguments don't even have
4747 types.) So, we just use the most general version. */
4748 t = NULL_TREE;
4749 else
73aad9b9 4750 {
6bdb985f
MM
4751 t = most_specialized_class (template, args);
4752
4753 if (t == error_mark_node)
73aad9b9 4754 {
d8e178a0 4755 const char *str = "candidates are:";
6bdb985f
MM
4756 cp_error ("ambiguous class template instantiation for `%#T'", type);
4757 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
4758 t = TREE_CHAIN (t))
73aad9b9 4759 {
6bdb985f
MM
4760 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4761 args))
4762 {
4763 cp_error_at ("%s %+#T", str, TREE_TYPE (t));
4764 str = " ";
4765 }
73aad9b9 4766 }
6bdb985f
MM
4767 TYPE_BEING_DEFINED (type) = 1;
4768 type = error_mark_node;
4769 goto end;
73aad9b9 4770 }
73aad9b9 4771 }
6bdb985f
MM
4772
4773 if (t)
73aad9b9
JM
4774 pattern = TREE_TYPE (t);
4775 else
4776 pattern = TREE_TYPE (template);
5566b478 4777
4c571114
MM
4778 /* If the template we're instantiating is incomplete, then clearly
4779 there's nothing we can do. */
5566b478 4780 if (TYPE_SIZE (pattern) == NULL_TREE)
7ddedda4 4781 goto end;
5566b478 4782
4c571114
MM
4783 /* If this is a partial instantiation, don't tsubst anything. We will
4784 only use this type for implicit typename, so the actual contents don't
4785 matter. All that matters is whether a particular name is a type. */
4786 if (PARTIAL_INSTANTIATION_P (type))
4787 {
4788 /* The fields set here must be kept in sync with those cleared
4789 in begin_class_definition. */
4790 TYPE_BINFO_BASETYPES (type) = TYPE_BINFO_BASETYPES (pattern);
4791 TYPE_FIELDS (type) = TYPE_FIELDS (pattern);
4792 TYPE_METHODS (type) = TYPE_METHODS (pattern);
4793 CLASSTYPE_TAGS (type) = CLASSTYPE_TAGS (pattern);
4794 /* Pretend that the type is complete, so that we will look
4795 inside it during name lookup and such. */
4796 TYPE_SIZE (type) = integer_zero_node;
4797 goto end;
4798 }
4799
4800 /* If we've recursively instantiated too many templates, stop. */
4801 if (! push_tinst_level (type))
4802 goto end;
4803
4804 /* Now we're really doing the instantiation. Mark the type as in
4805 the process of being defined. */
4806 TYPE_BEING_DEFINED (type) = 1;
4807
4808 maybe_push_to_top_level (uses_template_parms (type));
4c571114 4809
73aad9b9 4810 if (t)
36a117a5
MM
4811 {
4812 /* This TYPE is actually a instantiation of of a partial
4813 specialization. We replace the innermost set of ARGS with
4814 the arguments appropriate for substitution. For example,
4815 given:
4816
4817 template <class T> struct S {};
4818 template <class T> struct S<T*> {};
4819
4820 and supposing that we are instantiating S<int*>, ARGS will
4821 present be {int*} but we need {int}. */
4822 tree inner_args
4823 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4824 args);
4825
4826 /* If there were multiple levels in ARGS, replacing the
4827 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
4828 want, so we make a copy first. */
4829 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
4830 {
4831 args = copy_node (args);
4832 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
4833 }
4834 else
4835 args = inner_args;
4836 }
8d019cef 4837
5566b478
MS
4838 if (flag_external_templates)
4839 {
4840 if (flag_alt_external_templates)
4841 {
4842 CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
4843 SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
4844 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
2604412d
JM
4845 = (! CLASSTYPE_INTERFACE_ONLY (type)
4846 && CLASSTYPE_INTERFACE_KNOWN (type));
5566b478
MS
4847 }
4848 else
4849 {
4850 CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
4851 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
4852 (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
4853 CLASSTYPE_VTABLE_NEEDS_WRITING (type)
2604412d
JM
4854 = (! CLASSTYPE_INTERFACE_ONLY (type)
4855 && CLASSTYPE_INTERFACE_KNOWN (type));
5566b478
MS
4856 }
4857 }
4858 else
8d08fdba 4859 {
5566b478
MS
4860 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
4861 CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1;
8d08fdba
MS
4862 }
4863
f7da6097
MS
4864 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
4865 TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
f7da6097
MS
4866 TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
4867 TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
4868 TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
4869 TYPE_GETS_NEW (type) = TYPE_GETS_NEW (pattern);
4870 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
4871 TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
4872 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
4873 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
4874 TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
4875 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
4876 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
4877 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
4878 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
4879 TYPE_USES_COMPLEX_INHERITANCE (type)
4880 = TYPE_USES_COMPLEX_INHERITANCE (pattern);
4881 TYPE_USES_MULTIPLE_INHERITANCE (type)
4882 = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
4883 TYPE_USES_VIRTUAL_BASECLASSES (type)
4884 = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
4885 TYPE_PACKED (type) = TYPE_PACKED (pattern);
4886 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
eff71ab0 4887 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
4888 if (ANON_AGGR_TYPE_P (pattern))
4889 SET_ANON_AGGR_TYPE_P (type);
f7da6097 4890
4c571114
MM
4891 /* We must copy the arguments to the permanent obstack since
4892 during the tsubst'ing below they may wind up in the
4893 DECL_TI_ARGS of some instantiated member template. */
4894 args = copy_to_permanent (args);
2604412d 4895
3fd71a52
MM
4896 if (TYPE_BINFO_BASETYPES (pattern))
4897 {
4898 tree base_list = NULL_TREE;
4899 tree pbases = TYPE_BINFO_BASETYPES (pattern);
4900 int i;
5566b478 4901
3fd71a52
MM
4902 /* Substitute into each of the bases to determine the actual
4903 basetypes. */
4904 for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
4905 {
4906 tree base;
4907 tree access;
4908 tree pbase;
5566b478 4909
3fd71a52 4910 pbase = TREE_VEC_ELT (pbases, i);
711734a9 4911
3fd71a52
MM
4912 /* Substitue to figure out the base class. */
4913 base = tsubst (BINFO_TYPE (pbase), args,
4914 /*complain=*/1, NULL_TREE);
4915 if (base == error_mark_node)
4916 continue;
711734a9 4917
3fd71a52
MM
4918 /* Calculate the correct access node. */
4919 if (TREE_VIA_VIRTUAL (pbase))
4920 {
4921 if (TREE_VIA_PUBLIC (pbase))
4922 access = access_public_virtual_node;
4923 else if (TREE_VIA_PROTECTED (pbase))
4924 access = access_protected_virtual_node;
d6479fe7 4925 else
3fd71a52
MM
4926 access = access_private_virtual_node;
4927 }
4928 else
4929 {
4930 if (TREE_VIA_PUBLIC (pbase))
4931 access = access_public_node;
4932 else if (TREE_VIA_PROTECTED (pbase))
4933 access = access_protected_node;
d6479fe7 4934 else
3fd71a52
MM
4935 access = access_private_node;
4936 }
dfbcd65a 4937
3fd71a52
MM
4938 base_list = tree_cons (access, base, base_list);
4939 }
dfbcd65a 4940
3fd71a52
MM
4941 /* The list is now in reverse order; correct that. */
4942 base_list = nreverse (base_list);
4943
4944 /* Now call xref_basetypes to set up all the base-class
4945 information. */
4946 xref_basetypes (TREE_CODE (pattern) == RECORD_TYPE
4947 ? (CLASSTYPE_DECLARED_CLASS (pattern)
4948 ? class_type_node : record_type_node)
4949 : union_type_node,
4950 DECL_NAME (TYPE_NAME (pattern)),
4951 type,
4952 base_list);
4953 }
5566b478 4954
b74a0560
MM
4955 /* Now that our base classes are set up, enter the scope of the
4956 class, so that name lookups into base classes, etc. will work
4957 corectly. This is precisely analagous to what we do in
4958 begin_class_definition when defining an ordinary non-template
4959 class. */
4960 pushclass (type, 1);
4961
5566b478 4962 for (t = CLASSTYPE_TAGS (pattern); t; t = TREE_CHAIN (t))
8d08fdba 4963 {
5566b478 4964 tree tag = TREE_VALUE (t);
36a117a5
MM
4965 tree name = TYPE_IDENTIFIER (tag);
4966 tree newtag;
5566b478 4967
4393e105 4968 newtag = tsubst (tag, args, /*complain=*/1, NULL_TREE);
61a127b3 4969 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
ed44da02 4970 {
486e4077
MM
4971 if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
4972 /* Unfortunately, lookup_template_class sets
4973 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
4974 instantiation (i.e., for the type of a member template
4975 class nested within a template class.) This behavior is
4976 required for maybe_process_partial_specialization to work
4977 correctly, but is not accurate in this case; the TAG is not
4978 an instantiation of anything. (The corresponding
4979 TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
4980 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
4981
ed44da02
MM
4982 /* Now, we call pushtag to put this NEWTAG into the scope of
4983 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
4984 pushtag calling push_template_decl. We don't have to do
4985 this for enums because it will already have been done in
4986 tsubst_enum. */
4987 if (name)
4988 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
4989 pushtag (name, newtag, /*globalize=*/0);
4990 }
8d08fdba
MS
4991 }
4992
5566b478
MS
4993 /* Don't replace enum constants here. */
4994 for (t = TYPE_FIELDS (pattern); t; t = TREE_CHAIN (t))
4995 if (TREE_CODE (t) != CONST_DECL)
4996 {
ae58fa02
MM
4997 tree r;
4998
4999 /* The the file and line for this declaration, to assist in
5000 error message reporting. Since we called push_tinst_level
5001 above, we don't need to restore these. */
5002 lineno = DECL_SOURCE_LINE (t);
5003 input_filename = DECL_SOURCE_FILE (t);
5004
4393e105 5005 r = tsubst (t, args, /*complain=*/1, NULL_TREE);
5566b478
MS
5006 if (TREE_CODE (r) == VAR_DECL)
5007 {
fa8d6e85
MM
5008 tree init;
5009
94c82a77 5010 if (DECL_DEFINED_IN_CLASS_P (r))
fa8d6e85
MM
5011 init = tsubst_expr (DECL_INITIAL (t), args,
5012 /*complain=*/1, NULL_TREE);
5013 else
5014 init = NULL_TREE;
5015
5016 finish_static_data_member_decl (r, init,
5017 /*asmspec_tree=*/NULL_TREE,
5018 /*need_pop=*/0,
5019 /*flags=*/0);
5020
6ba89f8e
MM
5021 if (DECL_DEFINED_IN_CLASS_P (r))
5022 check_static_variable_definition (r, TREE_TYPE (r));
5566b478 5023 }
61a127b3
MM
5024
5025 /* R will have a TREE_CHAIN if and only if it has already been
5026 processed by finish_member_declaration. This can happen
5027 if, for example, it is a TYPE_DECL for a class-scoped
5028 ENUMERAL_TYPE; such a thing will already have been added to
5029 the field list by tsubst_enum above. */
5030 if (!TREE_CHAIN (r))
5031 {
5032 set_current_access_from_decl (r);
5033 finish_member_declaration (r);
5034 }
5566b478 5035 }
8d08fdba 5036
61a127b3
MM
5037 /* Set up the list (TYPE_METHODS) and vector (CLASSTYPE_METHOD_VEC)
5038 for this instantiation. */
5039 for (t = TYPE_METHODS (pattern); t; t = TREE_CHAIN (t))
5040 {
4393e105 5041 tree r = tsubst (t, args, /*complain=*/1, NULL_TREE);
61a127b3
MM
5042 set_current_access_from_decl (r);
5043 finish_member_declaration (r);
5044 }
8d08fdba 5045
2604412d
JM
5046 /* Construct the DECL_FRIENDLIST for the new class type. */
5047 typedecl = TYPE_MAIN_DECL (type);
5048 for (t = DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern));
5049 t != NULL_TREE;
5050 t = TREE_CHAIN (t))
f84b4be9 5051 {
2604412d 5052 tree friends;
f84b4be9 5053
2604412d
JM
5054 for (friends = TREE_VALUE (t);
5055 friends != NULL_TREE;
5056 friends = TREE_CHAIN (friends))
0c0aac2f
MM
5057 if (TREE_PURPOSE (friends) == error_mark_node)
5058 add_friend (type,
5059 tsubst_friend_function (TREE_VALUE (friends),
5060 args));
5061 else
5062 add_friends (type,
5063 tsubst_copy (TREE_PURPOSE (t), args,
5064 /*complain=*/1, NULL_TREE),
5065 tsubst (TREE_PURPOSE (friends), args,
5066 /*complain=*/1, NULL_TREE));
2604412d 5067 }
5566b478 5068
6757edfe
MM
5069 for (t = CLASSTYPE_FRIEND_CLASSES (pattern);
5070 t != NULL_TREE;
5071 t = TREE_CHAIN (t))
5072 {
5073 tree friend_type = TREE_VALUE (t);
1aed5355 5074 tree new_friend_type;
6757edfe 5075
36a117a5
MM
5076 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5077 new_friend_type = tsubst_friend_class (friend_type, args);
5078 else if (uses_template_parms (friend_type))
4393e105
MM
5079 new_friend_type = tsubst (friend_type, args, /*complain=*/1,
5080 NULL_TREE);
36a117a5 5081 else
6757edfe
MM
5082 /* The call to xref_tag_from_type does injection for friend
5083 classes. */
1aed5355 5084 new_friend_type =
36a117a5
MM
5085 xref_tag_from_type (friend_type, NULL_TREE, 1);
5086
1aed5355
MM
5087
5088 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5089 /* Trick make_friend_class into realizing that the friend
5090 we're adding is a template, not an ordinary class. It's
5091 important that we use make_friend_class since it will
5092 perform some error-checking and output cross-reference
5093 information. */
5094 ++processing_template_decl;
5095
5096 make_friend_class (type, new_friend_type);
fc378698 5097
1aed5355
MM
5098 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5099 --processing_template_decl;
6757edfe 5100 }
fc378698 5101
2604412d
JM
5102 /* This does injection for friend functions. */
5103 if (!processing_template_decl)
5104 {
4393e105
MM
5105 t = tsubst (DECL_TEMPLATE_INJECT (template), args,
5106 /*complain=*/1, NULL_TREE);
5566b478 5107
2604412d
JM
5108 for (; t; t = TREE_CHAIN (t))
5109 {
5110 tree d = TREE_VALUE (t);
fc378698 5111
2604412d
JM
5112 if (TREE_CODE (d) == TYPE_DECL)
5113 /* Already injected. */;
5114 else
5115 pushdecl (d);
5116 }
5117 }
5566b478 5118
2604412d
JM
5119 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5120 if (TREE_CODE (t) == FIELD_DECL)
5121 {
5122 TREE_TYPE (t) = complete_type (TREE_TYPE (t));
5123 require_complete_type (t);
5124 }
5566b478 5125
61a127b3
MM
5126 /* Set the file and line number information to whatever is given for
5127 the class itself. This puts error messages involving generated
5128 implicit functions at a predictable point, and the same point
5129 that would be used for non-template classes. */
5130 lineno = DECL_SOURCE_LINE (typedecl);
5131 input_filename = DECL_SOURCE_FILE (typedecl);
5132
5133 unreverse_member_declarations (type);
0aafb128 5134 finish_struct_1 (type, 0);
2604412d 5135 CLASSTYPE_GOT_SEMICOLON (type) = 1;
e92cc029 5136
5524676d
JM
5137 /* Clear this now so repo_template_used is happy. */
5138 TYPE_BEING_DEFINED (type) = 0;
2604412d 5139 repo_template_used (type);
8d08fdba 5140
b74a0560 5141 popclass ();
5566b478
MS
5142 pop_from_top_level ();
5143 pop_tinst_level ();
5144
7ddedda4
MM
5145 end:
5146 pop_momentary ();
5147
5566b478 5148 return type;
8d08fdba
MS
5149}
5150
5151static int
5152list_eq (t1, t2)
5153 tree t1, t2;
5154{
5155 if (t1 == NULL_TREE)
5156 return t2 == NULL_TREE;
5157 if (t2 == NULL_TREE)
5158 return 0;
5159 /* Don't care if one declares its arg const and the other doesn't -- the
5160 main variant of the arg type is all that matters. */
5161 if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5162 != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5163 return 0;
5164 return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5165}
5166
00d3396f
JM
5167/* If arg is a non-type template parameter that does not depend on template
5168 arguments, fold it like we weren't in the body of a template. */
5169
5170static tree
5171maybe_fold_nontype_arg (arg)
5172 tree arg;
5173{
5174 if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't'
5175 && !uses_template_parms (arg))
5176 {
5177 /* Sometimes, one of the args was an expression involving a
5178 template constant parameter, like N - 1. Now that we've
5179 tsubst'd, we might have something like 2 - 1. This will
5180 confuse lookup_template_class, so we do constant folding
5181 here. We have to unset processing_template_decl, to
5182 fool build_expr_from_tree() into building an actual
5183 tree. */
5184
5185 int saved_processing_template_decl = processing_template_decl;
5186 processing_template_decl = 0;
5187 arg = fold (build_expr_from_tree (arg));
5188 processing_template_decl = saved_processing_template_decl;
5189 }
5190 return arg;
5191}
5192
a221d52f 5193/* Return the TREE_VEC with the arguments for the innermost template header,
36a117a5
MM
5194 where ARGS is either that or the VEC of VECs for all the
5195 arguments. */
a221d52f
JM
5196
5197tree
36a117a5 5198innermost_args (args)
a221d52f 5199 tree args;
a221d52f 5200{
36a117a5 5201 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
a221d52f 5202}
f84b4be9 5203
830bfa74
MM
5204/* Substitute ARGS into the vector of template arguments T. */
5205
e9659ab0 5206static tree
4393e105 5207tsubst_template_arg_vector (t, args, complain)
830bfa74
MM
5208 tree t;
5209 tree args;
4393e105 5210 int complain;
830bfa74
MM
5211{
5212 int len = TREE_VEC_LENGTH (t), need_new = 0, i;
5213 tree *elts = (tree *) alloca (len * sizeof (tree));
5214
5215 bzero ((char *) elts, len * sizeof (tree));
5216
5217 for (i = 0; i < len; i++)
5218 {
5219 if (TREE_VEC_ELT (t, i) != NULL_TREE
5220 && TREE_CODE (TREE_VEC_ELT (t, i)) == TREE_VEC)
4393e105
MM
5221 elts[i] = tsubst_template_arg_vector (TREE_VEC_ELT (t, i),
5222 args, complain);
830bfa74
MM
5223 else
5224 elts[i] = maybe_fold_nontype_arg
4393e105
MM
5225 (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
5226 NULL_TREE));
830bfa74
MM
5227
5228 if (elts[i] != TREE_VEC_ELT (t, i))
5229 need_new = 1;
5230 }
5231
5232 if (!need_new)
5233 return t;
5234
7ddedda4 5235 t = make_temp_vec (len);
830bfa74
MM
5236 for (i = 0; i < len; i++)
5237 TREE_VEC_ELT (t, i) = elts[i];
5238
5239 return t;
5240}
5241
36a117a5
MM
5242/* Return the result of substituting ARGS into the template parameters
5243 given by PARMS. If there are m levels of ARGS and m + n levels of
5244 PARMS, then the result will contain n levels of PARMS. For
5245 example, if PARMS is `template <class T> template <class U>
5246 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5247 result will be `template <int*, double, class V>'. */
5248
e9659ab0 5249static tree
4393e105 5250tsubst_template_parms (parms, args, complain)
36a117a5
MM
5251 tree parms;
5252 tree args;
4393e105 5253 int complain;
36a117a5
MM
5254{
5255 tree r;
5256 tree* new_parms = &r;
5257
5258 for (new_parms = &r;
5259 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5260 new_parms = &(TREE_CHAIN (*new_parms)),
5261 parms = TREE_CHAIN (parms))
5262 {
5263 tree new_vec =
5264 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5265 int i;
5266
5267 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5268 {
5269 tree default_value =
5270 TREE_PURPOSE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5271 tree parm_decl =
5272 TREE_VALUE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5273
5274 TREE_VEC_ELT (new_vec, i)
4393e105
MM
5275 = build_tree_list (tsubst (default_value, args, complain,
5276 NULL_TREE),
5277 tsubst (parm_decl, args, complain,
5278 NULL_TREE));
36a117a5
MM
5279 }
5280
5281 *new_parms =
5282 tree_cons (build_int_2 (0, (TMPL_PARMS_DEPTH (parms)
5283 - TMPL_ARGS_DEPTH (args))),
5284 new_vec, NULL_TREE);
5285 }
5286
5287 return r;
5288}
5289
ed44da02
MM
5290/* Substitute the ARGS into the indicated aggregate (or enumeration)
5291 type T. If T is not an aggregate or enumeration type, it is
5292 handled as if by tsubst. IN_DECL is as for tsubst. If
5293 ENTERING_SCOPE is non-zero, T is the context for a template which
5294 we are presently tsubst'ing. Return the subsituted value. */
36a117a5 5295
e9659ab0 5296static tree
4393e105 5297tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
36a117a5
MM
5298 tree t;
5299 tree args;
4393e105 5300 int complain;
36a117a5
MM
5301 tree in_decl;
5302 int entering_scope;
5303{
5304 if (t == NULL_TREE)
5305 return NULL_TREE;
5306
5307 switch (TREE_CODE (t))
5308 {
5309 case RECORD_TYPE:
5310 if (TYPE_PTRMEMFUNC_P (t))
5311 {
5312 tree r = build_ptrmemfunc_type
4393e105 5313 (tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl));
91063b51 5314 return cp_build_qualified_type (r, TYPE_QUALS (t));
36a117a5
MM
5315 }
5316
5317 /* else fall through */
ed44da02 5318 case ENUMERAL_TYPE:
36a117a5 5319 case UNION_TYPE:
5db698f6 5320 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
5321 {
5322 tree argvec;
5323 tree context;
5324 tree r;
5325
5326 /* First, determine the context for the type we are looking
5327 up. */
5328 if (TYPE_CONTEXT (t) != NULL_TREE)
5329 context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
4393e105 5330 complain,
36a117a5
MM
5331 in_decl, /*entering_scope=*/1);
5332 else
5333 context = NULL_TREE;
5334
5335 /* Then, figure out what arguments are appropriate for the
5336 type we are trying to find. For example, given:
5337
5338 template <class T> struct S;
5339 template <class T, class U> void f(T, U) { S<U> su; }
5340
5341 and supposing that we are instantiating f<int, double>,
5342 then our ARGS will be {int, double}, but, when looking up
5343 S we only want {double}. */
7ddedda4 5344 push_momentary ();
4393e105
MM
5345 argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
5346 complain);
36a117a5
MM
5347
5348 r = lookup_template_class (t, argvec, in_decl, context,
5349 entering_scope);
7ddedda4 5350 pop_momentary ();
36a117a5 5351
91063b51 5352 return cp_build_qualified_type (r, TYPE_QUALS (t));
36a117a5
MM
5353 }
5354 else
5355 /* This is not a template type, so there's nothing to do. */
5356 return t;
5357
5358 default:
4393e105 5359 return tsubst (t, args, complain, in_decl);
36a117a5
MM
5360 }
5361}
5362
ae58fa02
MM
5363/* Substitute the ARGS into the T, which is a _DECL. TYPE is the
5364 (already computed) substitution of ARGS into TREE_TYPE (T), if
5365 appropriate. Return the result of the substitution. IN_DECL is as
5366 for tsubst. */
00d3396f 5367
e9659ab0 5368static tree
ae58fa02
MM
5369tsubst_decl (t, args, type, in_decl)
5370 tree t;
5371 tree args;
5372 tree type;
8d08fdba
MS
5373 tree in_decl;
5374{
ae58fa02
MM
5375 int saved_lineno;
5376 char* saved_filename;
b370501f 5377 tree r = NULL_TREE;
830bfa74 5378
ae58fa02
MM
5379 /* Set the filename and linenumber to improve error-reporting. */
5380 saved_lineno = lineno;
5381 saved_filename = input_filename;
5382 lineno = DECL_SOURCE_LINE (t);
5383 input_filename = DECL_SOURCE_FILE (t);
b7484fbe 5384
8d08fdba
MS
5385 switch (TREE_CODE (t))
5386 {
98c1c668
JM
5387 case TEMPLATE_DECL:
5388 {
5389 /* We can get here when processing a member template function
5390 of a template class. */
98c1c668 5391 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 5392 tree spec;
db2767b6 5393 int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
98c1c668 5394
db2767b6
MM
5395 if (!is_template_template_parm)
5396 {
36a117a5
MM
5397 /* We might already have an instance of this template.
5398 The ARGS are for the surrounding class type, so the
5399 full args contain the tsubst'd args for the context,
5400 plus the innermost args from the template decl. */
5401 tree tmpl_args = DECL_CLASS_TEMPLATE_P (t)
5402 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5403 : DECL_TI_ARGS (DECL_RESULT (t));
7ddedda4
MM
5404 tree full_args;
5405
5406 push_momentary ();
4393e105
MM
5407 full_args = tsubst_template_arg_vector (tmpl_args, args,
5408 /*complain=*/1);
36a117a5
MM
5409
5410 /* tsubst_template_arg_vector doesn't copy the vector if
5411 nothing changed. But, *something* should have
5412 changed. */
5413 my_friendly_assert (full_args != tmpl_args, 0);
5414
5415 spec = retrieve_specialization (t, full_args);
7ddedda4 5416 pop_momentary ();
db2767b6 5417 if (spec != NULL_TREE)
ae58fa02
MM
5418 {
5419 r = spec;
5420 break;
5421 }
db2767b6 5422 }
98c1c668
JM
5423
5424 /* Make a new template decl. It will be similar to the
5425 original, but will record the current template arguments.
5426 We also create a new function declaration, which is just
5427 like the old one, but points to this new template, rather
5428 than the old one. */
ae58fa02
MM
5429 r = copy_node (t);
5430 copy_lang_decl (r);
5431 my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5432 TREE_CHAIN (r) = NULL_TREE;
db2767b6
MM
5433
5434 if (is_template_template_parm)
5435 {
4393e105 5436 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
ae58fa02
MM
5437 DECL_RESULT (r) = new_decl;
5438 TREE_TYPE (r) = TREE_TYPE (new_decl);
5439 break;
db2767b6
MM
5440 }
5441
ae58fa02 5442 DECL_CONTEXT (r)
4393e105
MM
5443 = tsubst_aggr_type (DECL_CONTEXT (t), args, /*complain=*/1,
5444 in_decl, /*entering_scope=*/1);
ae58fa02 5445 DECL_CLASS_CONTEXT (r)
4393e105
MM
5446 = tsubst_aggr_type (DECL_CLASS_CONTEXT (t), args,
5447 /*complain=*/1, in_decl,
5448 /*entering_scope=*/1);
ae58fa02 5449 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
5450
5451 if (TREE_CODE (decl) == TYPE_DECL)
5452 {
4393e105
MM
5453 tree new_type = tsubst (TREE_TYPE (t), args,
5454 /*complain=*/1, in_decl);
ae58fa02
MM
5455 TREE_TYPE (r) = new_type;
5456 CLASSTYPE_TI_TEMPLATE (new_type) = r;
5457 DECL_RESULT (r) = TYPE_MAIN_DECL (new_type);
5458 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
93cdc044
JM
5459 }
5460 else
5461 {
4393e105 5462 tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
ae58fa02
MM
5463 DECL_RESULT (r) = new_decl;
5464 DECL_TI_TEMPLATE (new_decl) = r;
5465 TREE_TYPE (r) = TREE_TYPE (new_decl);
5466 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
93cdc044
JM
5467 }
5468
ae58fa02
MM
5469 SET_DECL_IMPLICIT_INSTANTIATION (r);
5470 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5471 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
5472
5473 /* The template parameters for this new template are all the
5474 template parameters for the old template, except the
5475 outermost level of parameters. */
ae58fa02 5476 DECL_TEMPLATE_PARMS (r)
4393e105
MM
5477 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5478 /*complain=*/1);
98c1c668 5479
93cdc044 5480 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 5481 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 5482
8d019cef 5483 /* We don't partially instantiate partial specializations. */
93cdc044 5484 if (TREE_CODE (decl) == TYPE_DECL)
ae58fa02 5485 break;
93cdc044 5486
75650646
MM
5487 for (spec = DECL_TEMPLATE_SPECIALIZATIONS (t);
5488 spec != NULL_TREE;
5489 spec = TREE_CHAIN (spec))
5490 {
5491 /* It helps to consider example here. Consider:
5492
5493 template <class T>
5494 struct S {
5495 template <class U>
5496 void f(U u);
5497
5498 template <>
5499 void f(T* t) {}
5500 };
5501
5502 Now, for example, we are instantiating S<int>::f(U u).
5503 We want to make a template:
5504
5505 template <class U>
5506 void S<int>::f(U);
5507
5508 It will have a specialization, for the case U = int*, of
5509 the form:
5510
5511 template <>
5512 void S<int>::f<int*>(int*);
5513
5514 This specialization will be an instantiation of
5515 the specialization given in the declaration of S, with
5516 argument list int*. */
5517
5518 tree fn = TREE_VALUE (spec);
5519 tree spec_args;
5520 tree new_fn;
5521
5522 if (!DECL_TEMPLATE_SPECIALIZATION (fn))
5523 /* Instantiations are on the same list, but they're of
5524 no concern to us. */
5525 continue;
5526
36a117a5
MM
5527 if (TREE_CODE (fn) != TEMPLATE_DECL)
5528 /* A full specialization. There's no need to record
5529 that here. */
5530 continue;
5531
4393e105
MM
5532 spec_args = tsubst (DECL_TI_ARGS (fn), args,
5533 /*complain=*/1, in_decl);
36a117a5 5534 new_fn = tsubst (DECL_RESULT (most_general_template (fn)),
4393e105 5535 spec_args, /*complain=*/1, in_decl);
36a117a5 5536 DECL_TI_TEMPLATE (new_fn) = fn;
ae58fa02 5537 register_specialization (new_fn, r,
36a117a5 5538 innermost_args (spec_args));
75650646
MM
5539 }
5540
5541 /* Record this partial instantiation. */
ae58fa02
MM
5542 register_specialization (r, t,
5543 DECL_TI_ARGS (DECL_RESULT (r)));
75650646 5544
98c1c668 5545 }
ae58fa02 5546 break;
8d08fdba
MS
5547
5548 case FUNCTION_DECL:
5549 {
386b8a85 5550 tree ctx;
87603ed0 5551 tree argvec = NULL_TREE;
cf38f48a 5552 tree *friends;
36a117a5 5553 tree gen_tmpl;
5566b478 5554 int member;
d8c4447d
MM
5555 int args_depth;
5556 int parms_depth;
5566b478 5557
36a117a5
MM
5558 /* Nobody should be tsubst'ing into non-template functions. */
5559 my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5560
5561 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5562 {
5563 tree spec;
5564
7ddedda4
MM
5565 /* Allocate template arguments on the momentary obstack,
5566 in case we don't need to keep them. */
5567 push_momentary ();
5568
36a117a5
MM
5569 /* Calculate the most general template of which R is a
5570 specialization, and the complete set of arguments used to
5571 specialize R. */
5572 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7ddedda4
MM
5573 argvec
5574 = tsubst_template_arg_vector (DECL_TI_ARGS
5575 (DECL_TEMPLATE_RESULT (gen_tmpl)),
4393e105 5576 args, /*complain=*/1);
36a117a5
MM
5577
5578 /* Check to see if we already have this specialization. */
5579 spec = retrieve_specialization (gen_tmpl, argvec);
7ddedda4 5580
36a117a5 5581 if (spec)
ae58fa02
MM
5582 {
5583 r = spec;
7ddedda4 5584 pop_momentary ();
ae58fa02
MM
5585 break;
5586 }
d8c4447d 5587
7ddedda4
MM
5588 /* We're going to need to keep the ARGVEC, so we copy it
5589 here. */
5590 argvec = copy_to_permanent (argvec);
5591 pop_momentary ();
5592
d8c4447d
MM
5593 /* Here, we deal with the peculiar case:
5594
5595 template <class T> struct S {
5596 template <class U> friend void f();
5597 };
5598 template <class U> friend void f() {}
5599 template S<int>;
5600 template void f<double>();
5601
5602 Here, the ARGS for the instantiation of will be {int,
5603 double}. But, we only need as many ARGS as there are
5604 levels of template parameters in CODE_PATTERN. We are
5605 careful not to get fooled into reducing the ARGS in
5606 situations like:
5607
5608 template <class T> struct S { template <class U> void f(U); }
5609 template <class T> template <> void S<T>::f(int) {}
5610
5611 which we can spot because the pattern will be a
5612 specialization in this case. */
5613 args_depth = TMPL_ARGS_DEPTH (args);
5614 parms_depth =
5615 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
5616 if (args_depth > parms_depth
5617 && !DECL_TEMPLATE_SPECIALIZATION (t))
5618 {
5619 my_friendly_assert (DECL_FRIEND_P (t), 0);
5620
5621 if (parms_depth > 1)
5622 {
5623 int i;
5624
5625 args = make_temp_vec (parms_depth);
5626 for (i = 0; i < parms_depth; ++i)
5627 TREE_VEC_ELT (args, i) =
5628 TREE_VEC_ELT (args, i + (args_depth - parms_depth));
5629 }
5630 else
5631 args = TREE_VEC_ELT (args, args_depth - parms_depth);
5632 }
36a117a5
MM
5633 }
5634 else
5635 {
5636 /* This special case arises when we have something like this:
5637
5638 template <class T> struct S {
5639 friend void f<int>(int, double);
5640 };
5641
5642 Here, the DECL_TI_TEMPLATE for the friend declaration
39c01e4c
MM
5643 will be a LOOKUP_EXPR or an IDENTIFIER_NODE. We are
5644 being called from tsubst_friend_function, and we want
5645 only to create a new decl (R) with appropriate types so
5646 that we can call determine_specialization. */
5647 my_friendly_assert ((TREE_CODE (DECL_TI_TEMPLATE (t))
5648 == LOOKUP_EXPR)
5649 || (TREE_CODE (DECL_TI_TEMPLATE (t))
5650 == IDENTIFIER_NODE), 0);
36a117a5
MM
5651 gen_tmpl = NULL_TREE;
5652 }
5653
6eb3bb27 5654 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 5655 {
5566b478
MS
5656 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5657 member = 2;
5658 else
5659 member = 1;
4393e105
MM
5660 ctx = tsubst_aggr_type (DECL_CLASS_CONTEXT (t), args,
5661 /*complain=*/1, t,
36a117a5 5662 /*entering_scope=*/1);
5566b478
MS
5663 }
5664 else
5665 {
5666 member = 0;
5667 ctx = NULL_TREE;
5566b478 5668 }
4393e105 5669 type = tsubst (type, args, /*complain=*/1, in_decl);
8d08fdba 5670
5566b478
MS
5671 /* We do NOT check for matching decls pushed separately at this
5672 point, as they may not represent instantiations of this
5673 template, and in any case are considered separate under the
312e7d50 5674 discrete model. Instead, see add_maybe_template. */
5566b478
MS
5675
5676 r = copy_node (t);
5677 copy_lang_decl (r);
e1467ff2 5678 DECL_USE_TEMPLATE (r) = 0;
5566b478
MS
5679 TREE_TYPE (r) = type;
5680
5681 DECL_CONTEXT (r)
4393e105
MM
5682 = tsubst_aggr_type (DECL_CONTEXT (t), args, /*complain=*/1, t,
5683 /*entering_scope=*/1);
5566b478
MS
5684 DECL_CLASS_CONTEXT (r) = ctx;
5685
4c571114 5686 if (member && IDENTIFIER_TYPENAME_P (DECL_NAME (r)))
f181d4ae
MM
5687 /* Type-conversion operator. Reconstruct the name, in
5688 case it's the name of one of the template's parameters. */
5689 DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
5566b478 5690
4393e105
MM
5691 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
5692 /*complain=*/1, t);
711734a9
JM
5693 DECL_MAIN_VARIANT (r) = r;
5694 DECL_RESULT (r) = NULL_TREE;
711734a9
JM
5695
5696 TREE_STATIC (r) = 0;
5697 TREE_PUBLIC (r) = TREE_PUBLIC (t);
5698 DECL_EXTERNAL (r) = 1;
5699 DECL_INTERFACE_KNOWN (r) = 0;
5700 DECL_DEFER_OUTPUT (r) = 0;
5701 TREE_CHAIN (r) = NULL_TREE;
5702 DECL_PENDING_INLINE_INFO (r) = 0;
5703 TREE_USED (r) = 0;
5704
36a117a5
MM
5705 /* Set up the DECL_TEMPLATE_INFO for R and compute its mangled
5706 name. There's no need to do this in the special friend
5707 case mentioned above where GEN_TMPL is NULL. */
5708 if (gen_tmpl)
386b8a85 5709 {
7ddedda4
MM
5710 /* The ARGVEC was built on the momentary obstack. Make it
5711 permanent now. */
5712 argvec = copy_to_permanent (argvec);
36a117a5
MM
5713 DECL_TEMPLATE_INFO (r)
5714 = perm_tree_cons (gen_tmpl, argvec, NULL_TREE);
5715 SET_DECL_IMPLICIT_INSTANTIATION (r);
5716 register_specialization (r, gen_tmpl, argvec);
5717
5718 /* Set the mangled name for R. */
5719 if (DECL_DESTRUCTOR_P (t))
5720 DECL_ASSEMBLER_NAME (r) = build_destructor_name (ctx);
5721 else
386b8a85 5722 {
36a117a5
MM
5723 /* Instantiations of template functions must be mangled
5724 specially, in order to conform to 14.5.5.1
5725 [temp.over.link]. */
5726 tree tmpl = DECL_TI_TEMPLATE (t);
386b8a85 5727
36a117a5
MM
5728 /* TMPL will be NULL if this is a specialization of a
5729 member function of a template class. */
5730 if (name_mangling_version < 1
5731 || tmpl == NULL_TREE
5732 || (member && !is_member_template (tmpl)
5733 && !DECL_TEMPLATE_INFO (tmpl)))
5734 set_mangled_name_for_decl (r);
75650646 5735 else
36a117a5 5736 set_mangled_name_for_template_decl (r);
386b8a85 5737 }
36a117a5
MM
5738
5739 DECL_RTL (r) = 0;
5740 make_decl_rtl (r, NULL_PTR, 1);
5741
5742 /* Like grokfndecl. If we don't do this, pushdecl will
5743 mess up our TREE_CHAIN because it doesn't find a
5744 previous decl. Sigh. */
5745 if (member
c36ae80f 5746 && ! uses_template_parms (r)
36a117a5
MM
5747 && (IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r))
5748 == NULL_TREE))
5749 SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r), r);
386b8a85 5750 }
f181d4ae 5751
cf38f48a
MM
5752 /* Copy the list of befriending classes. */
5753 for (friends = &DECL_BEFRIENDING_CLASSES (r);
5754 *friends;
5755 friends = &TREE_CHAIN (*friends))
5756 {
5757 *friends = copy_node (*friends);
5758 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
5759 args, /*complain=*/1,
5760 in_decl);
5761 }
5762
f181d4ae
MM
5763 if (DECL_CONSTRUCTOR_P (r))
5764 {
5765 maybe_retrofit_in_chrg (r);
5766 grok_ctor_properties (ctx, r);
5767 }
5768 if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
5769 grok_op_properties (r, DECL_VIRTUAL_P (r), DECL_FRIEND_P (r));
8d08fdba 5770 }
ae58fa02 5771 break;
8d08fdba
MS
5772
5773 case PARM_DECL:
5774 {
ae58fa02 5775 r = copy_node (t);
5566b478 5776 TREE_TYPE (r) = type;
1b8899d1
MM
5777 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5778
db2767b6
MM
5779 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
5780 DECL_INITIAL (r) = TREE_TYPE (r);
5781 else
4393e105
MM
5782 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
5783 /*complain=*/1, in_decl);
db2767b6 5784
5566b478 5785 DECL_CONTEXT (r) = NULL_TREE;
f83b0cb6
JM
5786#ifdef PROMOTE_PROTOTYPES
5787 if ((TREE_CODE (type) == INTEGER_TYPE
5788 || TREE_CODE (type) == ENUMERAL_TYPE)
5789 && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5790 DECL_ARG_TYPE (r) = integer_type_node;
5791#endif
8d08fdba 5792 if (TREE_CHAIN (t))
4393e105
MM
5793 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
5794 /*complain=*/1, TREE_CHAIN (t));
8d08fdba 5795 }
ae58fa02 5796 break;
8d08fdba 5797
5566b478
MS
5798 case FIELD_DECL:
5799 {
ae58fa02 5800 r = copy_node (t);
5566b478 5801 copy_lang_decl (r);
1b8899d1
MM
5802 TREE_TYPE (r) = type;
5803 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5804
5805 /* We don't have to set DECL_CONTEXT here; it is set by
5806 finish_member_declaration. */
4393e105
MM
5807 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
5808 /*complain=*/1, in_decl);
5566b478 5809 TREE_CHAIN (r) = NULL_TREE;
4393e105 5810 if (TREE_CODE (type) == VOID_TYPE)
8251199e 5811 cp_error_at ("instantiation of `%D' as type void", r);
5566b478 5812 }
ae58fa02 5813 break;
5566b478
MS
5814
5815 case USING_DECL:
5816 {
ae58fa02 5817 r = copy_node (t);
5566b478 5818 DECL_INITIAL (r)
4393e105 5819 = tsubst_copy (DECL_INITIAL (t), args, /*complain=*/1, in_decl);
5566b478 5820 TREE_CHAIN (r) = NULL_TREE;
5566b478 5821 }
ae58fa02 5822 break;
5566b478
MS
5823
5824 case VAR_DECL:
5825 {
36a117a5
MM
5826 tree argvec;
5827 tree gen_tmpl;
5828 tree spec;
5829 tree tmpl;
4393e105
MM
5830 tree ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
5831 /*complain=*/1,
5832 in_decl, /*entering_scope=*/1);
36a117a5
MM
5833
5834 /* Nobody should be tsubst'ing into non-template variables. */
5835 my_friendly_assert (DECL_LANG_SPECIFIC (t)
5836 && DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5566b478 5837
36a117a5
MM
5838 /* Check to see if we already have this specialization. */
5839 tmpl = DECL_TI_TEMPLATE (t);
5840 gen_tmpl = most_general_template (tmpl);
4393e105 5841 argvec = tsubst (DECL_TI_ARGS (t), args, /*complain=*/1, in_decl);
36a117a5
MM
5842 spec = retrieve_specialization (gen_tmpl, argvec);
5843
5844 if (spec)
ae58fa02
MM
5845 {
5846 r = spec;
5847 break;
5848 }
5566b478
MS
5849
5850 r = copy_node (t);
5851 TREE_TYPE (r) = type;
1b8899d1 5852 c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5566b478 5853 DECL_CONTEXT (r) = ctx;
d11ad92e
MS
5854
5855 /* Don't try to expand the initializer until someone tries to use
5856 this variable; otherwise we run into circular dependencies. */
5857 DECL_INITIAL (r) = NULL_TREE;
5566b478
MS
5858 DECL_RTL (r) = 0;
5859 DECL_SIZE (r) = 0;
36a117a5
MM
5860 copy_lang_decl (r);
5861 DECL_CLASS_CONTEXT (r) = DECL_CONTEXT (r);
5566b478 5862
fa8d6e85
MM
5863 /* A static data member declaration is always marked external
5864 when it is declared in-class, even if an initializer is
5865 present. We mimic the non-template processing here. */
5866 DECL_EXTERNAL (r) = 1;
5867
36a117a5
MM
5868 DECL_TEMPLATE_INFO (r) = perm_tree_cons (tmpl, argvec, NULL_TREE);
5869 SET_DECL_IMPLICIT_INSTANTIATION (r);
5870 register_specialization (r, gen_tmpl, argvec);
5566b478 5871
5566b478 5872 TREE_CHAIN (r) = NULL_TREE;
519ebd1e 5873 if (TREE_CODE (type) == VOID_TYPE)
8251199e 5874 cp_error_at ("instantiation of `%D' as type void", r);
5566b478 5875 }
ae58fa02 5876 break;
5566b478
MS
5877
5878 case TYPE_DECL:
d2e5ee5c 5879 if (t == TYPE_NAME (TREE_TYPE (t)))
ae58fa02
MM
5880 r = TYPE_NAME (type);
5881 else
5882 {
5883 r = copy_node (t);
5884 TREE_TYPE (r) = type;
5885 DECL_CONTEXT (r) = current_class_type;
5886 TREE_CHAIN (r) = NULL_TREE;
5887 }
5888 break;
5889
5890 default:
5891 my_friendly_abort (0);
5892 }
5893
5894 /* Restore the file and line information. */
5895 lineno = saved_lineno;
5896 input_filename = saved_filename;
5897
5898 return r;
5899}
5900
cabc336a
MM
5901/* Substitue into the ARG_TYPES of a function type. */
5902
e9659ab0 5903static tree
4393e105 5904tsubst_arg_types (arg_types, args, complain, in_decl)
cabc336a
MM
5905 tree arg_types;
5906 tree args;
4393e105 5907 int complain;
cabc336a
MM
5908 tree in_decl;
5909{
5910 tree remaining_arg_types;
cabc336a
MM
5911 tree type;
5912
5913 if (!arg_types || arg_types == void_list_node)
5914 return arg_types;
5915
5916 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
5917 args, complain, in_decl);
5918 if (remaining_arg_types == error_mark_node)
5919 return error_mark_node;
5920
5921 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
5922 if (type == error_mark_node)
5923 return error_mark_node;
cabc336a 5924
4393e105
MM
5925 /* Do array-to-pointer, function-to-pointer conversion, and ignore
5926 top-level qualifiers as required. */
5927 type = TYPE_MAIN_VARIANT (type_decays_to (type));
cabc336a
MM
5928
5929 /* Note that we do not substitute into default arguments here. The
5930 standard mandates that they be instantiated only when needed,
5931 which is done in build_over_call. */
51632249
JM
5932 return hash_tree_cons (TREE_PURPOSE (arg_types), type,
5933 remaining_arg_types);
cabc336a
MM
5934
5935}
5936
4393e105
MM
5937/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
5938 *not* handle the exception-specification for FNTYPE, because the
5939 initial substitution of explicitly provided template parameters
5940 during argument deduction forbids substitution into the
5941 exception-specification:
5942
5943 [temp.deduct]
5944
5945 All references in the function type of the function template to the
5946 corresponding template parameters are replaced by the specified tem-
5947 plate argument values. If a substitution in a template parameter or
5948 in the function type of the function template results in an invalid
5949 type, type deduction fails. [Note: The equivalent substitution in
5950 exception specifications is done only when the function is instanti-
5951 ated, at which point a program is ill-formed if the substitution
5952 results in an invalid type.] */
5953
5954static tree
5955tsubst_function_type (t, args, complain, in_decl)
5956 tree t;
5957 tree args;
5958 int complain;
5959 tree in_decl;
5960{
5961 tree return_type;
5962 tree arg_types;
5963 tree fntype;
5964
5965 /* The TYPE_CONTEXT is not used for function/method types. */
5966 my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
5967
5968 /* Substitue the return type. */
5969 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
5970 if (return_type == error_mark_node)
5971 return error_mark_node;
5972
5973 /* Substitue the argument types. */
5974 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
5975 complain, in_decl);
5976 if (arg_types == error_mark_node)
5977 return error_mark_node;
5978
5979 /* Construct a new type node and return it. */
5980 if (TREE_CODE (t) == FUNCTION_TYPE)
5981 fntype = build_function_type (return_type, arg_types);
5982 else
5983 {
5984 tree r = TREE_TYPE (TREE_VALUE (arg_types));
5985 if (! IS_AGGR_TYPE (r))
5986 {
5987 /* [temp.deduct]
5988
5989 Type deduction may fail for any of the following
5990 reasons:
5991
5992 -- Attempting to create "pointer to member of T" when T
5993 is not a class type. */
5994 if (complain)
5995 cp_error ("creating pointer to member function of non-class type `%T'",
5996 r);
5997 return error_mark_node;
5998 }
5999
6000 fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6001 (arg_types));
6002 }
6003 fntype = build_qualified_type (fntype, TYPE_QUALS (t));
ada846eb 6004 fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
4393e105
MM
6005
6006 return fntype;
6007}
6008
297e73d8
MM
6009/* Substitute into the PARMS of a call-declarator. */
6010
e9659ab0 6011static tree
4393e105 6012tsubst_call_declarator_parms (parms, args, complain, in_decl)
297e73d8
MM
6013 tree parms;
6014 tree args;
4393e105 6015 int complain;
297e73d8
MM
6016 tree in_decl;
6017{
6018 tree new_parms;
6019 tree type;
6020 tree defarg;
6021
6022 if (!parms || parms == void_list_node)
6023 return parms;
6024
6025 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
4393e105 6026 args, complain, in_decl);
297e73d8
MM
6027
6028 /* Figure out the type of this parameter. */
4393e105 6029 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
297e73d8
MM
6030
6031 /* Figure out the default argument as well. Note that we use
4393e105
MM
6032 tsubst_expr since the default argument is really an expression. */
6033 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
297e73d8
MM
6034
6035 /* Chain this parameter on to the front of those we have already
6036 processed. We don't use hash_tree_cons because that function
6037 doesn't check TREE_PARMLIST. */
6038 new_parms = tree_cons (defarg, type, new_parms);
6039
6040 /* And note that these are parameters. */
6041 TREE_PARMLIST (new_parms) = 1;
6042
6043 return new_parms;
6044}
6045
4393e105
MM
6046/* Take the tree structure T and replace template parameters used
6047 therein with the argument vector ARGS. IN_DECL is an associated
6048 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
6049 An appropriate error message is issued only if COMPLAIN is
6050 non-zero. Note that we must be relatively non-tolerant of
6051 extensions here, in order to preserve conformance; if we allow
6052 substitutions that should not be allowed, we may allow argument
6053 deductions that should not succeed, and therefore report ambiguous
6054 overload situations where there are none. In theory, we could
6055 allow the substitution, but indicate that it should have failed,
6056 and allow our caller to make sure that the right thing happens, but
6057 we don't try to do this yet.
6058
6059 This function is used for dealing with types, decls and the like;
6060 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02
MM
6061
6062tree
4393e105 6063tsubst (t, args, complain, in_decl)
ae58fa02 6064 tree t, args;
4393e105 6065 int complain;
ae58fa02
MM
6066 tree in_decl;
6067{
0ecfe0b4 6068 tree type, r;
ae58fa02
MM
6069
6070 if (t == NULL_TREE || t == error_mark_node
6071 || t == integer_type_node
6072 || t == void_type_node
6073 || t == char_type_node
6074 || TREE_CODE (t) == NAMESPACE_DECL)
6075 return t;
6076
6077 if (TREE_CODE (t) == IDENTIFIER_NODE)
6078 type = IDENTIFIER_TYPE_VALUE (t);
6079 else
6080 type = TREE_TYPE (t);
6081 if (type == unknown_type_node)
6082 my_friendly_abort (42);
6083
6084 if (type && TREE_CODE (t) != FUNCTION_DECL
6085 && TREE_CODE (t) != TYPENAME_TYPE
6086 && TREE_CODE (t) != TEMPLATE_DECL
4393e105
MM
6087 && TREE_CODE (t) != IDENTIFIER_NODE
6088 && TREE_CODE (t) != FUNCTION_TYPE
6089 && TREE_CODE (t) != METHOD_TYPE)
6090 type = tsubst (type, args, complain, in_decl);
6091 if (type == error_mark_node)
6092 return error_mark_node;
ae58fa02
MM
6093
6094 if (TREE_CODE_CLASS (TREE_CODE (t)) == 'd')
6095 return tsubst_decl (t, args, type, in_decl);
6096
6097 switch (TREE_CODE (t))
6098 {
6099 case RECORD_TYPE:
6100 case UNION_TYPE:
6101 case ENUMERAL_TYPE:
4393e105
MM
6102 return tsubst_aggr_type (t, args, complain, in_decl,
6103 /*entering_scope=*/0);
ae58fa02
MM
6104
6105 case ERROR_MARK:
6106 case IDENTIFIER_NODE:
6107 case OP_IDENTIFIER:
6108 case VOID_TYPE:
6109 case REAL_TYPE:
6110 case COMPLEX_TYPE:
6111 case BOOLEAN_TYPE:
6112 case INTEGER_CST:
6113 case REAL_CST:
6114 case STRING_CST:
6115 return t;
6116
6117 case INTEGER_TYPE:
6118 if (t == integer_type_node)
6119 return t;
6120
6121 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6122 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6123 return t;
d2e5ee5c 6124
5566b478 6125 {
ddce3528 6126 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 6127
ddce3528 6128 max = tsubst_expr (omax, args, complain, in_decl);
4393e105
MM
6129 if (max == error_mark_node)
6130 return error_mark_node;
6131
856216bb
MM
6132 if (processing_template_decl
6133 /* When providing explicit arguments to a template
6134 function, but leaving some arguments for subsequent
6135 deduction, MAX may be template-dependent even if we're
6136 not PROCESSING_TEMPLATE_DECL. */
6137 || TREE_CODE (max) != INTEGER_CST)
ae58fa02
MM
6138 {
6139 tree itype = make_node (INTEGER_TYPE);
6140 TYPE_MIN_VALUE (itype) = size_zero_node;
6141 TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6142 integer_one_node);
6143 return itype;
6144 }
6145
ddce3528
JM
6146 if (integer_zerop (omax))
6147 {
6148 /* Still allow an explicit array of size zero. */
6149 if (pedantic)
6150 pedwarn ("creating array with size zero");
6151 }
6152 else if (integer_zerop (max) || INT_CST_LT (max, integer_zero_node))
0ecfe0b4 6153 {
4393e105
MM
6154 /* [temp.deduct]
6155
6156 Type deduction may fail for any of the following
6157 reasons:
6158
bf8f3f93
MM
6159 Attempting to create an array with a size that is
6160 zero or negative. */
4393e105
MM
6161 if (complain)
6162 cp_error ("creating array with size `%E'", max);
6163
6164 return error_mark_node;
0ecfe0b4
JM
6165 }
6166
337c90cc 6167 max = fold (build_binary_op (MINUS_EXPR, max, integer_one_node));
7ddedda4
MM
6168 if (!TREE_PERMANENT (max) && !allocation_temporary_p ())
6169 max = copy_to_permanent (max);
120ecb8a 6170 return build_index_type (max);
ae58fa02
MM
6171 }
6172
6173 case TEMPLATE_TYPE_PARM:
6174 case TEMPLATE_TEMPLATE_PARM:
6175 case TEMPLATE_PARM_INDEX:
6176 {
6177 int idx;
6178 int level;
6179 int levels;
0ecfe0b4
JM
6180
6181 r = NULL_TREE;
ae58fa02
MM
6182
6183 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6184 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6185 {
6186 idx = TEMPLATE_TYPE_IDX (t);
6187 level = TEMPLATE_TYPE_LEVEL (t);
6188 }
6189 else
6190 {
6191 idx = TEMPLATE_PARM_IDX (t);
6192 level = TEMPLATE_PARM_LEVEL (t);
6193 }
6194
6195 if (TREE_VEC_LENGTH (args) > 0)
6196 {
6197 tree arg = NULL_TREE;
6198
6199 levels = TMPL_ARGS_DEPTH (args);
6200 if (level <= levels)
6201 arg = TMPL_ARG (args, level, idx);
6202
8b5b8b7c
MM
6203 if (arg == error_mark_node)
6204 return error_mark_node;
6205 else if (arg != NULL_TREE)
ae58fa02
MM
6206 {
6207 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6208 {
6209 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (arg))
6210 == 't', 0);
91063b51
MM
6211 return cp_build_qualified_type
6212 (arg, CP_TYPE_QUALS (arg) | CP_TYPE_QUALS (t));
ae58fa02
MM
6213 }
6214 else if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6215 {
7ddedda4 6216 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
ae58fa02
MM
6217 {
6218 /* We are processing a type constructed from
6219 a template template parameter */
7ddedda4 6220 tree argvec = tsubst (TYPE_TI_ARGS (t),
4393e105
MM
6221 args, complain, in_decl);
6222 if (argvec == error_mark_node)
6223 return error_mark_node;
6224
ae58fa02
MM
6225 /* We can get a TEMPLATE_TEMPLATE_PARM here when
6226 we are resolving nested-types in the signature of
6227 a member function templates.
6228 Otherwise ARG is a TEMPLATE_DECL and is the real
6229 template to be instantiated. */
6230 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6231 arg = TYPE_NAME (arg);
6232
6233 r = lookup_template_class (DECL_NAME (arg),
6234 argvec, in_decl,
6235 DECL_CONTEXT (arg),
6236 /*entering_scope=*/0);
91063b51 6237 return cp_build_qualified_type (r, TYPE_QUALS (t));
ae58fa02
MM
6238 }
6239 else
6240 /* We are processing a template argument list. */
6241 return arg;
6242 }
6243 else
6244 return arg;
6245 }
6246 }
51924768
JM
6247 else
6248 my_friendly_abort (981018);
ae58fa02
MM
6249
6250 if (level == 1)
6251 /* This can happen during the attempted tsubst'ing in
6252 unify. This means that we don't yet have any information
6253 about the template parameter in question. */
6254 return t;
6255
6256 /* If we get here, we must have been looking at a parm for a
6257 more deeply nested template. Make a new version of this
6258 template parameter, but with a lower level. */
6259 switch (TREE_CODE (t))
6260 {
6261 case TEMPLATE_TYPE_PARM:
6262 case TEMPLATE_TEMPLATE_PARM:
6263 r = copy_node (t);
6264 TEMPLATE_TYPE_PARM_INDEX (r)
6265 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6266 r, levels);
6267 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6268 TYPE_MAIN_VARIANT (r) = r;
6269 TYPE_POINTER_TO (r) = NULL_TREE;
6270 TYPE_REFERENCE_TO (r) = NULL_TREE;
6271
6272 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7ddedda4 6273 && TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
ae58fa02 6274 {
4393e105
MM
6275 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6276 complain, in_decl);
6277 if (argvec == error_mark_node)
6278 return error_mark_node;
6279
7ddedda4 6280 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
ae58fa02
MM
6281 = perm_tree_cons (TYPE_NAME (t), argvec, NULL_TREE);
6282 }
6283 break;
6284
6285 case TEMPLATE_PARM_INDEX:
6286 r = reduce_template_parm_level (t, type, levels);
6287 break;
6288
6289 default:
6290 my_friendly_abort (0);
6291 }
6292
5566b478 6293 return r;
ae58fa02 6294 }
5566b478 6295
8d08fdba
MS
6296 case TREE_LIST:
6297 {
6298 tree purpose, value, chain, result;
8d08fdba
MS
6299
6300 if (t == void_list_node)
6301 return t;
6302
8d08fdba
MS
6303 purpose = TREE_PURPOSE (t);
6304 if (purpose)
4393e105
MM
6305 {
6306 purpose = tsubst (purpose, args, complain, in_decl);
6307 if (purpose == error_mark_node)
6308 return error_mark_node;
6309 }
8d08fdba
MS
6310 value = TREE_VALUE (t);
6311 if (value)
4393e105
MM
6312 {
6313 value = tsubst (value, args, complain, in_decl);
6314 if (value == error_mark_node)
6315 return error_mark_node;
6316 }
8d08fdba
MS
6317 chain = TREE_CHAIN (t);
6318 if (chain && chain != void_type_node)
4393e105
MM
6319 {
6320 chain = tsubst (chain, args, complain, in_decl);
6321 if (chain == error_mark_node)
6322 return error_mark_node;
6323 }
8d08fdba
MS
6324 if (purpose == TREE_PURPOSE (t)
6325 && value == TREE_VALUE (t)
6326 && chain == TREE_CHAIN (t))
6327 return t;
51632249 6328 result = hash_tree_cons (purpose, value, chain);
8d08fdba
MS
6329 TREE_PARMLIST (result) = TREE_PARMLIST (t);
6330 return result;
6331 }
6332 case TREE_VEC:
5566b478
MS
6333 if (type != NULL_TREE)
6334 {
1ceaad38
JM
6335 /* A binfo node. We always need to make a copy, of the node
6336 itself and of its BINFO_BASETYPES. */
85b71cf2 6337
5566b478
MS
6338 t = copy_node (t);
6339
c7449f2b
JM
6340 /* Make sure type isn't a typedef copy. */
6341 type = BINFO_TYPE (TYPE_BINFO (type));
6342
5566b478 6343 TREE_TYPE (t) = complete_type (type);
6633d636
MS
6344 if (IS_AGGR_TYPE (type))
6345 {
6346 BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6347 BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6348 if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6349 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6350 }
5566b478
MS
6351 return t;
6352 }
85b71cf2
JM
6353
6354 /* Otherwise, a vector of template arguments. */
4393e105 6355 return tsubst_template_arg_vector (t, args, complain);
8d08fdba 6356
8d08fdba
MS
6357 case POINTER_TYPE:
6358 case REFERENCE_TYPE:
6359 {
8d08fdba 6360 enum tree_code code;
79a7c7fa 6361
8d08fdba
MS
6362 if (type == TREE_TYPE (t))
6363 return t;
6364
6365 code = TREE_CODE (t);
4393e105
MM
6366
6367
6368 /* [temp.deduct]
6369
6370 Type deduction may fail for any of the following
6371 reasons:
6372
6373 -- Attempting to create a pointer to reference type.
6374 -- Attempting to create a reference to a reference type or
6375 a reference to void. */
0ecfe0b4
JM
6376 if (TREE_CODE (type) == REFERENCE_TYPE
6377 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa
JM
6378 {
6379 static int last_line = 0;
6380 static char* last_file = 0;
6381
6382 /* We keep track of the last time we issued this error
6383 message to avoid spewing a ton of messages during a
6384 single bad template instantiation. */
4393e105
MM
6385 if (complain && (last_line != lineno ||
6386 last_file != input_filename))
79a7c7fa 6387 {
0ecfe0b4
JM
6388 if (TREE_CODE (type) == VOID_TYPE)
6389 cp_error ("forming reference to void");
6390 else
6391 cp_error ("forming %s to reference type `%T'",
6392 (code == POINTER_TYPE) ? "pointer" : "reference",
6393 type);
79a7c7fa
JM
6394 last_line = lineno;
6395 last_file = input_filename;
6396 }
6397
4393e105 6398 return error_mark_node;
79a7c7fa
JM
6399 }
6400 else if (code == POINTER_TYPE)
8d08fdba
MS
6401 r = build_pointer_type (type);
6402 else
6403 r = build_reference_type (type);
91063b51 6404 r = cp_build_qualified_type (r, TYPE_QUALS (t));
79a7c7fa 6405
8d08fdba
MS
6406 /* Will this ever be needed for TYPE_..._TO values? */
6407 layout_type (r);
6408 return r;
6409 }
a4443a08 6410 case OFFSET_TYPE:
0ecfe0b4 6411 {
4393e105
MM
6412 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6413 if (r == error_mark_node || !IS_AGGR_TYPE (r))
6414 {
6415 /* [temp.deduct]
6416
6417 Type deduction may fail for any of the following
6418 reasons:
6419
6420 -- Attempting to create "pointer to member of T" when T
6421 is not a class type. */
6422 if (complain)
6423 cp_error ("creating pointer to member of non-class type `%T'",
6424 r);
6425 return error_mark_node;
6426 }
0ecfe0b4
JM
6427 return build_offset_type (r, type);
6428 }
8d08fdba
MS
6429 case FUNCTION_TYPE:
6430 case METHOD_TYPE:
6431 {
c11b6f21 6432 tree fntype;
4393e105 6433 tree raises;
8d08fdba 6434
4393e105
MM
6435 fntype = tsubst_function_type (t, args, complain, in_decl);
6436 if (fntype == error_mark_node)
6437 return error_mark_node;
cabc336a
MM
6438
6439 /* Substitue the exception specification. */
6440 raises = TYPE_RAISES_EXCEPTIONS (t);
c11b6f21
MS
6441 if (raises)
6442 {
4393e105
MM
6443 raises = tsubst (raises, args, complain, in_decl);
6444 if (raises == error_mark_node)
6445 return raises;
c11b6f21
MS
6446 fntype = build_exception_variant (fntype, raises);
6447 }
6448 return fntype;
8d08fdba
MS
6449 }
6450 case ARRAY_TYPE:
6451 {
4393e105
MM
6452 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6453 if (domain == error_mark_node)
6454 return error_mark_node;
6455
6456 /* As an optimization, we avoid regenerating the array type if
6457 it will obviously be the same as T. */
8d08fdba
MS
6458 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6459 return t;
0ecfe0b4 6460
4393e105
MM
6461 /* These checks should match the ones in grokdeclarator.
6462
6463 [temp.deduct]
6464
6465 The deduction may fail for any of the following reasons:
6466
6467 -- Attempting to create an array with an element type that
6468 is void, a function type, or a reference type. */
6469 if (TREE_CODE (type) == VOID_TYPE
6470 || TREE_CODE (type) == FUNCTION_TYPE
6471 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 6472 {
4393e105
MM
6473 if (complain)
6474 cp_error ("creating array of `%T'", type);
6475 return error_mark_node;
0ecfe0b4
JM
6476 }
6477
8d08fdba
MS
6478 r = build_cplus_array_type (type, domain);
6479 return r;
6480 }
6481
8d08fdba 6482 case PLUS_EXPR:
5566b478 6483 case MINUS_EXPR:
4393e105
MM
6484 {
6485 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6486 in_decl);
6487 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain,
6488 in_decl);
6489
6490 if (e1 == error_mark_node || e2 == error_mark_node)
6491 return error_mark_node;
6492
6493 return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6494 }
8d08fdba
MS
6495
6496 case NEGATE_EXPR:
6497 case NOP_EXPR:
4393e105
MM
6498 {
6499 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6500 in_decl);
6501 if (e == error_mark_node)
6502 return error_mark_node;
6503
6504 return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6505 }
8d08fdba 6506
5566b478
MS
6507 case TYPENAME_TYPE:
6508 {
4393e105
MM
6509 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6510 in_decl, /*entering_scope=*/1);
6511 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6512 complain, in_decl);
6513
6514 if (ctx == error_mark_node || f == error_mark_node)
6515 return error_mark_node;
ae58fa02 6516
bf8f3f93
MM
6517 if (!IS_AGGR_TYPE (ctx))
6518 {
6519 if (complain)
6520 cp_error ("`%T' is not a class, struct, or union type",
6521 ctx);
6522 return error_mark_node;
6523 }
6524 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6525 {
6526 /* Normally, make_typename_type does not require that the CTX
6527 have complete type in order to allow things like:
ae58fa02 6528
bf8f3f93 6529 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 6530
bf8f3f93
MM
6531 But, such constructs have already been resolved by this
6532 point, so here CTX really should have complete type, unless
6533 it's a partial instantiation. */
4393e105
MM
6534 ctx = complete_type (ctx);
6535 if (!TYPE_SIZE (ctx))
6536 {
6537 if (complain)
6538 incomplete_type_error (NULL_TREE, ctx);
6539 return error_mark_node;
6540 }
6541 }
ae58fa02 6542
b2b7d40a 6543 f = make_typename_type (ctx, f);
f0bcd168
MM
6544 if (f == error_mark_node)
6545 return f;
91063b51
MM
6546 return cp_build_qualified_type (f,
6547 CP_TYPE_QUALS (f)
6548 | CP_TYPE_QUALS (t));
5566b478
MS
6549 }
6550
6551 case INDIRECT_REF:
4393e105
MM
6552 {
6553 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6554 in_decl);
6555 if (e == error_mark_node)
6556 return error_mark_node;
6557 return make_pointer_declarator (type, e);
6558 }
6559
5566b478 6560 case ADDR_EXPR:
4393e105
MM
6561 {
6562 tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6563 in_decl);
6564 if (e == error_mark_node)
6565 return error_mark_node;
6566 return make_reference_declarator (type, e);
6567 }
5566b478
MS
6568
6569 case ARRAY_REF:
4393e105
MM
6570 {
6571 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6572 in_decl);
6fb2c05a
JM
6573 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain,
6574 in_decl);
4393e105
MM
6575 if (e1 == error_mark_node || e2 == error_mark_node)
6576 return error_mark_node;
6577
6578 return build_parse_node (ARRAY_REF, e1, e2, tsubst_expr);
6579 }
5566b478
MS
6580
6581 case CALL_EXPR:
4393e105
MM
6582 {
6583 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6584 in_decl);
6585 tree e2 = tsubst_call_declarator_parms (TREE_OPERAND (t, 1), args,
6586 complain, in_decl);
6587 tree e3 = tsubst (TREE_TYPE (t), args, complain, in_decl);
6588
6589 if (e1 == error_mark_node || e2 == error_mark_node
6590 || e3 == error_mark_node)
6591 return error_mark_node;
6592
6593 return make_call_declarator (e1, e2, TREE_OPERAND (t, 2), e3);
6594 }
5566b478 6595
fc378698 6596 case SCOPE_REF:
4393e105
MM
6597 {
6598 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6599 in_decl);
6600 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6601 if (e1 == error_mark_node || e2 == error_mark_node)
6602 return error_mark_node;
6603
6604 return build_parse_node (TREE_CODE (t), e1, e2);
6605 }
fc378698 6606
b894fc05 6607 case TYPEOF_TYPE:
4393e105
MM
6608 {
6609 tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain,
6610 in_decl);
6611 if (e1 == error_mark_node)
6612 return error_mark_node;
6613
6614 return TREE_TYPE (e1);
6615 }
b894fc05 6616
8d08fdba 6617 default:
5566b478 6618 sorry ("use of `%s' in template",
8d08fdba
MS
6619 tree_code_name [(int) TREE_CODE (t)]);
6620 return error_mark_node;
6621 }
6622}
6623
5566b478
MS
6624void
6625do_pushlevel ()
6626{
6627 emit_line_note (input_filename, lineno);
6628 pushlevel (0);
6629 clear_last_expr ();
6630 push_momentary ();
6631 expand_start_bindings (0);
6632}
6633
8d08fdba 6634tree
5566b478 6635do_poplevel ()
8d08fdba 6636{
5566b478 6637 tree t;
a703fb38 6638 int saved_warn_unused = 0;
8d08fdba 6639
85b71cf2
JM
6640 if (processing_template_decl)
6641 {
6642 saved_warn_unused = warn_unused;
6643 warn_unused = 0;
6644 }
8baa713c 6645 expand_end_bindings (getdecls (), kept_level_p (), 0);
85b71cf2
JM
6646 if (processing_template_decl)
6647 warn_unused = saved_warn_unused;
5566b478
MS
6648 t = poplevel (kept_level_p (), 1, 0);
6649 pop_momentary ();
6650 return t;
6651}
8d08fdba 6652
00d3396f
JM
6653/* Like tsubst, but deals with expressions. This function just replaces
6654 template parms; to finish processing the resultant expression, use
6655 tsubst_expr. */
6656
5566b478 6657tree
4393e105 6658tsubst_copy (t, args, complain, in_decl)
98c1c668 6659 tree t, args;
4393e105 6660 int complain;
5566b478
MS
6661 tree in_decl;
6662{
6663 enum tree_code code;
8452b1d3 6664 tree r;
8d08fdba 6665
5566b478
MS
6666 if (t == NULL_TREE || t == error_mark_node)
6667 return t;
6668
6669 code = TREE_CODE (t);
b7484fbe 6670
5566b478
MS
6671 switch (code)
6672 {
6673 case PARM_DECL:
a759e627 6674 return do_identifier (DECL_NAME (t), 0, NULL_TREE);
5566b478
MS
6675
6676 case CONST_DECL:
ed44da02
MM
6677 {
6678 tree enum_type;
6679 tree v;
6680
6681 if (!DECL_CONTEXT (t))
6682 /* This is a global enumeration constant. */
6683 return t;
6684
6685 /* Unfortunately, we cannot just call lookup_name here.
6686 Consider:
6687
6688 template <int I> int f() {
6689 enum E { a = I };
6690 struct S { void g() { E e = a; } };
6691 };
6692
6693 When we instantiate f<7>::S::g(), say, lookup_name is not
6694 clever enough to find f<7>::a. */
6695 enum_type
4393e105 6696 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
6697 /*entering_scope=*/0);
6698
6699 for (v = TYPE_VALUES (enum_type);
6700 v != NULL_TREE;
6701 v = TREE_CHAIN (v))
6702 if (TREE_PURPOSE (v) == DECL_NAME (t))
6703 return TREE_VALUE (v);
6704
6705 /* We didn't find the name. That should never happen; if
6706 name-lookup found it during preliminary parsing, we
6707 should find it again here during instantiation. */
6708 my_friendly_abort (0);
6709 }
db04386f 6710 return t;
ed44da02 6711
5566b478
MS
6712 case FIELD_DECL:
6713 if (DECL_CONTEXT (t))
6714 {
0978790f 6715 tree ctx;
0978790f 6716
4393e105 6717 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 6718 /*entering_scope=*/1);
0978790f 6719 if (ctx != DECL_CONTEXT (t))
5566b478
MS
6720 return lookup_field (ctx, DECL_NAME (t), 0, 0);
6721 }
6722 return t;
6723
6724 case VAR_DECL:
6725 case FUNCTION_DECL:
6726 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
4393e105 6727 t = tsubst (t, args, complain, in_decl);
5566b478
MS
6728 mark_used (t);
6729 return t;
6730
98c1c668
JM
6731 case TEMPLATE_DECL:
6732 if (is_member_template (t))
4393e105 6733 return tsubst (t, args, complain, in_decl);
98c1c668
JM
6734 else
6735 return t;
6736
672476cb
MM
6737 case LOOKUP_EXPR:
6738 {
6739 /* We must tsbust into a LOOKUP_EXPR in case the names to
6740 which it refers is a conversion operator; in that case the
6741 name will change. We avoid making unnecessary copies,
6742 however. */
6743
4393e105 6744 tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
672476cb
MM
6745
6746 if (id != TREE_OPERAND (t, 0))
6747 {
8452b1d3 6748 r = build_nt (LOOKUP_EXPR, id);
672476cb
MM
6749 LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
6750 t = r;
6751 }
6752
6753 return t;
6754 }
6755
5566b478
MS
6756 case CAST_EXPR:
6757 case REINTERPRET_CAST_EXPR:
e92cc029
MS
6758 case CONST_CAST_EXPR:
6759 case STATIC_CAST_EXPR:
6760 case DYNAMIC_CAST_EXPR:
51924768 6761 case NOP_EXPR:
5566b478 6762 return build1
4393e105
MM
6763 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
6764 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
6765
6766 case INDIRECT_REF:
6767 case PREDECREMENT_EXPR:
6768 case PREINCREMENT_EXPR:
6769 case POSTDECREMENT_EXPR:
6770 case POSTINCREMENT_EXPR:
6771 case NEGATE_EXPR:
6772 case TRUTH_NOT_EXPR:
b87692e5 6773 case BIT_NOT_EXPR:
5566b478
MS
6774 case ADDR_EXPR:
6775 case CONVERT_EXPR: /* Unary + */
6776 case SIZEOF_EXPR:
abff8e06 6777 case ALIGNOF_EXPR:
5566b478 6778 case ARROW_EXPR:
fc378698 6779 case THROW_EXPR:
5156628f 6780 case TYPEID_EXPR:
5566b478 6781 return build1
6a629cac 6782 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 6783 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
6784
6785 case PLUS_EXPR:
6786 case MINUS_EXPR:
6787 case MULT_EXPR:
6788 case TRUNC_DIV_EXPR:
6789 case CEIL_DIV_EXPR:
6790 case FLOOR_DIV_EXPR:
6791 case ROUND_DIV_EXPR:
6792 case EXACT_DIV_EXPR:
6793 case BIT_AND_EXPR:
6794 case BIT_ANDTC_EXPR:
6795 case BIT_IOR_EXPR:
6796 case BIT_XOR_EXPR:
6797 case TRUNC_MOD_EXPR:
6798 case FLOOR_MOD_EXPR:
6799 case TRUTH_ANDIF_EXPR:
6800 case TRUTH_ORIF_EXPR:
6801 case TRUTH_AND_EXPR:
6802 case TRUTH_OR_EXPR:
6803 case RSHIFT_EXPR:
6804 case LSHIFT_EXPR:
6805 case RROTATE_EXPR:
6806 case LROTATE_EXPR:
6807 case EQ_EXPR:
6808 case NE_EXPR:
6809 case MAX_EXPR:
6810 case MIN_EXPR:
6811 case LE_EXPR:
6812 case GE_EXPR:
6813 case LT_EXPR:
6814 case GT_EXPR:
6815 case COMPONENT_REF:
6816 case ARRAY_REF:
6817 case COMPOUND_EXPR:
6818 case SCOPE_REF:
6819 case DOTSTAR_EXPR:
6820 case MEMBER_REF:
6821 return build_nt
4393e105
MM
6822 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6823 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
6824
6825 case CALL_EXPR:
6826 {
6827 tree fn = TREE_OPERAND (t, 0);
f84b4be9 6828 if (is_overloaded_fn (fn))
4393e105 6829 fn = tsubst_copy (get_first_fn (fn), args, complain, in_decl);
5566b478 6830 else
f84b4be9 6831 /* Sometimes FN is a LOOKUP_EXPR. */
4393e105 6832 fn = tsubst_copy (fn, args, complain, in_decl);
5566b478 6833 return build_nt
4393e105
MM
6834 (code, fn, tsubst_copy (TREE_OPERAND (t, 1), args, complain,
6835 in_decl),
5566b478
MS
6836 NULL_TREE);
6837 }
6838
6839 case METHOD_CALL_EXPR:
6840 {
6841 tree name = TREE_OPERAND (t, 0);
6842 if (TREE_CODE (name) == BIT_NOT_EXPR)
6843 {
4393e105
MM
6844 name = tsubst_copy (TREE_OPERAND (name, 0), args,
6845 complain, in_decl);
7bae46f4 6846 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
5566b478
MS
6847 }
6848 else if (TREE_CODE (name) == SCOPE_REF
6849 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
6850 {
4393e105
MM
6851 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
6852 complain, in_decl);
5566b478 6853 name = TREE_OPERAND (name, 1);
4393e105
MM
6854 name = tsubst_copy (TREE_OPERAND (name, 0), args,
6855 complain, in_decl);
11686454 6856 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
5566b478
MS
6857 name = build_nt (SCOPE_REF, base, name);
6858 }
6859 else
4393e105 6860 name = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
5566b478 6861 return build_nt
4393e105
MM
6862 (code, name, tsubst_copy (TREE_OPERAND (t, 1), args,
6863 complain, in_decl),
6864 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl),
5566b478
MS
6865 NULL_TREE);
6866 }
6867
67da3287 6868 case BIND_EXPR:
5566b478
MS
6869 case COND_EXPR:
6870 case MODOP_EXPR:
67da3287 6871 {
8452b1d3 6872 r = build_nt
4393e105
MM
6873 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6874 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
6875 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
67da3287
MM
6876
6877 if (code == BIND_EXPR && !processing_template_decl)
6878 {
61cd552e 6879 /* This processing should really occur in tsubst_expr,
67da3287
MM
6880 However, tsubst_expr does not recurse into expressions,
6881 since it assumes that there aren't any statements
6882 inside them. Instead, it simply calls
6883 build_expr_from_tree. So, we need to expand the
6884 BIND_EXPR here. */
b4c4a9ec 6885 tree rtl_expr = begin_stmt_expr ();
4393e105
MM
6886 tree block = tsubst_expr (TREE_OPERAND (r, 1), args,
6887 complain, in_decl);
b4c4a9ec 6888 r = finish_stmt_expr (rtl_expr, block);
67da3287
MM
6889 }
6890
6891 return r;
6892 }
5566b478
MS
6893
6894 case NEW_EXPR:
6895 {
8452b1d3 6896 r = build_nt
4393e105
MM
6897 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6898 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
6899 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
6900 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
6901 return r;
6902 }
6903
6904 case DELETE_EXPR:
6905 {
8452b1d3 6906 r = build_nt
4393e105
MM
6907 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6908 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
6909 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
6910 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
6911 return r;
6912 }
6913
386b8a85
JM
6914 case TEMPLATE_ID_EXPR:
6915 {
00d3396f 6916 /* Substituted template arguments */
4393e105
MM
6917 tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
6918 in_decl);
856216bb
MM
6919
6920 if (targs && TREE_CODE (targs) == TREE_LIST)
6921 {
6922 tree chain;
6923 for (chain = targs; chain; chain = TREE_CHAIN (chain))
6924 TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
6925 }
6926 else if (targs)
6927 {
6928 int i;
6929 for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
6930 TREE_VEC_ELT (targs, i)
6931 = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
6932 }
00d3396f
JM
6933
6934 return lookup_template_function
4393e105 6935 (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
386b8a85
JM
6936 }
6937
5566b478
MS
6938 case TREE_LIST:
6939 {
6940 tree purpose, value, chain;
6941
6942 if (t == void_list_node)
6943 return t;
6944
6945 purpose = TREE_PURPOSE (t);
6946 if (purpose)
4393e105 6947 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
6948 value = TREE_VALUE (t);
6949 if (value)
4393e105 6950 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
6951 chain = TREE_CHAIN (t);
6952 if (chain && chain != void_type_node)
4393e105 6953 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
6954 if (purpose == TREE_PURPOSE (t)
6955 && value == TREE_VALUE (t)
6956 && chain == TREE_CHAIN (t))
6957 return t;
6958 return tree_cons (purpose, value, chain);
6959 }
6960
6961 case RECORD_TYPE:
6962 case UNION_TYPE:
6963 case ENUMERAL_TYPE:
6964 case INTEGER_TYPE:
6965 case TEMPLATE_TYPE_PARM:
73b0fce8 6966 case TEMPLATE_TEMPLATE_PARM:
f84b4be9 6967 case TEMPLATE_PARM_INDEX:
5566b478
MS
6968 case POINTER_TYPE:
6969 case REFERENCE_TYPE:
6970 case OFFSET_TYPE:
6971 case FUNCTION_TYPE:
6972 case METHOD_TYPE:
6973 case ARRAY_TYPE:
6974 case TYPENAME_TYPE:
f84b4be9 6975 case TYPE_DECL:
4393e105 6976 return tsubst (t, args, complain, in_decl);
5566b478 6977
e92cc029 6978 case IDENTIFIER_NODE:
8e710788
BK
6979 if (IDENTIFIER_TYPENAME_P (t)
6980 /* Make sure it's not just a variable named `__opr', for instance,
6981 which can occur in some existing code. */
6982 && TREE_TYPE (t))
e92cc029 6983 return build_typename_overload
4393e105 6984 (tsubst (TREE_TYPE (t), args, complain, in_decl));
e92cc029
MS
6985 else
6986 return t;
6987
5156628f 6988 case CONSTRUCTOR:
8452b1d3
JM
6989 {
6990 r = build
4393e105
MM
6991 (CONSTRUCTOR, tsubst (TREE_TYPE (t), args, complain, in_decl),
6992 NULL_TREE, tsubst_copy (CONSTRUCTOR_ELTS (t), args,
6993 complain, in_decl));
8452b1d3
JM
6994 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
6995 return r;
6996 }
5156628f 6997
5566b478
MS
6998 default:
6999 return t;
7000 }
7001}
7002
00d3396f
JM
7003/* Like tsubst_copy, but also does semantic processing and RTL expansion. */
7004
5566b478 7005tree
4393e105 7006tsubst_expr (t, args, complain, in_decl)
98c1c668 7007 tree t, args;
4393e105 7008 int complain;
5566b478
MS
7009 tree in_decl;
7010{
7011 if (t == NULL_TREE || t == error_mark_node)
7012 return t;
7013
5156628f 7014 if (processing_template_decl)
4393e105 7015 return tsubst_copy (t, args, complain, in_decl);
5566b478
MS
7016
7017 switch (TREE_CODE (t))
8d08fdba 7018 {
5566b478
MS
7019 case RETURN_STMT:
7020 lineno = TREE_COMPLEXITY (t);
ad321293 7021 finish_return_stmt (tsubst_expr (RETURN_EXPR (t),
4393e105 7022 args, complain, in_decl));
5566b478
MS
7023 break;
7024
7025 case EXPR_STMT:
7026 lineno = TREE_COMPLEXITY (t);
ad321293 7027 finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
4393e105 7028 args, complain, in_decl));
5566b478
MS
7029 break;
7030
7031 case DECL_STMT:
7032 {
7033 int i = suspend_momentary ();
67d743fe 7034 tree dcl, init;
5566b478
MS
7035
7036 lineno = TREE_COMPLEXITY (t);
7037 emit_line_note (input_filename, lineno);
7038 dcl = start_decl
4393e105
MM
7039 (tsubst (TREE_OPERAND (t, 0), args, complain, in_decl),
7040 tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
a1774733 7041 TREE_OPERAND (t, 2) != 0, NULL_TREE, NULL_TREE);
4393e105 7042 init = tsubst_expr (TREE_OPERAND (t, 2), args, complain, in_decl);
5566b478 7043 cp_finish_decl
a0128b67 7044 (dcl, init, NULL_TREE, 1, /*init ? LOOKUP_ONLYCONVERTING :*/ 0);
5566b478
MS
7045 resume_momentary (i);
7046 return dcl;
7047 }
8d08fdba 7048
5566b478
MS
7049 case FOR_STMT:
7050 {
7051 tree tmp;
5566b478 7052 lineno = TREE_COMPLEXITY (t);
5566b478 7053
ad321293
MM
7054 begin_for_stmt ();
7055 for (tmp = FOR_INIT_STMT (t); tmp; tmp = TREE_CHAIN (tmp))
4393e105 7056 tsubst_expr (tmp, args, complain, in_decl);
ad321293
MM
7057 finish_for_init_stmt (NULL_TREE);
7058 finish_for_cond (tsubst_expr (FOR_COND (t), args,
4393e105 7059 complain, in_decl),
ad321293 7060 NULL_TREE);
4393e105 7061 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
ad321293 7062 finish_for_expr (tmp, NULL_TREE);
4393e105 7063 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
ad321293 7064 finish_for_stmt (tmp, NULL_TREE);
5566b478
MS
7065 }
7066 break;
8d08fdba 7067
5566b478
MS
7068 case WHILE_STMT:
7069 {
5566b478 7070 lineno = TREE_COMPLEXITY (t);
ad321293
MM
7071 begin_while_stmt ();
7072 finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
4393e105 7073 args, complain, in_decl),
ad321293 7074 NULL_TREE);
4393e105 7075 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
ad321293 7076 finish_while_stmt (NULL_TREE);
5566b478
MS
7077 }
7078 break;
8d08fdba 7079
5566b478
MS
7080 case DO_STMT:
7081 {
5566b478 7082 lineno = TREE_COMPLEXITY (t);
ad321293 7083 begin_do_stmt ();
4393e105 7084 tsubst_expr (DO_BODY (t), args, complain, in_decl);
ad321293
MM
7085 finish_do_body (NULL_TREE);
7086 finish_do_stmt (tsubst_expr (DO_COND (t), args,
4393e105 7087 complain, in_decl),
ad321293 7088 NULL_TREE);
5566b478
MS
7089 }
7090 break;
a0a33927 7091
5566b478 7092 case IF_STMT:
8d08fdba 7093 {
5566b478 7094 tree tmp;
5566b478
MS
7095
7096 lineno = TREE_COMPLEXITY (t);
ad321293
MM
7097 begin_if_stmt ();
7098 finish_if_stmt_cond (tsubst_expr (IF_COND (t),
4393e105 7099 args, complain, in_decl),
ad321293 7100 NULL_TREE);
db5ae43f 7101
ad321293 7102 if (tmp = THEN_CLAUSE (t), tmp)
db5ae43f 7103 {
4393e105 7104 tsubst_expr (tmp, args, complain, in_decl);
ad321293 7105 finish_then_clause (NULL_TREE);
db5ae43f
MS
7106 }
7107
ad321293
MM
7108 if (tmp = ELSE_CLAUSE (t), tmp)
7109 {
7110 begin_else_clause ();
4393e105 7111 tsubst_expr (tmp, args, complain, in_decl);
ad321293
MM
7112 finish_else_clause (NULL_TREE);
7113 }
8d08fdba 7114
ad321293 7115 finish_if_stmt ();
8d08fdba 7116 }
5566b478 7117 break;
8d08fdba 7118
5566b478
MS
7119 case COMPOUND_STMT:
7120 {
ad321293 7121 tree substmt;
8d08fdba 7122
5566b478 7123 lineno = TREE_COMPLEXITY (t);
ad321293
MM
7124 begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7125 for (substmt = COMPOUND_BODY (t);
7126 substmt != NULL_TREE;
7127 substmt = TREE_CHAIN (substmt))
4393e105 7128 tsubst_expr (substmt, args, complain, in_decl);
ad321293
MM
7129 return finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t),
7130 NULL_TREE);
5566b478
MS
7131 }
7132 break;
8d08fdba 7133
5566b478
MS
7134 case BREAK_STMT:
7135 lineno = TREE_COMPLEXITY (t);
ad321293 7136 finish_break_stmt ();
5566b478 7137 break;
8d08fdba 7138
6467930b
MS
7139 case CONTINUE_STMT:
7140 lineno = TREE_COMPLEXITY (t);
ad321293 7141 finish_continue_stmt ();
6467930b
MS
7142 break;
7143
5566b478
MS
7144 case SWITCH_STMT:
7145 {
7146 tree val, tmp;
5566b478
MS
7147
7148 lineno = TREE_COMPLEXITY (t);
ad321293 7149 begin_switch_stmt ();
4393e105 7150 val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
ad321293 7151 finish_switch_cond (val);
5566b478
MS
7152
7153 if (tmp = TREE_OPERAND (t, 1), tmp)
4393e105 7154 tsubst_expr (tmp, args, complain, in_decl);
8d08fdba 7155
ad321293 7156 finish_switch_stmt (val, NULL_TREE);
5566b478
MS
7157 }
7158 break;
7159
7160 case CASE_LABEL:
4393e105
MM
7161 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7162 tsubst_expr (CASE_HIGH (t), args, complain, in_decl));
5566b478
MS
7163 break;
7164
7165 case LABEL_DECL:
7166 t = define_label (DECL_SOURCE_FILE (t), DECL_SOURCE_LINE (t),
7167 DECL_NAME (t));
7168 if (t)
7169 expand_label (t);
7170 break;
7171
7172 case GOTO_STMT:
7173 lineno = TREE_COMPLEXITY (t);
aa09da44
MM
7174 t = GOTO_DESTINATION (t);
7175 if (TREE_CODE (t) != IDENTIFIER_NODE)
7176 /* Computed goto's must be tsubst'd into. On the other hand,
7177 non-computed gotos must not be; the identifier in question
7178 will have no binding. */
4393e105 7179 t = tsubst_expr (t, args, complain, in_decl);
aa09da44 7180 finish_goto_stmt (t);
ad321293
MM
7181 break;
7182
7183 case ASM_STMT:
7184 lineno = TREE_COMPLEXITY (t);
4393e105
MM
7185 finish_asm_stmt (tsubst_expr (ASM_CV_QUAL (t), args, complain, in_decl),
7186 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7187 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7188 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
7189 tsubst_expr (ASM_CLOBBERS (t), args, complain,
7190 in_decl));
5566b478 7191 break;
faf5394a
MS
7192
7193 case TRY_BLOCK:
7194 lineno = TREE_COMPLEXITY (t);
ad321293 7195 begin_try_block ();
4393e105 7196 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
ad321293 7197 finish_try_block (NULL_TREE);
faf5394a 7198 {
ad321293 7199 tree handler = TRY_HANDLERS (t);
faf5394a 7200 for (; handler; handler = TREE_CHAIN (handler))
4393e105 7201 tsubst_expr (handler, args, complain, in_decl);
faf5394a 7202 }
ad321293 7203 finish_handler_sequence (NULL_TREE);
faf5394a
MS
7204 break;
7205
7206 case HANDLER:
7207 lineno = TREE_COMPLEXITY (t);
ad321293
MM
7208 begin_handler ();
7209 if (HANDLER_PARMS (t))
faf5394a 7210 {
ad321293 7211 tree d = HANDLER_PARMS (t);
faf5394a 7212 expand_start_catch_block
4393e105
MM
7213 (tsubst (TREE_OPERAND (d, 1), args, complain, in_decl),
7214 tsubst (TREE_OPERAND (d, 0), args, complain, in_decl));
faf5394a
MS
7215 }
7216 else
7217 expand_start_catch_block (NULL_TREE, NULL_TREE);
ad321293 7218 finish_handler_parms (NULL_TREE);
4393e105 7219 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
ad321293 7220 finish_handler (NULL_TREE);
faf5394a
MS
7221 break;
7222
b87692e5
MS
7223 case TAG_DEFN:
7224 lineno = TREE_COMPLEXITY (t);
7225 t = TREE_TYPE (t);
7226 if (TREE_CODE (t) == ENUMERAL_TYPE)
4393e105 7227 tsubst (t, args, complain, NULL_TREE);
b87692e5
MS
7228 break;
7229
5566b478 7230 default:
4393e105 7231 return build_expr_from_tree (tsubst_copy (t, args, complain, in_decl));
5566b478
MS
7232 }
7233 return NULL_TREE;
8d08fdba
MS
7234}
7235
6ba89f8e 7236/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
7237 the template arguments in TARG_PTR. */
7238
5566b478
MS
7239tree
7240instantiate_template (tmpl, targ_ptr)
98c1c668 7241 tree tmpl, targ_ptr;
8d08fdba 7242{
5566b478 7243 tree fndecl;
36a117a5
MM
7244 tree gen_tmpl;
7245 tree spec;
5566b478
MS
7246 int i, len;
7247 struct obstack *old_fmp_obstack;
7248 extern struct obstack *function_maybepermanent_obstack;
36a117a5 7249 tree inner_args;
5566b478 7250
27fafc8d
JM
7251 if (tmpl == error_mark_node)
7252 return error_mark_node;
7253
386b8a85
JM
7254 my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
7255
36a117a5
MM
7256 /* Check to see if we already have this specialization. */
7257 spec = retrieve_specialization (tmpl, targ_ptr);
7258 if (spec != NULL_TREE)
7259 return spec;
7260
7261 if (DECL_TEMPLATE_INFO (tmpl))
386b8a85 7262 {
36a117a5
MM
7263 /* The TMPL is a partial instantiation. To get a full set of
7264 arguments we must add the arguments used to perform the
7265 partial instantiation. */
7266 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
7267 targ_ptr);
7268 gen_tmpl = most_general_template (tmpl);
7269
7270 /* Check to see if we already have this specialization. */
7271 spec = retrieve_specialization (gen_tmpl, targ_ptr);
75650646
MM
7272 if (spec != NULL_TREE)
7273 return spec;
386b8a85 7274 }
36a117a5
MM
7275 else
7276 gen_tmpl = tmpl;
386b8a85 7277
5566b478
MS
7278 push_obstacks (&permanent_obstack, &permanent_obstack);
7279 old_fmp_obstack = function_maybepermanent_obstack;
7280 function_maybepermanent_obstack = &permanent_obstack;
8d08fdba 7281
36a117a5
MM
7282 len = DECL_NTPARMS (gen_tmpl);
7283 inner_args = innermost_args (targ_ptr);
5566b478
MS
7284 i = len;
7285 while (i--)
8d08fdba 7286 {
36a117a5 7287 tree t = TREE_VEC_ELT (inner_args, i);
5566b478
MS
7288 if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
7289 {
7290 tree nt = target_type (t);
ec255269 7291 if (IS_AGGR_TYPE (nt) && decl_function_context (TYPE_MAIN_DECL (nt)))
5566b478 7292 {
8251199e
JM
7293 cp_error ("type `%T' composed from a local class is not a valid template-argument", t);
7294 cp_error (" trying to instantiate `%D'", gen_tmpl);
5566b478
MS
7295 fndecl = error_mark_node;
7296 goto out;
7297 }
7298 }
8d08fdba 7299 }
e66d884e 7300 targ_ptr = copy_to_permanent (targ_ptr);
8d08fdba 7301
5566b478 7302 /* substitute template parameters */
4393e105 7303 fndecl = tsubst (DECL_RESULT (gen_tmpl), targ_ptr, /*complain=*/1, gen_tmpl);
36a117a5
MM
7304 /* The DECL_TI_TEMPLATE should always be the immediate parent
7305 template, not the most general template. */
7306 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 7307
824b9a4c
MS
7308 if (flag_external_templates)
7309 add_pending_template (fndecl);
7310
5566b478
MS
7311 out:
7312 function_maybepermanent_obstack = old_fmp_obstack;
7313 pop_obstacks ();
8d08fdba 7314
5566b478 7315 return fndecl;
8d08fdba 7316}
5566b478
MS
7317
7318/* Push the name of the class template into the scope of the instantiation. */
8d08fdba
MS
7319
7320void
5566b478
MS
7321overload_template_name (type)
7322 tree type;
8d08fdba 7323{
5566b478
MS
7324 tree id = DECL_NAME (CLASSTYPE_TI_TEMPLATE (type));
7325 tree decl;
8d08fdba 7326
5566b478
MS
7327 if (IDENTIFIER_CLASS_VALUE (id)
7328 && TREE_TYPE (IDENTIFIER_CLASS_VALUE (id)) == type)
7329 return;
8d08fdba 7330
5566b478
MS
7331 decl = build_decl (TYPE_DECL, id, type);
7332 SET_DECL_ARTIFICIAL (decl);
7333 pushdecl_class_level (decl);
8d08fdba
MS
7334}
7335
4393e105
MM
7336/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
7337 arguments that are being used when calling it. TARGS is a vector
7338 into which the deduced template arguments are placed.
8d08fdba
MS
7339
7340 Return zero for success, 2 for an incomplete match that doesn't resolve
7341 all the types, and 1 for complete failure. An error message will be
7342 printed only for an incomplete match.
7343
4393e105
MM
7344 If FN is a conversion operator, RETURN_TYPE is the type desired as
7345 the result of the conversion operator.
8d08fdba 7346
4393e105 7347 TPARMS is a vector of template parameters.
9f54c803
MM
7348
7349 The EXPLICIT_TARGS are explicit template arguments provided via a
7350 template-id.
6467930b 7351
830bfa74
MM
7352 The parameter STRICT is one of:
7353
7354 DEDUCE_CALL:
7355 We are deducing arguments for a function call, as in
7356 [temp.deduct.call].
7357
7358 DEDUCE_CONV:
7359 We are deducing arguments for a conversion function, as in
7360 [temp.deduct.conv].
7361
7362 DEDUCE_EXACT:
7363 We are deducing arguments when calculating the partial
7364 ordering between specializations of function or class
7365 templates, as in [temp.func.order] and [temp.class.order],
7366 when doing an explicit instantiation as in [temp.explicit],
9f54c803 7367 when determining an explicit specialization as in
830bfa74 7368 [temp.expl.spec], or when taking the address of a function
4393e105
MM
7369 template, as in [temp.deduct.funcaddr].
7370
4393e105 7371 The other arguments are as for type_unification. */
8d08fdba
MS
7372
7373int
4393e105 7374fn_type_unification (fn, explicit_targs, targs, args, return_type,
03017874 7375 strict)
4393e105 7376 tree fn, explicit_targs, targs, args, return_type;
830bfa74 7377 unification_kind_t strict;
386b8a85 7378{
4393e105
MM
7379 tree parms;
7380 tree fntype;
386b8a85 7381
4393e105
MM
7382 my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
7383
7384 fntype = TREE_TYPE (fn);
7385 if (explicit_targs)
75650646 7386 {
4393e105
MM
7387 /* [temp.deduct]
7388
7389 The specified template arguments must match the template
7390 parameters in kind (i.e., type, nontype, template), and there
7391 must not be more arguments than there are parameters;
7392 otherwise type deduction fails.
7393
7394 Nontype arguments must match the types of the corresponding
7395 nontype template parameters, or must be convertible to the
7396 types of the corresponding nontype parameters as specified in
7397 _temp.arg.nontype_, otherwise type deduction fails.
7398
7399 All references in the function type of the function template
7400 to the corresponding template parameters are replaced by the
7401 specified template argument values. If a substitution in a
7402 template parameter or in the function type of the function
7403 template results in an invalid type, type deduction fails. */
7404 int i;
7405 tree converted_args;
75650646 7406
4393e105
MM
7407 converted_args
7408 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7409 explicit_targs, NULL_TREE, /*complain=*/0,
7410 /*require_all_arguments=*/0));
7411 if (converted_args == error_mark_node)
75650646 7412 return 1;
386b8a85 7413
4393e105
MM
7414 fntype = tsubst (fntype, converted_args, /*complain=*/0, NULL_TREE);
7415 if (fntype == error_mark_node)
7416 return 1;
050367a3 7417
4393e105
MM
7418 /* Place the explicitly specified arguments in TARGS. */
7419 for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
7420 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 7421 }
4393e105
MM
7422
7423 parms = TYPE_ARG_TYPES (fntype);
386b8a85 7424
4393e105
MM
7425 if (DECL_CONV_FN_P (fn))
7426 {
7427 /* This is a template conversion operator. Use the return types
edef8288
JM
7428 as well as the argument types. We use it instead of 'this', since
7429 we could be comparing conversions from different classes. */
4393e105 7430 parms = scratch_tree_cons (NULL_TREE, TREE_TYPE (fntype),
edef8288
JM
7431 TREE_CHAIN (parms));
7432 args = scratch_tree_cons (NULL_TREE, return_type, TREE_CHAIN (args));
4393e105
MM
7433 }
7434
4393e105
MM
7435 /* We allow incomplete unification without an error message here
7436 because the standard doesn't seem to explicitly prohibit it. Our
7437 callers must be ready to deal with unification failures in any
7438 event. */
7439 return type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
7440 targs, parms, args, /*subr=*/0,
7441 strict, /*allow_incomplete*/1);
830bfa74
MM
7442}
7443
7444/* Adjust types before performing type deduction, as described in
7445 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
7446 sections are symmetric. PARM is the type of a function parameter
7447 or the return type of the conversion function. ARG is the type of
7448 the argument passed to the call, or the type of the value
7449 intialized with the result of the conversion function. */
386b8a85 7450
e9659ab0 7451static void
830bfa74
MM
7452maybe_adjust_types_for_deduction (strict, parm, arg)
7453 unification_kind_t strict;
7454 tree* parm;
7455 tree* arg;
7456{
7457 switch (strict)
7458 {
7459 case DEDUCE_CALL:
7460 break;
7461
7462 case DEDUCE_CONV:
7463 {
4c7d0dff
MM
7464 /* Swap PARM and ARG throughout the remainder of this
7465 function; the handling is precisely symmetric since PARM
7466 will initialize ARG rather than vice versa. */
830bfa74
MM
7467 tree* temp = parm;
7468 parm = arg;
7469 arg = temp;
7470 break;
7471 }
7472
7473 case DEDUCE_EXACT:
7474 /* There is nothing to do in this case. */
7475 return;
7476
7477 default:
7478 my_friendly_abort (0);
7479 }
7480
7481 if (TREE_CODE (*parm) != REFERENCE_TYPE)
7482 {
7483 /* [temp.deduct.call]
7484
7485 If P is not a reference type:
7486
7487 --If A is an array type, the pointer type produced by the
7488 array-to-pointer standard conversion (_conv.array_) is
7489 used in place of A for type deduction; otherwise,
7490
7491 --If A is a function type, the pointer type produced by
7492 the function-to-pointer standard conversion
7493 (_conv.func_) is used in place of A for type deduction;
7494 otherwise,
7495
7496 --If A is a cv-qualified type, the top level
7497 cv-qualifiers of A's type are ignored for type
7498 deduction. */
7499 if (TREE_CODE (*arg) == ARRAY_TYPE)
7500 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 7501 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
7502 *arg = build_pointer_type (*arg);
7503 else
7504 *arg = TYPE_MAIN_VARIANT (*arg);
7505 }
7506
7507 /* [temp.deduct.call]
7508
7509 If P is a cv-qualified type, the top level cv-qualifiers
7510 of P's type are ignored for type deduction. If P is a
7511 reference type, the type referred to by P is used for
7512 type deduction. */
7513 *parm = TYPE_MAIN_VARIANT (*parm);
7514 if (TREE_CODE (*parm) == REFERENCE_TYPE)
7515 *parm = TREE_TYPE (*parm);
386b8a85
JM
7516}
7517
4393e105 7518/* Like type_unfication.
9f54c803
MM
7519
7520 If SUBR is 1, we're being called recursively (to unify the
7521 arguments of a function or method parameter of a function
7522 template). */
386b8a85 7523
4966381a 7524static int
3b3ba9f0 7525type_unification_real (tparms, targs, parms, args, subr,
4393e105 7526 strict, allow_incomplete)
050367a3 7527 tree tparms, targs, parms, args;
830bfa74
MM
7528 int subr;
7529 unification_kind_t strict;
7530 int allow_incomplete;
8d08fdba
MS
7531{
7532 tree parm, arg;
7533 int i;
7534 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 7535 int sub_strict;
8d08fdba
MS
7536
7537 my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
386b8a85
JM
7538 my_friendly_assert (parms == NULL_TREE
7539 || TREE_CODE (parms) == TREE_LIST, 290);
51c184be 7540 /* ARGS could be NULL (via a call from parse.y to
8d08fdba
MS
7541 build_x_function_call). */
7542 if (args)
7543 my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
7544 my_friendly_assert (ntparms > 0, 292);
7545
830bfa74
MM
7546 switch (strict)
7547 {
7548 case DEDUCE_CALL:
7549 sub_strict = UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_DERIVED;
7550 break;
7551
7552 case DEDUCE_CONV:
7553 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
7554 break;
7555
7556 case DEDUCE_EXACT:
7557 sub_strict = UNIFY_ALLOW_NONE;
7558 break;
7559
7560 default:
7561 my_friendly_abort (0);
7562 }
7563
8d08fdba
MS
7564 while (parms
7565 && parms != void_list_node
7566 && args
7567 && args != void_list_node)
7568 {
7569 parm = TREE_VALUE (parms);
7570 parms = TREE_CHAIN (parms);
7571 arg = TREE_VALUE (args);
7572 args = TREE_CHAIN (args);
7573
7574 if (arg == error_mark_node)
7575 return 1;
7576 if (arg == unknown_type_node)
34016c81
JM
7577 /* We can't deduce anything from this, but we might get all the
7578 template args from other function args. */
7579 continue;
b7484fbe 7580
03e70705
JM
7581 /* Conversions will be performed on a function argument that
7582 corresponds with a function parameter that contains only
7583 non-deducible template parameters and explicitly specified
7584 template parameters. */
7585 if (! uses_template_parms (parm))
b7484fbe 7586 {
03e70705
JM
7587 tree type;
7588
7589 if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't')
7590 type = TREE_TYPE (arg);
7591 else
7592 {
7593 type = arg;
7594 arg = NULL_TREE;
7595 }
7596
830bfa74 7597 if (strict == DEDUCE_EXACT)
03e70705 7598 {
3bfdc719 7599 if (same_type_p (parm, type))
03e70705
JM
7600 continue;
7601 }
03e70705 7602 else
343c89cd
JM
7603 /* It might work; we shouldn't check now, because we might
7604 get into infinite recursion. Overload resolution will
7605 handle it. */
7606 continue;
03e70705 7607
b7484fbe
MS
7608 return 1;
7609 }
7610
8d08fdba
MS
7611 if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't')
7612 {
7613 my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
34016c81 7614 if (type_unknown_p (arg))
28cbf42c 7615 {
34016c81
JM
7616 /* [temp.deduct.type] A template-argument can be deduced from
7617 a pointer to function or pointer to member function
7618 argument if the set of overloaded functions does not
7619 contain function templates and at most one of a set of
7620 overloaded functions provides a unique match. */
7621
7622 if (resolve_overloaded_unification
4393e105 7623 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
7624 != 0)
7625 return 1;
7626 continue;
28cbf42c 7627 }
8d08fdba
MS
7628 arg = TREE_TYPE (arg);
7629 }
4393e105 7630
830bfa74
MM
7631 if (!subr)
7632 maybe_adjust_types_for_deduction (strict, &parm, &arg);
db5ae43f 7633
4393e105 7634 switch (unify (tparms, targs, parm, arg, sub_strict))
8d08fdba
MS
7635 {
7636 case 0:
7637 break;
7638 case 1:
7639 return 1;
7640 }
7641 }
7642 /* Fail if we've reached the end of the parm list, and more args
7643 are present, and the parm list isn't variadic. */
7644 if (args && args != void_list_node && parms == void_list_node)
7645 return 1;
7646 /* Fail if parms are left and they don't have default values. */
7647 if (parms
7648 && parms != void_list_node
7649 && TREE_PURPOSE (parms) == NULL_TREE)
7650 return 1;
7651 if (!subr)
7652 for (i = 0; i < ntparms; i++)
050367a3 7653 if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8d08fdba 7654 {
386b8a85 7655 if (!allow_incomplete)
8251199e 7656 error ("incomplete type unification");
8d08fdba
MS
7657 return 2;
7658 }
7659 return 0;
7660}
7661
34016c81
JM
7662/* Subroutine of type_unification_real. Args are like the variables at the
7663 call site. ARG is an overloaded function (or template-id); we try
7664 deducing template args from each of the overloads, and if only one
7665 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
7666
7667static int
7668resolve_overloaded_unification (tparms, targs, parm, arg, strict,
4393e105 7669 sub_strict)
34016c81
JM
7670 tree tparms, targs, parm, arg;
7671 unification_kind_t strict;
7672 int sub_strict;
34016c81
JM
7673{
7674 tree tempargs = copy_node (targs);
7675 int good = 0;
7676
7677 if (TREE_CODE (arg) == ADDR_EXPR)
7678 arg = TREE_OPERAND (arg, 0);
9f3d9e46 7679
d8f8dca1
MM
7680 if (TREE_CODE (arg) == COMPONENT_REF)
7681 /* Handle `&x' where `x' is some static or non-static member
7682 function name. */
7683 arg = TREE_OPERAND (arg, 1);
7684
05e0b2f4
JM
7685 if (TREE_CODE (arg) == OFFSET_REF)
7686 arg = TREE_OPERAND (arg, 1);
7687
9f3d9e46
JM
7688 /* Strip baselink information. */
7689 while (TREE_CODE (arg) == TREE_LIST)
7690 arg = TREE_VALUE (arg);
7691
34016c81
JM
7692 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
7693 {
7694 /* If we got some explicit template args, we need to plug them into
7695 the affected templates before we try to unify, in case the
7696 explicit args will completely resolve the templates in question. */
7697
7698 tree expl_subargs = TREE_OPERAND (arg, 1);
7699 arg = TREE_OPERAND (arg, 0);
7700
7701 for (; arg; arg = OVL_NEXT (arg))
7702 {
7703 tree fn = OVL_CURRENT (arg);
7704 tree subargs, elem;
7705
7706 if (TREE_CODE (fn) != TEMPLATE_DECL)
7707 continue;
7708
7709 subargs = get_bindings_overload (fn, DECL_RESULT (fn), expl_subargs);
7710 if (subargs)
7711 {
4393e105
MM
7712 elem = tsubst (TREE_TYPE (fn), subargs, /*complain=*/0,
7713 NULL_TREE);
d8f8dca1
MM
7714 if (TREE_CODE (elem) == METHOD_TYPE)
7715 elem = build_ptrmemfunc_type (build_pointer_type (elem));
e97e5263 7716 good += try_one_overload (tparms, targs, tempargs, parm, elem,
4393e105 7717 strict, sub_strict);
34016c81
JM
7718 }
7719 }
7720 }
7721 else if (TREE_CODE (arg) == OVERLOAD)
7722 {
7723 for (; arg; arg = OVL_NEXT (arg))
d8f8dca1
MM
7724 {
7725 tree type = TREE_TYPE (OVL_CURRENT (arg));
7726 if (TREE_CODE (type) == METHOD_TYPE)
7727 type = build_ptrmemfunc_type (build_pointer_type (type));
7728 good += try_one_overload (tparms, targs, tempargs, parm,
7729 type,
4393e105 7730 strict, sub_strict);
d8f8dca1 7731 }
34016c81
JM
7732 }
7733 else
7734 my_friendly_abort (981006);
7735
7736 /* [temp.deduct.type] A template-argument can be deduced from a pointer
7737 to function or pointer to member function argument if the set of
7738 overloaded functions does not contain function templates and at most
7739 one of a set of overloaded functions provides a unique match.
7740
7741 So if we found multiple possibilities, we return success but don't
7742 deduce anything. */
7743
7744 if (good == 1)
7745 {
7746 int i = TREE_VEC_LENGTH (targs);
7747 for (; i--; )
7748 if (TREE_VEC_ELT (tempargs, i))
7749 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
7750 }
7751 if (good)
7752 return 0;
7753
7754 return 1;
7755}
7756
7757/* Subroutine of resolve_overloaded_unification; does deduction for a single
7758 overload. Fills TARGS with any deduced arguments, or error_mark_node if
7759 different overloads deduce different arguments for a given parm.
7760 Returns 1 on success. */
7761
7762static int
e97e5263 7763try_one_overload (tparms, orig_targs, targs, parm, arg, strict,
4393e105 7764 sub_strict)
e97e5263 7765 tree tparms, orig_targs, targs, parm, arg;
34016c81
JM
7766 unification_kind_t strict;
7767 int sub_strict;
34016c81
JM
7768{
7769 int nargs;
7770 tree tempargs;
7771 int i;
7772
7773 /* [temp.deduct.type] A template-argument can be deduced from a pointer
7774 to function or pointer to member function argument if the set of
7775 overloaded functions does not contain function templates and at most
7776 one of a set of overloaded functions provides a unique match.
7777
7778 So if this is a template, just return success. */
7779
7780 if (uses_template_parms (arg))
7781 return 1;
7782
7783 maybe_adjust_types_for_deduction (strict, &parm, &arg);
7784
7785 /* We don't copy orig_targs for this because if we have already deduced
7786 some template args from previous args, unify would complain when we
7787 try to deduce a template parameter for the same argument, even though
7788 there isn't really a conflict. */
7789 nargs = TREE_VEC_LENGTH (targs);
7790 tempargs = make_scratch_vec (nargs);
7791
4393e105 7792 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
7793 return 0;
7794
7795 /* First make sure we didn't deduce anything that conflicts with
e97e5263 7796 explicitly specified args. */
34016c81
JM
7797 for (i = nargs; i--; )
7798 {
7799 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 7800 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81
JM
7801
7802 if (elt == NULL_TREE)
7803 continue;
7804 else if (uses_template_parms (elt))
7805 {
7806 /* Since we're unifying against ourselves, we will fill in template
7807 args used in the function parm list with our own template parms.
7808 Discard them. */
7809 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
7810 continue;
7811 }
7812 else if (oldelt && ! template_args_equal (oldelt, elt))
7813 return 0;
7814 }
7815
7816 for (i = nargs; i--; )
7817 {
7818 tree elt = TREE_VEC_ELT (tempargs, i);
7819
7820 if (elt)
7821 TREE_VEC_ELT (targs, i) = elt;
7822 }
7823
7824 return 1;
7825}
7826
4393e105
MM
7827/* PARM is a template class (perhaps with unbound template
7828 parameters). ARG is a fully instantiated type. If ARG can be
7829 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
7830 TARGS are as for unify. */
fcfb9f96
MM
7831
7832static tree
4393e105 7833try_class_unification (tparms, targs, parm, arg)
fcfb9f96
MM
7834 tree tparms;
7835 tree targs;
4393e105
MM
7836 tree parm;
7837 tree arg;
7838{
7839 int i;
7840 tree copy_of_targs;
7841
7842 if (!CLASSTYPE_TEMPLATE_INFO (arg)
7843 || CLASSTYPE_TI_TEMPLATE (arg) != CLASSTYPE_TI_TEMPLATE (parm))
7844 return NULL_TREE;
7845
7846 /* We need to make a new template argument vector for the call to
7847 unify. If we used TARGS, we'd clutter it up with the result of
7848 the attempted unification, even if this class didn't work out.
7849 We also don't want to commit ourselves to all the unifications
7850 we've already done, since unification is supposed to be done on
7851 an argument-by-argument basis. In other words, consider the
7852 following pathological case:
7853
7854 template <int I, int J, int K>
7855 struct S {};
7856
7857 template <int I, int J>
7858 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
7859
7860 template <int I, int J, int K>
7861 void f(S<I, J, K>, S<I, I, I>);
7862
7863 void g() {
7864 S<0, 0, 0> s0;
7865 S<0, 1, 2> s2;
7866
7867 f(s0, s2);
7868 }
7869
7870 Now, by the time we consider the unification involving `s2', we
7871 already know that we must have `f<0, 0, 0>'. But, even though
7872 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is not legal
7873 because there are two ways to unify base classes of S<0, 1, 2>
7874 with S<I, I, I>. If we kept the already deduced knowledge, we
7875 would reject the possibility I=1. */
7876 push_momentary ();
7877 copy_of_targs = make_temp_vec (TREE_VEC_LENGTH (targs));
7878 i = unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
7879 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE);
7880 pop_momentary ();
7881
7882 /* If unification failed, we're done. */
7883 if (i != 0)
7884 return NULL_TREE;
7885 else
7886 return arg;
7887}
7888
7889/* Subroutine of get_template_base. RVAL, if non-NULL, is a base we
7890 have alreay discovered to be satisfactory. ARG_BINFO is the binfo
7891 for the base class of ARG that we are currently examining. */
7892
7893static tree
7894get_template_base_recursive (tparms, targs, parm,
7895 arg_binfo, rval, flags)
7896 tree tparms;
7897 tree targs;
7898 tree arg_binfo;
fcfb9f96 7899 tree rval;
4393e105
MM
7900 tree parm;
7901 int flags;
fcfb9f96
MM
7902{
7903 tree binfos;
7904 int i, n_baselinks;
4393e105 7905 tree arg = BINFO_TYPE (arg_binfo);
fcfb9f96 7906
4393e105 7907 if (!(flags & GTB_IGNORE_TYPE))
fcfb9f96 7908 {
4393e105
MM
7909 tree r = try_class_unification (tparms, targs,
7910 parm, arg);
fcfb9f96 7911
4393e105 7912 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 7913
4393e105
MM
7914 [temp.deduct.call]
7915
7916 If they yield more than one possible deduced A, the type
7917 deduction fails.
7918
7919 applies. */
7920 if (r && rval && !same_type_p (r, rval))
7921 return error_mark_node;
7922 else if (r)
7923 rval = r;
fcfb9f96
MM
7924 }
7925
4393e105 7926 binfos = BINFO_BASETYPES (arg_binfo);
fcfb9f96
MM
7927 n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
7928
7929 /* Process base types. */
7930 for (i = 0; i < n_baselinks; i++)
7931 {
7932 tree base_binfo = TREE_VEC_ELT (binfos, i);
4393e105 7933 int this_virtual;
fcfb9f96 7934
4393e105
MM
7935 /* Skip this base, if we've already seen it. */
7936 if (BINFO_MARKED (base_binfo))
7937 continue;
7938
7939 this_virtual =
7940 (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
7941
7942 /* When searching for a non-virtual, we cannot mark virtually
7943 found binfos. */
7944 if (! this_virtual)
7945 SET_BINFO_MARKED (base_binfo);
7946
7947 rval = get_template_base_recursive (tparms, targs,
7948 parm,
7949 base_binfo,
7950 rval,
7951 GTB_VIA_VIRTUAL * this_virtual);
7952
7953 /* If we discovered more than one matching base class, we can
7954 stop now. */
7955 if (rval == error_mark_node)
7956 return error_mark_node;
fcfb9f96
MM
7957 }
7958
7959 return rval;
7960}
7961
4393e105
MM
7962/* Given a template type PARM and a class type ARG, find the unique
7963 base type in ARG that is an instance of PARM. We do not examine
7964 ARG itself; only its base-classes. If there is no appropriate base
7965 class, return NULL_TREE. If there is more than one, return
7966 error_mark_node. PARM may be the type of a partial specialization,
7967 as well as a plain template type. Used by unify. */
fcfb9f96
MM
7968
7969static tree
4393e105 7970get_template_base (tparms, targs, parm, arg)
fcfb9f96
MM
7971 tree tparms;
7972 tree targs;
4393e105
MM
7973 tree parm;
7974 tree arg;
fcfb9f96 7975{
4393e105
MM
7976 tree rval;
7977 tree arg_binfo;
fcfb9f96 7978
4393e105
MM
7979 my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
7980
7981 arg_binfo = TYPE_BINFO (complete_type (arg));
7982 rval = get_template_base_recursive (tparms, targs,
7983 parm, arg_binfo,
7984 NULL_TREE,
7985 GTB_IGNORE_TYPE);
fcfb9f96 7986
4393e105
MM
7987 /* Since get_template_base_recursive marks the bases classes, we
7988 must unmark them here. */
d6479fe7 7989 dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
fcfb9f96
MM
7990
7991 return rval;
7992}
7993
db2767b6
MM
7994/* Returns the level of DECL, which declares a template parameter. */
7995
e9659ab0 7996static int
db2767b6
MM
7997template_decl_level (decl)
7998 tree decl;
7999{
8000 switch (TREE_CODE (decl))
8001 {
8002 case TYPE_DECL:
8003 case TEMPLATE_DECL:
8004 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
8005
8006 case PARM_DECL:
8007 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
8008
8009 default:
8010 my_friendly_abort (0);
5ffe581d 8011 return 0;
db2767b6
MM
8012 }
8013}
8014
830bfa74
MM
8015/* Decide whether ARG can be unified with PARM, considering only the
8016 cv-qualifiers of each type, given STRICT as documented for unify.
8017 Returns non-zero iff the unification is OK on that basis.*/
e92cc029 8018
e9659ab0 8019static int
830bfa74
MM
8020check_cv_quals_for_unify (strict, arg, parm)
8021 int strict;
8022 tree arg;
8023 tree parm;
8024{
8025 return !((!(strict & UNIFY_ALLOW_MORE_CV_QUAL)
91063b51 8026 && !at_least_as_qualified_p (arg, parm))
830bfa74 8027 || (!(strict & UNIFY_ALLOW_LESS_CV_QUAL)
91063b51 8028 && (!at_least_as_qualified_p (parm, arg))));
830bfa74
MM
8029}
8030
8031/* Takes parameters as for type_unification. Returns 0 if the
8032 type deduction suceeds, 1 otherwise. The parameter STRICT is a
8033 bitwise or of the following flags:
8034
8035 UNIFY_ALLOW_NONE:
8036 Require an exact match between PARM and ARG.
8037 UNIFY_ALLOW_MORE_CV_QUAL:
8038 Allow the deduced ARG to be more cv-qualified than ARG.
8039 UNIFY_ALLOW_LESS_CV_QUAL:
8040 Allow the deduced ARG to be less cv-qualified than ARG.
8041 UNIFY_ALLOW_DERIVED:
8042 Allow the deduced ARG to be a template base class of ARG,
8043 or a pointer to a template base class of the type pointed to by
161c12b0
JM
8044 ARG.
8045 UNIFY_ALLOW_INTEGER:
8046 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
8047 case for more information. */
830bfa74 8048
e9659ab0 8049static int
4393e105 8050unify (tparms, targs, parm, arg, strict)
050367a3 8051 tree tparms, targs, parm, arg;
830bfa74 8052 int strict;
8d08fdba
MS
8053{
8054 int idx;
050367a3 8055 tree targ;
db2767b6 8056 tree tparm;
8d08fdba
MS
8057
8058 /* I don't think this will do the right thing with respect to types.
8059 But the only case I've seen it in so far has been array bounds, where
8060 signedness is the only information lost, and I think that will be
8061 okay. */
8062 while (TREE_CODE (parm) == NOP_EXPR)
8063 parm = TREE_OPERAND (parm, 0);
8064
8065 if (arg == error_mark_node)
8066 return 1;
8067 if (arg == unknown_type_node)
34016c81
JM
8068 /* We can't deduce anything from this, but we might get all the
8069 template args from other function args. */
8070 return 0;
8071
db2767b6 8072 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 8073 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
8074 template parameters. We might need them if we're trying to
8075 figure out which of two things is more specialized. */
8076 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
8077 return 0;
8078
830bfa74
MM
8079 /* Immediately reject some pairs that won't unify because of
8080 cv-qualification mismatches. */
8081 if (TREE_CODE (arg) == TREE_CODE (parm)
49432171 8082 && TREE_CODE_CLASS (TREE_CODE (arg)) == 't'
830bfa74
MM
8083 /* We check the cv-qualifiers when unifying with template type
8084 parameters below. We want to allow ARG `const T' to unify with
8085 PARM `T' for example, when computing which of two templates
8086 is more specialized, for example. */
8087 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
8088 && !check_cv_quals_for_unify (strict, arg, parm))
49432171
JM
8089 return 1;
8090
8d08fdba
MS
8091 switch (TREE_CODE (parm))
8092 {
2ca340ae
JM
8093 case TYPENAME_TYPE:
8094 /* In a type which contains a nested-name-specifier, template
8095 argument values cannot be deduced for template parameters used
8096 within the nested-name-specifier. */
8097 return 0;
8098
8d08fdba 8099 case TEMPLATE_TYPE_PARM:
73b0fce8 8100 case TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
8101 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8102
8103 if (TEMPLATE_TYPE_LEVEL (parm)
8104 != template_decl_level (tparm))
8105 /* The PARM is not one we're trying to unify. Just check
8106 to see if it matches ARG. */
8107 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 8108 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 8109 idx = TEMPLATE_TYPE_IDX (parm);
050367a3 8110 targ = TREE_VEC_ELT (targs, idx);
db2767b6 8111 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 8112
73b0fce8 8113 /* Check for mixed types and values. */
db2767b6
MM
8114 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
8115 && TREE_CODE (tparm) != TYPE_DECL)
8116 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
8117 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
8118 return 1;
8119
db2767b6 8120 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
73b0fce8 8121 {
7ddedda4 8122 if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm))
db2767b6
MM
8123 {
8124 /* We arrive here when PARM does not involve template
8125 specialization. */
73b0fce8 8126
db2767b6
MM
8127 /* ARG must be constructed from a template class. */
8128 if (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg))
8129 return 1;
73b0fce8 8130
db2767b6 8131 {
7ddedda4
MM
8132 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
8133 tree parmvec = TYPE_TI_ARGS (parm);
db2767b6
MM
8134 tree argvec = CLASSTYPE_TI_ARGS (arg);
8135 tree argtmplvec
8136 = DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (arg));
8137 int i;
8138
8139 /* The parameter and argument roles have to be switched here
8140 in order to handle default arguments properly. For example,
8141 template<template <class> class TT> void f(TT<int>)
8142 should be able to accept vector<int> which comes from
744fac59 8143 template <class T, class Allocator = allocator>
73b0fce8
KL
8144 class vector. */
8145
fcfcdfc8 8146 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
db2767b6
MM
8147 == error_mark_node)
8148 return 1;
73b0fce8 8149
6b9b6b15
JM
8150 /* Deduce arguments T, i from TT<T> or TT<i>.
8151 We check each element of PARMVEC and ARGVEC individually
8152 rather than the whole TREE_VEC since they can have
8153 different number of elements. */
8154
db2767b6
MM
8155 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
8156 {
8157 tree t = TREE_VEC_ELT (parmvec, i);
73b0fce8 8158
830bfa74
MM
8159 if (unify (tparms, targs, t,
8160 TREE_VEC_ELT (argvec, i),
4393e105 8161 UNIFY_ALLOW_NONE))
db2767b6
MM
8162 return 1;
8163 }
73b0fce8 8164 }
db2767b6
MM
8165 arg = CLASSTYPE_TI_TEMPLATE (arg);
8166 }
8167 }
8168 else
8169 {
830bfa74
MM
8170 /* If PARM is `const T' and ARG is only `int', we don't have
8171 a match unless we are allowing additional qualification.
8172 If ARG is `const int' and PARM is just `T' that's OK;
8173 that binds `const int' to `T'. */
8174 if (!check_cv_quals_for_unify (strict | UNIFY_ALLOW_LESS_CV_QUAL,
8175 arg, parm))
db2767b6
MM
8176 return 1;
8177
830bfa74
MM
8178 /* Consider the case where ARG is `const volatile int' and
8179 PARM is `const T'. Then, T should be `volatile int'. */
8180 arg =
91063b51
MM
8181 cp_build_qualified_type (arg,
8182 CP_TYPE_QUALS (arg)
8183 & ~CP_TYPE_QUALS (parm));
73b0fce8
KL
8184 }
8185
8186 /* Simple cases: Value already set, does match or doesn't. */
4393e105 8187 if (targ != NULL_TREE && same_type_p (targ, arg))
73b0fce8 8188 return 0;
050367a3 8189 else if (targ)
73b0fce8 8190 return 1;
61cd552e
MM
8191
8192 /* Make sure that ARG is not a variable-sized array. (Note that
8193 were talking about variable-sized arrays (like `int[n]'),
8194 rather than arrays of unknown size (like `int[]').) We'll
8195 get very confused by such a type since the bound of the array
8196 will not be computable in an instantiation. Besides, such
8197 types are not allowed in ISO C++, so we can do as we please
8198 here. */
8199 if (TREE_CODE (arg) == ARRAY_TYPE
8200 && !uses_template_parms (arg)
8201 && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
8202 != INTEGER_CST))
8203 return 1;
8204
050367a3 8205 TREE_VEC_ELT (targs, idx) = arg;
73b0fce8
KL
8206 return 0;
8207
f84b4be9 8208 case TEMPLATE_PARM_INDEX:
db2767b6
MM
8209 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8210
8211 if (TEMPLATE_PARM_LEVEL (parm)
8212 != template_decl_level (tparm))
8213 /* The PARM is not one we're trying to unify. Just check
8214 to see if it matches ARG. */
8215 return (TREE_CODE (arg) == TREE_CODE (parm)
67ffc812 8216 && cp_tree_equal (parm, arg) > 0) ? 0 : 1;
db2767b6 8217
f84b4be9 8218 idx = TEMPLATE_PARM_IDX (parm);
050367a3 8219 targ = TREE_VEC_ELT (targs, idx);
db2767b6 8220
050367a3 8221 if (targ)
8d08fdba 8222 {
67ffc812 8223 int i = (cp_tree_equal (targ, arg) > 0);
312e7d50
JM
8224 if (i == 1)
8225 return 0;
8226 else if (i == 0)
8227 return 1;
8228 else
8229 my_friendly_abort (42);
8d08fdba 8230 }
8d08fdba 8231
161c12b0
JM
8232 /* [temp.deduct.type] If, in the declaration of a function template
8233 with a non-type template-parameter, the non-type
8234 template-parameter is used in an expression in the function
8235 parameter-list and, if the corresponding template-argument is
8236 deduced, the template-argument type shall match the type of the
8237 template-parameter exactly, except that a template-argument
8238 deduced from an array bound may be of any integral type. */
8239 if (same_type_p (TREE_TYPE (arg), TREE_TYPE (parm)))
8240 /* OK */;
8241 else if ((strict & UNIFY_ALLOW_INTEGER)
8242 && (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
8243 || TREE_CODE (TREE_TYPE (parm)) == BOOLEAN_TYPE))
8244 /* OK */;
8245 else
8246 return 1;
8247
050367a3 8248 TREE_VEC_ELT (targs, idx) = copy_to_permanent (arg);
8d08fdba
MS
8249 return 0;
8250
8251 case POINTER_TYPE:
830bfa74
MM
8252 {
8253 int sub_strict;
4ac14744 8254
830bfa74
MM
8255 if (TREE_CODE (arg) == RECORD_TYPE && TYPE_PTRMEMFUNC_FLAG (arg))
8256 return (unify (tparms, targs, parm,
4393e105 8257 TYPE_PTRMEMFUNC_FN_TYPE (arg), strict));
830bfa74
MM
8258
8259 if (TREE_CODE (arg) != POINTER_TYPE)
8260 return 1;
8261
8262 /* [temp.deduct.call]
8263
8264 A can be another pointer or pointer to member type that can
8265 be converted to the deduced A via a qualification
8266 conversion (_conv.qual_).
8267
8268 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
8269 This will allow for additional cv-qualification of the
8270 pointed-to types if appropriate. In general, this is a bit
8271 too generous; we are only supposed to allow qualification
8272 conversions and this method will allow an ARG of char** and
8273 a deduced ARG of const char**. However, overload
8274 resolution will subsequently invalidate the candidate, so
8275 this is probably OK. */
8276 sub_strict = strict;
8277
8278 if (TREE_CODE (TREE_TYPE (arg)) != RECORD_TYPE
8279 || TYPE_PTRMEMFUNC_FLAG (TREE_TYPE (arg)))
8280 /* The derived-to-base conversion only persists through one
8281 level of pointers. */
8282 sub_strict &= ~UNIFY_ALLOW_DERIVED;
8283
8284 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE
4393e105 8285 (arg), sub_strict);
830bfa74 8286 }
8d08fdba
MS
8287
8288 case REFERENCE_TYPE:
830bfa74
MM
8289 if (TREE_CODE (arg) != REFERENCE_TYPE)
8290 return 1;
8291 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8292 UNIFY_ALLOW_NONE);
8d08fdba
MS
8293
8294 case ARRAY_TYPE:
8295 if (TREE_CODE (arg) != ARRAY_TYPE)
8296 return 1;
3042d5be
MM
8297 if ((TYPE_DOMAIN (parm) == NULL_TREE)
8298 != (TYPE_DOMAIN (arg) == NULL_TREE))
8299 return 1;
8300 if (TYPE_DOMAIN (parm) != NULL_TREE
830bfa74 8301 && unify (tparms, targs, TYPE_DOMAIN (parm),
4393e105 8302 TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
8d08fdba 8303 return 1;
830bfa74 8304 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8305 UNIFY_ALLOW_NONE);
8d08fdba
MS
8306
8307 case REAL_TYPE:
37c46b43 8308 case COMPLEX_TYPE:
8d08fdba 8309 case INTEGER_TYPE:
42976354 8310 case BOOLEAN_TYPE:
5ad5a526 8311 case VOID_TYPE:
f376e137
MS
8312 if (TREE_CODE (arg) != TREE_CODE (parm))
8313 return 1;
8314
514a1f18
JM
8315 if (TREE_CODE (parm) == INTEGER_TYPE
8316 && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
8d08fdba
MS
8317 {
8318 if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
830bfa74 8319 && unify (tparms, targs, TYPE_MIN_VALUE (parm),
4393e105 8320 TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
8321 return 1;
8322 if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
830bfa74 8323 && unify (tparms, targs, TYPE_MAX_VALUE (parm),
4393e105 8324 TYPE_MAX_VALUE (arg), UNIFY_ALLOW_INTEGER))
8d08fdba
MS
8325 return 1;
8326 }
514a1f18
JM
8327 /* We use the TYPE_MAIN_VARIANT since we have already
8328 checked cv-qualification at the top of the
8329 function. */
3bfdc719
MM
8330 else if (!same_type_p (TYPE_MAIN_VARIANT (arg),
8331 TYPE_MAIN_VARIANT (parm)))
ca79f85d
JM
8332 return 1;
8333
8d08fdba
MS
8334 /* As far as unification is concerned, this wins. Later checks
8335 will invalidate it if necessary. */
8336 return 0;
8337
8338 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 8339 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 8340 case INTEGER_CST:
bd6dd845
MS
8341 while (TREE_CODE (arg) == NOP_EXPR)
8342 arg = TREE_OPERAND (arg, 0);
8343
8d08fdba
MS
8344 if (TREE_CODE (arg) != INTEGER_CST)
8345 return 1;
8346 return !tree_int_cst_equal (parm, arg);
8347
8d08fdba
MS
8348 case TREE_VEC:
8349 {
8350 int i;
8351 if (TREE_CODE (arg) != TREE_VEC)
8352 return 1;
8353 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
8354 return 1;
8355 for (i = TREE_VEC_LENGTH (parm) - 1; i >= 0; i--)
830bfa74 8356 if (unify (tparms, targs,
8d08fdba 8357 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 8358 UNIFY_ALLOW_NONE))
8d08fdba
MS
8359 return 1;
8360 return 0;
8361 }
8362
8d08fdba 8363 case RECORD_TYPE:
f181d4ae 8364 case UNION_TYPE:
db5ae43f 8365 if (TYPE_PTRMEMFUNC_FLAG (parm))
830bfa74 8366 return unify (tparms, targs, TYPE_PTRMEMFUNC_FN_TYPE (parm),
4393e105 8367 arg, strict);
8d08fdba 8368
f181d4ae 8369 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 8370 return 1;
830bfa74 8371
5db698f6 8372 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 8373 {
6467930b 8374 tree t = NULL_TREE;
4393e105 8375
830bfa74 8376 if (strict & UNIFY_ALLOW_DERIVED)
4393e105
MM
8377 {
8378 /* First, we try to unify the PARM and ARG directly. */
8379 t = try_class_unification (tparms, targs,
8380 parm, arg);
8381
8382 if (!t)
8383 {
8384 /* Fallback to the special case allowed in
8385 [temp.deduct.call]:
8386
8387 If P is a class, and P has the form
8388 template-id, then A can be a derived class of
8389 the deduced A. Likewise, if P is a pointer to
8390 a class of the form template-id, A can be a
8391 pointer to a derived class pointed to by the
8392 deduced A. */
8393 t = get_template_base (tparms, targs,
8394 parm, arg);
8395
8396 if (! t || t == error_mark_node)
8397 return 1;
8398 }
8399 }
6df47b06 8400 else if (CLASSTYPE_TEMPLATE_INFO (arg)
9fbf56f7
MM
8401 && (CLASSTYPE_TI_TEMPLATE (parm)
8402 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
8403 /* Perhaps PARM is something like S<U> and ARG is S<int>.
8404 Then, we should unify `int' and `U'. */
6467930b 8405 t = arg;
4393e105
MM
8406 else
8407 /* There's no chance of unication succeeding. */
5566b478 8408 return 1;
6467930b 8409
830bfa74 8410 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 8411 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 8412 }
3bfdc719
MM
8413 else if (!same_type_p (TYPE_MAIN_VARIANT (parm),
8414 TYPE_MAIN_VARIANT (arg)))
5566b478 8415 return 1;
a4443a08 8416 return 0;
8d08fdba
MS
8417
8418 case METHOD_TYPE:
8d08fdba 8419 case FUNCTION_TYPE:
830bfa74 8420 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 8421 return 1;
830bfa74
MM
8422
8423 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 8424 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 8425 return 1;
386b8a85 8426 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
3b3ba9f0 8427 TYPE_ARG_TYPES (arg), 1,
4393e105 8428 DEDUCE_EXACT, 0);
a4443a08
MS
8429
8430 case OFFSET_TYPE:
8431 if (TREE_CODE (arg) != OFFSET_TYPE)
8432 return 1;
830bfa74 8433 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 8434 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 8435 return 1;
830bfa74 8436 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 8437 strict);
a4443a08 8438
f62dbf03 8439 case CONST_DECL:
830bfa74 8440 if (arg != decl_constant_value (parm))
f62dbf03
JM
8441 return 1;
8442 return 0;
8443
027905b4
KL
8444 case TEMPLATE_DECL:
8445 /* Matched cases are handled by the ARG == PARM test above. */
8446 return 1;
8447
53929c47
JM
8448 case MINUS_EXPR:
8449 if (TREE_CODE (TREE_OPERAND (parm, 1)) == INTEGER_CST)
8450 {
8451 /* We handle this case specially, since it comes up with
8452 arrays. In particular, something like:
8453
8454 template <int N> void f(int (&x)[N]);
8455
8456 Here, we are trying to unify the range type, which
8457 looks like [0 ... (N - 1)]. */
8458 tree t, t1, t2;
8459 t1 = TREE_OPERAND (parm, 0);
8460 t2 = TREE_OPERAND (parm, 1);
8461
8462 /* Should this be a regular fold? */
8463 t = maybe_fold_nontype_arg (build (PLUS_EXPR,
8464 integer_type_node,
8465 arg, t2));
8466
4393e105 8467 return unify (tparms, targs, t1, t, strict);
53929c47
JM
8468 }
8469 /* else fall through */
8470
8d08fdba 8471 default:
050367a3 8472 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
4393e105
MM
8473 /* We're looking at an expression. This can happen with
8474 something like:
8475
8476 template <int I>
8477 void foo(S<I>, S<I + 2>);
050367a3 8478
4393e105 8479 This is a "nondeduced context":
050367a3 8480
4393e105
MM
8481 [deduct.type]
8482
8483 The nondeduced contexts are:
050367a3 8484
4393e105
MM
8485 --A type that is a template-id in which one or more of
8486 the template-arguments is an expression that references
8487 a template-parameter.
050367a3 8488
4393e105
MM
8489 In these cases, we assume deduction succeeded, but don't
8490 actually infer any unifications. */
8491 return 0;
050367a3 8492 else
b4c4a9ec
MM
8493 sorry ("use of `%s' in template type unification",
8494 tree_code_name [(int) TREE_CODE (parm)]);
050367a3 8495
8d08fdba
MS
8496 return 1;
8497 }
8498}
8d08fdba 8499\f
03d0f4af
MM
8500/* Called if RESULT is explicitly instantiated, or is a member of an
8501 explicitly instantiated class, or if using -frepo and the
8502 instantiation of RESULT has been assigned to this file. */
8503
faae18ab 8504void
5566b478 8505mark_decl_instantiated (result, extern_p)
faae18ab
MS
8506 tree result;
8507 int extern_p;
8508{
75650646
MM
8509 if (TREE_CODE (result) != FUNCTION_DECL)
8510 /* The TREE_PUBLIC flag for function declarations will have been
8511 set correctly by tsubst. */
8512 TREE_PUBLIC (result) = 1;
faae18ab
MS
8513
8514 if (! extern_p)
8515 {
8516 DECL_INTERFACE_KNOWN (result) = 1;
8517 DECL_NOT_REALLY_EXTERN (result) = 1;
a7d87521 8518
1a408d07
JM
8519 /* Always make artificials weak. */
8520 if (DECL_ARTIFICIAL (result) && flag_weak)
8521 comdat_linkage (result);
a7d87521
JM
8522 /* For WIN32 we also want to put explicit instantiations in
8523 linkonce sections. */
1a408d07 8524 else if (TREE_PUBLIC (result))
b385c841 8525 maybe_make_one_only (result);
faae18ab 8526 }
f49422da
MS
8527 else if (TREE_CODE (result) == FUNCTION_DECL)
8528 mark_inline_for_output (result);
faae18ab
MS
8529}
8530
e1467ff2
MM
8531/* Given two function templates PAT1 and PAT2, and explicit template
8532 arguments EXPLICIT_ARGS return:
6467930b
MS
8533
8534 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
8535 -1 if PAT2 is more specialized than PAT1.
8536 0 if neither is more specialized. */
8537
8538int
e1467ff2
MM
8539more_specialized (pat1, pat2, explicit_args)
8540 tree pat1, pat2, explicit_args;
6467930b 8541{
98c1c668 8542 tree targs;
73aad9b9 8543 int winner = 0;
6467930b 8544
4393e105 8545 targs = get_bindings_overload (pat1, DECL_RESULT (pat2), explicit_args);
73aad9b9 8546 if (targs)
36a117a5 8547 --winner;
6467930b 8548
4393e105 8549 targs = get_bindings_overload (pat2, DECL_RESULT (pat1), explicit_args);
73aad9b9 8550 if (targs)
36a117a5 8551 ++winner;
6467930b 8552
73aad9b9
JM
8553 return winner;
8554}
6467930b 8555
73aad9b9 8556/* Given two class template specialization list nodes PAT1 and PAT2, return:
6467930b 8557
73aad9b9
JM
8558 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
8559 -1 if PAT2 is more specialized than PAT1.
8560 0 if neither is more specialized. */
8561
8562int
8563more_specialized_class (pat1, pat2)
8564 tree pat1, pat2;
8565{
8566 tree targs;
8567 int winner = 0;
8568
36a117a5
MM
8569 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
8570 TREE_PURPOSE (pat2));
73aad9b9
JM
8571 if (targs)
8572 --winner;
8573
36a117a5
MM
8574 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
8575 TREE_PURPOSE (pat1));
73aad9b9 8576 if (targs)
6467930b
MS
8577 ++winner;
8578
8579 return winner;
8580}
73aad9b9
JM
8581
8582/* Return the template arguments that will produce the function signature
e1467ff2 8583 DECL from the function template FN, with the explicit template
76b9a14d 8584 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is 1, the return type must
4393e105
MM
8585 also match. Return NULL_TREE if no satisfactory arguments could be
8586 found. */
73aad9b9 8587
76b9a14d
JM
8588static tree
8589get_bindings_real (fn, decl, explicit_args, check_rettype)
e1467ff2 8590 tree fn, decl, explicit_args;
76b9a14d 8591 int check_rettype;
73aad9b9 8592{
98c1c668 8593 int ntparms = DECL_NTPARMS (fn);
e66d884e 8594 tree targs = make_scratch_vec (ntparms);
4393e105 8595 tree decl_type;
03017874 8596 tree decl_arg_types;
98c1c668
JM
8597 int i;
8598
4393e105
MM
8599 /* Substitute the explicit template arguments into the type of DECL.
8600 The call to fn_type_unification will handle substitution into the
8601 FN. */
8602 decl_type = TREE_TYPE (decl);
8603 if (explicit_args && uses_template_parms (decl_type))
8604 {
8605 tree tmpl;
8606 tree converted_args;
8607
8608 if (DECL_TEMPLATE_INFO (decl))
8609 tmpl = DECL_TI_TEMPLATE (decl);
8610 else
8611 /* We can get here for some illegal specializations. */
8612 return NULL_TREE;
8613
8614 converted_args
8615 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
8616 explicit_args, NULL_TREE,
8617 /*complain=*/0,
8618 /*require_all_arguments=*/0));
8619 if (converted_args == error_mark_node)
8620 return NULL_TREE;
8621
8622 decl_type = tsubst (decl_type, converted_args, /*complain=*/0,
8623 NULL_TREE);
8624 if (decl_type == error_mark_node)
8625 return NULL_TREE;
8626 }
8627
03017874
MM
8628 /* If FN is a static member function, adjust the type of DECL
8629 appropriately. */
4393e105 8630 decl_arg_types = TYPE_ARG_TYPES (decl_type);
d7684f2d
MM
8631 if (DECL_STATIC_FUNCTION_P (fn)
8632 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
03017874 8633 decl_arg_types = TREE_CHAIN (decl_arg_types);
d7684f2d 8634
e1467ff2 8635 i = fn_type_unification (fn, explicit_args, targs,
03017874
MM
8636 decl_arg_types,
8637 TREE_TYPE (decl_type),
8638 DEDUCE_EXACT);
98c1c668 8639
76b9a14d
JM
8640 if (i != 0)
8641 return NULL_TREE;
8642
8643 if (check_rettype)
e1467ff2
MM
8644 {
8645 /* Check to see that the resulting return type is also OK. */
36a117a5 8646 tree t = tsubst (TREE_TYPE (TREE_TYPE (fn)), targs,
4393e105 8647 /*complain=*/0, NULL_TREE);
e1467ff2 8648
3bfdc719 8649 if (!same_type_p (t, TREE_TYPE (TREE_TYPE (decl))))
e1467ff2 8650 return NULL_TREE;
e1467ff2
MM
8651 }
8652
76b9a14d
JM
8653 return targs;
8654}
8655
8656/* For most uses, we want to check the return type. */
8657
8658tree
8659get_bindings (fn, decl, explicit_args)
8660 tree fn, decl, explicit_args;
8661{
8662 return get_bindings_real (fn, decl, explicit_args, 1);
8663}
8664
8665/* But for more_specialized, we only care about the parameter types. */
8666
8667static tree
8668get_bindings_overload (fn, decl, explicit_args)
8669 tree fn, decl, explicit_args;
8670{
8671 return get_bindings_real (fn, decl, explicit_args, 0);
73aad9b9
JM
8672}
8673
36a117a5
MM
8674/* Return the innermost template arguments that, when applied to a
8675 template specialization whose innermost template parameters are
8676 TPARMS, and whose specialization arguments are ARGS, yield the
8677 ARGS.
8678
8679 For example, suppose we have:
8680
8681 template <class T, class U> struct S {};
8682 template <class T> struct S<T*, int> {};
8683
8684 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
8685 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
8686 int}. The resulting vector will be {double}, indicating that `T'
8687 is bound to `double'. */
8688
bd6dd845 8689static tree
36a117a5
MM
8690get_class_bindings (tparms, parms, args)
8691 tree tparms, parms, args;
73aad9b9 8692{
3b3ba9f0 8693 int i, ntparms = TREE_VEC_LENGTH (tparms);
73aad9b9
JM
8694 tree vec = make_temp_vec (ntparms);
8695
36a117a5 8696 args = innermost_args (args);
8d019cef 8697
4393e105 8698 if (unify (tparms, vec, parms, args, UNIFY_ALLOW_NONE))
fcfb9f96 8699 return NULL_TREE;
73aad9b9
JM
8700
8701 for (i = 0; i < ntparms; ++i)
8702 if (! TREE_VEC_ELT (vec, i))
8703 return NULL_TREE;
8704
8705 return vec;
8706}
8707
104bf76a
MM
8708/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
8709 Pick the most specialized template, and return the corresponding
8710 instantiation, or if there is no corresponding instantiation, the
8711 template itself. EXPLICIT_ARGS is any template arguments explicity
8712 mentioned in a template-id. If there is no most specialized
8713 tempalte, error_mark_node is returned. If there are no templates
8714 at all, NULL_TREE is returned. */
73aad9b9
JM
8715
8716tree
104bf76a
MM
8717most_specialized_instantiation (instantiations, explicit_args)
8718 tree instantiations;
8719 tree explicit_args;
73aad9b9 8720{
104bf76a 8721 tree fn, champ;
73aad9b9
JM
8722 int fate;
8723
104bf76a 8724 if (!instantiations)
73aad9b9
JM
8725 return NULL_TREE;
8726
104bf76a
MM
8727 champ = instantiations;
8728 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
73aad9b9 8729 {
104bf76a
MM
8730 fate = more_specialized (TREE_VALUE (champ),
8731 TREE_VALUE (fn), explicit_args);
73aad9b9
JM
8732 if (fate == 1)
8733 ;
8734 else
8735 {
8736 if (fate == 0)
8737 {
8738 fn = TREE_CHAIN (fn);
8739 if (! fn)
8740 return error_mark_node;
8741 }
104bf76a 8742 champ = fn;
73aad9b9
JM
8743 }
8744 }
8745
104bf76a 8746 for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
73aad9b9 8747 {
104bf76a
MM
8748 fate = more_specialized (TREE_VALUE (champ),
8749 TREE_VALUE (fn), explicit_args);
73aad9b9
JM
8750 if (fate != 1)
8751 return error_mark_node;
8752 }
8753
104bf76a
MM
8754 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
8755}
8756
8757/* Return the most specialized of the list of templates in FNS that can
8758 produce an instantiation matching DECL, given the explicit template
8759 arguments EXPLICIT_ARGS. */
8760
e9659ab0 8761static tree
104bf76a
MM
8762most_specialized (fns, decl, explicit_args)
8763 tree fns, decl, explicit_args;
8764{
8765 tree candidates = NULL_TREE;
8766 tree fn, args;
8767
8768 for (fn = fns; fn; fn = TREE_CHAIN (fn))
8769 {
8770 tree candidate = TREE_VALUE (fn);
8771
8772 args = get_bindings (candidate, decl, explicit_args);
8773 if (args)
8774 candidates = scratch_tree_cons (NULL_TREE, candidate,
8775 candidates);
8776 }
8777
8778 return most_specialized_instantiation (candidates, explicit_args);
73aad9b9
JM
8779}
8780
36a117a5
MM
8781/* If DECL is a specialization of some template, return the most
8782 general such template. For example, given:
8783
8784 template <class T> struct S { template <class U> void f(U); };
8785
8786 if TMPL is `template <class U> void S<int>::f(U)' this will return
8787 the full template. This function will not trace past partial
8788 specializations, however. For example, given in addition:
8789
8790 template <class T> struct S<T*> { template <class U> void f(U); };
8791
8792 if TMPL is `template <class U> void S<int*>::f(U)' this will return
8793 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 8794
e9659ab0 8795static tree
36a117a5
MM
8796most_general_template (decl)
8797 tree decl;
73aad9b9 8798{
36a117a5
MM
8799 while (DECL_TEMPLATE_INFO (decl))
8800 decl = DECL_TI_TEMPLATE (decl);
8801
8802 return decl;
8803}
8804
8805/* Return the most specialized of the class template specializations
8806 of TMPL which can produce an instantiation matching ARGS, or
8807 error_mark_node if the choice is ambiguous. */
8808
e9659ab0 8809static tree
36a117a5
MM
8810most_specialized_class (tmpl, args)
8811 tree tmpl;
8812 tree args;
8813{
8814 tree list = NULL_TREE;
8815 tree t;
8816 tree champ;
73aad9b9
JM
8817 int fate;
8818
36a117a5
MM
8819 tmpl = most_general_template (tmpl);
8820 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 8821 {
36a117a5
MM
8822 tree spec_args
8823 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
8824 if (spec_args)
73aad9b9
JM
8825 {
8826 list = decl_tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
8827 TREE_TYPE (list) = TREE_TYPE (t);
8828 }
8829 }
8830
8831 if (! list)
8832 return NULL_TREE;
8833
8834 t = list;
8835 champ = t;
8836 t = TREE_CHAIN (t);
8837 for (; t; t = TREE_CHAIN (t))
8838 {
8839 fate = more_specialized_class (champ, t);
8840 if (fate == 1)
8841 ;
8842 else
8843 {
8844 if (fate == 0)
8845 {
8846 t = TREE_CHAIN (t);
8847 if (! t)
8848 return error_mark_node;
8849 }
8850 champ = t;
8851 }
8852 }
8853
8854 for (t = list; t && t != champ; t = TREE_CHAIN (t))
8855 {
85b71cf2 8856 fate = more_specialized_class (champ, t);
73aad9b9
JM
8857 if (fate != 1)
8858 return error_mark_node;
8859 }
8860
8861 return champ;
8862}
8863
8d08fdba 8864/* called from the parser. */
e92cc029 8865
8d08fdba 8866void
6633d636 8867do_decl_instantiation (declspecs, declarator, storage)
f0e01782 8868 tree declspecs, declarator, storage;
8d08fdba 8869{
c11b6f21 8870 tree decl = grokdeclarator (declarator, declspecs, NORMAL, 0, NULL_TREE);
8d08fdba 8871 tree result = NULL_TREE;
faae18ab 8872 int extern_p = 0;
e8abc66f 8873
ec255269
MS
8874 if (! DECL_LANG_SPECIFIC (decl))
8875 {
8251199e 8876 cp_error ("explicit instantiation of non-template `%#D'", decl);
ec255269
MS
8877 return;
8878 }
03d0f4af 8879 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 8880 {
03d0f4af
MM
8881 /* There is an asymmetry here in the way VAR_DECLs and
8882 FUNCTION_DECLs are handled by grokdeclarator. In the case of
8883 the latter, the DECL we get back will be marked as a
8884 template instantiation, and the appropriate
8885 DECL_TEMPLATE_INFO will be set up. This does not happen for
8886 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
8887 should handle VAR_DECLs as it currently handles
8888 FUNCTION_DECLs. */
6633d636
MS
8889 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, 0);
8890 if (result && TREE_CODE (result) != VAR_DECL)
03d0f4af 8891 {
8251199e 8892 cp_error ("no matching template for `%D' found", result);
03d0f4af
MM
8893 return;
8894 }
6633d636
MS
8895 }
8896 else if (TREE_CODE (decl) != FUNCTION_DECL)
8897 {
8251199e 8898 cp_error ("explicit instantiation of `%#D'", decl);
6633d636
MS
8899 return;
8900 }
03d0f4af
MM
8901 else
8902 result = decl;
672476cb 8903
03d0f4af
MM
8904 /* Check for various error cases. Note that if the explicit
8905 instantiation is legal the RESULT will currently be marked as an
8906 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
8907 until we get here. */
8908
8909 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 8910 {
03d0f4af
MM
8911 /* [temp.spec]
8912
8913 No program shall both explicitly instantiate and explicitly
8914 specialize a template. */
8251199e
JM
8915 cp_error ("explicit instantiation of `%#D' after", result);
8916 cp_error_at ("explicit specialization here", result);
672476cb
MM
8917 return;
8918 }
03d0f4af
MM
8919 else if (DECL_EXPLICIT_INSTANTIATION (result))
8920 {
8921 /* [temp.spec]
98c1c668 8922
03d0f4af
MM
8923 No program shall explicitly instantiate any template more
8924 than once.
8925
8926 We check DECL_INTERFACE_KNOWN so as not to complain when the
8927 first instantiation was `extern' and the second is not, and
8928 EXTERN_P for the opposite case. */
8929 if (DECL_INTERFACE_KNOWN (result) && !extern_p)
8251199e 8930 cp_error ("duplicate explicit instantiation of `%#D'", result);
03d0f4af
MM
8931
8932 /* If we've already instantiated the template, just return now. */
8933 if (DECL_INTERFACE_KNOWN (result))
8934 return;
8935 }
8936 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 8937 {
8251199e 8938 cp_error ("no matching template for `%D' found", result);
faae18ab
MS
8939 return;
8940 }
03d0f4af 8941 else if (!DECL_TEMPLATE_INFO (result))
6633d636 8942 {
8251199e 8943 cp_pedwarn ("explicit instantiation of non-template `%#D'", result);
6633d636
MS
8944 return;
8945 }
8946
a0a33927
MS
8947 if (flag_external_templates)
8948 return;
8949
f0e01782 8950 if (storage == NULL_TREE)
00595019 8951 ;
faae18ab 8952 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af
MM
8953 {
8954 if (pedantic)
8251199e 8955 cp_pedwarn ("ANSI C++ forbids the use of `extern' on explicit instantiations");
03d0f4af
MM
8956 extern_p = 1;
8957 }
f0e01782 8958 else
8251199e 8959 cp_error ("storage class `%D' applied to template instantiation",
f0e01782 8960 storage);
5566b478 8961
03d0f4af 8962 SET_DECL_EXPLICIT_INSTANTIATION (result);
5566b478 8963 mark_decl_instantiated (result, extern_p);
44a8d0b3 8964 repo_template_instantiated (result, extern_p);
c91a56d2
MS
8965 if (! extern_p)
8966 instantiate_decl (result);
7177d104
MS
8967}
8968
faae18ab
MS
8969void
8970mark_class_instantiated (t, extern_p)
8971 tree t;
8972 int extern_p;
8973{
8974 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
8975 SET_CLASSTYPE_INTERFACE_KNOWN (t);
8976 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
8977 CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
8978 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
8979 if (! extern_p)
8980 {
8981 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
8982 rest_of_type_compilation (t, 1);
8983 }
8984}
e8abc66f 8985
7177d104 8986void
ca79f85d
JM
8987do_type_instantiation (t, storage)
8988 tree t, storage;
7177d104 8989{
e8abc66f
MS
8990 int extern_p = 0;
8991 int nomem_p = 0;
5566b478
MS
8992 int static_p = 0;
8993
ca79f85d
JM
8994 if (TREE_CODE (t) == TYPE_DECL)
8995 t = TREE_TYPE (t);
8996
7ddedda4 8997 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 8998 {
8251199e 8999 cp_error ("explicit instantiation of non-template type `%T'", t);
ca79f85d
JM
9000 return;
9001 }
9002
5566b478 9003 complete_type (t);
7177d104 9004
a292b002
MS
9005 /* With -fexternal-templates, explicit instantiations are treated the same
9006 as implicit ones. */
a0a33927
MS
9007 if (flag_external_templates)
9008 return;
9009
f0e01782
MS
9010 if (TYPE_SIZE (t) == NULL_TREE)
9011 {
8251199e 9012 cp_error ("explicit instantiation of `%#T' before definition of template",
f0e01782
MS
9013 t);
9014 return;
9015 }
9016
03d0f4af 9017 if (storage != NULL_TREE)
f0e01782 9018 {
03d0f4af 9019 if (pedantic)
8251199e
JM
9020 cp_pedwarn("ANSI C++ forbids the use of `%s' on explicit instantiations",
9021 IDENTIFIER_POINTER (storage));
03d0f4af
MM
9022
9023 if (storage == ridpointers[(int) RID_INLINE])
9024 nomem_p = 1;
9025 else if (storage == ridpointers[(int) RID_EXTERN])
9026 extern_p = 1;
9027 else if (storage == ridpointers[(int) RID_STATIC])
9028 static_p = 1;
9029 else
9030 {
8251199e 9031 cp_error ("storage class `%D' applied to template instantiation",
03d0f4af
MM
9032 storage);
9033 extern_p = 0;
9034 }
f0e01782
MS
9035 }
9036
03d0f4af
MM
9037 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9038 {
9039 /* [temp.spec]
a292b002 9040
03d0f4af
MM
9041 No program shall both explicitly instantiate and explicitly
9042 specialize a template. */
8251199e
JM
9043 cp_error ("explicit instantiation of `%#T' after", t);
9044 cp_error_at ("explicit specialization here", t);
03d0f4af
MM
9045 return;
9046 }
9047 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 9048 {
03d0f4af
MM
9049 /* [temp.spec]
9050
9051 No program shall explicitly instantiate any template more
9052 than once.
9053
9054 If CLASSTYPE_INTERFACE_ONLY, then the first explicit
9055 instantiation was `extern', and if EXTERN_P then the second
9056 is. Both cases are OK. */
9057 if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p)
8251199e 9058 cp_error ("duplicate explicit instantiation of `%#T'", t);
03d0f4af
MM
9059
9060 /* If we've already instantiated the template, just return now. */
9061 if (!CLASSTYPE_INTERFACE_ONLY (t))
9062 return;
44a8d0b3 9063 }
e8abc66f 9064
03d0f4af
MM
9065 mark_class_instantiated (t, extern_p);
9066 repo_template_instantiated (t, extern_p);
9067
e8abc66f
MS
9068 if (nomem_p)
9069 return;
9070
7177d104 9071 {
db5ae43f 9072 tree tmp;
5566b478 9073
03d0f4af
MM
9074 /* In contrast to implicit instantiation, where only the
9075 declarations, and not the definitions, of members are
9076 instantiated, we have here:
9077
9078 [temp.explicit]
9079
9080 The explicit instantiation of a class template specialization
9081 implies the instantiation of all of its members not
9082 previously explicitly specialized in the translation unit
9083 containing the explicit instantiation.
9084
9085 Of course, we can't instantiate member template classes, since
9086 we don't have any arguments for them. Note that the standard
9087 is unclear on whether the instatiation of the members are
9088 *explicit* instantiations or not. We choose to be generous,
9089 and not set DECL_EXPLICIT_INSTANTIATION. Therefore, we allow
9090 the explicit instantiation of a class where some of the members
9091 have no definition in the current translation unit. */
9092
5566b478
MS
9093 if (! static_p)
9094 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 9095 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 9096 && DECL_TEMPLATE_INSTANTIATION (tmp))
5566b478
MS
9097 {
9098 mark_decl_instantiated (tmp, extern_p);
9099 repo_template_instantiated (tmp, extern_p);
9100 if (! extern_p)
9101 instantiate_decl (tmp);
9102 }
9103
9104 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
9105 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
863adfc0 9106 {
5566b478 9107 mark_decl_instantiated (tmp, extern_p);
863adfc0 9108 repo_template_instantiated (tmp, extern_p);
5566b478
MS
9109 if (! extern_p)
9110 instantiate_decl (tmp);
863adfc0 9111 }
7177d104 9112
a292b002 9113 for (tmp = CLASSTYPE_TAGS (t); tmp; tmp = TREE_CHAIN (tmp))
e4a84209
MM
9114 if (IS_AGGR_TYPE (TREE_VALUE (tmp))
9115 && !uses_template_parms (CLASSTYPE_TI_ARGS (TREE_VALUE (tmp))))
f376e137 9116 do_type_instantiation (TYPE_MAIN_DECL (TREE_VALUE (tmp)), storage);
a292b002 9117 }
8d08fdba 9118}
a28e3c7f 9119
36a117a5
MM
9120/* Given a function DECL, which is a specialization of TMPL, modify
9121 DECL to be a re-instantiation of TMPL with the same template
9122 arguments. TMPL should be the template into which tsubst'ing
9123 should occur for DECL, not the most general template.
830bfa74
MM
9124
9125 One reason for doing this is a scenario like this:
9126
9127 template <class T>
9128 void f(const T&, int i);
9129
9130 void g() { f(3, 7); }
9131
9132 template <class T>
9133 void f(const T& t, const int i) { }
9134
9135 Note that when the template is first instantiated, with
9136 instantiate_template, the resulting DECL will have no name for the
9137 first parameter, and the wrong type for the second. So, when we go
9138 to instantiate the DECL, we regenerate it. */
9139
e9659ab0 9140static void
830bfa74
MM
9141regenerate_decl_from_template (decl, tmpl)
9142 tree decl;
9143 tree tmpl;
9144{
9145 tree args;
830bfa74
MM
9146 tree code_pattern;
9147 tree new_decl;
36a117a5
MM
9148 tree gen_tmpl;
9149 int unregistered;
830bfa74
MM
9150
9151 args = DECL_TI_ARGS (decl);
9152 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
9153
8251199e
JM
9154 /* Unregister the specialization so that when we tsubst we will not
9155 just return DECL. We don't have to unregister DECL from TMPL
9156 because if would only be registered there if it were a partial
9157 instantiation of a specialization, which it isn't: it's a full
9158 instantiation. */
36a117a5
MM
9159 gen_tmpl = most_general_template (tmpl);
9160 unregistered = unregister_specialization (decl, gen_tmpl);
9161
9162 /* If the DECL was not unregistered then something peculiar is
9163 happening: we created a specialization but did not call
9164 register_specialization for it. */
9165 my_friendly_assert (unregistered, 0);
9166
61a127b3
MM
9167 if (TREE_CODE (decl) == VAR_DECL)
9168 /* Make sure that we can see identifiers, and compute access
9169 correctly, for the class members used in the declaration of
9170 this static variable. */
9171 pushclass (DECL_CONTEXT (decl), 2);
9172
d8c4447d 9173 /* Do the substitution to get the new declaration. */
4393e105 9174 new_decl = tsubst (code_pattern, args, /*complain=*/1, NULL_TREE);
830bfa74
MM
9175
9176 if (TREE_CODE (decl) == VAR_DECL)
9177 {
9178 /* Set up DECL_INITIAL, since tsubst doesn't. */
830bfa74 9179 DECL_INITIAL (new_decl) =
d8c4447d 9180 tsubst_expr (DECL_INITIAL (code_pattern), args,
4393e105 9181 /*complain=*/1, DECL_TI_TEMPLATE (decl));
61a127b3 9182 /* Pop the class context we pushed above. */
b74a0560 9183 popclass ();
830bfa74 9184 }
2b0a63a3 9185 else if (TREE_CODE (decl) == FUNCTION_DECL)
fbf1c34b
MM
9186 {
9187 /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
9188 new decl. */
9189 DECL_INITIAL (new_decl) = error_mark_node;
9190 /* And don't complain about a duplicate definition. */
9191 DECL_INITIAL (decl) = NULL_TREE;
9192 }
36a117a5
MM
9193
9194 /* The immediate parent of the new template is still whatever it was
9195 before, even though tsubst sets DECL_TI_TEMPLATE up as the most
9196 general template. We also reset the DECL_ASSEMBLER_NAME since
9197 tsubst always calculates the name as if the function in question
9198 were really a template instance, and sometimes, with friend
9199 functions, this is not so. See tsubst_friend_function for
9200 details. */
9201 DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
9202 DECL_ASSEMBLER_NAME (new_decl) = DECL_ASSEMBLER_NAME (decl);
9203 DECL_RTL (new_decl) = DECL_RTL (decl);
9204
9205 /* Call duplicate decls to merge the old and new declarations. */
830bfa74
MM
9206 duplicate_decls (new_decl, decl);
9207
36a117a5
MM
9208 /* Now, re-register the specialization. */
9209 register_specialization (decl, gen_tmpl, args);
830bfa74
MM
9210}
9211
f84b4be9
JM
9212/* Produce the definition of D, a _DECL generated from a template. */
9213
a28e3c7f 9214tree
5566b478
MS
9215instantiate_decl (d)
9216 tree d;
a28e3c7f 9217{
36a117a5
MM
9218 tree tmpl = DECL_TI_TEMPLATE (d);
9219 tree args = DECL_TI_ARGS (d);
830bfa74 9220 tree td;
36a117a5
MM
9221 tree code_pattern;
9222 tree spec;
9223 tree gen_tmpl;
5566b478 9224 int nested = in_function_p ();
5566b478 9225 int pattern_defined;
c27be9b9
JM
9226 int line = lineno;
9227 char *file = input_filename;
5566b478 9228
36a117a5
MM
9229 /* This function should only be used to instantiate templates for
9230 functions and static member variables. */
9231 my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
9232 || TREE_CODE (d) == VAR_DECL, 0);
9233
fbf1c34b 9234 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af
MM
9235 /* D has already been instantiated. It might seem reasonable to
9236 check whether or not D is an explict instantiation, and, if so,
9237 stop here. But when an explicit instantiation is deferred
9238 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
9239 is set, even though we still need to do the instantiation. */
36a117a5
MM
9240 return d;
9241
9242 /* If we already have a specialization of this declaration, then
9243 there's no reason to instantiate it. Note that
9244 retrieve_specialization gives us both instantiations and
9245 specializations, so we must explicitly check
9246 DECL_TEMPLATE_SPECIALIZATION. */
9247 gen_tmpl = most_general_template (tmpl);
9248 spec = retrieve_specialization (gen_tmpl, args);
9249 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
9250 return spec;
9251
9252 /* This needs to happen before any tsubsting. */
9253 if (! push_tinst_level (d))
9254 return d;
9255
4d85e00e
MM
9256 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
9257 for the instantiation. This is not always the most general
9258 template. Consider, for example:
9259
9260 template <class T>
9261 struct S { template <class U> void f();
9262 template <> void f<int>(); };
9263
9264 and an instantiation of S<double>::f<int>. We want TD to be the
9265 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
9266 td = tmpl;
9267 for (td = tmpl;
9268 /* An instantiation cannot have a definition, so we need a
9269 more general template. */
9270 DECL_TEMPLATE_INSTANTIATION (td)
9271 /* We must also deal with friend templates. Given:
9272
9273 template <class T> struct S {
9274 template <class U> friend void f() {};
9275 };
9276
9277 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
9278 so far as the language is concerned, but that's still
9279 where we get the pattern for the instantiation from. On
9280 ther hand, if the definition comes outside the class, say:
9281
9282 template <class T> struct S {
9283 template <class U> friend void f();
9284 };
9285 template <class U> friend void f() {}
9286
9287 we don't need to look any further. That's what the check for
9288 DECL_INITIAL is for. */
9289 || (TREE_CODE (d) == FUNCTION_DECL
61289ca3 9290 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (td)
4d85e00e 9291 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (td)));
f84b4be9 9292 )
4d85e00e
MM
9293 {
9294 /* The present template, TD, should not be a definition. If it
9295 were a definition, we should be using it! Note that we
9296 cannot restructure the loop to just keep going until we find
9297 a template with a definition, since that might go too far if
9298 a specialization was declared, but not defined. */
4d85e00e
MM
9299 my_friendly_assert (!(TREE_CODE (d) == VAR_DECL
9300 && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (td))),
9301 0);
9302
9303 /* Fetch the more general template. */
9304 td = DECL_TI_TEMPLATE (td);
9305 }
27bb8339 9306
fee23f54 9307 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 9308
5566b478 9309 if (TREE_CODE (d) == FUNCTION_DECL)
36a117a5 9310 pattern_defined = (DECL_INITIAL (code_pattern) != NULL_TREE);
5566b478 9311 else
36a117a5 9312 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
de22184b
MS
9313
9314 push_to_top_level ();
9315 lineno = DECL_SOURCE_LINE (d);
9316 input_filename = DECL_SOURCE_FILE (d);
9317
de22184b 9318 if (pattern_defined)
5566b478
MS
9319 {
9320 repo_template_used (d);
9321
9322 if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
9323 {
9324 if (flag_alt_external_templates)
9325 {
9326 if (interface_unknown)
9327 warn_if_unknown_interface (d);
9328 }
fee23f54 9329 else if (DECL_INTERFACE_KNOWN (code_pattern))
5566b478
MS
9330 {
9331 DECL_INTERFACE_KNOWN (d) = 1;
fee23f54 9332 DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
5566b478
MS
9333 }
9334 else
fee23f54 9335 warn_if_unknown_interface (code_pattern);
5566b478
MS
9336 }
9337
e92cc029 9338 if (at_eof)
5566b478
MS
9339 import_export_decl (d);
9340 }
9341
c4ae3f91
JM
9342 /* Reject all external templates except inline functions. */
9343 if (DECL_INTERFACE_KNOWN (d)
9344 && ! DECL_NOT_REALLY_EXTERN (d)
9345 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
9346 goto out;
9347
67ffc812 9348 if (TREE_CODE (d) == VAR_DECL
711734a9 9349 && TREE_READONLY (d)
67ffc812
MM
9350 && DECL_INITIAL (d) == NULL_TREE
9351 && DECL_INITIAL (code_pattern) != NULL_TREE)
9352 /* We need to set up DECL_INITIAL regardless of pattern_defined if
9353 the variable is a static const initialized in the class body. */;
9354 else if (! pattern_defined
9355 || (! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d) && nested)
9356 && ! at_eof))
5566b478 9357 {
67ffc812 9358 /* Defer all templates except inline functions used in another
c27be9b9
JM
9359 function. We restore the source position here because it's used
9360 by add_pending_template. */
9361 lineno = line;
9362 input_filename = file;
9363
03d0f4af
MM
9364 if (at_eof && !pattern_defined
9365 && DECL_EXPLICIT_INSTANTIATION (d))
9366 /* [temp.explicit]
9367
9368 The definition of a non-exported function template, a
9369 non-exported member function template, or a non-exported
9370 member function or static data member of a class template
9371 shall be present in every translation unit in which it is
9372 explicitly instantiated. */
8251199e 9373 cp_error ("explicit instantiation of `%D' but no definition available",
03d0f4af
MM
9374 d);
9375
5566b478 9376 add_pending_template (d);
de22184b 9377 goto out;
5566b478
MS
9378 }
9379
2b0a63a3
MM
9380 /* We're now committed to instantiating this template. Mark it as
9381 instantiated so that recursive calls to instantiate_decl do not
9382 try to instantiate it again. */
fbf1c34b 9383 DECL_TEMPLATE_INSTANTIATED (d) = 1;
120722ac 9384
2b0a63a3
MM
9385 /* Regenerate the declaration in case the template has been modified
9386 by a subsequent redeclaration. */
9387 regenerate_decl_from_template (d, td);
9388
120722ac
MM
9389 /* We already set the file and line above. Reset them now in case
9390 they changed as a result of calling regenerate_decl_from_template. */
5156628f
MS
9391 lineno = DECL_SOURCE_LINE (d);
9392 input_filename = DECL_SOURCE_FILE (d);
9393
5566b478
MS
9394 if (TREE_CODE (d) == VAR_DECL)
9395 {
9396 DECL_IN_AGGR_P (d) = 0;
9397 if (DECL_INTERFACE_KNOWN (d))
9398 DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
9399 else
9400 {
9401 DECL_EXTERNAL (d) = 1;
9402 DECL_NOT_REALLY_EXTERN (d) = 1;
9403 }
9404 cp_finish_decl (d, DECL_INITIAL (d), NULL_TREE, 0, 0);
9405 }
9406 else if (TREE_CODE (d) == FUNCTION_DECL)
9407 {
fee23f54 9408 tree t = DECL_SAVED_TREE (code_pattern);
5566b478 9409
c11b6f21 9410 start_function (NULL_TREE, d, NULL_TREE, 1);
5566b478
MS
9411 store_parm_decls ();
9412
e76a2646
MS
9413 if (t && TREE_CODE (t) == RETURN_INIT)
9414 {
9415 store_return_init
9416 (TREE_OPERAND (t, 0),
4393e105 9417 tsubst_expr (TREE_OPERAND (t, 1), args, /*complain=*/1, tmpl));
e76a2646
MS
9418 t = TREE_CHAIN (t);
9419 }
9420
5566b478
MS
9421 if (t && TREE_CODE (t) == CTOR_INITIALIZER)
9422 {
9423 current_member_init_list
9424 = tsubst_expr_values (TREE_OPERAND (t, 0), args);
9425 current_base_init_list
9426 = tsubst_expr_values (TREE_OPERAND (t, 1), args);
9427 t = TREE_CHAIN (t);
9428 }
9429
9430 setup_vtbl_ptr ();
9431 /* Always keep the BLOCK node associated with the outermost
956d6950 9432 pair of curly braces of a function. These are needed
5566b478
MS
9433 for correct operation of dwarfout.c. */
9434 keep_next_level ();
9435
9436 my_friendly_assert (TREE_CODE (t) == COMPOUND_STMT, 42);
4393e105 9437 tsubst_expr (t, args, /*complain=*/1, tmpl);
a28e3c7f 9438
5566b478 9439 finish_function (lineno, 0, nested);
5566b478
MS
9440 }
9441
de22184b 9442out:
c27be9b9
JM
9443 lineno = line;
9444 input_filename = file;
9445
5566b478 9446 pop_from_top_level ();
5566b478 9447 pop_tinst_level ();
a28e3c7f 9448
a28e3c7f
MS
9449 return d;
9450}
5566b478 9451
0aafb128
MM
9452/* Run through the list of templates that we wish we could
9453 instantiate, and instantiate any we can. */
9454
9455int
9456instantiate_pending_templates ()
9457{
9458 tree *t;
9459 int instantiated_something = 0;
9460 int reconsider;
9461
9462 do
9463 {
9464 reconsider = 0;
9465
9466 t = &pending_templates;
9467 while (*t)
9468 {
9469 tree srcloc = TREE_PURPOSE (*t);
9470 tree instantiation = TREE_VALUE (*t);
9471
9472 input_filename = SRCLOC_FILE (srcloc);
9473 lineno = SRCLOC_LINE (srcloc);
9474
9475 if (TREE_CODE_CLASS (TREE_CODE (instantiation)) == 't')
9476 {
9477 tree fn;
9478
9479 if (!TYPE_SIZE (instantiation))
9480 {
9481 instantiate_class_template (instantiation);
9482 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
9483 for (fn = TYPE_METHODS (instantiation);
9484 fn;
9485 fn = TREE_CHAIN (fn))
9486 if (! DECL_ARTIFICIAL (fn))
9487 instantiate_decl (fn);
9488 if (TYPE_SIZE (instantiation))
9489 {
9490 instantiated_something = 1;
9491 reconsider = 1;
9492 }
9493 }
9494
9495 if (TYPE_SIZE (instantiation))
9496 /* If INSTANTIATION has been instantiated, then we don't
9497 need to consider it again in the future. */
9498 *t = TREE_CHAIN (*t);
9499 else
9500 t = &TREE_CHAIN (*t);
9501 }
9502 else
9503 {
9504 if (DECL_TEMPLATE_INSTANTIATION (instantiation)
9505 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
9506 {
9507 instantiation = instantiate_decl (instantiation);
9508 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
9509 {
9510 instantiated_something = 1;
9511 reconsider = 1;
9512 }
9513 }
9514
9515 if (!DECL_TEMPLATE_INSTANTIATION (instantiation)
9516 || DECL_TEMPLATE_INSTANTIATED (instantiation))
9517 /* If INSTANTIATION has been instantiated, then we don't
9518 need to consider it again in the future. */
9519 *t = TREE_CHAIN (*t);
9520 else
9521 t = &TREE_CHAIN (*t);
9522 }
9523 }
9524 template_tail = t;
9525
9526 /* Go through the things that are template instantiations if we are
9527 using guiding declarations. */
9528 t = &maybe_templates;
9529 while (*t)
9530 {
9531 tree template;
9532 tree fn;
9533 tree args;
9534
9535 fn = TREE_VALUE (*t);
9536
9537 if (DECL_INITIAL (fn))
9538 /* If the FN is already defined, then it was either already
9539 instantiated or, even though guiding declarations were
9540 allowed, a non-template definition was provided. */
9541 ;
9542 else
9543 {
9544 template = TREE_PURPOSE (*t);
9545 args = get_bindings (template, fn, NULL_TREE);
9546 fn = instantiate_template (template, args);
9547 instantiate_decl (fn);
9548 reconsider = 1;
9549 }
9550
9551 /* Remove this entry from the chain. */
9552 *t = TREE_CHAIN (*t);
9553 }
9554 maybe_template_tail = t;
9555 }
9556 while (reconsider);
9557
9558 return instantiated_something;
9559}
9560
4393e105
MM
9561/* Substitute ARGVEC into T, which is a TREE_LIST. In particular, it
9562 is an initializer list: the TREE_PURPOSEs are DECLs, and the
9563 TREE_VALUEs are initializer values. Used by instantiate_decl. */
9564
824b9a4c 9565static tree
5566b478
MS
9566tsubst_expr_values (t, argvec)
9567 tree t, argvec;
9568{
9569 tree first = NULL_TREE;
9570 tree *p = &first;
9571
9572 for (; t; t = TREE_CHAIN (t))
9573 {
4393e105
MM
9574 tree pur = tsubst_copy (TREE_PURPOSE (t), argvec,
9575 /*complain=*/1, NULL_TREE);
9576 tree val = tsubst_expr (TREE_VALUE (t), argvec, /*complain=*/1,
9577 NULL_TREE);
5566b478
MS
9578 *p = build_tree_list (pur, val);
9579 p = &TREE_CHAIN (*p);
9580 }
9581 return first;
9582}
9583
9584tree last_tree;
9585
9586void
9587add_tree (t)
9588 tree t;
9589{
9590 last_tree = TREE_CHAIN (last_tree) = t;
9591}
73aad9b9 9592
75650646
MM
9593
9594void
9595begin_tree ()
9596{
9597 saved_trees = tree_cons (NULL_TREE, last_tree, saved_trees);
9598 last_tree = NULL_TREE;
9599}
9600
9601
9602void
9603end_tree ()
9604{
9605 my_friendly_assert (saved_trees != NULL_TREE, 0);
9606
9607 last_tree = TREE_VALUE (saved_trees);
9608 saved_trees = TREE_CHAIN (saved_trees);
9609}
9610
73aad9b9
JM
9611/* D is an undefined function declaration in the presence of templates with
9612 the same name, listed in FNS. If one of them can produce D as an
9613 instantiation, remember this so we can instantiate it at EOF if D has
9614 not been defined by that time. */
9615
9616void
9617add_maybe_template (d, fns)
9618 tree d, fns;
9619{
9620 tree t;
9621
9622 if (DECL_MAYBE_TEMPLATE (d))
9623 return;
9624
e1467ff2 9625 t = most_specialized (fns, d, NULL_TREE);
73aad9b9
JM
9626 if (! t)
9627 return;
9628 if (t == error_mark_node)
9629 {
8251199e 9630 cp_error ("ambiguous template instantiation for `%D'", d);
73aad9b9
JM
9631 return;
9632 }
9633
9634 *maybe_template_tail = perm_tree_cons (t, d, NULL_TREE);
9635 maybe_template_tail = &TREE_CHAIN (*maybe_template_tail);
9636 DECL_MAYBE_TEMPLATE (d) = 1;
9637}
b87692e5 9638
61a127b3
MM
9639/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
9640
9641static void
9642set_current_access_from_decl (decl)
9643 tree decl;
9644{
9645 if (TREE_PRIVATE (decl))
9646 current_access_specifier = access_private_node;
9647 else if (TREE_PROTECTED (decl))
9648 current_access_specifier = access_protected_node;
9649 else
9650 current_access_specifier = access_public_node;
9651}
9652
dbfe2124
MM
9653/* Instantiate an enumerated type. TAG is the template type, NEWTAG
9654 is the instantiation (which should have been created with
9655 start_enum) and ARGS are the template arguments to use. */
b87692e5 9656
dbfe2124
MM
9657static void
9658tsubst_enum (tag, newtag, args)
9659 tree tag;
9660 tree newtag;
9661 tree args;
b87692e5 9662{
dbfe2124 9663 tree e;
b87692e5
MS
9664
9665 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
9666 {
61a127b3
MM
9667 tree value;
9668 tree elt;
9669
9670 /* Note that in a template enum, the TREE_VALUE is the
9671 CONST_DECL, not the corresponding INTEGER_CST. */
9672 value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)),
4393e105
MM
9673 args, /*complain=*/1,
9674 NULL_TREE);
61a127b3
MM
9675
9676 /* Give this enumeration constant the correct access. */
9677 set_current_access_from_decl (TREE_VALUE (e));
9678
9679 /* Actually build the enumerator itself. */
9680 elt = build_enumerator (TREE_PURPOSE (e), value, newtag);
b87692e5 9681
dbfe2124
MM
9682 /* We save the enumerators we have built so far in the
9683 TYPE_VALUES so that if the enumeration constants for
9684 subsequent enumerators involve those for previous ones,
9685 tsubst_copy will be able to find them. */
9686 TREE_CHAIN (elt) = TYPE_VALUES (newtag);
9687 TYPE_VALUES (newtag) = elt;
9688 }
b3d5a58b 9689
dbfe2124 9690 finish_enum (newtag);
b87692e5 9691}
36a117a5
MM
9692
9693/* Set the DECL_ASSEMBLER_NAME for DECL, which is a FUNCTION_DECL that
9694 is either an instantiation or specialization of a template
9695 function. */
9696
9697static void
9698set_mangled_name_for_template_decl (decl)
9699 tree decl;
9700{
9701 tree saved_namespace;
b370501f 9702 tree context = NULL_TREE;
36a117a5
MM
9703 tree fn_type;
9704 tree ret_type;
9705 tree parm_types;
9706 tree tparms;
9707 tree targs;
9708 tree tmpl;
9709 int parm_depth;
9710
9711 my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL, 0);
9712 my_friendly_assert (DECL_TEMPLATE_INFO (decl) != NULL_TREE, 0);
9713
9714 /* The names of template functions must be mangled so as to indicate
9715 what template is being specialized with what template arguments.
9716 For example, each of the following three functions must get
9717 different mangled names:
9718
9719 void f(int);
9720 template <> void f<7>(int);
9721 template <> void f<8>(int); */
9722
9723 targs = DECL_TI_ARGS (decl);
9724 if (uses_template_parms (targs))
9725 /* This DECL is for a partial instantiation. There's no need to
9726 mangle the name of such an entity. */
9727 return;
9728
9729 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9730 tparms = DECL_TEMPLATE_PARMS (tmpl);
9731 parm_depth = TMPL_PARMS_DEPTH (tparms);
9732
9733 /* There should be as many levels of arguments as there are levels
9734 of parameters. */
9735 my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
9736
9737 /* We now compute the PARMS and RET_TYPE to give to
9738 build_decl_overload_real. The PARMS and RET_TYPE are the
9739 parameter and return types of the template, after all but the
9740 innermost template arguments have been substituted, not the
9741 parameter and return types of the function DECL. For example,
9742 given:
9743
9744 template <class T> T f(T);
9745
9746 both PARMS and RET_TYPE should be `T' even if DECL is `int f(int)'.
9747 A more subtle example is:
9748
9749 template <class T> struct S { template <class U> void f(T, U); }
9750
9751 Here, if DECL is `void S<int>::f(int, double)', PARMS should be
9752 {int, U}. Thus, the args that we want to subsitute into the
9753 return and parameter type for the function are those in TARGS,
9754 with the innermost level omitted. */
9755 fn_type = TREE_TYPE (tmpl);
9756 if (DECL_STATIC_FUNCTION_P (decl))
61a127b3 9757 context = DECL_CLASS_CONTEXT (decl);
36a117a5
MM
9758
9759 if (parm_depth == 1)
9760 /* No substitution is necessary. */
9761 ;
9762 else
9763 {
9764 int i;
9765 tree partial_args;
9766
9767 /* Replace the innermost level of the TARGS with NULL_TREEs to
9768 let tsubst know not to subsitute for those parameters. */
9769 partial_args = make_temp_vec (TREE_VEC_LENGTH (targs));
9770 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
9771 SET_TMPL_ARGS_LEVEL (partial_args, i,
9772 TMPL_ARGS_LEVEL (targs, i));
9773 SET_TMPL_ARGS_LEVEL (partial_args,
9774 TMPL_ARGS_DEPTH (targs),
9775 make_temp_vec (DECL_NTPARMS (tmpl)));
9776
9777 /* Now, do the (partial) substitution to figure out the
9778 appropriate function type. */
4393e105 9779 fn_type = tsubst (fn_type, partial_args, /*complain=*/1, NULL_TREE);
36a117a5 9780 if (DECL_STATIC_FUNCTION_P (decl))
4393e105 9781 context = tsubst (context, partial_args, /*complain=*/1, NULL_TREE);
36a117a5
MM
9782
9783 /* Substitute into the template parameters to obtain the real
9784 innermost set of parameters. This step is important if the
9785 innermost set of template parameters contains value
9786 parameters whose types depend on outer template parameters. */
9787 TREE_VEC_LENGTH (partial_args)--;
4393e105 9788 tparms = tsubst_template_parms (tparms, partial_args, /*complain=*/1);
36a117a5
MM
9789 }
9790
9791 /* Now, get the innermost parameters and arguments, and figure out
9792 the parameter and return types. */
9793 tparms = INNERMOST_TEMPLATE_PARMS (tparms);
9794 targs = innermost_args (targs);
9795 ret_type = TREE_TYPE (fn_type);
9796 parm_types = TYPE_ARG_TYPES (fn_type);
9797
9798 /* For a static member function, we generate a fake `this' pointer,
9799 for the purposes of mangling. This indicates of which class the
9800 function is a member. Because of:
9801
9802 [class.static]
9803
9804 There shall not be a static and a nonstatic member function
9805 with the same name and the same parameter types
9806
9807 we don't have to worry that this will result in a clash with a
9808 non-static member function. */
9809 if (DECL_STATIC_FUNCTION_P (decl))
9810 parm_types = hash_tree_chain (build_pointer_type (context), parm_types);
9811
9812 /* There should be the same number of template parameters as
9813 template arguments. */
9814 my_friendly_assert (TREE_VEC_LENGTH (tparms) == TREE_VEC_LENGTH (targs),
9815 0);
9816
9817 /* If the template is in a namespace, we need to put that into the
9818 mangled name. Unfortunately, build_decl_overload_real does not
9819 get the decl to mangle, so it relies on the current
9820 namespace. Therefore, we set that here temporarily. */
9821 my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd', 980702);
9822 saved_namespace = current_namespace;
9823 current_namespace = CP_DECL_CONTEXT (decl);
9824
9825 /* Actually set the DCL_ASSEMBLER_NAME. */
9826 DECL_ASSEMBLER_NAME (decl)
9827 = build_decl_overload_real (DECL_NAME (decl), parm_types, ret_type,
9828 tparms, targs,
9829 DECL_FUNCTION_MEMBER_P (decl)
9830 + DECL_CONSTRUCTOR_P (decl));
9831
9832 /* Restore the previously active namespace. */
9833 current_namespace = saved_namespace;
9834}