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