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