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