]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/pt.c
machmode.h (CLASS_HAS_WIDER_MODES_P): New macro.
[thirdparty/gcc.git] / gcc / cp / pt.c
CommitLineData
8d08fdba 1/* Handle parameterized types (templates) for GNU C++.
3febd123 2 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4514aa8c 3 2001, 2002, 2003, 2004, 2005 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 6
f5adbb8d 7This file is part of GCC.
8d08fdba 8
f5adbb8d 9GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
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
f5adbb8d 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
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
f5adbb8d 20along with GCC; see the file COPYING. If not, write to
1788952f
KC
21the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22Boston, MA 02110-1301, 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"
4977bab6
ZW
31#include "coretypes.h"
32#include "tm.h"
8d08fdba 33#include "obstack.h"
8d08fdba 34#include "tree.h"
0c58f841 35#include "pointer-set.h"
8d08fdba 36#include "flags.h"
e58a9aa1 37#include "c-common.h"
8d08fdba 38#include "cp-tree.h"
e58a9aa1 39#include "cp-objcp-common.h"
25af8512 40#include "tree-inline.h"
8d08fdba 41#include "decl.h"
e8abc66f 42#include "output.h"
49c249e1 43#include "except.h"
54f92bfb 44#include "toplev.h"
3dcaad8b 45#include "rtl.h"
297a5329 46#include "timevar.h"
325c3691 47#include "tree-iterator.h"
49c249e1 48
050367a3
MM
49/* The type of functions taking a tree, and some additional data, and
50 returning an int. */
3a978d72 51typedef int (*tree_fn_t) (tree, void*);
050367a3 52
0aafb128
MM
53/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54 instantiations have been deferred, either because their definitions
d78e771d
ZW
55 were not yet available, or because we were putting off doing the work.
56 The TREE_PURPOSE of each entry is either a DECL (for a function or
57 static data member), or a TYPE (for a class) indicating what we are
58 hoping to instantiate. The TREE_VALUE is not used. */
e2500fed 59static GTY(()) tree pending_templates;
13e73b29 60static GTY(()) tree last_pending_template;
73aad9b9 61
67ffc812 62int processing_template_parmlist;
386b8a85
JM
63static int template_header_count;
64
e2500fed
GK
65static GTY(()) tree saved_trees;
66static GTY(()) varray_type inline_parm_levels;
3dcaad8b 67static size_t inline_parm_levels_used;
75650646 68
e2500fed 69static GTY(()) tree current_tinst_level;
3ae18eaf 70
2b59fc25
KL
71static GTY(()) tree saved_access_scope;
72
0fe0caa6
RH
73/* Live only within one (recursive) call to tsubst_expr. We use
74 this to pass the statement expression node from the STMT_EXPR
75 to the EXPR_STMT that is its result. */
76static tree cur_stmt_expr;
77
6dfbb909
MM
78/* A map from local variable declarations in the body of the template
79 presently being instantiated to the corresponding instantiated
80 local variables. */
81static htab_t local_specializations;
82
830bfa74
MM
83#define UNIFY_ALLOW_NONE 0
84#define UNIFY_ALLOW_MORE_CV_QUAL 1
85#define UNIFY_ALLOW_LESS_CV_QUAL 2
86#define UNIFY_ALLOW_DERIVED 4
161c12b0 87#define UNIFY_ALLOW_INTEGER 8
028d1f20 88#define UNIFY_ALLOW_OUTER_LEVEL 16
62e4a758
NS
89#define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
90#define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
830bfa74 91
3a978d72
NN
92static void push_access_scope (tree);
93static void pop_access_scope (tree);
94static int resolve_overloaded_unification (tree, tree, tree, tree,
95 unification_kind_t, int);
96static int try_one_overload (tree, tree, tree, tree, tree,
f23fb7f5 97 unification_kind_t, int, bool);
3a978d72
NN
98static int unify (tree, tree, tree, tree, int);
99static void add_pending_template (tree);
100static void reopen_tinst_level (tree);
101static tree classtype_mangled_name (tree);
102static char* mangle_class_name_for_template (const char *, tree, tree);
103static tree tsubst_initializer_list (tree, tree);
3a978d72
NN
104static tree get_class_bindings (tree, tree, tree);
105static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
106static void tsubst_enum (tree, tree, tree);
107static tree add_to_template_args (tree, tree);
108static tree add_outermost_template_args (tree, tree);
109static bool check_instantiated_args (tree, tree, tsubst_flags_t);
c8094d83 110static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*);
3a978d72 111static int type_unification_real (tree, tree, tree, tree,
30f86ec3 112 int, unification_kind_t, int);
3a978d72 113static void note_template_header (int);
b6ab6892 114static tree convert_nontype_argument_function (tree, tree);
3a978d72
NN
115static tree convert_nontype_argument (tree, tree);
116static tree convert_template_argument (tree, tree, tree,
117 tsubst_flags_t, int, tree);
0c58f841
MA
118static int for_each_template_parm (tree, tree_fn_t, void*,
119 struct pointer_set_t*);
3a978d72
NN
120static tree build_template_parm_index (int, int, int, tree, tree);
121static int inline_needs_template_parms (tree);
122static void push_inline_template_parms_recursive (tree, int);
3a978d72 123static tree retrieve_local_specialization (tree);
3a978d72 124static void register_local_specialization (tree, tree);
3a978d72 125static tree reduce_template_parm_level (tree, tree, int);
3a978d72
NN
126static int mark_template_parm (tree, void *);
127static int template_parm_this_level_p (tree, void *);
128static tree tsubst_friend_function (tree, tree);
129static tree tsubst_friend_class (tree, tree);
130static int can_complete_type_without_circularity (tree);
a34d3336 131static tree get_bindings (tree, tree, tree, bool);
3a978d72
NN
132static int template_decl_level (tree);
133static int check_cv_quals_for_unify (int, tree, tree);
a91db711
NS
134static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
135static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
3a978d72
NN
136static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
137static void regenerate_decl_from_template (tree, tree);
138static tree most_specialized (tree, tree, tree);
139static tree most_specialized_class (tree, tree);
140static int template_class_depth_real (tree, int);
141static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
3a978d72
NN
142static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
143static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
144static void check_specialization_scope (void);
145static tree process_partial_specialization (tree);
146static void set_current_access_from_decl (tree);
147static void check_default_tmpl_args (tree, tree, int, int);
148static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
3a978d72
NN
149static tree get_template_base (tree, tree, tree, tree);
150static int verify_class_unification (tree, tree, tree);
151static tree try_class_unification (tree, tree, tree, tree);
152static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
153 tree, tree);
5fe7b654 154static tree determine_specialization (tree, tree, tree *, int, int);
3a978d72
NN
155static int template_args_equal (tree, tree);
156static void tsubst_default_arguments (tree);
157static tree for_each_template_parm_r (tree *, int *, void *);
158static tree copy_default_args_to_explicit_spec_1 (tree, tree);
159static void copy_default_args_to_explicit_spec (tree);
160static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
a723baf1 161static int eq_local_specializations (const void *, const void *);
5552b43c 162static bool dependent_type_p_r (tree);
14d22dd6
MM
163static tree tsubst (tree, tree, tsubst_flags_t, tree);
164static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
165static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
36a117a5 166
2b59fc25
KL
167/* Make the current scope suitable for access checking when we are
168 processing T. T can be FUNCTION_DECL for instantiated function
2b907f5c
KL
169 template, or VAR_DECL for static member variable (need by
170 instantiate_decl). */
2b59fc25 171
8ce33230 172static void
2b907f5c 173push_access_scope (tree t)
2b59fc25 174{
50bc768d
NS
175 gcc_assert (TREE_CODE (t) == FUNCTION_DECL
176 || TREE_CODE (t) == VAR_DECL);
2b59fc25 177
23ff7e2d
KL
178 if (DECL_FRIEND_CONTEXT (t))
179 push_nested_class (DECL_FRIEND_CONTEXT (t));
180 else if (DECL_CLASS_SCOPE_P (t))
2b907f5c 181 push_nested_class (DECL_CONTEXT (t));
0f399e5f
KL
182 else
183 push_to_top_level ();
c8094d83 184
2b907f5c 185 if (TREE_CODE (t) == FUNCTION_DECL)
0f399e5f
KL
186 {
187 saved_access_scope = tree_cons
188 (NULL_TREE, current_function_decl, saved_access_scope);
189 current_function_decl = t;
190 }
2b59fc25
KL
191}
192
2b59fc25
KL
193/* Restore the scope set up by push_access_scope. T is the node we
194 are processing. */
195
8ce33230 196static void
3a978d72 197pop_access_scope (tree t)
2b59fc25 198{
2b907f5c 199 if (TREE_CODE (t) == FUNCTION_DECL)
2b59fc25
KL
200 {
201 current_function_decl = TREE_VALUE (saved_access_scope);
202 saved_access_scope = TREE_CHAIN (saved_access_scope);
203 }
0f399e5f 204
23ff7e2d 205 if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
0f399e5f
KL
206 pop_nested_class ();
207 else
208 pop_from_top_level ();
2b59fc25
KL
209}
210
a723baf1
MM
211/* Do any processing required when DECL (a member template
212 declaration) is finished. Returns the TEMPLATE_DECL corresponding
213 to DECL, unless it is a specialization, in which case the DECL
214 itself is returned. */
e1467ff2
MM
215
216tree
3a978d72 217finish_member_template_decl (tree decl)
e1467ff2 218{
a723baf1
MM
219 if (decl == error_mark_node)
220 return error_mark_node;
221
50bc768d 222 gcc_assert (DECL_P (decl));
a723baf1
MM
223
224 if (TREE_CODE (decl) == TYPE_DECL)
93cdc044 225 {
a723baf1
MM
226 tree type;
227
228 type = TREE_TYPE (decl);
c8094d83 229 if (IS_AGGR_TYPE (type)
a723baf1
MM
230 && CLASSTYPE_TEMPLATE_INFO (type)
231 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
93cdc044 232 {
a723baf1 233 tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
93cdc044
JM
234 check_member_template (tmpl);
235 return tmpl;
236 }
8d019cef 237 return NULL_TREE;
93cdc044 238 }
07c88314 239 else if (TREE_CODE (decl) == FIELD_DECL)
0f51ccfc 240 error ("data member %qD cannot be a member template", decl);
a1da6cba 241 else if (DECL_TEMPLATE_INFO (decl))
e1467ff2 242 {
a1da6cba
MM
243 if (!DECL_TEMPLATE_SPECIALIZATION (decl))
244 {
245 check_member_template (DECL_TI_TEMPLATE (decl));
246 return DECL_TI_TEMPLATE (decl);
247 }
248 else
249 return decl;
c8094d83 250 }
a1da6cba 251 else
0f51ccfc 252 error ("invalid member template declaration %qD", decl);
e1467ff2 253
a1da6cba 254 return error_mark_node;
f84b4be9 255}
e1467ff2 256
f84b4be9 257/* Returns the template nesting level of the indicated class TYPE.
c8094d83 258
f84b4be9
JM
259 For example, in:
260 template <class T>
261 struct A
262 {
263 template <class U>
264 struct B {};
265 };
266
c8094d83 267 A<T>::B<U> has depth two, while A<T> has depth one.
39c01e4c
MM
268 Both A<T>::B<int> and A<int>::B<U> have depth one, if
269 COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
c8094d83 270 specializations.
39c01e4c
MM
271
272 This function is guaranteed to return 0 if passed NULL_TREE so
273 that, for example, `template_class_depth (current_class_type)' is
274 always safe. */
f84b4be9 275
c8094d83 276static int
3a978d72 277template_class_depth_real (tree type, int count_specializations)
f84b4be9 278{
93cdc044 279 int depth;
f84b4be9 280
c8094d83 281 for (depth = 0;
ed44da02 282 type && TREE_CODE (type) != NAMESPACE_DECL;
c8094d83 283 type = (TREE_CODE (type) == FUNCTION_DECL)
4f1c5b7d 284 ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
ed44da02
MM
285 {
286 if (TREE_CODE (type) != FUNCTION_DECL)
287 {
288 if (CLASSTYPE_TEMPLATE_INFO (type)
289 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
290 && ((count_specializations
370af2d5 291 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
ed44da02
MM
292 || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
293 ++depth;
294 }
c8094d83 295 else
ed44da02
MM
296 {
297 if (DECL_TEMPLATE_INFO (type)
298 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
299 && ((count_specializations
300 && DECL_TEMPLATE_SPECIALIZATION (type))
301 || uses_template_parms (DECL_TI_ARGS (type))))
302 ++depth;
303 }
304 }
f84b4be9
JM
305
306 return depth;
e1467ff2 307}
98c1c668 308
39c01e4c
MM
309/* Returns the template nesting level of the indicated class TYPE.
310 Like template_class_depth_real, but instantiations do not count in
311 the depth. */
312
c8094d83 313int
3a978d72 314template_class_depth (tree type)
39c01e4c
MM
315{
316 return template_class_depth_real (type, /*count_specializations=*/0);
317}
318
cae40af6
JM
319/* Returns 1 if processing DECL as part of do_pending_inlines
320 needs us to push template parms. */
321
322static int
3a978d72 323inline_needs_template_parms (tree decl)
cae40af6
JM
324{
325 if (! DECL_TEMPLATE_INFO (decl))
326 return 0;
f84b4be9 327
36a117a5 328 return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
cae40af6
JM
329 > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
330}
331
332/* Subroutine of maybe_begin_member_template_processing.
333 Push the template parms in PARMS, starting from LEVELS steps into the
334 chain, and ending at the beginning, since template parms are listed
335 innermost first. */
336
337static void
3a978d72 338push_inline_template_parms_recursive (tree parmlist, int levels)
cae40af6
JM
339{
340 tree parms = TREE_VALUE (parmlist);
341 int i;
342
343 if (levels > 1)
344 push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
786b5245 345
98c1c668 346 ++processing_template_decl;
cae40af6 347 current_template_parms
4890c2f4 348 = tree_cons (size_int (processing_template_decl),
98c1c668 349 parms, current_template_parms);
cae40af6
JM
350 TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
351
ac20c67a 352 begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
0cbd7506 353 NULL);
c8094d83 354 for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
98c1c668 355 {
786b5245 356 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
50bc768d 357 gcc_assert (DECL_P (parm));
cae40af6 358
98c1c668
JM
359 switch (TREE_CODE (parm))
360 {
786b5245 361 case TYPE_DECL:
73b0fce8 362 case TEMPLATE_DECL:
98c1c668
JM
363 pushdecl (parm);
364 break;
786b5245
MM
365
366 case PARM_DECL:
367 {
fc03edb3
MM
368 /* Make a CONST_DECL as is done in process_template_parm.
369 It is ugly that we recreate this here; the original
370 version built in process_template_parm is no longer
371 available. */
786b5245
MM
372 tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
373 TREE_TYPE (parm));
c727aa5e 374 DECL_ARTIFICIAL (decl) = 1;
6de9cd9a
DN
375 TREE_CONSTANT (decl) = 1;
376 TREE_INVARIANT (decl) = 1;
377 TREE_READONLY (decl) = 1;
786b5245 378 DECL_INITIAL (decl) = DECL_INITIAL (parm);
cd9f6678 379 SET_DECL_TEMPLATE_PARM_P (decl);
786b5245
MM
380 pushdecl (decl);
381 }
cae40af6 382 break;
786b5245 383
98c1c668 384 default:
315fb5db 385 gcc_unreachable ();
98c1c668
JM
386 }
387 }
388}
389
cae40af6
JM
390/* Restore the template parameter context for a member template or
391 a friend template defined in a class definition. */
392
393void
3a978d72 394maybe_begin_member_template_processing (tree decl)
cae40af6
JM
395{
396 tree parms;
3dcaad8b 397 int levels = 0;
cae40af6 398
3dcaad8b
MM
399 if (inline_needs_template_parms (decl))
400 {
401 parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
402 levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
cae40af6 403
3dcaad8b
MM
404 if (DECL_TEMPLATE_SPECIALIZATION (decl))
405 {
406 --levels;
407 parms = TREE_CHAIN (parms);
408 }
cae40af6 409
3dcaad8b 410 push_inline_template_parms_recursive (parms, levels);
cae40af6
JM
411 }
412
3dcaad8b
MM
413 /* Remember how many levels of template parameters we pushed so that
414 we can pop them later. */
415 if (!inline_parm_levels)
416 VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
417 if (inline_parm_levels_used == inline_parm_levels->num_elements)
418 VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
419 VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
420 ++inline_parm_levels_used;
cae40af6
JM
421}
422
1875c2b7 423/* Undo the effects of maybe_begin_member_template_processing. */
98c1c668 424
c8094d83 425void
3a978d72 426maybe_end_member_template_processing (void)
98c1c668 427{
3dcaad8b
MM
428 int i;
429
430 if (!inline_parm_levels_used)
98c1c668
JM
431 return;
432
3dcaad8b 433 --inline_parm_levels_used;
c8094d83 434 for (i = 0;
3dcaad8b 435 i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
c8094d83 436 ++i)
cae40af6
JM
437 {
438 --processing_template_decl;
439 current_template_parms = TREE_CHAIN (current_template_parms);
440 poplevel (0, 0, 0);
441 }
98c1c668
JM
442}
443
36a117a5 444/* Return a new template argument vector which contains all of ARGS,
f9a7ae04 445 but has as its innermost set of arguments the EXTRA_ARGS. */
e6f1275f
JM
446
447static tree
3a978d72 448add_to_template_args (tree args, tree extra_args)
e6f1275f 449{
36a117a5
MM
450 tree new_args;
451 int extra_depth;
452 int i;
453 int j;
e6f1275f 454
36a117a5 455 extra_depth = TMPL_ARGS_DEPTH (extra_args);
f31c0a32 456 new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
e6f1275f 457
36a117a5
MM
458 for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
459 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
e6f1275f 460
36a117a5
MM
461 for (j = 1; j <= extra_depth; ++j, ++i)
462 SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
c8094d83 463
e6f1275f
JM
464 return new_args;
465}
466
36a117a5
MM
467/* Like add_to_template_args, but only the outermost ARGS are added to
468 the EXTRA_ARGS. In particular, all but TMPL_ARGS_DEPTH
469 (EXTRA_ARGS) levels are added. This function is used to combine
470 the template arguments from a partial instantiation with the
471 template arguments used to attain the full instantiation from the
472 partial instantiation. */
98c1c668 473
4966381a 474static tree
3a978d72 475add_outermost_template_args (tree args, tree extra_args)
98c1c668
JM
476{
477 tree new_args;
478
e4a84209
MM
479 /* If there are more levels of EXTRA_ARGS than there are ARGS,
480 something very fishy is going on. */
50bc768d 481 gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
e4a84209
MM
482
483 /* If *all* the new arguments will be the EXTRA_ARGS, just return
484 them. */
485 if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
486 return extra_args;
487
36a117a5
MM
488 /* For the moment, we make ARGS look like it contains fewer levels. */
489 TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
c8094d83 490
36a117a5 491 new_args = add_to_template_args (args, extra_args);
98c1c668 492
36a117a5
MM
493 /* Now, we restore ARGS to its full dimensions. */
494 TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
98c1c668
JM
495
496 return new_args;
497}
5566b478 498
f9a7ae04
MM
499/* Return the N levels of innermost template arguments from the ARGS. */
500
501tree
3a978d72 502get_innermost_template_args (tree args, int n)
f9a7ae04
MM
503{
504 tree new_args;
505 int extra_levels;
506 int i;
507
50bc768d 508 gcc_assert (n >= 0);
f9a7ae04
MM
509
510 /* If N is 1, just return the innermost set of template arguments. */
511 if (n == 1)
512 return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
c8094d83 513
f9a7ae04
MM
514 /* If we're not removing anything, just return the arguments we were
515 given. */
516 extra_levels = TMPL_ARGS_DEPTH (args) - n;
50bc768d 517 gcc_assert (extra_levels >= 0);
f9a7ae04
MM
518 if (extra_levels == 0)
519 return args;
520
521 /* Make a new set of arguments, not containing the outer arguments. */
522 new_args = make_tree_vec (n);
523 for (i = 1; i <= n; ++i)
c8094d83 524 SET_TMPL_ARGS_LEVEL (new_args, i,
f9a7ae04
MM
525 TMPL_ARGS_LEVEL (args, i + extra_levels));
526
527 return new_args;
528}
529
5566b478
MS
530/* We've got a template header coming up; push to a new level for storing
531 the parms. */
8d08fdba 532
8d08fdba 533void
3a978d72 534begin_template_parm_list (void)
8d08fdba 535{
6757edfe
MM
536 /* We use a non-tag-transparent scope here, which causes pushtag to
537 put tags in this scope, rather than in the enclosing class or
538 namespace scope. This is the right thing, since we want
539 TEMPLATE_DECLS, and not TYPE_DECLS for template classes. For a
540 global template class, push_template_decl handles putting the
541 TEMPLATE_DECL into top-level scope. For a nested template class,
542 e.g.:
543
544 template <class T> struct S1 {
0cbd7506 545 template <class T> struct S2 {};
6757edfe
MM
546 };
547
548 pushtag contains special code to call pushdecl_with_scope on the
549 TEMPLATE_DECL for S2. */
ac20c67a 550 begin_scope (sk_template_parms, NULL);
5156628f 551 ++processing_template_decl;
67ffc812 552 ++processing_template_parmlist;
386b8a85
JM
553 note_template_header (0);
554}
555
6c30752f 556/* This routine is called when a specialization is declared. If it is
0e339752 557 invalid to declare a specialization here, an error is reported. */
6c30752f 558
e9659ab0 559static void
3a978d72 560check_specialization_scope (void)
6c30752f
MM
561{
562 tree scope = current_scope ();
3ddfb0e6 563
c8094d83
MS
564 /* [temp.expl.spec]
565
6c30752f
MM
566 An explicit specialization shall be declared in the namespace of
567 which the template is a member, or, for member templates, in the
568 namespace of which the enclosing class or enclosing class
569 template is a member. An explicit specialization of a member
570 function, member class or static data member of a class template
571 shall be declared in the namespace of which the class template
572 is a member. */
573 if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
0f51ccfc 574 error ("explicit specialization in non-namespace scope %qD", scope);
3ddfb0e6 575
c8094d83 576 /* [temp.expl.spec]
6c30752f
MM
577
578 In an explicit specialization declaration for a member of a class
579 template or a member template that appears in namespace scope,
580 the member template and some of its enclosing class templates may
581 remain unspecialized, except that the declaration shall not
582 explicitly specialize a class member template if its enclosing
583 class templates are not explicitly specialized as well. */
c8094d83 584 if (current_template_parms)
33bd39a2 585 error ("enclosing class templates are not explicitly specialized");
6c30752f
MM
586}
587
c6002625 588/* We've just seen template <>. */
386b8a85
JM
589
590void
3a978d72 591begin_specialization (void)
386b8a85 592{
ac20c67a 593 begin_scope (sk_template_spec, NULL);
386b8a85 594 note_template_header (1);
6c30752f 595 check_specialization_scope ();
386b8a85
JM
596}
597
dc957d14 598/* Called at then end of processing a declaration preceded by
386b8a85
JM
599 template<>. */
600
c8094d83 601void
3a978d72 602end_specialization (void)
386b8a85 603{
74b846e0 604 finish_scope ();
386b8a85
JM
605 reset_specialization ();
606}
607
386b8a85 608/* Any template <>'s that we have seen thus far are not referring to a
c6002625 609 function specialization. */
386b8a85
JM
610
611void
3a978d72 612reset_specialization (void)
386b8a85
JM
613{
614 processing_specialization = 0;
615 template_header_count = 0;
616}
617
838dfd8a 618/* We've just seen a template header. If SPECIALIZATION is nonzero,
386b8a85
JM
619 it was of the form template <>. */
620
c8094d83 621static void
3a978d72 622note_template_header (int specialization)
386b8a85
JM
623{
624 processing_specialization = specialization;
625 template_header_count++;
626}
627
75650646 628/* We're beginning an explicit instantiation. */
386b8a85 629
75650646 630void
3a978d72 631begin_explicit_instantiation (void)
386b8a85 632{
50bc768d 633 gcc_assert (!processing_explicit_instantiation);
a723baf1 634 processing_explicit_instantiation = true;
75650646 635}
386b8a85 636
386b8a85 637
75650646 638void
3a978d72 639end_explicit_instantiation (void)
75650646 640{
50bc768d 641 gcc_assert (processing_explicit_instantiation);
a723baf1 642 processing_explicit_instantiation = false;
75650646 643}
386b8a85 644
13a44ee0 645/* An explicit specialization or partial specialization TMPL is being
b1cc95ce
MM
646 declared. Check that the namespace in which the specialization is
647 occurring is permissible. Returns false iff it is invalid to
648 specialize TMPL in the current namespace. */
c8094d83 649
b1cc95ce
MM
650static bool
651check_specialization_namespace (tree tmpl)
652{
653 tree tpl_ns = decl_namespace_context (tmpl);
654
655 /* [tmpl.expl.spec]
c8094d83 656
b1cc95ce
MM
657 An explicit specialization shall be declared in the namespace of
658 which the template is a member, or, for member templates, in the
659 namespace of which the enclosing class or enclosing class
660 template is a member. An explicit specialization of a member
661 function, member class or static data member of a class template
662 shall be declared in the namespace of which the class template is
663 a member. */
664 if (is_associated_namespace (current_namespace, tpl_ns))
665 /* Same or super-using namespace. */
666 return true;
667 else
668 {
0f51ccfc 669 pedwarn ("specialization of %qD in different namespace", tmpl);
dee15844 670 pedwarn (" from definition of %q+#D", tmpl);
b1cc95ce
MM
671 return false;
672 }
673}
674
9c12301f
MM
675/* SPEC is an explicit instantiation. Check that it is valid to
676 perform this explicit instantiation in the current namespace. */
677
678static void
679check_explicit_instantiation_namespace (tree spec)
680{
681 tree ns;
682
683 /* DR 275: An explicit instantiation shall appear in an enclosing
684 namespace of its template. */
685 ns = decl_namespace_context (spec);
686 if (!is_ancestor (current_namespace, ns))
687 pedwarn ("explicit instantiation of %qD in namespace %qD "
312ea236 688 "(which does not enclose namespace %qD)",
9c12301f
MM
689 spec, current_namespace, ns);
690}
691
36a117a5
MM
692/* The TYPE is being declared. If it is a template type, that means it
693 is a partial specialization. Do appropriate error-checking. */
694
c8094d83 695void
3a978d72 696maybe_process_partial_specialization (tree type)
36a117a5 697{
6e049fcd
KL
698 /* TYPE maybe an ERROR_MARK_NODE. */
699 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
700
a723baf1 701 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
36a117a5 702 {
6e049fcd
KL
703 /* This is for ordinary explicit specialization and partial
704 specialization of a template class such as:
705
706 template <> class C<int>;
707
708 or:
709
710 template <class T> class C<T*>;
711
712 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
713
36a117a5 714 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
d0f062fb 715 && !COMPLETE_TYPE_P (type))
36a117a5 716 {
b1cc95ce 717 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
370af2d5 718 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
36a117a5
MM
719 if (processing_template_decl)
720 push_template_decl (TYPE_MAIN_DECL (type));
721 }
722 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
0f51ccfc 723 error ("specialization of %qT after instantiation", type);
36a117a5 724 }
6e049fcd
KL
725 else if (CLASS_TYPE_P (type)
726 && !CLASSTYPE_USE_TEMPLATE (type)
727 && CLASSTYPE_TEMPLATE_INFO (type)
728 && context && CLASS_TYPE_P (context)
729 && CLASSTYPE_TEMPLATE_INFO (context))
730 {
731 /* This is for an explicit specialization of member class
732 template according to [temp.expl.spec/18]:
733
734 template <> template <class U> class C<int>::D;
735
736 The context `C<int>' must be an implicit instantiation.
737 Otherwise this is just a member class template declared
738 earlier like:
739
740 template <> class C<int> { template <class U> class D; };
741 template <> template <class U> class C<int>::D;
742
743 In the first case, `C<int>::D' is a specialization of `C<T>::D'
744 while in the second case, `C<int>::D' is a primary template
745 and `C<T>::D' may not exist. */
746
747 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
748 && !COMPLETE_TYPE_P (type))
749 {
750 tree t;
751
752 if (current_namespace
753 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
754 {
0f51ccfc 755 pedwarn ("specializing %q#T in different namespace", type);
dee15844
JM
756 pedwarn (" from definition of %q+#D",
757 CLASSTYPE_TI_TEMPLATE (type));
6e049fcd
KL
758 }
759
760 /* Check for invalid specialization after instantiation:
761
762 template <> template <> class C<int>::D<int>;
763 template <> template <class U> class C<int>::D; */
764
765 for (t = DECL_TEMPLATE_INSTANTIATIONS
766 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
767 t; t = TREE_CHAIN (t))
768 if (TREE_VALUE (t) != type
769 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
0f51ccfc 770 error ("specialization %qT after instantiation %qT",
6e049fcd
KL
771 type, TREE_VALUE (t));
772
773 /* Mark TYPE as a specialization. And as a result, we only
774 have one level of template argument for the innermost
775 class template. */
776 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
777 CLASSTYPE_TI_ARGS (type)
778 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
779 }
780 }
20496fa2 781 else if (processing_specialization)
0f51ccfc 782 error ("explicit specialization of non-template %qT", type);
36a117a5
MM
783}
784
ee81147e 785/* Returns nonzero if we can optimize the retrieval of specializations
c7222c02
MM
786 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
787 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
788
c8094d83 789static inline bool
c7222c02
MM
790optimize_specialization_lookup_p (tree tmpl)
791{
792 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
793 && DECL_CLASS_SCOPE_P (tmpl)
794 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
795 parameter. */
796 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1ca939e5
MM
797 /* The optimized lookup depends on the fact that the
798 template arguments for the member function template apply
799 purely to the containing class, which is not true if the
800 containing class is an explicit or partial
801 specialization. */
802 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
c7222c02
MM
803 && !DECL_MEMBER_TEMPLATE_P (tmpl)
804 && !DECL_CONV_FN_P (tmpl)
805 /* It is possible to have a template that is not a member
806 template and is not a member of a template class:
c8094d83
MS
807
808 template <typename T>
c7222c02 809 struct S { friend A::f(); };
c8094d83 810
c7222c02
MM
811 Here, the friend function is a template, but the context does
812 not have template information. The optimized lookup relies
813 on having ARGS be the template arguments for both the class
814 and the function template. */
815 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
816}
817
75650646
MM
818/* Retrieve the specialization (in the sense of [temp.spec] - a
819 specialization is either an instantiation or an explicit
820 specialization) of TMPL for the given template ARGS. If there is
821 no such specialization, return NULL_TREE. The ARGS are a vector of
822 arguments, or a vector of vectors of arguments, in the case of
c8094d83 823 templates with more than one level of parameters.
c7222c02
MM
824
825 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
826 then we search for a partial specialization matching ARGS. This
827 parameter is ignored if TMPL is not a class template. */
c8094d83 828
75650646 829static tree
c8094d83 830retrieve_specialization (tree tmpl, tree args,
c7222c02 831 bool class_specializations_p)
75650646 832{
50bc768d 833 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
75650646 834
36a117a5
MM
835 /* There should be as many levels of arguments as there are
836 levels of parameters. */
c8094d83 837 gcc_assert (TMPL_ARGS_DEPTH (args)
50bc768d 838 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
c8094d83 839
c7222c02
MM
840 if (optimize_specialization_lookup_p (tmpl))
841 {
842 tree class_template;
843 tree class_specialization;
d4e6fecb 844 VEC(tree,gc) *methods;
c7222c02
MM
845 tree fns;
846 int idx;
847
848 /* The template arguments actually apply to the containing
849 class. Find the class specialization with those
850 arguments. */
851 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
c8094d83 852 class_specialization
c7222c02
MM
853 = retrieve_specialization (class_template, args,
854 /*class_specializations_p=*/false);
855 if (!class_specialization)
856 return NULL_TREE;
857 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
858 for the specialization. */
859 idx = class_method_index_for_fn (class_specialization, tmpl);
860 if (idx == -1)
861 return NULL_TREE;
862 /* Iterate through the methods with the indicated name, looking
863 for the one that has an instance of TMPL. */
864 methods = CLASSTYPE_METHOD_VEC (class_specialization);
865 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
866 {
867 tree fn = OVL_CURRENT (fns);
868 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
869 return fn;
870 }
871 return NULL_TREE;
872 }
873 else
874 {
875 tree *sp;
876 tree *head;
877
878 /* Class templates store their instantiations on the
879 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
880 DECL_TEMPLATE_SPECIALIZATIONS list. */
881 if (!class_specializations_p
882 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
883 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
884 else
885 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
886 head = sp;
887 /* Iterate through the list until we find a matching template. */
888 while (*sp != NULL_TREE)
889 {
890 tree spec = *sp;
c8094d83 891
c7222c02
MM
892 if (comp_template_args (TREE_PURPOSE (spec), args))
893 {
894 /* Use the move-to-front heuristic to speed up future
c8094d83 895 searches. */
c7222c02
MM
896 if (spec != *head)
897 {
898 *sp = TREE_CHAIN (*sp);
899 TREE_CHAIN (spec) = *head;
900 *head = spec;
901 }
902 return TREE_VALUE (spec);
903 }
904 sp = &TREE_CHAIN (spec);
905 }
906 }
75650646
MM
907
908 return NULL_TREE;
386b8a85
JM
909}
910
dc957d14 911/* Like retrieve_specialization, but for local declarations. */
9188c363
MM
912
913static tree
3a978d72 914retrieve_local_specialization (tree tmpl)
9188c363 915{
c68b0a84
KG
916 tree spec = htab_find_with_hash (local_specializations, tmpl,
917 htab_hash_pointer (tmpl));
a723baf1 918 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
9188c363
MM
919}
920
838dfd8a 921/* Returns nonzero iff DECL is a specialization of TMPL. */
6757edfe
MM
922
923int
3a978d72 924is_specialization_of (tree decl, tree tmpl)
6757edfe
MM
925{
926 tree t;
927
928 if (TREE_CODE (decl) == FUNCTION_DECL)
929 {
c8094d83 930 for (t = decl;
6757edfe
MM
931 t != NULL_TREE;
932 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
933 if (t == tmpl)
934 return 1;
935 }
c8094d83 936 else
6757edfe 937 {
50bc768d 938 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
6757edfe
MM
939
940 for (t = TREE_TYPE (decl);
941 t != NULL_TREE;
942 t = CLASSTYPE_USE_TEMPLATE (t)
943 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
9edc3913 944 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
6757edfe 945 return 1;
c8094d83 946 }
386b8a85 947
6757edfe
MM
948 return 0;
949}
75650646 950
d43f603d
KL
951/* Returns nonzero iff DECL is a specialization of friend declaration
952 FRIEND according to [temp.friend]. */
953
954bool
955is_specialization_of_friend (tree decl, tree friend)
956{
957 bool need_template = true;
958 int template_depth;
959
b939a023
KL
960 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
961 || TREE_CODE (decl) == TYPE_DECL);
d43f603d
KL
962
963 /* For [temp.friend/6] when FRIEND is an ordinary member function
964 of a template class, we want to check if DECL is a specialization
965 if this. */
966 if (TREE_CODE (friend) == FUNCTION_DECL
967 && DECL_TEMPLATE_INFO (friend)
968 && !DECL_USE_TEMPLATE (friend))
969 {
b939a023 970 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
d43f603d
KL
971 friend = DECL_TI_TEMPLATE (friend);
972 need_template = false;
973 }
b939a023
KL
974 else if (TREE_CODE (friend) == TEMPLATE_DECL
975 && !PRIMARY_TEMPLATE_P (friend))
976 need_template = false;
d43f603d
KL
977
978 /* There is nothing to do if this is not a template friend. */
979 if (TREE_CODE (friend) != TEMPLATE_DECL)
b939a023 980 return false;
d43f603d
KL
981
982 if (is_specialization_of (decl, friend))
b939a023 983 return true;
d43f603d
KL
984
985 /* [temp.friend/6]
986 A member of a class template may be declared to be a friend of a
987 non-template class. In this case, the corresponding member of
988 every specialization of the class template is a friend of the
989 class granting friendship.
c8094d83 990
d43f603d
KL
991 For example, given a template friend declaration
992
993 template <class T> friend void A<T>::f();
994
995 the member function below is considered a friend
996
997 template <> struct A<int> {
998 void f();
999 };
1000
1001 For this type of template friend, TEMPLATE_DEPTH below will be
5c425df5 1002 nonzero. To determine if DECL is a friend of FRIEND, we first
d43f603d
KL
1003 check if the enclosing class is a specialization of another. */
1004
1005 template_depth = template_class_depth (DECL_CONTEXT (friend));
1006 if (template_depth
1007 && DECL_CLASS_SCOPE_P (decl)
c8094d83 1008 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
d43f603d
KL
1009 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1010 {
1011 /* Next, we check the members themselves. In order to handle
b939a023 1012 a few tricky cases, such as when FRIEND's are
d43f603d
KL
1013
1014 template <class T> friend void A<T>::g(T t);
1015 template <class T> template <T t> friend void A<T>::h();
1016
b939a023
KL
1017 and DECL's are
1018
1019 void A<int>::g(int);
1020 template <int> void A<int>::h();
1021
1022 we need to figure out ARGS, the template arguments from
1023 the context of DECL. This is required for template substitution
1024 of `T' in the function parameter of `g' and template parameter
1025 of `h' in the above examples. Here ARGS corresponds to `int'. */
d43f603d
KL
1026
1027 tree context = DECL_CONTEXT (decl);
1028 tree args = NULL_TREE;
1029 int current_depth = 0;
b939a023 1030
d43f603d
KL
1031 while (current_depth < template_depth)
1032 {
1033 if (CLASSTYPE_TEMPLATE_INFO (context))
1034 {
1035 if (current_depth == 0)
1036 args = TYPE_TI_ARGS (context);
1037 else
1038 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1039 current_depth++;
1040 }
1041 context = TYPE_CONTEXT (context);
1042 }
1043
1044 if (TREE_CODE (decl) == FUNCTION_DECL)
1045 {
1046 bool is_template;
1047 tree friend_type;
1048 tree decl_type;
1049 tree friend_args_type;
1050 tree decl_args_type;
1051
1052 /* Make sure that both DECL and FRIEND are templates or
1053 non-templates. */
1054 is_template = DECL_TEMPLATE_INFO (decl)
1055 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1056 if (need_template ^ is_template)
b939a023 1057 return false;
d43f603d
KL
1058 else if (is_template)
1059 {
da1d7781 1060 /* If both are templates, check template parameter list. */
d43f603d
KL
1061 tree friend_parms
1062 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1063 args, tf_none);
1064 if (!comp_template_parms
1065 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1066 friend_parms))
b939a023 1067 return false;
d43f603d
KL
1068
1069 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1070 }
1071 else
1072 decl_type = TREE_TYPE (decl);
1073
1074 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1075 tf_none, NULL_TREE);
1076 if (friend_type == error_mark_node)
b939a023 1077 return false;
d43f603d
KL
1078
1079 /* Check if return types match. */
1080 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
b939a023 1081 return false;
d43f603d
KL
1082
1083 /* Check if function parameter types match, ignoring the
1084 `this' parameter. */
1085 friend_args_type = TYPE_ARG_TYPES (friend_type);
1086 decl_args_type = TYPE_ARG_TYPES (decl_type);
1087 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1088 friend_args_type = TREE_CHAIN (friend_args_type);
1089 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1090 decl_args_type = TREE_CHAIN (decl_args_type);
b939a023
KL
1091
1092 return compparms (decl_args_type, friend_args_type);
1093 }
1094 else
1095 {
1096 /* DECL is a TYPE_DECL */
1097 bool is_template;
1098 tree decl_type = TREE_TYPE (decl);
1099
1100 /* Make sure that both DECL and FRIEND are templates or
1101 non-templates. */
1102 is_template
1103 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1104 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1105
1106 if (need_template ^ is_template)
1107 return false;
1108 else if (is_template)
1109 {
1110 tree friend_parms;
1111 /* If both are templates, check the name of the two
1112 TEMPLATE_DECL's first because is_friend didn't. */
1113 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1114 != DECL_NAME (friend))
1115 return false;
1116
1117 /* Now check template parameter list. */
1118 friend_parms
1119 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1120 args, tf_none);
1121 return comp_template_parms
1122 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1123 friend_parms);
1124 }
1125 else
1126 return (DECL_NAME (decl)
1127 == DECL_NAME (friend));
d43f603d
KL
1128 }
1129 }
b939a023 1130 return false;
d43f603d
KL
1131}
1132
75650646 1133/* Register the specialization SPEC as a specialization of TMPL with
d63d5d0c
ILT
1134 the indicated ARGS. IS_FRIEND indicates whether the specialization
1135 is actually just a friend declaration. Returns SPEC, or an
1136 equivalent prior declaration, if available. */
75650646 1137
36a117a5 1138static tree
d63d5d0c 1139register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
75650646 1140{
c7222c02 1141 tree fn;
75650646 1142
50bc768d 1143 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
75650646 1144
c8094d83 1145 if (TREE_CODE (spec) == FUNCTION_DECL
36a117a5
MM
1146 && uses_template_parms (DECL_TI_ARGS (spec)))
1147 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1148 register it; we want the corresponding TEMPLATE_DECL instead.
1149 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1150 the more obvious `uses_template_parms (spec)' to avoid problems
1151 with default function arguments. In particular, given
1152 something like this:
1153
0cbd7506 1154 template <class T> void f(T t1, T t = T())
36a117a5
MM
1155
1156 the default argument expression is not substituted for in an
1157 instantiation unless and until it is actually needed. */
1158 return spec;
28ba38e3 1159
c8094d83 1160 fn = retrieve_specialization (tmpl, args,
c7222c02
MM
1161 /*class_specializations_p=*/false);
1162 /* We can sometimes try to re-register a specialization that we've
1163 already got. In particular, regenerate_decl_from_template calls
1164 duplicate_decls which will update the specialization list. But,
1165 we'll still get called again here anyhow. It's more convenient
1166 to simply allow this than to try to prevent it. */
1167 if (fn == spec)
1168 return spec;
1169 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
22e9174f 1170 {
c7222c02 1171 if (DECL_TEMPLATE_INSTANTIATION (fn))
22e9174f 1172 {
c8094d83 1173 if (TREE_USED (fn)
c7222c02 1174 || DECL_EXPLICIT_INSTANTIATION (fn))
22e9174f 1175 {
c7222c02
MM
1176 error ("specialization of %qD after instantiation",
1177 fn);
1178 return spec;
22e9174f 1179 }
c7222c02 1180 else
b1cc95ce 1181 {
a39041fa 1182 tree clone;
c7222c02
MM
1183 /* This situation should occur only if the first
1184 specialization is an implicit instantiation, the
1185 second is an explicit specialization, and the
1186 implicit instantiation has not yet been used. That
1187 situation can occur if we have implicitly
1188 instantiated a member function and then specialized
1189 it later.
c8094d83 1190
c7222c02
MM
1191 We can also wind up here if a friend declaration that
1192 looked like an instantiation turns out to be a
1193 specialization:
c8094d83 1194
c7222c02
MM
1195 template <class T> void foo(T);
1196 class S { friend void foo<>(int) };
c8094d83
MS
1197 template <> void foo(int);
1198
c7222c02
MM
1199 We transform the existing DECL in place so that any
1200 pointers to it become pointers to the updated
1201 declaration.
1202
1203 If there was a definition for the template, but not
1204 for the specialization, we want this to look as if
1205 there were no definition, and vice versa. */
1206 DECL_INITIAL (fn) = NULL_TREE;
d63d5d0c 1207 duplicate_decls (spec, fn, is_friend);
a39041fa
MM
1208 /* The call to duplicate_decls will have applied
1209 [temp.expl.spec]:
1210
1211 An explicit specialization of a function template
1212 is inline only if it is explicitly declared to be,
1213 and independently of whether its function tempalte
1214 is.
1215
1216 to the primary function; now copy the inline bits to
1217 the various clones. */
1218 FOR_EACH_CLONE (clone, fn)
1219 {
1220 DECL_DECLARED_INLINE_P (clone)
1221 = DECL_DECLARED_INLINE_P (fn);
1222 DECL_INLINE (clone)
1223 = DECL_INLINE (fn);
1224 }
9c12301f 1225 check_specialization_namespace (fn);
c8094d83 1226
b1cc95ce
MM
1227 return fn;
1228 }
22e9174f 1229 }
c7222c02
MM
1230 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1231 {
d63d5d0c 1232 if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
c7222c02
MM
1233 /* Dup decl failed, but this is a new definition. Set the
1234 line number so any errors match this new
1235 definition. */
1236 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
c8094d83 1237
c7222c02
MM
1238 return fn;
1239 }
b1cc95ce
MM
1240 }
1241
1242 /* A specialization must be declared in the same namespace as the
1243 template it is specializing. */
1244 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1245 && !check_specialization_namespace (tmpl))
1246 DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
75650646 1247
c7222c02
MM
1248 if (!optimize_specialization_lookup_p (tmpl))
1249 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1250 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
36a117a5
MM
1251
1252 return spec;
1253}
1254
1255/* Unregister the specialization SPEC as a specialization of TMPL.
b3445994
MM
1256 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1257 if the SPEC was listed as a specialization of TMPL. */
36a117a5 1258
b3445994
MM
1259bool
1260reregister_specialization (tree spec, tree tmpl, tree new_spec)
36a117a5
MM
1261{
1262 tree* s;
1263
1264 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1265 *s != NULL_TREE;
1266 s = &TREE_CHAIN (*s))
1267 if (TREE_VALUE (*s) == spec)
1268 {
b3445994
MM
1269 if (!new_spec)
1270 *s = TREE_CHAIN (*s);
1271 else
a3d87771 1272 TREE_VALUE (*s) = new_spec;
36a117a5
MM
1273 return 1;
1274 }
1275
1276 return 0;
75650646
MM
1277}
1278
a723baf1
MM
1279/* Compare an entry in the local specializations hash table P1 (which
1280 is really a pointer to a TREE_LIST) with P2 (which is really a
1281 DECL). */
1282
1283static int
1284eq_local_specializations (const void *p1, const void *p2)
1285{
1286 return TREE_VALUE ((tree) p1) == (tree) p2;
1287}
1288
69f794a7
MM
1289/* Hash P1, an entry in the local specializations table. */
1290
1291static hashval_t
1292hash_local_specialization (const void* p1)
1293{
1294 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1295}
1296
6dfbb909
MM
1297/* Like register_specialization, but for local declarations. We are
1298 registering SPEC, an instantiation of TMPL. */
9188c363 1299
414ea4aa 1300static void
3a978d72 1301register_local_specialization (tree spec, tree tmpl)
9188c363 1302{
6dfbb909
MM
1303 void **slot;
1304
c8094d83 1305 slot = htab_find_slot_with_hash (local_specializations, tmpl,
69f794a7 1306 htab_hash_pointer (tmpl), INSERT);
a723baf1 1307 *slot = build_tree_list (spec, tmpl);
9188c363
MM
1308}
1309
e1467ff2
MM
1310/* Print the list of candidate FNS in an error message. */
1311
104bf76a 1312void
3a978d72 1313print_candidates (tree fns)
e1467ff2
MM
1314{
1315 tree fn;
1316
d8e178a0 1317 const char *str = "candidates are:";
e1467ff2
MM
1318
1319 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1320 {
d6479fe7
MM
1321 tree f;
1322
1323 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
dee15844 1324 error ("%s %+#D", str, OVL_CURRENT (f));
e1467ff2
MM
1325 str = " ";
1326 }
1327}
1328
75650646 1329/* Returns the template (one of the functions given by TEMPLATE_ID)
e1467ff2 1330 which can be specialized to match the indicated DECL with the
03017874
MM
1331 explicit template args given in TEMPLATE_ID. The DECL may be
1332 NULL_TREE if none is available. In that case, the functions in
1333 TEMPLATE_ID are non-members.
1334
838dfd8a 1335 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
03017874
MM
1336 specialization of a member template.
1337
5fe7b654
GB
1338 The TEMPLATE_COUNT is the number of references to qualifying
1339 template classes that appeared in the name of the function. See
1340 check_explicit_specialization for a more accurate description.
1341
03017874
MM
1342 The template args (those explicitly specified and those deduced)
1343 are output in a newly created vector *TARGS_OUT.
1344
1345 If it is impossible to determine the result, an error message is
bf8f3f93 1346 issued. The error_mark_node is returned to indicate failure. */
75650646 1347
e9659ab0 1348static tree
c8094d83 1349determine_specialization (tree template_id,
0cbd7506
MS
1350 tree decl,
1351 tree* targs_out,
5fe7b654
GB
1352 int need_member_template,
1353 int template_count)
386b8a85 1354{
03017874
MM
1355 tree fns;
1356 tree targs;
1357 tree explicit_targs;
1358 tree candidates = NULL_TREE;
1359 tree templates = NULL_TREE;
5fe7b654
GB
1360 int header_count;
1361 struct cp_binding_level *b;
386b8a85 1362
e1467ff2
MM
1363 *targs_out = NULL_TREE;
1364
f2e48b67
BK
1365 if (template_id == error_mark_node)
1366 return error_mark_node;
1367
1368 fns = TREE_OPERAND (template_id, 0);
03017874 1369 explicit_targs = TREE_OPERAND (template_id, 1);
f2e48b67 1370
27fafc8d
JM
1371 if (fns == error_mark_node)
1372 return error_mark_node;
1373
c6002625 1374 /* Check for baselinks. */
91e490ab 1375 if (BASELINK_P (fns))
da15dae6 1376 fns = BASELINK_FUNCTIONS (fns);
386b8a85 1377
91e490ab
MM
1378 if (!is_overloaded_fn (fns))
1379 {
0f51ccfc 1380 error ("%qD is not a function template", fns);
91e490ab
MM
1381 return error_mark_node;
1382 }
1383
5fe7b654
GB
1384 /* Count the number of template headers specified for this
1385 specialization. */
1386 header_count = 0;
c8094d83 1387 for (b = current_binding_level;
98f99d7f 1388 b->kind == sk_template_parms;
5fe7b654
GB
1389 b = b->level_chain)
1390 ++header_count;
1391
2c73f9f5 1392 for (; fns; fns = OVL_NEXT (fns))
386b8a85 1393 {
9dfce8fd 1394 tree fn = OVL_CURRENT (fns);
03017874
MM
1395
1396 if (TREE_CODE (fn) == TEMPLATE_DECL)
d955f6ea
KL
1397 {
1398 tree decl_arg_types;
0da99d4e 1399 tree fn_arg_types;
d955f6ea
KL
1400
1401 /* DECL might be a specialization of FN. */
1402
1403 /* Adjust the type of DECL in case FN is a static member. */
1404 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
c8094d83 1405 if (DECL_STATIC_FUNCTION_P (fn)
d955f6ea
KL
1406 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1407 decl_arg_types = TREE_CHAIN (decl_arg_types);
1408
1409 /* Check that the number of function parameters matches.
1410 For example,
1411 template <class T> void f(int i = 0);
1412 template <> void f<int>();
0e339752 1413 The specialization f<int> is invalid but is not caught
d955f6ea
KL
1414 by get_bindings below. */
1415
0da99d4e
GB
1416 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1417 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1418 continue;
1419
1420 /* For a non-static member function, we need to make sure that
1421 the const qualification is the same. This can be done by
1422 checking the 'this' in the argument list. */
1423 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
c8094d83 1424 && !same_type_p (TREE_VALUE (fn_arg_types),
0da99d4e 1425 TREE_VALUE (decl_arg_types)))
d955f6ea
KL
1426 continue;
1427
5fe7b654
GB
1428 /* In case of explicit specialization, we need to check if
1429 the number of template headers appearing in the specialization
1430 is correct. This is usually done in check_explicit_specialization,
1431 but the check done there cannot be exhaustive when specializing
1432 member functions. Consider the following code:
1433
1434 template <> void A<int>::f(int);
1435 template <> template <> void A<int>::f(int);
1436
1437 Assuming that A<int> is not itself an explicit specialization
1438 already, the first line specializes "f" which is a non-template
1439 member function, whilst the second line specializes "f" which
1440 is a template member function. So both lines are syntactically
1441 correct, and check_explicit_specialization does not reject
1442 them.
c8094d83 1443
5fe7b654
GB
1444 Here, we can do better, as we are matching the specialization
1445 against the declarations. We count the number of template
1446 headers, and we check if they match TEMPLATE_COUNT + 1
1447 (TEMPLATE_COUNT is the number of qualifying template classes,
1448 plus there must be another header for the member template
1449 itself).
c8094d83 1450
5fe7b654
GB
1451 Notice that if header_count is zero, this is not a
1452 specialization but rather a template instantiation, so there
1453 is no check we can perform here. */
1454 if (header_count && header_count != template_count + 1)
1455 continue;
1456
98f99d7f
MM
1457 /* Check that the number of template arguments at the
1458 innermost level for DECL is the same as for FN. */
1459 if (current_binding_level->kind == sk_template_parms
1460 && !current_binding_level->explicit_spec_p
1461 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1462 != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms))))
1463 continue;
c8094d83 1464
d955f6ea
KL
1465 /* See whether this function might be a specialization of this
1466 template. */
a34d3336 1467 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
d955f6ea
KL
1468
1469 if (!targs)
1470 /* We cannot deduce template arguments that when used to
1471 specialize TMPL will produce DECL. */
1472 continue;
1473
1474 /* Save this template, and the arguments deduced. */
1475 templates = tree_cons (targs, fn, templates);
1476 }
03017874
MM
1477 else if (need_member_template)
1478 /* FN is an ordinary member function, and we need a
1479 specialization of a member template. */
d955f6ea 1480 ;
03017874
MM
1481 else if (TREE_CODE (fn) != FUNCTION_DECL)
1482 /* We can get IDENTIFIER_NODEs here in certain erroneous
1483 cases. */
d955f6ea 1484 ;
03017874
MM
1485 else if (!DECL_FUNCTION_MEMBER_P (fn))
1486 /* This is just an ordinary non-member function. Nothing can
1487 be a specialization of that. */
d955f6ea 1488 ;
3b82c249
KL
1489 else if (DECL_ARTIFICIAL (fn))
1490 /* Cannot specialize functions that are created implicitly. */
d955f6ea 1491 ;
75650646 1492 else
03017874
MM
1493 {
1494 tree decl_arg_types;
386b8a85 1495
03017874
MM
1496 /* This is an ordinary member function. However, since
1497 we're here, we can assume it's enclosing class is a
1498 template class. For example,
c8094d83 1499
03017874
MM
1500 template <typename T> struct S { void f(); };
1501 template <> void S<int>::f() {}
1502
1503 Here, S<int>::f is a non-template, but S<int> is a
1504 template class. If FN has the same type as DECL, we
1505 might be in business. */
f5d47abd
KL
1506
1507 if (!DECL_TEMPLATE_INFO (fn))
1508 /* Its enclosing class is an explicit specialization
1509 of a template class. This is not a candidate. */
1510 continue;
1511
03017874
MM
1512 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1513 TREE_TYPE (TREE_TYPE (fn))))
1514 /* The return types differ. */
1515 continue;
1516
1517 /* Adjust the type of DECL in case FN is a static member. */
1518 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
c8094d83 1519 if (DECL_STATIC_FUNCTION_P (fn)
03017874
MM
1520 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1521 decl_arg_types = TREE_CHAIN (decl_arg_types);
1522
c8094d83 1523 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
03017874
MM
1524 decl_arg_types))
1525 /* They match! */
1526 candidates = tree_cons (NULL_TREE, fn, candidates);
03017874 1527 }
386b8a85 1528 }
03017874 1529
bf8f3f93 1530 if (templates && TREE_CHAIN (templates))
386b8a85 1531 {
03017874 1532 /* We have:
c8094d83 1533
03017874
MM
1534 [temp.expl.spec]
1535
1536 It is possible for a specialization with a given function
1537 signature to be instantiated from more than one function
1538 template. In such cases, explicit specification of the
1539 template arguments must be used to uniquely identify the
1540 function template specialization being specialized.
1541
1542 Note that here, there's no suggestion that we're supposed to
1543 determine which of the candidate templates is most
1544 specialized. However, we, also have:
1545
1546 [temp.func.order]
1547
1548 Partial ordering of overloaded function template
1549 declarations is used in the following contexts to select
1550 the function template to which a function template
c8094d83 1551 specialization refers:
03017874 1552
0cbd7506 1553 -- when an explicit specialization refers to a function
c8094d83 1554 template.
03017874
MM
1555
1556 So, we do use the partial ordering rules, at least for now.
0e339752 1557 This extension can only serve to make invalid programs valid,
03017874
MM
1558 so it's safe. And, there is strong anecdotal evidence that
1559 the committee intended the partial ordering rules to apply;
1560 the EDG front-end has that behavior, and John Spicer claims
1561 that the committee simply forgot to delete the wording in
1562 [temp.expl.spec]. */
1563 tree tmpl = most_specialized (templates, decl, explicit_targs);
1564 if (tmpl && tmpl != error_mark_node)
1565 {
a34d3336 1566 targs = get_bindings (tmpl, decl, explicit_targs, /*check_ret=*/true);
e1b3e07d 1567 templates = tree_cons (targs, tmpl, NULL_TREE);
03017874 1568 }
e1467ff2
MM
1569 }
1570
03017874 1571 if (templates == NULL_TREE && candidates == NULL_TREE)
e1467ff2 1572 {
dee15844
JM
1573 error ("template-id %qD for %q+D does not match any template "
1574 "declaration", template_id, decl);
03017874 1575 return error_mark_node;
386b8a85 1576 }
03017874 1577 else if ((templates && TREE_CHAIN (templates))
bf8f3f93
MM
1578 || (candidates && TREE_CHAIN (candidates))
1579 || (templates && candidates))
386b8a85 1580 {
dee15844
JM
1581 error ("ambiguous template specialization %qD for %q+D",
1582 template_id, decl);
bf8f3f93
MM
1583 chainon (candidates, templates);
1584 print_candidates (candidates);
03017874 1585 return error_mark_node;
386b8a85
JM
1586 }
1587
c6002625 1588 /* We have one, and exactly one, match. */
03017874
MM
1589 if (candidates)
1590 {
1591 /* It was a specialization of an ordinary member function in a
1592 template class. */
1593 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1594 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1595 }
1596
1597 /* It was a specialization of a template. */
17aec3eb 1598 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
03017874
MM
1599 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1600 {
1601 *targs_out = copy_node (targs);
c8094d83 1602 SET_TMPL_ARGS_LEVEL (*targs_out,
03017874
MM
1603 TMPL_ARGS_DEPTH (*targs_out),
1604 TREE_PURPOSE (templates));
1605 }
1606 else
1607 *targs_out = TREE_PURPOSE (templates);
e1467ff2 1608 return TREE_VALUE (templates);
8d08fdba 1609}
8afa707f
MM
1610
1611/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1612 but with the default argument values filled in from those in the
1613 TMPL_TYPES. */
c8094d83 1614
8afa707f 1615static tree
3a978d72
NN
1616copy_default_args_to_explicit_spec_1 (tree spec_types,
1617 tree tmpl_types)
8afa707f
MM
1618{
1619 tree new_spec_types;
1620
1621 if (!spec_types)
1622 return NULL_TREE;
1623
1624 if (spec_types == void_list_node)
1625 return void_list_node;
1626
1627 /* Substitute into the rest of the list. */
1628 new_spec_types =
1629 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1630 TREE_CHAIN (tmpl_types));
c8094d83 1631
8afa707f
MM
1632 /* Add the default argument for this parameter. */
1633 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1634 TREE_VALUE (spec_types),
1635 new_spec_types);
1636}
1637
1638/* DECL is an explicit specialization. Replicate default arguments
1639 from the template it specializes. (That way, code like:
1640
1641 template <class T> void f(T = 3);
1642 template <> void f(double);
c8094d83 1643 void g () { f (); }
8afa707f
MM
1644
1645 works, as required.) An alternative approach would be to look up
1646 the correct default arguments at the call-site, but this approach
1647 is consistent with how implicit instantiations are handled. */
1648
1649static void
3a978d72 1650copy_default_args_to_explicit_spec (tree decl)
8afa707f
MM
1651{
1652 tree tmpl;
1653 tree spec_types;
1654 tree tmpl_types;
1655 tree new_spec_types;
1656 tree old_type;
1657 tree new_type;
1658 tree t;
08c2df0f
NS
1659 tree object_type = NULL_TREE;
1660 tree in_charge = NULL_TREE;
e0fff4b3 1661 tree vtt = NULL_TREE;
8afa707f
MM
1662
1663 /* See if there's anything we need to do. */
1664 tmpl = DECL_TI_TEMPLATE (decl);
1665 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1666 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1667 if (TREE_PURPOSE (t))
1668 break;
1669 if (!t)
1670 return;
1671
1672 old_type = TREE_TYPE (decl);
1673 spec_types = TYPE_ARG_TYPES (old_type);
c8094d83 1674
8afa707f
MM
1675 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1676 {
08c2df0f 1677 /* Remove the this pointer, but remember the object's type for
0cbd7506 1678 CV quals. */
08c2df0f 1679 object_type = TREE_TYPE (TREE_VALUE (spec_types));
8afa707f
MM
1680 spec_types = TREE_CHAIN (spec_types);
1681 tmpl_types = TREE_CHAIN (tmpl_types);
c8094d83 1682
8afa707f 1683 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
0cbd7506
MS
1684 {
1685 /* DECL may contain more parameters than TMPL due to the extra
1686 in-charge parameter in constructors and destructors. */
1687 in_charge = spec_types;
08c2df0f
NS
1688 spec_types = TREE_CHAIN (spec_types);
1689 }
e0fff4b3
JM
1690 if (DECL_HAS_VTT_PARM_P (decl))
1691 {
1692 vtt = spec_types;
1693 spec_types = TREE_CHAIN (spec_types);
1694 }
8afa707f
MM
1695 }
1696
1697 /* Compute the merged default arguments. */
c8094d83 1698 new_spec_types =
8afa707f
MM
1699 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1700
08c2df0f
NS
1701 /* Compute the new FUNCTION_TYPE. */
1702 if (object_type)
8afa707f 1703 {
e0fff4b3 1704 if (vtt)
0cbd7506
MS
1705 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1706 TREE_VALUE (vtt),
1707 new_spec_types);
e0fff4b3 1708
08c2df0f 1709 if (in_charge)
0cbd7506
MS
1710 /* Put the in-charge parameter back. */
1711 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1712 TREE_VALUE (in_charge),
1713 new_spec_types);
08c2df0f 1714
43dc123f
MM
1715 new_type = build_method_type_directly (object_type,
1716 TREE_TYPE (old_type),
1717 new_spec_types);
8afa707f 1718 }
8afa707f
MM
1719 else
1720 new_type = build_function_type (TREE_TYPE (old_type),
08c2df0f 1721 new_spec_types);
e9525111
MM
1722 new_type = cp_build_type_attribute_variant (new_type,
1723 TYPE_ATTRIBUTES (old_type));
8afa707f
MM
1724 new_type = build_exception_variant (new_type,
1725 TYPE_RAISES_EXCEPTIONS (old_type));
1726 TREE_TYPE (decl) = new_type;
1727}
1728
386b8a85 1729/* Check to see if the function just declared, as indicated in
75650646
MM
1730 DECLARATOR, and in DECL, is a specialization of a function
1731 template. We may also discover that the declaration is an explicit
1732 instantiation at this point.
1733
e1467ff2 1734 Returns DECL, or an equivalent declaration that should be used
03017874
MM
1735 instead if all goes well. Issues an error message if something is
1736 amiss. Returns error_mark_node if the error is not easily
1737 recoverable.
c8094d83
MS
1738
1739 FLAGS is a bitmask consisting of the following flags:
75650646 1740
75650646
MM
1741 2: The function has a definition.
1742 4: The function is a friend.
75650646
MM
1743
1744 The TEMPLATE_COUNT is the number of references to qualifying
1745 template classes that appeared in the name of the function. For
1746 example, in
1747
1748 template <class T> struct S { void f(); };
1749 void S<int>::f();
c8094d83 1750
75650646
MM
1751 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1752 classes are not counted in the TEMPLATE_COUNT, so that in
1753
1754 template <class T> struct S {};
1755 template <> struct S<int> { void f(); }
36a117a5 1756 template <> void S<int>::f();
75650646
MM
1757
1758 the TEMPLATE_COUNT would be 0. (Note that this declaration is
0e339752 1759 invalid; there should be no template <>.)
75650646
MM
1760
1761 If the function is a specialization, it is marked as such via
1762 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
c8094d83 1763 is set up correctly, and it is added to the list of specializations
75650646 1764 for that template. */
386b8a85 1765
e1467ff2 1766tree
c8094d83 1767check_explicit_specialization (tree declarator,
0cbd7506
MS
1768 tree decl,
1769 int template_count,
1770 int flags)
386b8a85 1771{
75650646
MM
1772 int have_def = flags & 2;
1773 int is_friend = flags & 4;
1774 int specialization = 0;
e1467ff2 1775 int explicit_instantiation = 0;
fd4de5ff 1776 int member_specialization = 0;
75650646
MM
1777 tree ctype = DECL_CLASS_CONTEXT (decl);
1778 tree dname = DECL_NAME (decl);
74b846e0 1779 tmpl_spec_kind tsk;
386b8a85 1780
f65b7de3
GB
1781 if (is_friend)
1782 {
1783 if (!processing_specialization)
1784 tsk = tsk_none;
1785 else
1786 tsk = tsk_excessive_parms;
1787 }
1788 else
1789 tsk = current_tmpl_spec_kind (template_count);
75650646 1790
74b846e0
MM
1791 switch (tsk)
1792 {
1793 case tsk_none:
c8094d83 1794 if (processing_specialization)
75650646 1795 {
fd4de5ff
MM
1796 specialization = 1;
1797 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
75650646 1798 }
74b846e0 1799 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
386b8a85 1800 {
74b846e0
MM
1801 if (is_friend)
1802 /* This could be something like:
75650646 1803
74b846e0
MM
1804 template <class T> void f(T);
1805 class S { friend void f<>(int); } */
1806 specialization = 1;
1807 else
1808 {
1809 /* This case handles bogus declarations like template <>
1810 template <class T> void f<int>(); */
1811
0f51ccfc 1812 error ("template-id %qD in declaration of primary template",
0cbd7506 1813 declarator);
74b846e0
MM
1814 return decl;
1815 }
1816 }
1817 break;
1818
1819 case tsk_invalid_member_spec:
1820 /* The error has already been reported in
1821 check_specialization_scope. */
1822 return error_mark_node;
1823
1824 case tsk_invalid_expl_inst:
33bd39a2 1825 error ("template parameter list used in explicit instantiation");
74b846e0
MM
1826
1827 /* Fall through. */
1828
1829 case tsk_expl_inst:
fd4de5ff 1830 if (have_def)
33bd39a2 1831 error ("definition provided for explicit instantiation");
c8094d83 1832
fd4de5ff 1833 explicit_instantiation = 1;
74b846e0 1834 break;
fd4de5ff 1835
74b846e0 1836 case tsk_excessive_parms:
f03adc6b
GB
1837 case tsk_insufficient_parms:
1838 if (tsk == tsk_excessive_parms)
0cbd7506 1839 error ("too many template parameter lists in declaration of %qD",
f03adc6b
GB
1840 decl);
1841 else if (template_header_count)
0f51ccfc 1842 error("too few template parameter lists in declaration of %qD", decl);
f03adc6b 1843 else
0f51ccfc 1844 error("explicit specialization of %qD must be introduced by "
9e637a26 1845 "%<template <>%>", decl);
75650646 1846
74b846e0
MM
1847 /* Fall through. */
1848 case tsk_expl_spec:
1849 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1850 if (ctype)
1851 member_specialization = 1;
1852 else
1853 specialization = 1;
1854 break;
74b846e0
MM
1855
1856 case tsk_template:
1857 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
c6f2ed0d 1858 {
fd4de5ff
MM
1859 /* This case handles bogus declarations like template <>
1860 template <class T> void f<int>(); */
75650646 1861
655dc6ee 1862 if (uses_template_parms (declarator))
0f51ccfc 1863 error ("function template partial specialization %qD "
e1e93ad8 1864 "is not allowed", declarator);
655dc6ee 1865 else
0f51ccfc 1866 error ("template-id %qD in declaration of primary template",
0cbd7506 1867 declarator);
fd4de5ff 1868 return decl;
386b8a85 1869 }
74b846e0
MM
1870
1871 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1872 /* This is a specialization of a member template, without
1873 specialization the containing class. Something like:
1874
1875 template <class T> struct S {
c8094d83 1876 template <class U> void f (U);
0cbd7506 1877 };
74b846e0 1878 template <> template <class U> void S<int>::f(U) {}
c8094d83 1879
74b846e0
MM
1880 That's a specialization -- but of the entire template. */
1881 specialization = 1;
1882 break;
1883
1884 default:
315fb5db 1885 gcc_unreachable ();
75650646 1886 }
386b8a85 1887
670960ac
JM
1888 if (specialization || member_specialization)
1889 {
1890 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1891 for (; t; t = TREE_CHAIN (t))
1892 if (TREE_PURPOSE (t))
1893 {
33bd39a2 1894 pedwarn
8251199e 1895 ("default argument specified in explicit specialization");
670960ac
JM
1896 break;
1897 }
1898 }
1899
e1467ff2 1900 if (specialization || member_specialization || explicit_instantiation)
75650646
MM
1901 {
1902 tree tmpl = NULL_TREE;
1903 tree targs = NULL_TREE;
75650646
MM
1904
1905 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
386b8a85
JM
1906 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1907 {
1908 tree fns;
1909
50bc768d 1910 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2f54a1db 1911 if (ctype)
386b8a85 1912 fns = dname;
2f54a1db
GB
1913 else
1914 {
1915 /* If there is no class context, the explicit instantiation
0cbd7506 1916 must be at namespace scope. */
50bc768d 1917 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2f54a1db
GB
1918
1919 /* Find the namespace binding, using the declaration
0cbd7506 1920 context. */
2f54a1db 1921 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
4230cec2
NS
1922 if (!fns || !is_overloaded_fn (fns))
1923 {
1924 error ("%qD is not a template function", dname);
1925 fns = error_mark_node;
1926 }
2f54a1db 1927 }
386b8a85 1928
2f54a1db 1929 declarator = lookup_template_function (fns, NULL_TREE);
386b8a85
JM
1930 }
1931
f2e48b67
BK
1932 if (declarator == error_mark_node)
1933 return error_mark_node;
1934
75650646
MM
1935 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1936 {
8ec2ac34 1937 if (!explicit_instantiation)
0e339752 1938 /* A specialization in class scope. This is invalid,
6c30752f
MM
1939 but the error will already have been flagged by
1940 check_specialization_scope. */
1941 return error_mark_node;
8ec2ac34 1942 else
b370501f 1943 {
0e339752 1944 /* It's not valid to write an explicit instantiation in
b370501f 1945 class scope, e.g.:
8ec2ac34 1946
0cbd7506 1947 class C { template void f(); }
8ec2ac34 1948
b370501f
KG
1949 This case is caught by the parser. However, on
1950 something like:
c8094d83 1951
b370501f 1952 template class C { void f(); };
8ec2ac34 1953
0e339752 1954 (which is invalid) we can get here. The error will be
b370501f
KG
1955 issued later. */
1956 ;
1957 }
8ec2ac34 1958
e1467ff2 1959 return decl;
75650646 1960 }
c8094d83 1961 else if (ctype != NULL_TREE
75650646
MM
1962 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1963 IDENTIFIER_NODE))
386b8a85 1964 {
75650646
MM
1965 /* Find the list of functions in ctype that have the same
1966 name as the declared function. */
1967 tree name = TREE_OPERAND (declarator, 0);
03017874
MM
1968 tree fns = NULL_TREE;
1969 int idx;
1970
8ba658ee 1971 if (constructor_name_p (name, ctype))
386b8a85 1972 {
75650646 1973 int is_constructor = DECL_CONSTRUCTOR_P (decl);
c8094d83 1974
75650646 1975 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
9f4faeae 1976 : !CLASSTYPE_DESTRUCTORS (ctype))
75650646
MM
1977 {
1978 /* From [temp.expl.spec]:
c8094d83 1979
75650646
MM
1980 If such an explicit specialization for the member
1981 of a class template names an implicitly-declared
1982 special member function (clause _special_), the
c8094d83 1983 program is ill-formed.
e1467ff2
MM
1984
1985 Similar language is found in [temp.explicit]. */
33bd39a2 1986 error ("specialization of implicitly-declared special member function");
03017874 1987 return error_mark_node;
75650646 1988 }
386b8a85 1989
42da2fd8 1990 name = is_constructor ? ctor_identifier : dtor_identifier;
75650646 1991 }
42da2fd8 1992
421844e7 1993 if (!DECL_CONV_FN_P (decl))
03017874
MM
1994 {
1995 idx = lookup_fnfields_1 (ctype, name);
1996 if (idx >= 0)
aaaa46d2 1997 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
03017874
MM
1998 }
1999 else
2000 {
d4e6fecb 2001 VEC(tree,gc) *methods;
aaaa46d2 2002 tree ovl;
03017874
MM
2003
2004 /* For a type-conversion operator, we cannot do a
2005 name-based lookup. We might be looking for `operator
2006 int' which will be a specialization of `operator T'.
2007 So, we find *all* the conversion operators, and then
2008 select from them. */
2009 fns = NULL_TREE;
2010
2011 methods = CLASSTYPE_METHOD_VEC (ctype);
2012 if (methods)
5dd236e2 2013 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
9ba5ff0f 2014 VEC_iterate (tree, methods, idx, ovl);
aaaa46d2 2015 ++idx)
03017874 2016 {
aaaa46d2 2017 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
03017874
MM
2018 /* There are no more conversion functions. */
2019 break;
2020
2021 /* Glue all these conversion functions together
2022 with those we already have. */
2023 for (; ovl; ovl = OVL_NEXT (ovl))
2024 fns = ovl_cons (OVL_CURRENT (ovl), fns);
2025 }
2026 }
c8094d83
MS
2027
2028 if (fns == NULL_TREE)
386b8a85 2029 {
0f51ccfc 2030 error ("no member function %qD declared in %qT", name, ctype);
03017874 2031 return error_mark_node;
386b8a85
JM
2032 }
2033 else
2034 TREE_OPERAND (declarator, 0) = fns;
2035 }
c8094d83 2036
e1467ff2
MM
2037 /* Figure out what exactly is being specialized at this point.
2038 Note that for an explicit instantiation, even one for a
38e01259 2039 member function, we cannot tell apriori whether the
e1467ff2 2040 instantiation is for a member template, or just a member
36a117a5
MM
2041 function of a template class. Even if a member template is
2042 being instantiated, the member template arguments may be
2043 elided if they can be deduced from the rest of the
2044 declaration. */
e1467ff2 2045 tmpl = determine_specialization (declarator, decl,
c8094d83 2046 &targs,
5fe7b654
GB
2047 member_specialization,
2048 template_count);
c8094d83 2049
03017874
MM
2050 if (!tmpl || tmpl == error_mark_node)
2051 /* We couldn't figure out what this declaration was
2052 specializing. */
2053 return error_mark_node;
2054 else
386b8a85 2055 {
25aab5d0 2056 tree gen_tmpl = most_general_template (tmpl);
36a117a5 2057
e1467ff2
MM
2058 if (explicit_instantiation)
2059 {
03d0f4af 2060 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
c8094d83 2061 is done by do_decl_instantiation later. */
25aab5d0
MM
2062
2063 int arg_depth = TMPL_ARGS_DEPTH (targs);
2064 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2065
2066 if (arg_depth > parm_depth)
2067 {
2068 /* If TMPL is not the most general template (for
2069 example, if TMPL is a friend template that is
2070 injected into namespace scope), then there will
dc957d14 2071 be too many levels of TARGS. Remove some of them
25aab5d0
MM
2072 here. */
2073 int i;
2074 tree new_targs;
2075
f31c0a32 2076 new_targs = make_tree_vec (parm_depth);
25aab5d0
MM
2077 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2078 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2079 = TREE_VEC_ELT (targs, i);
2080 targs = new_targs;
2081 }
c8094d83 2082
3e4a3562 2083 return instantiate_template (tmpl, targs, tf_error);
e1467ff2 2084 }
74b846e0 2085
6c07f448
KL
2086 /* If we thought that the DECL was a member function, but it
2087 turns out to be specializing a static member function,
4546865e 2088 make DECL a static member function as well. */
6c07f448
KL
2089 if (DECL_STATIC_FUNCTION_P (tmpl)
2090 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
4546865e 2091 revert_static_member_fn (decl);
6c07f448 2092
f9a7ae04
MM
2093 /* If this is a specialization of a member template of a
2094 template class. In we want to return the TEMPLATE_DECL,
2095 not the specialization of it. */
74b846e0
MM
2096 if (tsk == tsk_template)
2097 {
2098 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
f9a7ae04 2099 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
b190f239
NS
2100 if (have_def)
2101 {
f31686a3
RH
2102 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2103 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2104 = DECL_SOURCE_LOCATION (decl);
08167d1c
AO
2105 /* We want to use the argument list specified in the
2106 definition, not in the original declaration. */
2107 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2108 = DECL_ARGUMENTS (decl);
b190f239 2109 }
74b846e0
MM
2110 return tmpl;
2111 }
2112
36a117a5 2113 /* Set up the DECL_TEMPLATE_INFO for DECL. */
e1b3e07d 2114 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
36a117a5 2115
8afa707f
MM
2116 /* Inherit default function arguments from the template
2117 DECL is specializing. */
2118 copy_default_args_to_explicit_spec (decl);
2119
c750255c
MM
2120 /* This specialization has the same protection as the
2121 template it specializes. */
2122 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2123 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
8d039470
MS
2124 /* The specialization has the same visibility as the
2125 template it specializes. */
2126 if (DECL_VISIBILITY_SPECIFIED (gen_tmpl))
2127 {
2128 DECL_VISIBILITY_SPECIFIED (decl) = 1;
2129 DECL_VISIBILITY (decl) = DECL_VISIBILITY (gen_tmpl);
2130 }
9c12301f
MM
2131 /* If DECL is a friend declaration, declared using an
2132 unqualified name, the namespace associated with DECL may
2133 have been set incorrectly. For example, in:
2134
2135 template <typename T> void f(T);
2136 namespace N {
2137 struct S { friend void f<int>(int); }
2138 }
2139
2140 we will have set the DECL_CONTEXT for the friend
2141 declaration to N, rather than to the global namespace. */
2142 if (DECL_NAMESPACE_SCOPE_P (decl))
2143 DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
8d039470 2144
386b8a85 2145 if (is_friend && !have_def)
36a117a5
MM
2146 /* This is not really a declaration of a specialization.
2147 It's just the name of an instantiation. But, it's not
2148 a request for an instantiation, either. */
fbf1c34b 2149 SET_DECL_IMPLICIT_INSTANTIATION (decl);
08511114
KL
2150 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2151 /* This is indeed a specialization. In case of constructors
2152 and destructors, we need in-charge and not-in-charge
2153 versions in V3 ABI. */
2154 clone_function_decl (decl, /*update_method_vec_p=*/0);
75650646 2155
36a117a5
MM
2156 /* Register this specialization so that we can find it
2157 again. */
d63d5d0c 2158 decl = register_specialization (decl, gen_tmpl, targs, is_friend);
386b8a85
JM
2159 }
2160 }
c8094d83 2161
e1467ff2 2162 return decl;
386b8a85 2163}
75650646 2164
75650646
MM
2165/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2166 parameters. These are represented in the same format used for
2167 DECL_TEMPLATE_PARMS. */
2168
50bc768d
NS
2169int
2170comp_template_parms (tree parms1, tree parms2)
75650646
MM
2171{
2172 tree p1;
2173 tree p2;
2174
2175 if (parms1 == parms2)
2176 return 1;
2177
c8094d83 2178 for (p1 = parms1, p2 = parms2;
75650646
MM
2179 p1 != NULL_TREE && p2 != NULL_TREE;
2180 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2181 {
2182 tree t1 = TREE_VALUE (p1);
2183 tree t2 = TREE_VALUE (p2);
2184 int i;
2185
50bc768d
NS
2186 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2187 gcc_assert (TREE_CODE (t2) == TREE_VEC);
75650646
MM
2188
2189 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2190 return 0;
2191
c8094d83 2192 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
75650646
MM
2193 {
2194 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2195 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2196
2197 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2198 return 0;
2199
2200 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2201 continue;
3bfdc719 2202 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
75650646
MM
2203 return 0;
2204 }
2205 }
2206
2207 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2208 /* One set of parameters has more parameters lists than the
2209 other. */
2210 return 0;
2211
2212 return 1;
2213}
2214
f3400fe2
JM
2215/* Complain if DECL shadows a template parameter.
2216
2217 [temp.local]: A template-parameter shall not be redeclared within its
2218 scope (including nested scopes). */
2219
2220void
3a978d72 2221check_template_shadow (tree decl)
f3400fe2 2222{
8f032717
MM
2223 tree olddecl;
2224
b5d9b9ab
MM
2225 /* If we're not in a template, we can't possibly shadow a template
2226 parameter. */
2227 if (!current_template_parms)
2228 return;
2229
2230 /* Figure out what we're shadowing. */
8f032717
MM
2231 if (TREE_CODE (decl) == OVERLOAD)
2232 decl = OVL_CURRENT (decl);
90ea9897 2233 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
f3400fe2 2234
b5d9b9ab
MM
2235 /* If there's no previous binding for this name, we're not shadowing
2236 anything, let alone a template parameter. */
2237 if (!olddecl)
2238 return;
2239
2240 /* If we're not shadowing a template parameter, we're done. Note
2241 that OLDDECL might be an OVERLOAD (or perhaps even an
2242 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2243 node. */
2f939d94 2244 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
b5d9b9ab
MM
2245 return;
2246
2247 /* We check for decl != olddecl to avoid bogus errors for using a
2248 name inside a class. We check TPFI to avoid duplicate errors for
2249 inline member templates. */
c8094d83 2250 if (decl == olddecl
b5d9b9ab
MM
2251 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2252 return;
2253
dee15844
JM
2254 error ("declaration of %q+#D", decl);
2255 error (" shadows template parm %q+#D", olddecl);
f3400fe2 2256}
22a7be53 2257
f3400fe2 2258/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
f84b4be9
JM
2259 ORIG_LEVEL, DECL, and TYPE. */
2260
2261static tree
c8094d83 2262build_template_parm_index (int index,
0cbd7506
MS
2263 int level,
2264 int orig_level,
2265 tree decl,
2266 tree type)
f84b4be9
JM
2267{
2268 tree t = make_node (TEMPLATE_PARM_INDEX);
2269 TEMPLATE_PARM_IDX (t) = index;
2270 TEMPLATE_PARM_LEVEL (t) = level;
2271 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2272 TEMPLATE_PARM_DECL (t) = decl;
2273 TREE_TYPE (t) = type;
3e4a3562 2274 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
6de9cd9a 2275 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
3e4a3562 2276 TREE_READONLY (t) = TREE_READONLY (decl);
f84b4be9
JM
2277
2278 return t;
2279}
2280
f84b4be9 2281/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
93cdc044 2282 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
f84b4be9
JM
2283 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2284 new one is created. */
2285
c8094d83 2286static tree
3a978d72 2287reduce_template_parm_level (tree index, tree type, int levels)
f84b4be9
JM
2288{
2289 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2290 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
93cdc044 2291 != TEMPLATE_PARM_LEVEL (index) - levels))
f84b4be9 2292 {
3e4a3562
NS
2293 tree orig_decl = TEMPLATE_PARM_DECL (index);
2294 tree decl, t;
c8094d83 2295
3e4a3562
NS
2296 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2297 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
6de9cd9a 2298 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
3e4a3562
NS
2299 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2300 DECL_ARTIFICIAL (decl) = 1;
2301 SET_DECL_TEMPLATE_PARM_P (decl);
c8094d83 2302
3e4a3562 2303 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
93cdc044 2304 TEMPLATE_PARM_LEVEL (index) - levels,
f84b4be9
JM
2305 TEMPLATE_PARM_ORIG_LEVEL (index),
2306 decl, type);
2307 TEMPLATE_PARM_DESCENDANTS (index) = t;
cae40af6 2308
820cc88f
DB
2309 /* Template template parameters need this. */
2310 if (TREE_CODE (decl) != CONST_DECL)
2311 DECL_TEMPLATE_PARMS (decl)
2312 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
f84b4be9
JM
2313 }
2314
2315 return TEMPLATE_PARM_DESCENDANTS (index);
2316}
2317
8d08fdba 2318/* Process information from new template parameter NEXT and append it to the
058b15c1
MM
2319 LIST being built. This new parameter is a non-type parameter iff
2320 IS_NON_TYPE is true. */
e92cc029 2321
8d08fdba 2322tree
058b15c1 2323process_template_parm (tree list, tree next, bool is_non_type)
8d08fdba
MS
2324{
2325 tree parm;
2326 tree decl = 0;
a292b002 2327 tree defval;
058b15c1 2328 int idx;
f84b4be9 2329
8d08fdba 2330 parm = next;
50bc768d 2331 gcc_assert (TREE_CODE (parm) == TREE_LIST);
a292b002 2332 defval = TREE_PURPOSE (parm);
5566b478
MS
2333
2334 if (list)
2335 {
2336 tree p = TREE_VALUE (tree_last (list));
2337
1899c3a4 2338 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
5566b478
MS
2339 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2340 else
f84b4be9 2341 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
5566b478
MS
2342 ++idx;
2343 }
2344 else
2345 idx = 0;
2346
058b15c1 2347 if (is_non_type)
8d08fdba 2348 {
058b15c1
MM
2349 parm = TREE_VALUE (parm);
2350
833aa4c4 2351 SET_DECL_TEMPLATE_PARM_P (parm);
d490621d
MM
2352
2353 /* [temp.param]
2354
2355 The top-level cv-qualifiers on the template-parameter are
2356 ignored when determining its type. */
2357 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2358
8d08fdba 2359 /* A template parameter is not modifiable. */
6de9cd9a
DN
2360 TREE_CONSTANT (parm) = 1;
2361 TREE_INVARIANT (parm) = 1;
2362 TREE_READONLY (parm) = 1;
11b810f1 2363 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
0cbd7506 2364 TREE_TYPE (parm) = void_type_node;
8d08fdba 2365 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
6de9cd9a
DN
2366 TREE_CONSTANT (decl) = 1;
2367 TREE_INVARIANT (decl) = 1;
2368 TREE_READONLY (decl) = 1;
c8094d83 2369 DECL_INITIAL (parm) = DECL_INITIAL (decl)
f84b4be9
JM
2370 = build_template_parm_index (idx, processing_template_decl,
2371 processing_template_decl,
2372 decl, TREE_TYPE (parm));
8d08fdba
MS
2373 }
2374 else
2375 {
73b0fce8 2376 tree t;
058b15c1 2377 parm = TREE_VALUE (TREE_VALUE (parm));
c8094d83 2378
73b0fce8
KL
2379 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2380 {
33848bb0 2381 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
c8094d83 2382 /* This is for distinguishing between real templates and template
73b0fce8
KL
2383 template parameters */
2384 TREE_TYPE (parm) = t;
2385 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2386 decl = parm;
2387 }
2388 else
2389 {
33848bb0 2390 t = make_aggr_type (TEMPLATE_TYPE_PARM);
f4f206f4 2391 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
73b0fce8
KL
2392 decl = build_decl (TYPE_DECL, parm, t);
2393 }
c8094d83 2394
d2e5ee5c
MS
2395 TYPE_NAME (t) = decl;
2396 TYPE_STUB_DECL (t) = decl;
a292b002 2397 parm = decl;
f84b4be9 2398 TEMPLATE_TYPE_PARM_INDEX (t)
c8094d83 2399 = build_template_parm_index (idx, processing_template_decl,
f84b4be9
JM
2400 processing_template_decl,
2401 decl, TREE_TYPE (parm));
8d08fdba 2402 }
c727aa5e 2403 DECL_ARTIFICIAL (decl) = 1;
cd9f6678 2404 SET_DECL_TEMPLATE_PARM_P (decl);
8d08fdba 2405 pushdecl (decl);
a292b002 2406 parm = build_tree_list (defval, parm);
8d08fdba
MS
2407 return chainon (list, parm);
2408}
2409
2410/* The end of a template parameter list has been reached. Process the
2411 tree list into a parameter vector, converting each parameter into a more
2412 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2413 as PARM_DECLs. */
2414
2415tree
3a978d72 2416end_template_parm_list (tree parms)
8d08fdba 2417{
5566b478 2418 int nparms;
9471d3e2 2419 tree parm, next;
5566b478
MS
2420 tree saved_parmlist = make_tree_vec (list_length (parms));
2421
5566b478 2422 current_template_parms
4890c2f4 2423 = tree_cons (size_int (processing_template_decl),
5566b478 2424 saved_parmlist, current_template_parms);
8d08fdba 2425
9471d3e2
NS
2426 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2427 {
2428 next = TREE_CHAIN (parm);
2429 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2430 TREE_CHAIN (parm) = NULL_TREE;
2431 }
a292b002 2432
67ffc812
MM
2433 --processing_template_parmlist;
2434
8d08fdba
MS
2435 return saved_parmlist;
2436}
2437
5566b478
MS
2438/* end_template_decl is called after a template declaration is seen. */
2439
8d08fdba 2440void
3a978d72 2441end_template_decl (void)
8d08fdba 2442{
386b8a85
JM
2443 reset_specialization ();
2444
5156628f 2445 if (! processing_template_decl)
73aad9b9
JM
2446 return;
2447
5566b478 2448 /* This matches the pushlevel in begin_template_parm_list. */
74b846e0 2449 finish_scope ();
8d08fdba 2450
5566b478
MS
2451 --processing_template_decl;
2452 current_template_parms = TREE_CHAIN (current_template_parms);
5566b478 2453}
8d08fdba 2454
36a117a5
MM
2455/* Given a template argument vector containing the template PARMS.
2456 The innermost PARMS are given first. */
9a3b49ac
MS
2457
2458tree
3a978d72 2459current_template_args (void)
5566b478 2460{
36a117a5 2461 tree header;
b370501f 2462 tree args = NULL_TREE;
36a117a5 2463 int length = TMPL_PARMS_DEPTH (current_template_parms);
98c1c668
JM
2464 int l = length;
2465
36a117a5
MM
2466 /* If there is only one level of template parameters, we do not
2467 create a TREE_VEC of TREE_VECs. Instead, we return a single
2468 TREE_VEC containing the arguments. */
2469 if (length > 1)
2470 args = make_tree_vec (length);
2471
2472 for (header = current_template_parms; header; header = TREE_CHAIN (header))
8d08fdba 2473 {
5566b478 2474 tree a = copy_node (TREE_VALUE (header));
36a117a5
MM
2475 int i;
2476
5566b478 2477 TREE_TYPE (a) = NULL_TREE;
36a117a5 2478 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
5566b478 2479 {
98c1c668
JM
2480 tree t = TREE_VEC_ELT (a, i);
2481
36a117a5 2482 /* T will be a list if we are called from within a
98c1c668
JM
2483 begin/end_template_parm_list pair, but a vector directly
2484 if within a begin/end_member_template_processing pair. */
c8094d83 2485 if (TREE_CODE (t) == TREE_LIST)
98c1c668
JM
2486 {
2487 t = TREE_VALUE (t);
c8094d83
MS
2488
2489 if (TREE_CODE (t) == TYPE_DECL
73b0fce8 2490 || TREE_CODE (t) == TEMPLATE_DECL)
98c1c668
JM
2491 t = TREE_TYPE (t);
2492 else
2493 t = DECL_INITIAL (t);
36a117a5 2494 TREE_VEC_ELT (a, i) = t;
98c1c668 2495 }
5566b478 2496 }
36a117a5
MM
2497
2498 if (length > 1)
2499 TREE_VEC_ELT (args, --l) = a;
2500 else
2501 args = a;
8d08fdba
MS
2502 }
2503
9a3b49ac
MS
2504 return args;
2505}
75650646 2506
e1467ff2 2507/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
c7222c02 2508 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
ee81147e 2509 a member template. Used by push_template_decl below. */
e1467ff2 2510
75650646 2511static tree
c7222c02 2512build_template_decl (tree decl, tree parms, bool member_template_p)
75650646
MM
2513{
2514 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2515 DECL_TEMPLATE_PARMS (tmpl) = parms;
2516 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
c7222c02 2517 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
75650646
MM
2518 if (DECL_LANG_SPECIFIC (decl))
2519 {
8f032717
MM
2520 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2521 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
c8460010 2522 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
11f98788 2523 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
1f6e1acc
AS
2524 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2525 if (DECL_OVERLOADED_OPERATOR_P (decl))
c8094d83 2526 SET_OVERLOADED_OPERATOR_CODE (tmpl,
1f6e1acc 2527 DECL_OVERLOADED_OPERATOR_P (decl));
75650646
MM
2528 }
2529
2530 return tmpl;
2531}
2532
050367a3
MM
2533struct template_parm_data
2534{
6c30752f
MM
2535 /* The level of the template parameters we are currently
2536 processing. */
050367a3 2537 int level;
6c30752f
MM
2538
2539 /* The index of the specialization argument we are currently
2540 processing. */
2541 int current_arg;
2542
2543 /* An array whose size is the number of template parameters. The
838dfd8a 2544 elements are nonzero if the parameter has been used in any one
6c30752f 2545 of the arguments processed so far. */
050367a3 2546 int* parms;
6c30752f
MM
2547
2548 /* An array whose size is the number of template arguments. The
838dfd8a 2549 elements are nonzero if the argument makes use of template
6c30752f
MM
2550 parameters of this level. */
2551 int* arg_uses_template_parms;
050367a3
MM
2552};
2553
2554/* Subroutine of push_template_decl used to see if each template
2555 parameter in a partial specialization is used in the explicit
2556 argument list. If T is of the LEVEL given in DATA (which is
2557 treated as a template_parm_data*), then DATA->PARMS is marked
2558 appropriately. */
2559
2560static int
3a978d72 2561mark_template_parm (tree t, void* data)
050367a3
MM
2562{
2563 int level;
2564 int idx;
2565 struct template_parm_data* tpd = (struct template_parm_data*) data;
2566
2567 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2568 {
2569 level = TEMPLATE_PARM_LEVEL (t);
2570 idx = TEMPLATE_PARM_IDX (t);
2571 }
2572 else
2573 {
2574 level = TEMPLATE_TYPE_LEVEL (t);
2575 idx = TEMPLATE_TYPE_IDX (t);
2576 }
2577
2578 if (level == tpd->level)
6c30752f
MM
2579 {
2580 tpd->parms[idx] = 1;
2581 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2582 }
050367a3
MM
2583
2584 /* Return zero so that for_each_template_parm will continue the
2585 traversal of the tree; we want to mark *every* template parm. */
2586 return 0;
2587}
2588
6c30752f
MM
2589/* Process the partial specialization DECL. */
2590
e9659ab0 2591static tree
3a978d72 2592process_partial_specialization (tree decl)
6c30752f
MM
2593{
2594 tree type = TREE_TYPE (decl);
2595 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2596 tree specargs = CLASSTYPE_TI_ARGS (type);
f9a7ae04 2597 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
6c30752f
MM
2598 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2599 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2600 int nargs = TREE_VEC_LENGTH (inner_args);
2601 int ntparms = TREE_VEC_LENGTH (inner_parms);
2602 int i;
2603 int did_error_intro = 0;
6c30752f
MM
2604 struct template_parm_data tpd;
2605 struct template_parm_data tpd2;
2606
6c30752f
MM
2607 /* We check that each of the template parameters given in the
2608 partial specialization is used in the argument list to the
2609 specialization. For example:
2610
2611 template <class T> struct S;
2612 template <class T> struct S<T*>;
2613
2614 The second declaration is OK because `T*' uses the template
2615 parameter T, whereas
2616
2617 template <class T> struct S<int>;
2618
2619 is no good. Even trickier is:
2620
2621 template <class T>
2622 struct S1
2623 {
2624 template <class U>
2625 struct S2;
2626 template <class U>
2627 struct S2<T>;
2628 };
2629
0e339752 2630 The S2<T> declaration is actually invalid; it is a
c8094d83 2631 full-specialization. Of course,
6c30752f
MM
2632
2633 template <class U>
2634 struct S2<T (*)(U)>;
2635
2636 or some such would have been OK. */
2637 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2638 tpd.parms = alloca (sizeof (int) * ntparms);
fad205ff 2639 memset (tpd.parms, 0, sizeof (int) * ntparms);
6c30752f
MM
2640
2641 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
fad205ff 2642 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
6c30752f
MM
2643 for (i = 0; i < nargs; ++i)
2644 {
2645 tpd.current_arg = i;
2646 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2647 &mark_template_parm,
4f2c9d7e
MM
2648 &tpd,
2649 NULL);
6c30752f
MM
2650 }
2651 for (i = 0; i < ntparms; ++i)
2652 if (tpd.parms[i] == 0)
2653 {
2654 /* One of the template parms was not used in the
f9a7ae04 2655 specialization. */
6c30752f
MM
2656 if (!did_error_intro)
2657 {
33bd39a2 2658 error ("template parameters not used in partial specialization:");
6c30752f
MM
2659 did_error_intro = 1;
2660 }
2661
0f51ccfc 2662 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
6c30752f
MM
2663 }
2664
2665 /* [temp.class.spec]
2666
2667 The argument list of the specialization shall not be identical to
2668 the implicit argument list of the primary template. */
c8094d83
MS
2669 if (comp_template_args
2670 (inner_args,
f9a7ae04
MM
2671 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2672 (maintmpl)))))
0f51ccfc 2673 error ("partial specialization %qT does not specialize any template arguments", type);
6c30752f
MM
2674
2675 /* [temp.class.spec]
2676
2677 A partially specialized non-type argument expression shall not
2678 involve template parameters of the partial specialization except
2679 when the argument expression is a simple identifier.
2680
2681 The type of a template parameter corresponding to a specialized
2682 non-type argument shall not be dependent on a parameter of the
2683 specialization. */
50bc768d 2684 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
6c30752f
MM
2685 tpd2.parms = 0;
2686 for (i = 0; i < nargs; ++i)
2687 {
2688 tree arg = TREE_VEC_ELT (inner_args, i);
2689 if (/* These first two lines are the `non-type' bit. */
2f939d94 2690 !TYPE_P (arg)
6c30752f
MM
2691 && TREE_CODE (arg) != TEMPLATE_DECL
2692 /* This next line is the `argument expression is not just a
2693 simple identifier' condition and also the `specialized
2694 non-type argument' bit. */
2695 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2696 {
2697 if (tpd.arg_uses_template_parms[i])
0f51ccfc 2698 error ("template argument %qE involves template parameter(s)", arg);
c8094d83 2699 else
6c30752f
MM
2700 {
2701 /* Look at the corresponding template parameter,
2702 marking which template parameters its type depends
2703 upon. */
c8094d83
MS
2704 tree type =
2705 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
6c30752f
MM
2706 i)));
2707
2708 if (!tpd2.parms)
2709 {
2710 /* We haven't yet initialized TPD2. Do so now. */
c8094d83 2711 tpd2.arg_uses_template_parms
c68b0a84 2712 = alloca (sizeof (int) * nargs);
104bf76a 2713 /* The number of parameters here is the number in the
76a83782
RH
2714 main template, which, as checked in the assertion
2715 above, is NARGS. */
c68b0a84 2716 tpd2.parms = alloca (sizeof (int) * nargs);
c8094d83 2717 tpd2.level =
6c30752f
MM
2718 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2719 }
2720
104bf76a 2721 /* Mark the template parameters. But this time, we're
6c30752f
MM
2722 looking for the template parameters of the main
2723 template, not in the specialization. */
2724 tpd2.current_arg = i;
2725 tpd2.arg_uses_template_parms[i] = 0;
fad205ff 2726 memset (tpd2.parms, 0, sizeof (int) * nargs);
6c30752f
MM
2727 for_each_template_parm (type,
2728 &mark_template_parm,
4f2c9d7e
MM
2729 &tpd2,
2730 NULL);
c8094d83 2731
6c30752f
MM
2732 if (tpd2.arg_uses_template_parms [i])
2733 {
2734 /* The type depended on some template parameters.
2735 If they are fully specialized in the
2736 specialization, that's OK. */
2737 int j;
2738 for (j = 0; j < nargs; ++j)
2739 if (tpd2.parms[j] != 0
2740 && tpd.arg_uses_template_parms [j])
2741 {
0f51ccfc 2742 error ("type %qT of template argument %qE depends "
0cbd7506
MS
2743 "on template parameter(s)",
2744 type,
2745 arg);
6c30752f
MM
2746 break;
2747 }
2748 }
2749 }
2750 }
2751 }
2752
c8094d83 2753 if (retrieve_specialization (maintmpl, specargs,
c7222c02 2754 /*class_specializations_p=*/true))
6c30752f
MM
2755 /* We've already got this specialization. */
2756 return decl;
2757
d8b64f80 2758 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
e1b3e07d
MM
2759 = tree_cons (inner_args, inner_parms,
2760 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
6c30752f
MM
2761 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2762 return decl;
2763}
2764
6ba89f8e
MM
2765/* Check that a template declaration's use of default arguments is not
2766 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
838dfd8a
KH
2767 nonzero if DECL is the thing declared by a primary template.
2768 IS_PARTIAL is nonzero if DECL is a partial specialization. */
6ba89f8e
MM
2769
2770static void
3a978d72 2771check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
6ba89f8e 2772{
d8e178a0 2773 const char *msg;
66191c20
MM
2774 int last_level_to_check;
2775 tree parm_level;
6ba89f8e 2776
c8094d83 2777 /* [temp.param]
6ba89f8e
MM
2778
2779 A default template-argument shall not be specified in a
2780 function template declaration or a function template definition, nor
2781 in the template-parameter-list of the definition of a member of a
2782 class template. */
2783
4f1c5b7d 2784 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
e0942dcd
MM
2785 /* You can't have a function template declaration in a local
2786 scope, nor you can you define a member of a class template in a
2787 local scope. */
2788 return;
2789
6ba89f8e
MM
2790 if (current_class_type
2791 && !TYPE_BEING_DEFINED (current_class_type)
3d7de1fa 2792 && DECL_LANG_SPECIFIC (decl)
5937a6f9
MM
2793 /* If this is either a friend defined in the scope of the class
2794 or a member function. */
6df5158a
NS
2795 && (DECL_FUNCTION_MEMBER_P (decl)
2796 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2797 : DECL_FRIEND_CONTEXT (decl)
2798 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2799 : false)
5937a6f9
MM
2800 /* And, if it was a member function, it really was defined in
2801 the scope of the class. */
6df5158a
NS
2802 && (!DECL_FUNCTION_MEMBER_P (decl)
2803 || DECL_INITIALIZED_IN_CLASS_P (decl)))
6ba89f8e 2804 /* We already checked these parameters when the template was
5937a6f9
MM
2805 declared, so there's no need to do it again now. This function
2806 was defined in class scope, but we're processing it's body now
2807 that the class is complete. */
6ba89f8e
MM
2808 return;
2809
66191c20 2810 /* [temp.param]
c8094d83 2811
66191c20
MM
2812 If a template-parameter has a default template-argument, all
2813 subsequent template-parameters shall have a default
2814 template-argument supplied. */
2815 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2816 {
2817 tree inner_parms = TREE_VALUE (parm_level);
2818 int ntparms = TREE_VEC_LENGTH (inner_parms);
c8094d83 2819 int seen_def_arg_p = 0;
66191c20
MM
2820 int i;
2821
c8094d83 2822 for (i = 0; i < ntparms; ++i)
66191c20
MM
2823 {
2824 tree parm = TREE_VEC_ELT (inner_parms, i);
2825 if (TREE_PURPOSE (parm))
2826 seen_def_arg_p = 1;
2827 else if (seen_def_arg_p)
2828 {
0f51ccfc 2829 error ("no default argument for %qD", TREE_VALUE (parm));
66191c20
MM
2830 /* For better subsequent error-recovery, we indicate that
2831 there should have been a default argument. */
2832 TREE_PURPOSE (parm) = error_mark_node;
2833 }
2834 }
2835 }
2836
6ba89f8e
MM
2837 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2838 /* For an ordinary class template, default template arguments are
2839 allowed at the innermost level, e.g.:
0cbd7506 2840 template <class T = int>
6ba89f8e
MM
2841 struct S {};
2842 but, in a partial specialization, they're not allowed even
2843 there, as we have in [temp.class.spec]:
c8094d83 2844
6ba89f8e 2845 The template parameter list of a specialization shall not
c8094d83 2846 contain default template argument values.
6ba89f8e
MM
2847
2848 So, for a partial specialization, or for a function template,
2849 we look at all of them. */
2850 ;
2851 else
2852 /* But, for a primary class template that is not a partial
2853 specialization we look at all template parameters except the
2854 innermost ones. */
2855 parms = TREE_CHAIN (parms);
2856
2857 /* Figure out what error message to issue. */
2858 if (TREE_CODE (decl) == FUNCTION_DECL)
8653a2c3 2859 msg = "default template arguments may not be used in function templates";
6ba89f8e 2860 else if (is_partial)
8653a2c3 2861 msg = "default template arguments may not be used in partial specializations";
6ba89f8e 2862 else
0f51ccfc 2863 msg = "default argument for template parameter for class enclosing %qD";
6ba89f8e
MM
2864
2865 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2866 /* If we're inside a class definition, there's no need to
104bf76a 2867 examine the parameters to the class itself. On the one
6ba89f8e 2868 hand, they will be checked when the class is defined, and,
0e339752 2869 on the other, default arguments are valid in things like:
0cbd7506
MS
2870 template <class T = double>
2871 struct S { template <class U> void f(U); };
6ba89f8e
MM
2872 Here the default argument for `S' has no bearing on the
2873 declaration of `f'. */
2874 last_level_to_check = template_class_depth (current_class_type) + 1;
2875 else
2876 /* Check everything. */
2877 last_level_to_check = 0;
2878
c8094d83
MS
2879 for (parm_level = parms;
2880 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
66191c20 2881 parm_level = TREE_CHAIN (parm_level))
6ba89f8e 2882 {
66191c20
MM
2883 tree inner_parms = TREE_VALUE (parm_level);
2884 int i;
2885 int ntparms;
6ba89f8e
MM
2886
2887 ntparms = TREE_VEC_LENGTH (inner_parms);
c8094d83 2888 for (i = 0; i < ntparms; ++i)
6ba89f8e
MM
2889 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2890 {
2891 if (msg)
2892 {
33bd39a2 2893 error (msg, decl);
6ba89f8e
MM
2894 msg = 0;
2895 }
2896
2897 /* Clear out the default argument so that we are not
2898 confused later. */
2899 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2900 }
2901
2902 /* At this point, if we're still interested in issuing messages,
2903 they must apply to classes surrounding the object declared. */
2904 if (msg)
c8094d83 2905 msg = "default argument for template parameter for class enclosing %qD";
6ba89f8e
MM
2906 }
2907}
2908
5dd236e2
NS
2909/* Worker for push_template_decl_real, called via
2910 for_each_template_parm. DATA is really an int, indicating the
2911 level of the parameters we are interested in. If T is a template
838dfd8a 2912 parameter of that level, return nonzero. */
5dd236e2
NS
2913
2914static int
3a978d72 2915template_parm_this_level_p (tree t, void* data)
5dd236e2 2916{
6e04241f 2917 int this_level = *(int *)data;
5dd236e2
NS
2918 int level;
2919
2920 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2921 level = TEMPLATE_PARM_LEVEL (t);
2922 else
2923 level = TEMPLATE_TYPE_LEVEL (t);
2924 return level == this_level;
2925}
2926
3ac3d9ea 2927/* Creates a TEMPLATE_DECL for the indicated DECL using the template
f84b4be9
JM
2928 parameters given by current_template_args, or reuses a
2929 previously existing one, if appropriate. Returns the DECL, or an
c8094d83 2930 equivalent one, if it is replaced via a call to duplicate_decls.
6757edfe 2931
d63d5d0c 2932 If IS_FRIEND is true, DECL is a friend declaration. */
3ac3d9ea
MM
2933
2934tree
d63d5d0c 2935push_template_decl_real (tree decl, bool is_friend)
9a3b49ac
MS
2936{
2937 tree tmpl;
f84b4be9 2938 tree args;
9a3b49ac 2939 tree info;
f84b4be9
JM
2940 tree ctx;
2941 int primary;
6ba89f8e 2942 int is_partial;
cfe507be 2943 int new_template_p = 0;
c7222c02
MM
2944 /* True if the template is a member template, in the sense of
2945 [temp.mem]. */
2946 bool member_template_p = false;
6ba89f8e 2947
c0694c4b
MM
2948 if (decl == error_mark_node)
2949 return decl;
2950
6ba89f8e 2951 /* See if this is a partial specialization. */
9188c363 2952 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
6ba89f8e 2953 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
370af2d5 2954 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
6757edfe 2955
d63d5d0c
ILT
2956 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
2957 is_friend = true;
f84b4be9
JM
2958
2959 if (is_friend)
2960 /* For a friend, we want the context of the friend function, not
2961 the type of which it is a friend. */
2962 ctx = DECL_CONTEXT (decl);
4f1c5b7d
MM
2963 else if (CP_DECL_CONTEXT (decl)
2964 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
f84b4be9
JM
2965 /* In the case of a virtual function, we want the class in which
2966 it is defined. */
4f1c5b7d 2967 ctx = CP_DECL_CONTEXT (decl);
f84b4be9 2968 else
dc957d14 2969 /* Otherwise, if we're currently defining some class, the DECL
f84b4be9 2970 is assumed to be a member of the class. */
9188c363 2971 ctx = current_scope ();
f84b4be9 2972
2c73f9f5
ML
2973 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2974 ctx = NULL_TREE;
2975
2976 if (!DECL_CONTEXT (decl))
cb0dbb9a 2977 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 2978
6ba89f8e 2979 /* See if this is a primary template. */
74b846e0 2980 primary = template_parm_scope_p ();
9a3b49ac 2981
83566abf
JM
2982 if (primary)
2983 {
c7222c02
MM
2984 if (DECL_CLASS_SCOPE_P (decl))
2985 member_template_p = true;
2f1b1731
MM
2986 if (TREE_CODE (decl) == TYPE_DECL
2987 && ANON_AGGRNAME_P (DECL_NAME (decl)))
33bd39a2 2988 error ("template class without a name");
717a7d5d 2989 else if (TREE_CODE (decl) == FUNCTION_DECL)
4b0d3cbe 2990 {
717a7d5d
MM
2991 if (DECL_DESTRUCTOR_P (decl))
2992 {
2993 /* [temp.mem]
c8094d83 2994
0cbd7506 2995 A destructor shall not be a member template. */
0f51ccfc 2996 error ("destructor %qD declared as member template", decl);
717a7d5d
MM
2997 return error_mark_node;
2998 }
2999 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3000 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3001 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3002 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3003 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3004 == void_list_node)))
3005 {
c8094d83 3006 /* [basic.stc.dynamic.allocation]
717a7d5d 3007
0cbd7506 3008 An allocation function can be a function
717a7d5d
MM
3009 template. ... Template allocation functions shall
3010 have two or more parameters. */
0f51ccfc 3011 error ("invalid template declaration of %qD", decl);
717a7d5d
MM
3012 return decl;
3013 }
4b0d3cbe 3014 }
8ca4bf25
MM
3015 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3016 && CLASS_TYPE_P (TREE_TYPE (decl)))
2aaf816d
JM
3017 /* OK */;
3018 else
11325dcd 3019 {
0f51ccfc 3020 error ("template declaration of %q#D", decl);
11325dcd
KL
3021 return error_mark_node;
3022 }
83566abf
JM
3023 }
3024
6ba89f8e
MM
3025 /* Check to see that the rules regarding the use of default
3026 arguments are not being violated. */
c8094d83 3027 check_default_tmpl_args (decl, current_template_parms,
6ba89f8e 3028 primary, is_partial);
73aad9b9 3029
6ba89f8e
MM
3030 if (is_partial)
3031 return process_partial_specialization (decl);
d32789d8 3032
9a3b49ac
MS
3033 args = current_template_args ();
3034
c8094d83 3035 if (!ctx
f84b4be9 3036 || TREE_CODE (ctx) == FUNCTION_DECL
a723baf1 3037 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
f84b4be9 3038 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
8d08fdba 3039 {
75650646 3040 if (DECL_LANG_SPECIFIC (decl)
f84b4be9
JM
3041 && DECL_TEMPLATE_INFO (decl)
3042 && DECL_TI_TEMPLATE (decl))
3043 tmpl = DECL_TI_TEMPLATE (decl);
1c10870d
AS
3044 /* If DECL is a TYPE_DECL for a class-template, then there won't
3045 be DECL_LANG_SPECIFIC. The information equivalent to
3046 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
c8094d83 3047 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
1c10870d
AS
3048 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3049 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3050 {
3051 /* Since a template declaration already existed for this
3052 class-type, we must be redeclaring it here. Make sure
0e339752 3053 that the redeclaration is valid. */
1c10870d
AS
3054 redeclare_class_template (TREE_TYPE (decl),
3055 current_template_parms);
3056 /* We don't need to create a new TEMPLATE_DECL; just use the
3057 one we already had. */
3058 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3059 }
f84b4be9 3060 else
786b5245 3061 {
c7222c02
MM
3062 tmpl = build_template_decl (decl, current_template_parms,
3063 member_template_p);
cfe507be
MM
3064 new_template_p = 1;
3065
f84b4be9
JM
3066 if (DECL_LANG_SPECIFIC (decl)
3067 && DECL_TEMPLATE_SPECIALIZATION (decl))
3068 {
3069 /* A specialization of a member template of a template
c6002625 3070 class. */
f84b4be9
JM
3071 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3072 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3073 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3074 }
786b5245 3075 }
8d08fdba
MS
3076 }
3077 else
3078 {
e1a5ccf7 3079 tree a, t, current, parms;
ba4f4e5d 3080 int i;
6633d636 3081
6b9ab5cc
MM
3082 if (TREE_CODE (decl) == TYPE_DECL)
3083 {
ed44da02
MM
3084 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3085 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3086 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3087 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3088 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
6b9ab5cc
MM
3089 else
3090 {
0f51ccfc 3091 error ("%qD does not declare a template type", decl);
6b9ab5cc
MM
3092 return decl;
3093 }
3094 }
f3368a90 3095 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
c91a56d2 3096 {
0f51ccfc 3097 error ("template definition of non-template %q#D", decl);
3ac3d9ea 3098 return decl;
c91a56d2 3099 }
8d08fdba 3100 else
5566b478 3101 tmpl = DECL_TI_TEMPLATE (decl);
c8094d83 3102
c353b8e3 3103 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
c8094d83 3104 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
c353b8e3 3105 && DECL_TEMPLATE_SPECIALIZATION (decl)
c7222c02 3106 && DECL_MEMBER_TEMPLATE_P (tmpl))
98c1c668 3107 {
e1a5ccf7
JM
3108 tree new_tmpl;
3109
3110 /* The declaration is a specialization of a member
3111 template, declared outside the class. Therefore, the
3112 innermost template arguments will be NULL, so we
3113 replace them with the arguments determined by the
3114 earlier call to check_explicit_specialization. */
3115 args = DECL_TI_ARGS (decl);
3116
c8094d83 3117 new_tmpl
c7222c02
MM
3118 = build_template_decl (decl, current_template_parms,
3119 member_template_p);
e1a5ccf7
JM
3120 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3121 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3122 DECL_TI_TEMPLATE (decl) = new_tmpl;
3123 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
c8094d83 3124 DECL_TEMPLATE_INFO (new_tmpl)
e1b3e07d 3125 = tree_cons (tmpl, args, NULL_TREE);
e1a5ccf7 3126
c8094d83
MS
3127 register_specialization (new_tmpl,
3128 most_general_template (tmpl),
d63d5d0c
ILT
3129 args,
3130 is_friend);
e1a5ccf7 3131 return decl;
98c1c668 3132 }
98c1c668 3133
e1a5ccf7 3134 /* Make sure the template headers we got make sense. */
6633d636 3135
e1a5ccf7
JM
3136 parms = DECL_TEMPLATE_PARMS (tmpl);
3137 i = TMPL_PARMS_DEPTH (parms);
3138 if (TMPL_ARGS_DEPTH (args) != i)
98c1c668 3139 {
0f51ccfc 3140 error ("expected %d levels of template parms for %q#D, got %d",
0cbd7506 3141 i, decl, TMPL_ARGS_DEPTH (args));
98c1c668 3142 }
e1a5ccf7
JM
3143 else
3144 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3145 {
3146 a = TMPL_ARGS_LEVEL (args, i);
3147 t = INNERMOST_TEMPLATE_PARMS (parms);
3148
3149 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3150 {
3151 if (current == decl)
0f51ccfc 3152 error ("got %d template parameters for %q#D",
0cbd7506 3153 TREE_VEC_LENGTH (a), decl);
e1a5ccf7 3154 else
0f51ccfc 3155 error ("got %d template parameters for %q#T",
0cbd7506 3156 TREE_VEC_LENGTH (a), current);
33bd39a2 3157 error (" but %d required", TREE_VEC_LENGTH (t));
f1cc0515 3158 return error_mark_node;
e1a5ccf7 3159 }
98c1c668 3160
e1a5ccf7 3161 /* Perhaps we should also check that the parms are used in the
0cbd7506 3162 appropriate qualifying scopes in the declarator? */
6633d636 3163
e1a5ccf7
JM
3164 if (current == decl)
3165 current = ctx;
3166 else
3167 current = TYPE_CONTEXT (current);
3168 }
5566b478 3169 }
8d08fdba 3170
5566b478
MS
3171 DECL_TEMPLATE_RESULT (tmpl) = decl;
3172 TREE_TYPE (tmpl) = TREE_TYPE (decl);
8d08fdba 3173
36a117a5
MM
3174 /* Push template declarations for global functions and types. Note
3175 that we do not try to push a global template friend declared in a
3176 template class; such a thing may well depend on the template
39c01e4c 3177 parameters of the class. */
c8094d83 3178 if (new_template_p && !ctx
36a117a5 3179 && !(is_friend && template_class_depth (current_class_type) > 0))
c6f9f83b 3180 {
d63d5d0c 3181 tmpl = pushdecl_namespace_level (tmpl, is_friend);
c6f9f83b
KL
3182 if (tmpl == error_mark_node)
3183 return error_mark_node;
bd3d082e
KL
3184
3185 /* Hide template friend classes that haven't been declared yet. */
3186 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3187 {
3188 DECL_ANTICIPATED (tmpl) = 1;
3189 DECL_FRIEND_P (tmpl) = 1;
3190 }
c6f9f83b 3191 }
8d08fdba 3192
5566b478 3193 if (primary)
5dd236e2
NS
3194 {
3195 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3196 if (DECL_CONV_FN_P (tmpl))
3197 {
6e04241f
GS
3198 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3199
5dd236e2
NS
3200 /* It is a conversion operator. See if the type converted to
3201 depends on innermost template operands. */
c8094d83 3202
d43f603d
KL
3203 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3204 depth))
5dd236e2
NS
3205 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3206 }
3207 }
5566b478 3208
a692ad2e 3209 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
28ba38e3
KL
3210 back to its most general template. If TMPL is a specialization,
3211 ARGS may only have the innermost set of arguments. Add the missing
3212 argument levels if necessary. */
3213 if (DECL_TEMPLATE_INFO (tmpl))
3214 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3215
e1b3e07d 3216 info = tree_cons (tmpl, args, NULL_TREE);
5566b478 3217
9188c363 3218 if (DECL_IMPLICIT_TYPEDEF_P (decl))
8d08fdba 3219 {
ed44da02
MM
3220 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3221 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
b60ecc04
MM
3222 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3223 /* Don't change the name if we've already set it up. */
3224 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
75650646 3225 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
51c184be 3226 }
2aaf816d 3227 else if (DECL_LANG_SPECIFIC (decl))
5566b478 3228 DECL_TEMPLATE_INFO (decl) = info;
3ac3d9ea
MM
3229
3230 return DECL_TEMPLATE_RESULT (tmpl);
8d08fdba
MS
3231}
3232
6757edfe 3233tree
3a978d72 3234push_template_decl (tree decl)
6757edfe 3235{
d63d5d0c 3236 return push_template_decl_real (decl, false);
6757edfe
MM
3237}
3238
3239/* Called when a class template TYPE is redeclared with the indicated
3240 template PARMS, e.g.:
7fe6899f
MM
3241
3242 template <class T> struct S;
3243 template <class T> struct S {}; */
3244
c8094d83 3245void
3a978d72 3246redeclare_class_template (tree type, tree parms)
7fe6899f 3247{
3d7de1fa 3248 tree tmpl;
6757edfe 3249 tree tmpl_parms;
7fe6899f
MM
3250 int i;
3251
3d7de1fa
MM
3252 if (!TYPE_TEMPLATE_INFO (type))
3253 {
0f51ccfc 3254 error ("%qT is not a template type", type);
3d7de1fa
MM
3255 return;
3256 }
3257
3258 tmpl = TYPE_TI_TEMPLATE (type);
7fe6899f
MM
3259 if (!PRIMARY_TEMPLATE_P (tmpl))
3260 /* The type is nested in some template class. Nothing to worry
3261 about here; there are no new template parameters for the nested
3262 type. */
3263 return;
3264
ee921ddf
MM
3265 if (!parms)
3266 {
3267 error ("template specifiers not specified in declaration of %qD",
3268 tmpl);
3269 return;
3270 }
3271
6757edfe
MM
3272 parms = INNERMOST_TEMPLATE_PARMS (parms);
3273 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3274
7fe6899f
MM
3275 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3276 {
dee15844 3277 error ("previous declaration %q+D", tmpl);
f49d8c52 3278 error ("used %d template parameter(s) instead of %d",
c8094d83 3279 TREE_VEC_LENGTH (tmpl_parms),
f49d8c52 3280 TREE_VEC_LENGTH (parms));
7fe6899f
MM
3281 return;
3282 }
3283
3284 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3285 {
3286 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3287 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3288 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3289 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3290
2649701f
KL
3291 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3292 TEMPLATE_DECL. */
3293 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3294 || (TREE_CODE (tmpl_parm) != TYPE_DECL
3295 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
7fe6899f 3296 {
dee15844 3297 error ("template parameter %q+#D", tmpl_parm);
0f51ccfc 3298 error ("redeclared here as %q#D", parm);
7fe6899f
MM
3299 return;
3300 }
3301
3302 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3303 {
3304 /* We have in [temp.param]:
3305
3306 A template-parameter may not be given default arguments
3307 by two different declarations in the same scope. */
0f51ccfc 3308 error ("redefinition of default argument for %q#D", parm);
ddd2d57e 3309 error ("%J original definition appeared here", tmpl_parm);
7fe6899f
MM
3310 return;
3311 }
3312
3313 if (parm_default != NULL_TREE)
3314 /* Update the previous template parameters (which are the ones
3315 that will really count) with the new default value. */
3316 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
7ce74c5e
MM
3317 else if (tmpl_default != NULL_TREE)
3318 /* Update the new parameters, too; they'll be used as the
3319 parameters for any members. */
3320 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
7fe6899f
MM
3321 }
3322}
75650646 3323
9baa27a9
MM
3324/* Simplify EXPR if it is a non-dependent expression. Returns the
3325 (possibly simplified) expression. */
3326
3327tree
3328fold_non_dependent_expr (tree expr)
3329{
3330 /* If we're in a template, but EXPR isn't value dependent, simplify
3331 it. We're supposed to treat:
c8094d83 3332
9baa27a9
MM
3333 template <typename T> void f(T[1 + 1]);
3334 template <typename T> void f(T[2]);
c8094d83 3335
9baa27a9
MM
3336 as two declarations of the same function, for example. */
3337 if (processing_template_decl
3338 && !type_dependent_expression_p (expr)
7416ab02 3339 && !value_dependent_expression_p (expr))
9baa27a9
MM
3340 {
3341 HOST_WIDE_INT saved_processing_template_decl;
3342
3343 saved_processing_template_decl = processing_template_decl;
3344 processing_template_decl = 0;
3345 expr = tsubst_copy_and_build (expr,
3346 /*args=*/NULL_TREE,
3347 tf_error,
3348 /*in_decl=*/NULL_TREE,
3349 /*function_p=*/false);
3350 processing_template_decl = saved_processing_template_decl;
3351 }
3352 return expr;
3353}
3354
b6ab6892
GB
3355/* EXPR is an expression which is used in a constant-expression context.
3356 For instance, it could be a VAR_DECL with a constant initializer.
3357 Extract the innest constant expression.
c8094d83 3358
8a784e4a
NS
3359 This is basically a more powerful version of
3360 integral_constant_value, which can be used also in templates where
3361 initializers can maintain a syntactic rather than semantic form
3362 (even if they are non-dependent, for access-checking purposes). */
b6ab6892
GB
3363
3364tree
3365fold_decl_constant_value (tree expr)
3366{
4ef69b83
GB
3367 tree const_expr = expr;
3368 do
b6ab6892 3369 {
b6ab6892 3370 expr = fold_non_dependent_expr (const_expr);
4ef69b83 3371 const_expr = integral_constant_value (expr);
b6ab6892 3372 }
4ef69b83 3373 while (expr != const_expr);
b6ab6892 3374
8a784e4a 3375 return expr;
b6ab6892
GB
3376}
3377
3378/* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3379 must be a function or a pointer-to-function type, as specified
3380 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3381 and check that the resulting function has external linkage. */
3382
3383static tree
3384convert_nontype_argument_function (tree type, tree expr)
3385{
3386 tree fns = expr;
3387 tree fn, fn_no_ptr;
3388
3389 fn = instantiate_type (type, fns, tf_none);
3390 if (fn == error_mark_node)
3391 return error_mark_node;
3392
3393 fn_no_ptr = fn;
3394 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3395 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3396
3397 /* [temp.arg.nontype]/1
3398
3399 A template-argument for a non-type, non-template template-parameter
3400 shall be one of:
3401 [...]
3402 -- the address of an object or function with external linkage. */
3403 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3404 {
3405 error ("%qE is not a valid template argument for type %qT "
3406 "because function %qD has not external linkage",
3407 expr, type, fn_no_ptr);
3408 return NULL_TREE;
3409 }
3410
3411 return fn;
3412}
3413
75650646
MM
3414/* Attempt to convert the non-type template parameter EXPR to the
3415 indicated TYPE. If the conversion is successful, return the
dc957d14 3416 converted value. If the conversion is unsuccessful, return
75650646
MM
3417 NULL_TREE if we issued an error message, or error_mark_node if we
3418 did not. We issue error messages for out-and-out bad template
3419 parameters, but not simply because the conversion failed, since we
9baa27a9 3420 might be just trying to do argument deduction. Both TYPE and EXPR
b6ab6892
GB
3421 must be non-dependent.
3422
3423 The conversion follows the special rules described in
3424 [temp.arg.nontype], and it is much more strict than an implicit
3425 conversion.
3426
3427 This function is called twice for each template argument (see
3428 lookup_template_class for a more accurate description of this
3429 problem). This means that we need to handle expressions which
3430 are not valid in a C++ source, but can be created from the
3431 first call (for instance, casts to perform conversions). These
3432 hacks can go away after we fix the double coercion problem. */
75650646
MM
3433
3434static tree
3a978d72 3435convert_nontype_argument (tree type, tree expr)
75650646 3436{
9baa27a9
MM
3437 tree expr_type;
3438
b6ab6892
GB
3439 /* Detect immediately string literals as invalid non-type argument.
3440 This special-case is not needed for correctness (we would easily
3441 catch this later), but only to provide better diagnostic for this
3442 common user mistake. As suggested by DR 100, we do not mention
3443 linkage issues in the diagnostic as this is not the point. */
3444 if (TREE_CODE (expr) == STRING_CST)
3445 {
3446 error ("%qE is not a valid template argument for type %qT "
3447 "because string literals can never be used in this context",
3448 expr, type);
3449 return NULL_TREE;
3450 }
3451
9baa27a9
MM
3452 /* If we are in a template, EXPR may be non-dependent, but still
3453 have a syntactic, rather than semantic, form. For example, EXPR
3454 might be a SCOPE_REF, rather than the VAR_DECL to which the
3455 SCOPE_REF refers. Preserving the qualifying scope is necessary
3456 so that access checking can be performed when the template is
3457 instantiated -- but here we need the resolved form so that we can
3458 convert the argument. */
3459 expr = fold_non_dependent_expr (expr);
3460 expr_type = TREE_TYPE (expr);
75650646 3461
b6ab6892
GB
3462 /* HACK: Due to double coercion, we can get a
3463 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3464 which is the tree that we built on the first call (see
3465 below when coercing to reference to object or to reference to
3466 function). We just strip everything and get to the arg.
3467 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3468 for examples. */
3469 if (TREE_CODE (expr) == NOP_EXPR)
75650646 3470 {
b6ab6892 3471 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
75650646 3472 {
b6ab6892
GB
3473 /* ??? Maybe we could use convert_from_reference here, but we
3474 would need to relax its constraints because the NOP_EXPR
3475 could actually change the type to something more cv-qualified,
3476 and this is not folded by convert_from_reference. */
3477 tree addr = TREE_OPERAND (expr, 0);
3478 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3479 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3480 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3481 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3482 (TREE_TYPE (expr_type),
3483 TREE_TYPE (TREE_TYPE (addr))));
3484
3485 expr = TREE_OPERAND (addr, 0);
3486 expr_type = TREE_TYPE (expr);
75650646
MM
3487 }
3488
b6ab6892
GB
3489 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3490 parameter is a pointer to object, through decay and
3491 qualification conversion. Let's strip everything. */
3492 else if (TYPE_PTROBV_P (type))
75650646 3493 {
b6ab6892
GB
3494 STRIP_NOPS (expr);
3495 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3496 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3497 /* Skip the ADDR_EXPR only if it is part of the decay for
3498 an array. Otherwise, it is part of the original argument
3499 in the source code. */
3500 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3501 expr = TREE_OPERAND (expr, 0);
3502 expr_type = TREE_TYPE (expr);
f3400fe2 3503 }
75650646 3504 }
c61dce3a 3505
b6ab6892 3506 /* [temp.arg.nontype]/5, bullet 1
75650646 3507
b6ab6892
GB
3508 For a non-type template-parameter of integral or enumeration type,
3509 integral promotions (_conv.prom_) and integral conversions
3510 (_conv.integral_) are applied. */
3511 if (INTEGRAL_TYPE_P (type))
75650646 3512 {
75650646
MM
3513 if (!INTEGRAL_TYPE_P (expr_type))
3514 return error_mark_node;
fddabb2c 3515
b6ab6892
GB
3516 expr = fold_decl_constant_value (expr);
3517 /* Notice that there are constant expressions like '4 % 0' which
3518 do not fold into integer constants. */
db02b6b9 3519 if (TREE_CODE (expr) != INTEGER_CST)
b6ab6892
GB
3520 {
3521 error ("%qE is not a valid template argument for type %qT "
3522 "because it is a non-constant expression", expr, type);
3523 return NULL_TREE;
3524 }
75650646 3525
b6ab6892
GB
3526 /* At this point, an implicit conversion does what we want,
3527 because we already know that the expression is of integral
3528 type. */
3529 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3530 if (expr == error_mark_node)
3531 return error_mark_node;
75650646 3532
b6ab6892
GB
3533 /* Conversion was allowed: fold it to a bare integer constant. */
3534 expr = fold (expr);
3535 }
3536 /* [temp.arg.nontype]/5, bullet 2
75650646 3537
b6ab6892
GB
3538 For a non-type template-parameter of type pointer to object,
3539 qualification conversions (_conv.qual_) and the array-to-pointer
3540 conversion (_conv.array_) are applied. */
3541 else if (TYPE_PTROBV_P (type))
3542 {
3543 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
75650646 3544
b6ab6892
GB
3545 A template-argument for a non-type, non-template template-parameter
3546 shall be one of: [...]
75650646 3547
b6ab6892
GB
3548 -- the name of a non-type template-parameter;
3549 -- the address of an object or function with external linkage, [...]
3550 expressed as "& id-expression" where the & is optional if the name
3551 refers to a function or array, or if the corresponding
3552 template-parameter is a reference.
c8094d83 3553
b6ab6892
GB
3554 Here, we do not care about functions, as they are invalid anyway
3555 for a parameter of type pointer-to-object. */
3556 bool constant_address_p =
3557 (TREE_CODE (expr) == ADDR_EXPR
3558 || TREE_CODE (expr_type) == ARRAY_TYPE
3559 || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3560
3561 expr = decay_conversion (expr);
3562 if (expr == error_mark_node)
3563 return error_mark_node;
75650646 3564
b6ab6892
GB
3565 expr = perform_qualification_conversions (type, expr);
3566 if (expr == error_mark_node)
3567 return error_mark_node;
0dc09a61 3568
b6ab6892
GB
3569 if (!constant_address_p)
3570 {
3571 error ("%qE is not a valid template argument for type %qT "
3572 "because it is not a constant pointer", expr, type);
3573 return NULL_TREE;
3574 }
3575 }
3576 /* [temp.arg.nontype]/5, bullet 3
3577
3578 For a non-type template-parameter of type reference to object, no
3579 conversions apply. The type referred to by the reference may be more
3580 cv-qualified than the (otherwise identical) type of the
3581 template-argument. The template-parameter is bound directly to the
3582 template-argument, which must be an lvalue. */
3583 else if (TYPE_REF_OBJ_P (type))
3584 {
3585 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3586 expr_type))
3587 return error_mark_node;
75650646 3588
b6ab6892
GB
3589 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3590 {
3591 error ("%qE is not a valid template argument for type %qT "
3592 "because of conflicts in cv-qualification", expr, type);
3593 return NULL_TREE;
3594 }
c8094d83 3595
b6ab6892
GB
3596 if (!real_lvalue_p (expr))
3597 {
3598 error ("%qE is not a valid template argument for type %qT "
0cbd7506 3599 "because it is not a lvalue", expr, type);
b6ab6892
GB
3600 return NULL_TREE;
3601 }
e6e174e5 3602
b6ab6892 3603 /* [temp.arg.nontype]/1
75650646 3604
b6ab6892
GB
3605 A template-argument for a non-type, non-template template-parameter
3606 shall be one of: [...]
75650646 3607
03fd3f84 3608 -- the address of an object or function with external linkage. */
b6ab6892
GB
3609 if (!DECL_EXTERNAL_LINKAGE_P (expr))
3610 {
3611 error ("%qE is not a valid template argument for type %qT "
3612 "because object %qD has not external linkage",
3613 expr, type, expr);
3614 return NULL_TREE;
3615 }
0dc09a61 3616
b6ab6892
GB
3617 expr = build_nop (type, build_address (expr));
3618 }
3619 /* [temp.arg.nontype]/5, bullet 4
3620
3621 For a non-type template-parameter of type pointer to function, only
3622 the function-to-pointer conversion (_conv.func_) is applied. If the
3623 template-argument represents a set of overloaded functions (or a
3624 pointer to such), the matching function is selected from the set
3625 (_over.over_). */
3626 else if (TYPE_PTRFN_P (type))
3627 {
3628 /* If the argument is a template-id, we might not have enough
2c164de6 3629 context information to decay the pointer. */
b6ab6892
GB
3630 if (!type_unknown_p (expr_type))
3631 {
3632 expr = decay_conversion (expr);
3633 if (expr == error_mark_node)
3634 return error_mark_node;
3635 }
75650646 3636
b6ab6892
GB
3637 expr = convert_nontype_argument_function (type, expr);
3638 if (!expr || expr == error_mark_node)
3639 return expr;
3640 }
3641 /* [temp.arg.nontype]/5, bullet 5
75650646 3642
b6ab6892
GB
3643 For a non-type template-parameter of type reference to function, no
3644 conversions apply. If the template-argument represents a set of
3645 overloaded functions, the matching function is selected from the set
3646 (_over.over_). */
3647 else if (TYPE_REFFN_P (type))
3648 {
3649 if (TREE_CODE (expr) == ADDR_EXPR)
3650 {
3651 error ("%qE is not a valid template argument for type %qT "
3652 "because it is a pointer", expr, type);
3653 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3654 return NULL_TREE;
3655 }
75650646 3656
b6ab6892
GB
3657 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3658 if (!expr || expr == error_mark_node)
3659 return expr;
75650646 3660
7866705a 3661 expr = build_nop (type, build_address (expr));
b6ab6892
GB
3662 }
3663 /* [temp.arg.nontype]/5, bullet 6
75650646 3664
b6ab6892
GB
3665 For a non-type template-parameter of type pointer to member function,
3666 no conversions apply. If the template-argument represents a set of
3667 overloaded member functions, the matching member function is selected
3668 from the set (_over.over_). */
3669 else if (TYPE_PTRMEMFUNC_P (type))
3670 {
3671 expr = instantiate_type (type, expr, tf_none);
3672 if (expr == error_mark_node)
3673 return error_mark_node;
75650646 3674
b6ab6892
GB
3675 /* There is no way to disable standard conversions in
3676 resolve_address_of_overloaded_function (called by
3677 instantiate_type). It is possible that the call succeeded by
3678 converting &B::I to &D::I (where B is a base of D), so we need
3679 to reject this conversion here.
75650646 3680
b6ab6892
GB
3681 Actually, even if there was a way to disable standard conversions,
3682 it would still be better to reject them here so that we can
3683 provide a superior diagnostic. */
3684 if (!same_type_p (TREE_TYPE (expr), type))
3685 {
3686 /* Make sure we are just one standard conversion off. */
3687 gcc_assert (can_convert (type, TREE_TYPE (expr)));
3688 error ("%qE is not a valid template argument for type %qT "
3689 "because it is of type %qT", expr, type,
3690 TREE_TYPE (expr));
3691 inform ("standard conversions are not allowed in this context");
3692 return NULL_TREE;
3693 }
3694 }
3695 /* [temp.arg.nontype]/5, bullet 7
59e7a901 3696
b6ab6892
GB
3697 For a non-type template-parameter of type pointer to data member,
3698 qualification conversions (_conv.qual_) are applied. */
3699 else if (TYPE_PTRMEM_P (type))
3700 {
3701 expr = perform_qualification_conversions (type, expr);
3702 if (expr == error_mark_node)
75650646 3703 return expr;
75650646 3704 }
b6ab6892
GB
3705 /* A template non-type parameter must be one of the above. */
3706 else
3707 gcc_unreachable ();
75650646 3708
b6ab6892
GB
3709 /* Sanity check: did we actually convert the argument to the
3710 right type? */
3711 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3712 return expr;
75650646
MM
3713}
3714
b6ab6892 3715
c8094d83
MS
3716/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3717 template template parameters. Both PARM_PARMS and ARG_PARMS are
3718 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
744fac59 3719 or PARM_DECL.
c8094d83
MS
3720
3721 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
744fac59
KL
3722 the case, then extra parameters must have default arguments.
3723
3724 Consider the example:
3725 template <class T, class Allocator = allocator> class vector;
3726 template<template <class U> class TT> class C;
3727
c8094d83
MS
3728 C<vector> is a valid instantiation. PARM_PARMS for the above code
3729 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3730 T and Allocator) and OUTER_ARGS contains the argument that is used to
744fac59
KL
3731 substitute the TT parameter. */
3732
3733static int
c8094d83 3734coerce_template_template_parms (tree parm_parms,
0cbd7506
MS
3735 tree arg_parms,
3736 tsubst_flags_t complain,
3a978d72 3737 tree in_decl,
0cbd7506 3738 tree outer_args)
744fac59
KL
3739{
3740 int nparms, nargs, i;
3741 tree parm, arg;
3742
50bc768d
NS
3743 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3744 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
744fac59
KL
3745
3746 nparms = TREE_VEC_LENGTH (parm_parms);
3747 nargs = TREE_VEC_LENGTH (arg_parms);
3748
3749 /* The rule here is opposite of coerce_template_parms. */
3750 if (nargs < nparms
3751 || (nargs > nparms
3752 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3753 return 0;
3754
3755 for (i = 0; i < nparms; ++i)
3756 {
3757 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3758 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3759
3760 if (arg == NULL_TREE || arg == error_mark_node
0cbd7506 3761 || parm == NULL_TREE || parm == error_mark_node)
744fac59
KL
3762 return 0;
3763
3764 if (TREE_CODE (arg) != TREE_CODE (parm))
0cbd7506 3765 return 0;
744fac59
KL
3766
3767 switch (TREE_CODE (parm))
3768 {
3769 case TYPE_DECL:
3770 break;
3771
3772 case TEMPLATE_DECL:
3773 /* We encounter instantiations of templates like
3774 template <template <template <class> class> class TT>
3775 class C; */
700466c2
JM
3776 {
3777 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3778 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3779
8c6ab2db
NS
3780 if (!coerce_template_template_parms
3781 (parmparm, argparm, complain, in_decl, outer_args))
700466c2
JM
3782 return 0;
3783 }
3784 break;
744fac59
KL
3785
3786 case PARM_DECL:
3787 /* The tsubst call is used to handle cases such as
00bdb87f
KL
3788
3789 template <int> class C {};
3790 template <class T, template <T> class TT> class D {};
3791 D<int, C> d;
3792
744fac59 3793 i.e. the parameter list of TT depends on earlier parameters. */
00bdb87f
KL
3794 if (!dependent_type_p (TREE_TYPE (arg))
3795 && !same_type_p
3796 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3797 TREE_TYPE (arg)))
744fac59
KL
3798 return 0;
3799 break;
c8094d83 3800
744fac59 3801 default:
315fb5db 3802 gcc_unreachable ();
744fac59
KL
3803 }
3804 }
3805 return 1;
3806}
3807
8b5b8b7c
MM
3808/* Convert the indicated template ARG as necessary to match the
3809 indicated template PARM. Returns the converted ARG, or
c2ea3a40
NS
3810 error_mark_node if the conversion was unsuccessful. Error and
3811 warning messages are issued under control of COMPLAIN. This
3812 conversion is for the Ith parameter in the parameter list. ARGS is
3813 the full set of template arguments deduced so far. */
8b5b8b7c
MM
3814
3815static tree
c8094d83 3816convert_template_argument (tree parm,
0cbd7506
MS
3817 tree arg,
3818 tree args,
3819 tsubst_flags_t complain,
3820 int i,
3821 tree in_decl)
8b5b8b7c
MM
3822{
3823 tree val;
3824 tree inner_args;
3825 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
c8094d83 3826
f9a7ae04 3827 inner_args = INNERMOST_TEMPLATE_ARGS (args);
8b5b8b7c 3828
c8094d83 3829 if (TREE_CODE (arg) == TREE_LIST
a5ac359a 3830 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
c8094d83 3831 {
8b5b8b7c
MM
3832 /* The template argument was the name of some
3833 member function. That's usually
0e339752 3834 invalid, but static members are OK. In any
8b5b8b7c
MM
3835 case, grab the underlying fields/functions
3836 and issue an error later if required. */
3837 arg = TREE_VALUE (arg);
3838 TREE_TYPE (arg) = unknown_type_node;
3839 }
3840
3841 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3842 requires_type = (TREE_CODE (parm) == TYPE_DECL
3843 || requires_tmpl_type);
3844
cbd63935
KL
3845 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3846 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3847 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3848 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
c8094d83 3849
b8c6534b
KL
3850 if (is_tmpl_type
3851 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3852 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
8b5b8b7c 3853 arg = TYPE_STUB_DECL (arg);
8b5b8b7c 3854
2f939d94 3855 is_type = TYPE_P (arg) || is_tmpl_type;
8b5b8b7c
MM
3856
3857 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3858 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3859 {
0f51ccfc 3860 pedwarn ("to refer to a type member of a template parameter, "
0cbd7506 3861 "use %<typename %E%>", arg);
c8094d83 3862
8b5b8b7c 3863 arg = make_typename_type (TREE_OPERAND (arg, 0),
3baa501d 3864 TREE_OPERAND (arg, 1),
fc6a28d7 3865 typename_type,
c2ea3a40 3866 complain & tf_error);
8b5b8b7c
MM
3867 is_type = 1;
3868 }
3869 if (is_type != requires_type)
3870 {
3871 if (in_decl)
3872 {
c2ea3a40 3873 if (complain & tf_error)
8b5b8b7c 3874 {
0f51ccfc 3875 error ("type/value mismatch at argument %d in template "
0cbd7506
MS
3876 "parameter list for %qD",
3877 i + 1, in_decl);
8b5b8b7c 3878 if (is_type)
0f51ccfc 3879 error (" expected a constant of type %qT, got %qT",
0cbd7506
MS
3880 TREE_TYPE (parm),
3881 (is_tmpl_type ? DECL_NAME (arg) : arg));
d12a7283 3882 else if (requires_tmpl_type)
0f51ccfc 3883 error (" expected a class template, got %qE", arg);
8b5b8b7c 3884 else
0f51ccfc 3885 error (" expected a type, got %qE", arg);
8b5b8b7c
MM
3886 }
3887 }
3888 return error_mark_node;
3889 }
3890 if (is_tmpl_type ^ requires_tmpl_type)
3891 {
c2ea3a40 3892 if (in_decl && (complain & tf_error))
8b5b8b7c 3893 {
0f51ccfc 3894 error ("type/value mismatch at argument %d in template "
0cbd7506
MS
3895 "parameter list for %qD",
3896 i + 1, in_decl);
8b5b8b7c 3897 if (is_tmpl_type)
0f51ccfc 3898 error (" expected a type, got %qT", DECL_NAME (arg));
8b5b8b7c 3899 else
0f51ccfc 3900 error (" expected a class template, got %qT", arg);
8b5b8b7c
MM
3901 }
3902 return error_mark_node;
3903 }
c8094d83 3904
8b5b8b7c
MM
3905 if (is_type)
3906 {
3907 if (requires_tmpl_type)
3908 {
b8c6534b
KL
3909 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3910 /* The number of argument required is not known yet.
3911 Just accept it for now. */
3912 val = TREE_TYPE (arg);
8b5b8b7c
MM
3913 else
3914 {
b8c6534b
KL
3915 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3916 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3917
3918 if (coerce_template_template_parms (parmparm, argparm,
3919 complain, in_decl,
3920 inner_args))
8b5b8b7c 3921 {
b8c6534b 3922 val = arg;
c8094d83
MS
3923
3924 /* TEMPLATE_TEMPLATE_PARM node is preferred over
b8c6534b 3925 TEMPLATE_DECL. */
c8094d83 3926 if (val != error_mark_node
b8c6534b
KL
3927 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3928 val = TREE_TYPE (val);
8b5b8b7c 3929 }
b8c6534b
KL
3930 else
3931 {
c2ea3a40 3932 if (in_decl && (complain & tf_error))
b8c6534b 3933 {
0f51ccfc 3934 error ("type/value mismatch at argument %d in "
0cbd7506
MS
3935 "template parameter list for %qD",
3936 i + 1, in_decl);
0f51ccfc 3937 error (" expected a template of type %qD, got %qD",
0cbd7506 3938 parm, arg);
b8c6534b 3939 }
c8094d83 3940
b8c6534b
KL
3941 val = error_mark_node;
3942 }
8b5b8b7c
MM
3943 }
3944 }
3945 else
058b15c1 3946 val = arg;
685e39c2
MM
3947 /* We only form one instance of each template specialization.
3948 Therefore, if we use a non-canonical variant (i.e., a
3949 typedef), any future messages referring to the type will use
3950 the typedef, which is confusing if those future uses do not
3951 themselves also use the typedef. */
3952 if (TYPE_P (val))
3953 val = canonical_type_variant (val);
8b5b8b7c
MM
3954 }
3955 else
3956 {
4393e105 3957 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
8b5b8b7c 3958
11b810f1 3959 if (invalid_nontype_parm_type_p (t, complain))
0cbd7506 3960 return error_mark_node;
c8094d83 3961
d768a589 3962 if (!uses_template_parms (arg) && !uses_template_parms (t))
8b5b8b7c
MM
3963 /* We used to call digest_init here. However, digest_init
3964 will report errors, which we don't want when complain
3965 is zero. More importantly, digest_init will try too
3966 hard to convert things: for example, `0' should not be
3967 converted to pointer type at this point according to
3968 the standard. Accepting this is not merely an
3969 extension, since deciding whether or not these
3970 conversions can occur is part of determining which
dc957d14 3971 function template to call, or whether a given explicit
0e339752 3972 argument specification is valid. */
8b5b8b7c
MM
3973 val = convert_nontype_argument (t, arg);
3974 else
3975 val = arg;
3976
3977 if (val == NULL_TREE)
3978 val = error_mark_node;
c2ea3a40 3979 else if (val == error_mark_node && (complain & tf_error))
0f51ccfc 3980 error ("could not convert template argument %qE to %qT", arg, t);
8b5b8b7c
MM
3981 }
3982
3983 return val;
3984}
3985
3986/* Convert all template arguments to their appropriate types, and
3987 return a vector containing the innermost resulting template
c2ea3a40 3988 arguments. If any error occurs, return error_mark_node. Error and
3e4a3562 3989 warning messages are issued under control of COMPLAIN.
75650646 3990
838dfd8a 3991 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
75650646
MM
3992 provided in ARGLIST, or else trailing parameters must have default
3993 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
6dfbb909 3994 deduction for any unspecified trailing arguments. */
c8094d83 3995
8d08fdba 3996static tree
c8094d83 3997coerce_template_parms (tree parms,
0cbd7506
MS
3998 tree args,
3999 tree in_decl,
3a978d72
NN
4000 tsubst_flags_t complain,
4001 int require_all_arguments)
8d08fdba 4002{
a292b002 4003 int nparms, nargs, i, lost = 0;
e4a84209 4004 tree inner_args;
8b5b8b7c
MM
4005 tree new_args;
4006 tree new_inner_args;
a292b002 4007
f9a7ae04 4008 inner_args = INNERMOST_TEMPLATE_ARGS (args);
bf12d54d 4009 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
a292b002
MS
4010 nparms = TREE_VEC_LENGTH (parms);
4011
4012 if (nargs > nparms
4013 || (nargs < nparms
75650646 4014 && require_all_arguments
a292b002 4015 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
8d08fdba 4016 {
c8094d83 4017 if (complain & tf_error)
75650646 4018 {
33bd39a2 4019 error ("wrong number of template arguments (%d, should be %d)",
0cbd7506 4020 nargs, nparms);
c8094d83 4021
75650646 4022 if (in_decl)
dee15844 4023 error ("provided for %q+D", in_decl);
75650646
MM
4024 }
4025
8d08fdba
MS
4026 return error_mark_node;
4027 }
4028
f31c0a32 4029 new_inner_args = make_tree_vec (nparms);
8b5b8b7c
MM
4030 new_args = add_outermost_template_args (args, new_inner_args);
4031 for (i = 0; i < nparms; i++)
8d08fdba 4032 {
8b5b8b7c
MM
4033 tree arg;
4034 tree parm;
e4a84209 4035
8b5b8b7c
MM
4036 /* Get the Ith template parameter. */
4037 parm = TREE_VEC_ELT (parms, i);
75650646 4038
8b5b8b7c 4039 /* Calculate the Ith argument. */
bf12d54d 4040 if (i < nargs)
8b5b8b7c 4041 arg = TREE_VEC_ELT (inner_args, i);
ffd49b19 4042 else if (require_all_arguments)
04c06002 4043 /* There must be a default arg in this case. */
a91db711
NS
4044 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
4045 complain, in_decl);
ffd49b19
NS
4046 else
4047 break;
c8094d83 4048
50bc768d 4049 gcc_assert (arg);
ffd49b19 4050 if (arg == error_mark_node)
e34b0922
KL
4051 {
4052 if (complain & tf_error)
4053 error ("template argument %d is invalid", i + 1);
4054 }
c8094d83
MS
4055 else
4056 arg = convert_template_argument (TREE_VALUE (parm),
8b5b8b7c 4057 arg, new_args, complain, i,
c8094d83
MS
4058 in_decl);
4059
8b5b8b7c 4060 if (arg == error_mark_node)
8d08fdba 4061 lost++;
8b5b8b7c 4062 TREE_VEC_ELT (new_inner_args, i) = arg;
8d08fdba 4063 }
8b5b8b7c 4064
8d08fdba
MS
4065 if (lost)
4066 return error_mark_node;
8b5b8b7c
MM
4067
4068 return new_inner_args;
8d08fdba
MS
4069}
4070
34016c81
JM
4071/* Returns 1 if template args OT and NT are equivalent. */
4072
d8e178a0 4073static int
3a978d72 4074template_args_equal (tree ot, tree nt)
34016c81
JM
4075{
4076 if (nt == ot)
4077 return 1;
74601d7c 4078
34016c81
JM
4079 if (TREE_CODE (nt) == TREE_VEC)
4080 /* For member templates */
74601d7c
KL
4081 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4082 else if (TYPE_P (nt))
660845bf 4083 return TYPE_P (ot) && same_type_p (ot, nt);
74601d7c
KL
4084 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4085 return 0;
34016c81 4086 else
c8a209ca 4087 return cp_tree_equal (ot, nt);
34016c81
JM
4088}
4089
4090/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
f84b4be9
JM
4091 of template arguments. Returns 0 otherwise. */
4092
6757edfe 4093int
3a978d72 4094comp_template_args (tree oldargs, tree newargs)
5566b478
MS
4095{
4096 int i;
4097
386b8a85
JM
4098 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4099 return 0;
4100
5566b478
MS
4101 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4102 {
4103 tree nt = TREE_VEC_ELT (newargs, i);
4104 tree ot = TREE_VEC_ELT (oldargs, i);
4105
34016c81 4106 if (! template_args_equal (ot, nt))
61a127b3 4107 return 0;
5566b478
MS
4108 }
4109 return 1;
4110}
4111
8d08fdba
MS
4112/* Given class template name and parameter list, produce a user-friendly name
4113 for the instantiation. */
e92cc029 4114
8d08fdba 4115static char *
3a978d72 4116mangle_class_name_for_template (const char* name, tree parms, tree arglist)
8d08fdba
MS
4117{
4118 static struct obstack scratch_obstack;
4119 static char *scratch_firstobj;
4120 int i, nparms;
8d08fdba
MS
4121
4122 if (!scratch_firstobj)
fc378698 4123 gcc_obstack_init (&scratch_obstack);
8d08fdba
MS
4124 else
4125 obstack_free (&scratch_obstack, scratch_firstobj);
fc378698 4126 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
8d08fdba 4127
18e314ad
GS
4128#define ccat(C) obstack_1grow (&scratch_obstack, (C));
4129#define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
8d08fdba
MS
4130
4131 cat (name);
4132 ccat ('<');
4133 nparms = TREE_VEC_LENGTH (parms);
f9a7ae04 4134 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
50bc768d 4135 gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
8d08fdba
MS
4136 for (i = 0; i < nparms; i++)
4137 {
a292b002
MS
4138 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4139 tree arg = TREE_VEC_ELT (arglist, i);
8d08fdba
MS
4140
4141 if (i)
4142 ccat (',');
4143
a292b002 4144 if (TREE_CODE (parm) == TYPE_DECL)
8d08fdba 4145 {
761f0855 4146 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
8d08fdba
MS
4147 continue;
4148 }
73b0fce8
KL
4149 else if (TREE_CODE (parm) == TEMPLATE_DECL)
4150 {
4151 if (TREE_CODE (arg) == TEMPLATE_DECL)
2c73f9f5 4152 {
c8094d83 4153 /* Already substituted with real template. Just output
2c73f9f5 4154 the template name here */
0cbd7506
MS
4155 tree context = DECL_CONTEXT (arg);
4156 if (context)
4157 {
4158 /* The template may be defined in a namespace, or
4159 may be a member template. */
4160 gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
50bc768d
NS
4161 || CLASS_TYPE_P (context));
4162 cat (decl_as_string (DECL_CONTEXT (arg),
4163 TFF_PLAIN_IDENTIFIER));
4164 cat ("::");
2c73f9f5
ML
4165 }
4166 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4167 }
73b0fce8 4168 else
f4f206f4 4169 /* Output the parameter declaration. */
761f0855 4170 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
73b0fce8
KL
4171 continue;
4172 }
8d08fdba 4173 else
50bc768d 4174 gcc_assert (TREE_CODE (parm) == PARM_DECL);
8d08fdba 4175
8d08fdba
MS
4176 /* No need to check arglist against parmlist here; we did that
4177 in coerce_template_parms, called from lookup_template_class. */
761f0855 4178 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
8d08fdba
MS
4179 }
4180 {
4181 char *bufp = obstack_next_free (&scratch_obstack);
4182 int offset = 0;
4183 while (bufp[offset - 1] == ' ')
4184 offset--;
4185 obstack_blank_fast (&scratch_obstack, offset);
4186
4187 /* B<C<char> >, not B<C<char>> */
4188 if (bufp[offset - 1] == '>')
4189 ccat (' ');
4190 }
4191 ccat ('>');
4192 ccat ('\0');
4193 return (char *) obstack_base (&scratch_obstack);
8d08fdba
MS
4194}
4195
bd6dd845 4196static tree
3a978d72 4197classtype_mangled_name (tree t)
5566b478
MS
4198{
4199 if (CLASSTYPE_TEMPLATE_INFO (t)
36a117a5
MM
4200 /* Specializations have already had their names set up in
4201 lookup_template_class. */
370af2d5 4202 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9fbf56f7
MM
4203 {
4204 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4205
36a117a5
MM
4206 /* For non-primary templates, the template parameters are
4207 implicit from their surrounding context. */
9fbf56f7
MM
4208 if (PRIMARY_TEMPLATE_P (tmpl))
4209 {
4210 tree name = DECL_NAME (tmpl);
4211 char *mangled_name = mangle_class_name_for_template
c8094d83 4212 (IDENTIFIER_POINTER (name),
9fbf56f7
MM
4213 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4214 CLASSTYPE_TI_ARGS (t));
4215 tree id = get_identifier (mangled_name);
4216 IDENTIFIER_TEMPLATE (id) = name;
4217 return id;
4218 }
5566b478 4219 }
9fbf56f7
MM
4220
4221 return TYPE_IDENTIFIER (t);
5566b478
MS
4222}
4223
4224static void
3a978d72 4225add_pending_template (tree d)
5566b478 4226{
3ae18eaf
JM
4227 tree ti = (TYPE_P (d)
4228 ? CLASSTYPE_TEMPLATE_INFO (d)
4229 : DECL_TEMPLATE_INFO (d));
46ccf50a 4230 tree pt;
3ae18eaf 4231 int level;
e92cc029 4232
824b9a4c 4233 if (TI_PENDING_TEMPLATE_FLAG (ti))
5566b478
MS
4234 return;
4235
3ae18eaf
JM
4236 /* We are called both from instantiate_decl, where we've already had a
4237 tinst_level pushed, and instantiate_template, where we haven't.
4238 Compensate. */
4239 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4240
4241 if (level)
4242 push_tinst_level (d);
4243
46ccf50a
JM
4244 pt = tree_cons (current_tinst_level, d, NULL_TREE);
4245 if (last_pending_template)
4246 TREE_CHAIN (last_pending_template) = pt;
4247 else
4248 pending_templates = pt;
4249
4250 last_pending_template = pt;
4251
824b9a4c 4252 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3ae18eaf
JM
4253
4254 if (level)
4255 pop_tinst_level ();
5566b478
MS
4256}
4257
386b8a85 4258
4ba126e4
MM
4259/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4260 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4261 documentation for TEMPLATE_ID_EXPR. */
386b8a85
JM
4262
4263tree
3a978d72 4264lookup_template_function (tree fns, tree arglist)
386b8a85 4265{
2c73f9f5 4266 tree type;
050367a3 4267
4ba126e4
MM
4268 if (fns == error_mark_node || arglist == error_mark_node)
4269 return error_mark_node;
4270
50bc768d 4271 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4230cec2
NS
4272 gcc_assert (fns && (is_overloaded_fn (fns)
4273 || TREE_CODE (fns) == IDENTIFIER_NODE));
4ba126e4 4274
50ad9642
MM
4275 if (BASELINK_P (fns))
4276 {
f293ce4b
RS
4277 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4278 unknown_type_node,
4279 BASELINK_FUNCTIONS (fns),
4280 arglist);
50ad9642
MM
4281 return fns;
4282 }
4283
2c73f9f5
ML
4284 type = TREE_TYPE (fns);
4285 if (TREE_CODE (fns) == OVERLOAD || !type)
4286 type = unknown_type_node;
c8094d83 4287
f293ce4b 4288 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
386b8a85
JM
4289}
4290
a2b60a0e
MM
4291/* Within the scope of a template class S<T>, the name S gets bound
4292 (in build_self_reference) to a TYPE_DECL for the class, not a
4293 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4294 or one of its enclosing classes, and that type is a template,
4295 return the associated TEMPLATE_DECL. Otherwise, the original
4296 DECL is returned. */
4297
a723baf1 4298tree
3a978d72 4299maybe_get_template_decl_from_type_decl (tree decl)
a2b60a0e
MM
4300{
4301 return (decl != NULL_TREE
c8094d83 4302 && TREE_CODE (decl) == TYPE_DECL
a2b60a0e 4303 && DECL_ARTIFICIAL (decl)
511b60ff 4304 && CLASS_TYPE_P (TREE_TYPE (decl))
c8094d83 4305 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
a2b60a0e
MM
4306 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4307}
386b8a85 4308
8d08fdba
MS
4309/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4310 parameters, find the desired type.
4311
4312 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8d08fdba
MS
4313
4314 IN_DECL, if non-NULL, is the template declaration we are trying to
c8094d83 4315 instantiate.
75650646 4316
838dfd8a 4317 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
36a117a5 4318 the class we are looking up.
c8094d83 4319
c2ea3a40 4320 Issue error and warning messages under control of COMPLAIN.
36a117a5 4321
75650646
MM
4322 If the template class is really a local class in a template
4323 function, then the FUNCTION_CONTEXT is the function in which it is
c8094d83 4324 being instantiated.
b6ab6892
GB
4325
4326 ??? Note that this function is currently called *twice* for each
4327 template-id: the first time from the parser, while creating the
4328 incomplete type (finish_template_type), and the second type during the
4329 real instantiation (instantiate_template_class). This is surely something
4330 that we want to avoid. It also causes some problems with argument
4331 coercion (see convert_nontype_argument for more information on this). */
e92cc029 4332
8d08fdba 4333tree
c8094d83 4334lookup_template_class (tree d1,
0cbd7506
MS
4335 tree arglist,
4336 tree in_decl,
4337 tree context,
4338 int entering_scope,
4339 tsubst_flags_t complain)
8d08fdba 4340{
a703fb38 4341 tree template = NULL_TREE, parmlist;
dbfe2124 4342 tree t;
c8094d83 4343
fd295cb2 4344 timevar_push (TV_NAME_LOOKUP);
c8094d83 4345
5566b478
MS
4346 if (TREE_CODE (d1) == IDENTIFIER_NODE)
4347 {
90ea9897
MM
4348 tree value = innermost_non_namespace_value (d1);
4349 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4350 template = value;
73b0fce8
KL
4351 else
4352 {
2c73f9f5
ML
4353 if (context)
4354 push_decl_namespace (context);
10e6657a 4355 template = lookup_name (d1);
3ebc5c52 4356 template = maybe_get_template_decl_from_type_decl (template);
2c73f9f5
ML
4357 if (context)
4358 pop_decl_namespace ();
73b0fce8 4359 }
8d019cef
JM
4360 if (template)
4361 context = DECL_CONTEXT (template);
5566b478 4362 }
c91a56d2
MS
4363 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4364 {
802dbc34
JM
4365 tree type = TREE_TYPE (d1);
4366
4367 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4368 an implicit typename for the second A. Deal with it. */
4369 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4370 type = TREE_TYPE (type);
c8094d83 4371
802dbc34 4372 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 4373 {
802dbc34 4374 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
4375 d1 = DECL_NAME (template);
4376 }
c91a56d2 4377 }
c8094d83 4378 else if (TREE_CODE (d1) == ENUMERAL_TYPE
2f939d94 4379 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5566b478 4380 {
ed44da02 4381 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
4382 d1 = DECL_NAME (template);
4383 }
93cdc044 4384 else if (TREE_CODE (d1) == TEMPLATE_DECL
17aec3eb 4385 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
93cdc044
JM
4386 {
4387 template = d1;
4388 d1 = DECL_NAME (template);
4389 context = DECL_CONTEXT (template);
4390 }
8d08fdba 4391
90ea9897 4392 /* Issue an error message if we didn't find a template. */
8d08fdba 4393 if (! template)
f3400fe2 4394 {
c2ea3a40 4395 if (complain & tf_error)
0cbd7506 4396 error ("%qT is not a template", d1);
fd295cb2 4397 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
f3400fe2 4398 }
2c73f9f5 4399
a87b4257 4400 if (TREE_CODE (template) != TEMPLATE_DECL
0cbd7506 4401 /* Make sure it's a user visible template, if it was named by
42eaed49
NS
4402 the user. */
4403 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4404 && !PRIMARY_TEMPLATE_P (template)))
8d08fdba 4405 {
c2ea3a40 4406 if (complain & tf_error)
0cbd7506
MS
4407 {
4408 error ("non-template type %qT used as a template", d1);
4409 if (in_decl)
dee15844 4410 error ("for template declaration %q+D", in_decl);
f9c244b8 4411 }
fd295cb2 4412 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 4413 }
8d08fdba 4414
42eaed49 4415 complain &= ~tf_user;
c8094d83 4416
73b0fce8
KL
4417 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4418 {
4419 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
0cbd7506 4420 template arguments */
73b0fce8 4421
1899c3a4 4422 tree parm;
73b0fce8
KL
4423 tree arglist2;
4424
73b0fce8
KL
4425 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4426
4f96ff63
KL
4427 /* Consider an example where a template template parameter declared as
4428
4429 template <class T, class U = std::allocator<T> > class TT
4430
c8094d83
MS
4431 The template parameter level of T and U are one level larger than
4432 of TT. To proper process the default argument of U, say when an
4f96ff63 4433 instantiation `TT<int>' is seen, we need to build the full
342cea95
KL
4434 arguments containing {int} as the innermost level. Outer levels,
4435 available when not appearing as default template argument, can be
4436 obtained from `current_template_args ()'.
4f96ff63 4437
342cea95
KL
4438 Suppose that TT is later substituted with std::vector. The above
4439 instantiation is `TT<int, std::allocator<T> >' with TT at
4440 level 1, and T at level 2, while the template arguments at level 1
4441 becomes {std::vector} and the inner level 2 is {int}. */
4442
4443 if (current_template_parms)
4f96ff63
KL
4444 arglist = add_to_template_args (current_template_args (), arglist);
4445
f9c244b8 4446 arglist2 = coerce_template_parms (parmlist, arglist, template,
0cbd7506 4447 complain, /*require_all_args=*/1);
3e4a3562 4448 if (arglist2 == error_mark_node
544aef8c 4449 || (!uses_template_parms (arglist2)
3e4a3562 4450 && check_instantiated_args (template, arglist2, complain)))
0cbd7506 4451 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
73b0fce8 4452
dac65501 4453 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
fd295cb2 4454 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
73b0fce8 4455 }
c8094d83 4456 else
8d08fdba 4457 {
36a117a5 4458 tree template_type = TREE_TYPE (template);
7ac7b28f 4459 tree gen_tmpl;
36a117a5
MM
4460 tree type_decl;
4461 tree found = NULL_TREE;
4462 int arg_depth;
4463 int parm_depth;
dbfe2124 4464 int is_partial_instantiation;
830bfa74 4465
7ac7b28f
MM
4466 gen_tmpl = most_general_template (template);
4467 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
4468 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4469 arg_depth = TMPL_ARGS_DEPTH (arglist);
4470
4471 if (arg_depth == 1 && parm_depth > 1)
4472 {
39c01e4c 4473 /* We've been given an incomplete set of template arguments.
36a117a5
MM
4474 For example, given:
4475
4476 template <class T> struct S1 {
0cbd7506 4477 template <class U> struct S2 {};
36a117a5 4478 template <class U> struct S2<U*> {};
0cbd7506 4479 };
c8094d83 4480
36a117a5
MM
4481 we will be called with an ARGLIST of `U*', but the
4482 TEMPLATE will be `template <class T> template
4483 <class U> struct S1<T>::S2'. We must fill in the missing
4484 arguments. */
c8094d83 4485 arglist
7ac7b28f
MM
4486 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4487 arglist);
36a117a5
MM
4488 arg_depth = TMPL_ARGS_DEPTH (arglist);
4489 }
5566b478 4490
41f5d4b1 4491 /* Now we should have enough arguments. */
50bc768d 4492 gcc_assert (parm_depth == arg_depth);
c8094d83 4493
7ac7b28f
MM
4494 /* From here on, we're only interested in the most general
4495 template. */
4496 template = gen_tmpl;
4497
36a117a5
MM
4498 /* Calculate the BOUND_ARGS. These will be the args that are
4499 actually tsubst'd into the definition to create the
4500 instantiation. */
4501 if (parm_depth > 1)
830bfa74
MM
4502 {
4503 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 4504 int i;
e4a84209 4505 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 4506
f31c0a32 4507 tree bound_args = make_tree_vec (parm_depth);
c8094d83 4508
e4a84209 4509 for (i = saved_depth,
c8094d83 4510 t = DECL_TEMPLATE_PARMS (template);
e4a84209 4511 i > 0 && t != NULL_TREE;
830bfa74 4512 --i, t = TREE_CHAIN (t))
e4a84209 4513 {
ee3071ef
NS
4514 tree a = coerce_template_parms (TREE_VALUE (t),
4515 arglist, template,
0cbd7506 4516 complain, /*require_all_args=*/1);
88e98cfe
KL
4517
4518 /* Don't process further if one of the levels fails. */
4519 if (a == error_mark_node)
4520 {
4521 /* Restore the ARGLIST to its full size. */
4522 TREE_VEC_LENGTH (arglist) = saved_depth;
4523 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4524 }
c8094d83 4525
e4a84209
MM
4526 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4527
4528 /* We temporarily reduce the length of the ARGLIST so
4529 that coerce_template_parms will see only the arguments
4530 corresponding to the template parameters it is
4531 examining. */
4532 TREE_VEC_LENGTH (arglist)--;
4533 }
4534
4535 /* Restore the ARGLIST to its full size. */
4536 TREE_VEC_LENGTH (arglist) = saved_depth;
4537
36a117a5 4538 arglist = bound_args;
830bfa74
MM
4539 }
4540 else
36a117a5
MM
4541 arglist
4542 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
f9a7ae04 4543 INNERMOST_TEMPLATE_ARGS (arglist),
f9c244b8 4544 template,
0cbd7506 4545 complain, /*require_all_args=*/1);
36a117a5 4546
c353b8e3 4547 if (arglist == error_mark_node)
36a117a5 4548 /* We were unable to bind the arguments. */
fd295cb2 4549 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5566b478 4550
36a117a5
MM
4551 /* In the scope of a template class, explicit references to the
4552 template class refer to the type of the template, not any
4553 instantiation of it. For example, in:
c8094d83 4554
36a117a5
MM
4555 template <class T> class C { void f(C<T>); }
4556
4557 the `C<T>' is just the same as `C'. Outside of the
4558 class, however, such a reference is an instantiation. */
ed44da02 4559 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
4560 arglist))
4561 {
4562 found = template_type;
c8094d83 4563
36a117a5 4564 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 4565 {
36a117a5 4566 tree ctx;
c8094d83
MS
4567
4568 for (ctx = current_class_type;
5f04800c
KL
4569 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4570 ctx = (TYPE_P (ctx)
4571 ? TYPE_CONTEXT (ctx)
4572 : DECL_CONTEXT (ctx)))
4573 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4574 goto found_ctx;
c8094d83 4575
6df5158a
NS
4576 /* We're not in the scope of the class, so the
4577 TEMPLATE_TYPE is not the type we want after all. */
4578 found = NULL_TREE;
4579 found_ctx:;
5566b478
MS
4580 }
4581 }
36a117a5 4582 if (found)
0cbd7506 4583 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
414ea4aa 4584
c7222c02
MM
4585 /* If we already have this specialization, return it. */
4586 found = retrieve_specialization (template, arglist,
4587 /*class_specializations_p=*/false);
4588 if (found)
4589 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5566b478 4590
dbfe2124 4591 /* This type is a "partial instantiation" if any of the template
ab097535 4592 arguments still involve template parameters. Note that we set
486e4077
MM
4593 IS_PARTIAL_INSTANTIATION for partial specializations as
4594 well. */
dbfe2124
MM
4595 is_partial_instantiation = uses_template_parms (arglist);
4596
c353b8e3
MM
4597 /* If the deduced arguments are invalid, then the binding
4598 failed. */
4599 if (!is_partial_instantiation
4600 && check_instantiated_args (template,
4601 INNERMOST_TEMPLATE_ARGS (arglist),
4602 complain))
4603 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
c8094d83
MS
4604
4605 if (!is_partial_instantiation
3ebc5c52
MM
4606 && !PRIMARY_TEMPLATE_P (template)
4607 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4608 {
3ebc5c52
MM
4609 found = xref_tag_from_type (TREE_TYPE (template),
4610 DECL_NAME (template),
29ef83de 4611 /*tag_scope=*/ts_global);
fd295cb2 4612 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
3ebc5c52 4613 }
c8094d83 4614
95ee998c 4615 context = tsubst (DECL_CONTEXT (template), arglist,
c2ea3a40 4616 complain, in_decl);
95ee998c
MM
4617 if (!context)
4618 context = global_namespace;
4619
36a117a5 4620 /* Create the type. */
ed44da02
MM
4621 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4622 {
dbfe2124 4623 if (!is_partial_instantiation)
92777ce4
NS
4624 {
4625 set_current_access_from_decl (TYPE_NAME (template_type));
4626 t = start_enum (TYPE_IDENTIFIER (template_type));
4627 }
ed44da02 4628 else
dbfe2124 4629 /* We don't want to call start_enum for this type, since
ed44da02
MM
4630 the values for the enumeration constants may involve
4631 template parameters. And, no one should be interested
4632 in the enumeration constants for such a type. */
4633 t = make_node (ENUMERAL_TYPE);
4634 }
4635 else
4636 {
33848bb0 4637 t = make_aggr_type (TREE_CODE (template_type));
c8094d83 4638 CLASSTYPE_DECLARED_CLASS (t)
ed44da02 4639 = CLASSTYPE_DECLARED_CLASS (template_type);
ed44da02 4640 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 4641 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ae673f14
JM
4642
4643 /* A local class. Make sure the decl gets registered properly. */
4644 if (context == current_function_decl)
bd3d082e 4645 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
ed44da02
MM
4646 }
4647
ae673f14
JM
4648 /* If we called start_enum or pushtag above, this information
4649 will already be set up. */
ed44da02
MM
4650 if (!TYPE_NAME (t))
4651 {
4652 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
c8094d83 4653
9188c363 4654 type_decl = create_implicit_typedef (DECL_NAME (template), t);
ed44da02 4655 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9188c363 4656 TYPE_STUB_DECL (t) = type_decl;
c8094d83 4657 DECL_SOURCE_LOCATION (type_decl)
f31686a3 4658 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
ed44da02
MM
4659 }
4660 else
4661 type_decl = TYPE_NAME (t);
36a117a5 4662
cab7a9a3
KL
4663 TREE_PRIVATE (type_decl)
4664 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4665 TREE_PROTECTED (type_decl)
4666 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
12af7ba3
MM
4667 DECL_IN_SYSTEM_HEADER (type_decl)
4668 = DECL_IN_SYSTEM_HEADER (template);
8d039470
MS
4669 if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
4670 {
4671 DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
4672 DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
4673 }
cab7a9a3 4674
9fbf56f7
MM
4675 /* Set up the template information. We have to figure out which
4676 template is the immediate parent if this is a full
4677 instantiation. */
4678 if (parm_depth == 1 || is_partial_instantiation
4679 || !PRIMARY_TEMPLATE_P (template))
4680 /* This case is easy; there are no member templates involved. */
4681 found = template;
4682 else
4683 {
ab097535
NS
4684 /* This is a full instantiation of a member template. Look
4685 for a partial instantiation of which this is an instance. */
9fbf56f7
MM
4686
4687 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4688 found; found = TREE_CHAIN (found))
4689 {
4690 int success;
4691 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4692
4693 /* We only want partial instantiations, here, not
4694 specializations or full instantiations. */
370af2d5 4695 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
9fbf56f7
MM
4696 || !uses_template_parms (TREE_VALUE (found)))
4697 continue;
4698
4699 /* Temporarily reduce by one the number of levels in the
4700 ARGLIST and in FOUND so as to avoid comparing the
4701 last set of arguments. */
4702 TREE_VEC_LENGTH (arglist)--;
4703 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4704
4705 /* See if the arguments match. If they do, then TMPL is
4706 the partial instantiation we want. */
4707 success = comp_template_args (TREE_PURPOSE (found), arglist);
4708
4709 /* Restore the argument vectors to their full size. */
4710 TREE_VEC_LENGTH (arglist)++;
4711 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4712
4713 if (success)
4714 {
4715 found = tmpl;
4716 break;
4717 }
4718 }
4719
4720 if (!found)
ab097535
NS
4721 {
4722 /* There was no partial instantiation. This happens
0cbd7506
MS
4723 where C<T> is a member template of A<T> and it's used
4724 in something like
c8094d83 4725
0cbd7506
MS
4726 template <typename T> struct B { A<T>::C<int> m; };
4727 B<float>;
c8094d83 4728
0cbd7506
MS
4729 Create the partial instantiation.
4730 */
4731 TREE_VEC_LENGTH (arglist)--;
4732 found = tsubst (template, arglist, complain, NULL_TREE);
4733 TREE_VEC_LENGTH (arglist)++;
4734 }
9fbf56f7
MM
4735 }
4736
c8094d83
MS
4737 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4738 DECL_TEMPLATE_INSTANTIATIONS (template)
4739 = tree_cons (arglist, t,
dbfe2124
MM
4740 DECL_TEMPLATE_INSTANTIATIONS (template));
4741
c8094d83 4742 if (TREE_CODE (t) == ENUMERAL_TYPE
dbfe2124 4743 && !is_partial_instantiation)
61a127b3
MM
4744 /* Now that the type has been registered on the instantiations
4745 list, we set up the enumerators. Because the enumeration
4746 constants may involve the enumeration type itself, we make
4747 sure to register the type first, and then create the
4748 constants. That way, doing tsubst_expr for the enumeration
4749 constants won't result in recursive calls here; we'll find
4750 the instantiation and exit above. */
4751 tsubst_enum (template_type, t, arglist);
dbfe2124 4752
36a117a5
MM
4753 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4754 is set up. */
ed44da02
MM
4755 if (TREE_CODE (t) != ENUMERAL_TYPE)
4756 DECL_NAME (type_decl) = classtype_mangled_name (t);
7813d14c 4757 if (is_partial_instantiation)
077e7015
MM
4758 /* If the type makes use of template parameters, the
4759 code that generates debugging information will crash. */
4760 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 4761
fd295cb2 4762 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
36a117a5 4763 }
fd295cb2 4764 timevar_pop (TV_NAME_LOOKUP);
8d08fdba
MS
4765}
4766\f
c8094d83 4767struct pair_fn_data
8d08fdba 4768{
8dfaeb63
MM
4769 tree_fn_t fn;
4770 void *data;
0c58f841 4771 struct pointer_set_t *visited;
8dfaeb63
MM
4772};
4773
4774/* Called from for_each_template_parm via walk_tree. */
581d38d0 4775
8dfaeb63 4776static tree
350fae66 4777for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8dfaeb63
MM
4778{
4779 tree t = *tp;
4780 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4781 tree_fn_t fn = pfd->fn;
4782 void *data = pfd->data;
4f2c9d7e 4783
2f939d94 4784 if (TYPE_P (t)
4f2c9d7e 4785 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
8dfaeb63 4786 return error_mark_node;
581d38d0 4787
8d08fdba
MS
4788 switch (TREE_CODE (t))
4789 {
8d08fdba 4790 case RECORD_TYPE:
9076e292 4791 if (TYPE_PTRMEMFUNC_P (t))
8dfaeb63 4792 break;
ed44da02
MM
4793 /* Fall through. */
4794
8d08fdba 4795 case UNION_TYPE:
ed44da02 4796 case ENUMERAL_TYPE:
8dfaeb63
MM
4797 if (!TYPE_TEMPLATE_INFO (t))
4798 *walk_subtrees = 0;
4799 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4f2c9d7e 4800 fn, data, pfd->visited))
8dfaeb63
MM
4801 return error_mark_node;
4802 break;
4803
588c2d1c 4804 case METHOD_TYPE:
8dfaeb63
MM
4805 /* Since we're not going to walk subtrees, we have to do this
4806 explicitly here. */
4f2c9d7e
MM
4807 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4808 pfd->visited))
8dfaeb63 4809 return error_mark_node;
4890c2f4 4810 /* Fall through. */
588c2d1c
MM
4811
4812 case FUNCTION_TYPE:
8dfaeb63 4813 /* Check the return type. */
4f2c9d7e 4814 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63
MM
4815 return error_mark_node;
4816
588c2d1c
MM
4817 /* Check the parameter types. Since default arguments are not
4818 instantiated until they are needed, the TYPE_ARG_TYPES may
4819 contain expressions that involve template parameters. But,
4820 no-one should be looking at them yet. And, once they're
4821 instantiated, they don't contain template parameters, so
4822 there's no point in looking at them then, either. */
4823 {
4824 tree parm;
4825
4826 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4f2c9d7e
MM
4827 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4828 pfd->visited))
8dfaeb63 4829 return error_mark_node;
5566b478 4830
8dfaeb63
MM
4831 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4832 want walk_tree walking into them itself. */
4833 *walk_subtrees = 0;
4834 }
4835 break;
3ac3d9ea 4836
a723baf1 4837 case TYPEOF_TYPE:
c8094d83 4838 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
a723baf1
MM
4839 pfd->visited))
4840 return error_mark_node;
4841 break;
4842
8d08fdba 4843 case FUNCTION_DECL:
5566b478 4844 case VAR_DECL:
5566b478 4845 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4f2c9d7e
MM
4846 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4847 pfd->visited))
8dfaeb63
MM
4848 return error_mark_node;
4849 /* Fall through. */
4850
8d08fdba 4851 case PARM_DECL:
a723baf1
MM
4852 case CONST_DECL:
4853 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4854 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4855 pfd->visited))
4856 return error_mark_node;
c8094d83 4857 if (DECL_CONTEXT (t)
4f2c9d7e
MM
4858 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4859 pfd->visited))
8dfaeb63
MM
4860 return error_mark_node;
4861 break;
8d08fdba 4862
a1281f45 4863 case BOUND_TEMPLATE_TEMPLATE_PARM:
744fac59 4864 /* Record template parameters such as `T' inside `TT<T>'. */
4f2c9d7e 4865 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
8dfaeb63
MM
4866 return error_mark_node;
4867 /* Fall through. */
4868
a1281f45 4869 case TEMPLATE_TEMPLATE_PARM:
744fac59 4870 case TEMPLATE_TYPE_PARM:
f84b4be9 4871 case TEMPLATE_PARM_INDEX:
8dfaeb63
MM
4872 if (fn && (*fn)(t, data))
4873 return error_mark_node;
4874 else if (!fn)
4875 return error_mark_node;
4876 break;
5156628f 4877
8dfaeb63 4878 case TEMPLATE_DECL:
f4f206f4 4879 /* A template template parameter is encountered. */
8dfaeb63 4880 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4f2c9d7e 4881 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63 4882 return error_mark_node;
db5ae43f 4883
8dfaeb63
MM
4884 /* Already substituted template template parameter */
4885 *walk_subtrees = 0;
4886 break;
b8865407 4887
4699c561 4888 case TYPENAME_TYPE:
c8094d83 4889 if (!fn
4f2c9d7e
MM
4890 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4891 data, pfd->visited))
8dfaeb63
MM
4892 return error_mark_node;
4893 break;
4699c561 4894
8dfaeb63
MM
4895 case CONSTRUCTOR:
4896 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4897 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4f2c9d7e
MM
4898 (TREE_TYPE (t)), fn, data,
4899 pfd->visited))
8dfaeb63
MM
4900 return error_mark_node;
4901 break;
c8094d83 4902
b8865407
MM
4903 case INDIRECT_REF:
4904 case COMPONENT_REF:
4699c561 4905 /* If there's no type, then this thing must be some expression
b8865407 4906 involving template parameters. */
4699c561 4907 if (!fn && !TREE_TYPE (t))
8dfaeb63
MM
4908 return error_mark_node;
4909 break;
b8865407 4910
42976354
BK
4911 case MODOP_EXPR:
4912 case CAST_EXPR:
4913 case REINTERPRET_CAST_EXPR:
4914 case CONST_CAST_EXPR:
4915 case STATIC_CAST_EXPR:
4916 case DYNAMIC_CAST_EXPR:
42976354
BK
4917 case ARROW_EXPR:
4918 case DOTSTAR_EXPR:
4919 case TYPEID_EXPR:
40242ccf 4920 case PSEUDO_DTOR_EXPR:
b8865407 4921 if (!fn)
8dfaeb63
MM
4922 return error_mark_node;
4923 break;
abff8e06 4924
bd9bb3d2
MM
4925 case BASELINK:
4926 /* If we do not handle this case specially, we end up walking
4927 the BINFO hierarchy, which is circular, and therefore
4928 confuses walk_tree. */
4929 *walk_subtrees = 0;
4f2c9d7e
MM
4930 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4931 pfd->visited))
bd9bb3d2
MM
4932 return error_mark_node;
4933 break;
4934
8d08fdba 4935 default:
8dfaeb63 4936 break;
8d08fdba 4937 }
8dfaeb63
MM
4938
4939 /* We didn't find any template parameters we liked. */
4940 return NULL_TREE;
4941}
4942
c8094d83
MS
4943/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4944 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
a1281f45 4945 call FN with the parameter and the DATA.
838dfd8a 4946 If FN returns nonzero, the iteration is terminated, and
8dfaeb63 4947 for_each_template_parm returns 1. Otherwise, the iteration
838dfd8a 4948 continues. If FN never returns a nonzero value, the value
8dfaeb63
MM
4949 returned by for_each_template_parm is 0. If FN is NULL, it is
4950 considered to be the function which always returns 1. */
4951
4952static int
0c58f841
MA
4953for_each_template_parm (tree t, tree_fn_t fn, void* data,
4954 struct pointer_set_t *visited)
8dfaeb63
MM
4955{
4956 struct pair_fn_data pfd;
ad2ae3b2 4957 int result;
8dfaeb63
MM
4958
4959 /* Set up. */
4960 pfd.fn = fn;
4961 pfd.data = data;
4962
4890c2f4
MM
4963 /* Walk the tree. (Conceptually, we would like to walk without
4964 duplicates, but for_each_template_parm_r recursively calls
4965 for_each_template_parm, so we would need to reorganize a fair
4f2c9d7e
MM
4966 bit to use walk_tree_without_duplicates, so we keep our own
4967 visited list.) */
4968 if (visited)
4969 pfd.visited = visited;
4970 else
0c58f841 4971 pfd.visited = pointer_set_create ();
c8094d83
MS
4972 result = walk_tree (&t,
4973 for_each_template_parm_r,
ad2ae3b2 4974 &pfd,
c1e39976 4975 pfd.visited) != NULL_TREE;
ad2ae3b2
MM
4976
4977 /* Clean up. */
4978 if (!visited)
0c58f841
MA
4979 {
4980 pointer_set_destroy (pfd.visited);
4981 pfd.visited = 0;
4982 }
ad2ae3b2
MM
4983
4984 return result;
8d08fdba
MS
4985}
4986
d43f603d
KL
4987/* Returns true if T depends on any template parameter. */
4988
050367a3 4989int
3a978d72 4990uses_template_parms (tree t)
050367a3 4991{
c353b8e3
MM
4992 bool dependent_p;
4993 int saved_processing_template_decl;
4994
4995 saved_processing_template_decl = processing_template_decl;
4996 if (!saved_processing_template_decl)
4997 processing_template_decl = 1;
4998 if (TYPE_P (t))
4999 dependent_p = dependent_type_p (t);
5000 else if (TREE_CODE (t) == TREE_VEC)
5001 dependent_p = any_dependent_template_arguments_p (t);
5002 else if (TREE_CODE (t) == TREE_LIST)
5003 dependent_p = (uses_template_parms (TREE_VALUE (t))
5004 || uses_template_parms (TREE_CHAIN (t)));
3ce5fa4f
NS
5005 else if (TREE_CODE (t) == TYPE_DECL)
5006 dependent_p = dependent_type_p (TREE_TYPE (t));
c8094d83
MS
5007 else if (DECL_P (t)
5008 || EXPR_P (t)
c353b8e3
MM
5009 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5010 || TREE_CODE (t) == OVERLOAD
5011 || TREE_CODE (t) == BASELINK
b207d6e2 5012 || TREE_CODE (t) == IDENTIFIER_NODE
6615c446 5013 || CONSTANT_CLASS_P (t))
c353b8e3
MM
5014 dependent_p = (type_dependent_expression_p (t)
5015 || value_dependent_expression_p (t));
315fb5db
NS
5016 else
5017 {
5018 gcc_assert (t == error_mark_node);
5019 dependent_p = false;
5020 }
c8094d83 5021
c353b8e3
MM
5022 processing_template_decl = saved_processing_template_decl;
5023
5024 return dependent_p;
050367a3
MM
5025}
5026
d43f603d
KL
5027/* Returns true if T depends on any template parameter with level LEVEL. */
5028
5029int
5030uses_template_parms_level (tree t, int level)
5031{
5032 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5033}
5034
27fafc8d 5035static int tinst_depth;
e9f32eb5 5036extern int max_tinst_depth;
5566b478 5037#ifdef GATHER_STATISTICS
27fafc8d 5038int depth_reached;
5566b478 5039#endif
8dfaeb63
MM
5040static int tinst_level_tick;
5041static int last_template_error_tick;
8d08fdba 5042
3ae18eaf
JM
5043/* We're starting to instantiate D; record the template instantiation context
5044 for diagnostics and to restore it later. */
5045
742a37d5 5046int
3a978d72 5047push_tinst_level (tree d)
8d08fdba 5048{
3ae18eaf 5049 tree new;
8d08fdba 5050
7215f9a0
MS
5051 if (tinst_depth >= max_tinst_depth)
5052 {
8adf5b5e
JM
5053 /* If the instantiation in question still has unbound template parms,
5054 we don't really care if we can't instantiate it, so just return.
0cbd7506 5055 This happens with base instantiation for implicit `typename'. */
8adf5b5e
JM
5056 if (uses_template_parms (d))
5057 return 0;
5058
1139b3d8 5059 last_template_error_tick = tinst_level_tick;
0f51ccfc 5060 error ("template instantiation depth exceeds maximum of %d (use "
0cbd7506 5061 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
b4f4233d 5062 max_tinst_depth, d);
5566b478 5063
cb753e49 5064 print_instantiation_context ();
5566b478 5065
7215f9a0
MS
5066 return 0;
5067 }
5068
12af7ba3
MM
5069 new = make_node (TINST_LEVEL);
5070 TINST_DECL (new) = d;
5071 TINST_LOCATION (new) = input_location;
5072 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
3ae18eaf 5073 TREE_CHAIN (new) = current_tinst_level;
8d08fdba 5074 current_tinst_level = new;
5566b478 5075
7215f9a0 5076 ++tinst_depth;
5566b478
MS
5077#ifdef GATHER_STATISTICS
5078 if (tinst_depth > depth_reached)
5079 depth_reached = tinst_depth;
5080#endif
5081
27fafc8d 5082 ++tinst_level_tick;
7215f9a0 5083 return 1;
8d08fdba
MS
5084}
5085
3ae18eaf
JM
5086/* We're done instantiating this template; return to the instantiation
5087 context. */
5088
8d08fdba 5089void
3a978d72 5090pop_tinst_level (void)
8d08fdba 5091{
3ae18eaf 5092 tree old = current_tinst_level;
8d08fdba 5093
ae58fa02
MM
5094 /* Restore the filename and line number stashed away when we started
5095 this instantiation. */
406d77a4 5096 input_location = TINST_LOCATION (old);
12af7ba3 5097 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
3ae18eaf 5098 current_tinst_level = TREE_CHAIN (old);
7215f9a0 5099 --tinst_depth;
27fafc8d 5100 ++tinst_level_tick;
8d08fdba
MS
5101}
5102
3ae18eaf
JM
5103/* We're instantiating a deferred template; restore the template
5104 instantiation context in which the instantiation was requested, which
5105 is one step out from LEVEL. */
5106
5107static void
3a978d72 5108reopen_tinst_level (tree level)
3ae18eaf
JM
5109{
5110 tree t;
5111
5112 tinst_depth = 0;
5113 for (t = level; t; t = TREE_CHAIN (t))
5114 ++tinst_depth;
5115
5116 current_tinst_level = level;
5117 pop_tinst_level ();
5118}
5119
f84b4be9
JM
5120/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5121 vector of template arguments, as for tsubst.
5122
dc957d14 5123 Returns an appropriate tsubst'd friend declaration. */
f84b4be9
JM
5124
5125static tree
3a978d72 5126tsubst_friend_function (tree decl, tree args)
f84b4be9
JM
5127{
5128 tree new_friend;
27fafc8d 5129
c8094d83 5130 if (TREE_CODE (decl) == FUNCTION_DECL
f84b4be9
JM
5131 && DECL_TEMPLATE_INSTANTIATION (decl)
5132 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5133 /* This was a friend declared with an explicit template
5134 argument list, e.g.:
c8094d83 5135
f84b4be9 5136 friend void f<>(T);
c8094d83 5137
f84b4be9
JM
5138 to indicate that f was a template instantiation, not a new
5139 function declaration. Now, we have to figure out what
5140 instantiation of what template. */
5141 {
76e57b45 5142 tree template_id, arglist, fns;
f84b4be9
JM
5143 tree new_args;
5144 tree tmpl;
ed2fa432 5145 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
c8094d83 5146
76e57b45 5147 /* Friend functions are looked up in the containing namespace scope.
0cbd7506
MS
5148 We must enter that scope, to avoid finding member functions of the
5149 current cless with same name. */
76e57b45
NS
5150 push_nested_namespace (ns);
5151 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
0cbd7506 5152 tf_error | tf_warning, NULL_TREE);
76e57b45
NS
5153 pop_nested_namespace (ns);
5154 arglist = tsubst (DECL_TI_ARGS (decl), args,
0cbd7506 5155 tf_error | tf_warning, NULL_TREE);
76e57b45 5156 template_id = lookup_template_function (fns, arglist);
c8094d83 5157
c2ea3a40 5158 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
36a117a5 5159 tmpl = determine_specialization (template_id, new_friend,
c8094d83 5160 &new_args,
5fe7b654
GB
5161 /*need_member_template=*/0,
5162 TREE_VEC_LENGTH (args));
6e432b31 5163 return instantiate_template (tmpl, new_args, tf_error);
f84b4be9 5164 }
36a117a5 5165
c2ea3a40 5166 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
c8094d83 5167
36a117a5 5168 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
5169 compiler, but is not an instantiation from the point of view of
5170 the language. For example, we might have had:
c8094d83 5171
f84b4be9
JM
5172 template <class T> struct S {
5173 template <class U> friend void f(T, U);
5174 };
c8094d83 5175
f84b4be9
JM
5176 Then, in S<int>, template <class U> void f(int, U) is not an
5177 instantiation of anything. */
ac2b3222
AP
5178 if (new_friend == error_mark_node)
5179 return error_mark_node;
c8094d83 5180
f84b4be9
JM
5181 DECL_USE_TEMPLATE (new_friend) = 0;
5182 if (TREE_CODE (decl) == TEMPLATE_DECL)
655dc6ee
JM
5183 {
5184 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5185 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5186 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5187 }
36a117a5 5188
92643fea
MM
5189 /* The mangled name for the NEW_FRIEND is incorrect. The function
5190 is not a template instantiation and should not be mangled like
5191 one. Therefore, we forget the mangling here; we'll recompute it
5192 later if we need it. */
36a117a5
MM
5193 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5194 {
19e7881c 5195 SET_DECL_RTL (new_friend, NULL_RTX);
92643fea 5196 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
36a117a5 5197 }
c8094d83 5198
6eb3bb27 5199 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 5200 {
36a117a5 5201 tree old_decl;
fbf1c34b
MM
5202 tree new_friend_template_info;
5203 tree new_friend_result_template_info;
92da7074 5204 tree ns;
fbf1c34b
MM
5205 int new_friend_is_defn;
5206
5207 /* We must save some information from NEW_FRIEND before calling
5208 duplicate decls since that function will free NEW_FRIEND if
5209 possible. */
5210 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5bd61841 5211 new_friend_is_defn =
c8094d83 5212 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5bd61841
MM
5213 (template_for_substitution (new_friend)))
5214 != NULL_TREE);
f84b4be9 5215 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
5216 {
5217 /* This declaration is a `primary' template. */
5218 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
c8094d83 5219
fbf1c34b 5220 new_friend_result_template_info
17aec3eb 5221 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
fbf1c34b
MM
5222 }
5223 else
5bd61841 5224 new_friend_result_template_info = NULL_TREE;
36a117a5 5225
1c227897
MM
5226 /* Inside pushdecl_namespace_level, we will push into the
5227 current namespace. However, the friend function should go
c6002625 5228 into the namespace of the template. */
92da7074
ML
5229 ns = decl_namespace_context (new_friend);
5230 push_nested_namespace (ns);
d63d5d0c 5231 old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
92da7074 5232 pop_nested_namespace (ns);
36a117a5
MM
5233
5234 if (old_decl != new_friend)
5235 {
5236 /* This new friend declaration matched an existing
5237 declaration. For example, given:
5238
5239 template <class T> void f(T);
c8094d83
MS
5240 template <class U> class C {
5241 template <class T> friend void f(T) {}
36a117a5
MM
5242 };
5243
5244 the friend declaration actually provides the definition
5245 of `f', once C has been instantiated for some type. So,
5246 old_decl will be the out-of-class template declaration,
5247 while new_friend is the in-class definition.
5248
5249 But, if `f' was called before this point, the
5250 instantiation of `f' will have DECL_TI_ARGS corresponding
5251 to `T' but not to `U', references to which might appear
5252 in the definition of `f'. Previously, the most general
5253 template for an instantiation of `f' was the out-of-class
5254 version; now it is the in-class version. Therefore, we
5255 run through all specialization of `f', adding to their
5256 DECL_TI_ARGS appropriately. In particular, they need a
5257 new set of outer arguments, corresponding to the
c8094d83 5258 arguments for this class instantiation.
36a117a5
MM
5259
5260 The same situation can arise with something like this:
5261
5262 friend void f(int);
c8094d83 5263 template <class T> class C {
0cbd7506
MS
5264 friend void f(T) {}
5265 };
36a117a5
MM
5266
5267 when `C<int>' is instantiated. Now, `f(int)' is defined
5268 in the class. */
5269
fbf1c34b
MM
5270 if (!new_friend_is_defn)
5271 /* On the other hand, if the in-class declaration does
5272 *not* provide a definition, then we don't want to alter
5273 existing definitions. We can just leave everything
5274 alone. */
36a117a5 5275 ;
fbf1c34b 5276 else
36a117a5 5277 {
fbf1c34b
MM
5278 /* Overwrite whatever template info was there before, if
5279 any, with the new template information pertaining to
5280 the declaration. */
5281 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5282
5283 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8d83f792
MM
5284 reregister_specialization (new_friend,
5285 most_general_template (old_decl),
5286 old_decl);
c8094d83 5287 else
36a117a5 5288 {
fbf1c34b
MM
5289 tree t;
5290 tree new_friend_args;
5291
c8094d83 5292 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
fbf1c34b 5293 = new_friend_result_template_info;
c8094d83 5294
fbf1c34b 5295 new_friend_args = TI_ARGS (new_friend_template_info);
c8094d83 5296 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
fbf1c34b
MM
5297 t != NULL_TREE;
5298 t = TREE_CHAIN (t))
5299 {
5300 tree spec = TREE_VALUE (t);
c8094d83
MS
5301
5302 DECL_TI_ARGS (spec)
fbf1c34b
MM
5303 = add_outermost_template_args (new_friend_args,
5304 DECL_TI_ARGS (spec));
fbf1c34b
MM
5305 }
5306
5307 /* Now, since specializations are always supposed to
5308 hang off of the most general template, we must move
5309 them. */
5310 t = most_general_template (old_decl);
5311 if (t != old_decl)
5312 {
5313 DECL_TEMPLATE_SPECIALIZATIONS (t)
5314 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5315 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5316 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5317 }
36a117a5
MM
5318 }
5319 }
5320
5321 /* The information from NEW_FRIEND has been merged into OLD_DECL
5322 by duplicate_decls. */
5323 new_friend = old_decl;
5324 }
f84b4be9 5325 }
6e432b31 5326 else
f84b4be9 5327 {
6e432b31
KL
5328 tree context = DECL_CONTEXT (new_friend);
5329 bool dependent_p;
5330
5331 /* In the code
5332 template <class T> class C {
5333 template <class U> friend void C1<U>::f (); // case 1
5334 friend void C2<T>::f (); // case 2
5335 };
5336 we only need to make sure CONTEXT is a complete type for
5337 case 2. To distinguish between the two cases, we note that
5338 CONTEXT of case 1 remains dependent type after tsubst while
5339 this isn't true for case 2. */
5340 ++processing_template_decl;
5341 dependent_p = dependent_type_p (context);
5342 --processing_template_decl;
5343
5344 if (!dependent_p
5345 && !complete_type_or_else (context, NULL_TREE))
5346 return error_mark_node;
5347
5348 if (COMPLETE_TYPE_P (context))
5349 {
5350 /* Check to see that the declaration is really present, and,
5351 possibly obtain an improved declaration. */
5352 tree fn = check_classfn (context,
5353 new_friend, NULL_TREE);
5354
5355 if (fn)
5356 new_friend = fn;
5357 }
f84b4be9
JM
5358 }
5359
5360 return new_friend;
5361}
5362
1aed5355
MM
5363/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5364 template arguments, as for tsubst.
6757edfe 5365
dc957d14 5366 Returns an appropriate tsubst'd friend type or error_mark_node on
4b054b80 5367 failure. */
6757edfe
MM
5368
5369static tree
3a978d72 5370tsubst_friend_class (tree friend_tmpl, tree args)
6757edfe 5371{
1aed5355 5372 tree friend_type;
25aab5d0 5373 tree tmpl;
3e0ec82f 5374 tree context;
6757edfe 5375
3e0ec82f
MM
5376 context = DECL_CONTEXT (friend_tmpl);
5377
5378 if (context)
77adef84 5379 {
3e0ec82f
MM
5380 if (TREE_CODE (context) == NAMESPACE_DECL)
5381 push_nested_namespace (context);
5382 else
c8094d83 5383 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
3e0ec82f 5384 }
25aab5d0 5385
3e0ec82f 5386 /* First, we look for a class template. */
10e6657a 5387 tmpl = lookup_name (DECL_NAME (friend_tmpl));
25aab5d0 5388
3e0ec82f
MM
5389 /* But, if we don't find one, it might be because we're in a
5390 situation like this:
77adef84 5391
3e0ec82f
MM
5392 template <class T>
5393 struct S {
5394 template <class U>
5395 friend struct S;
5396 };
5397
5398 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5399 for `S<int>', not the TEMPLATE_DECL. */
5400 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5401 {
10e6657a 5402 tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
3e0ec82f 5403 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
25aab5d0 5404 }
6757edfe 5405
25aab5d0 5406 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
5407 {
5408 /* The friend template has already been declared. Just
36a117a5
MM
5409 check to see that the declarations match, and install any new
5410 default parameters. We must tsubst the default parameters,
5411 of course. We only need the innermost template parameters
5412 because that is all that redeclare_class_template will look
5413 at. */
3e0ec82f
MM
5414 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5415 > TMPL_ARGS_DEPTH (args))
5416 {
5417 tree parms;
5418 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5419 args, tf_error | tf_warning);
5420 redeclare_class_template (TREE_TYPE (tmpl), parms);
5421 }
5422
6757edfe
MM
5423 friend_type = TREE_TYPE (tmpl);
5424 }
5425 else
5426 {
5427 /* The friend template has not already been declared. In this
5428 case, the instantiation of the template class will cause the
5429 injection of this template into the global scope. */
c2ea3a40 5430 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
6757edfe
MM
5431
5432 /* The new TMPL is not an instantiation of anything, so we
0cbd7506 5433 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6757edfe
MM
5434 the new type because that is supposed to be the corresponding
5435 template decl, i.e., TMPL. */
5436 DECL_USE_TEMPLATE (tmpl) = 0;
5437 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5438 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
68c78847
KL
5439 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5440 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6757edfe
MM
5441
5442 /* Inject this template into the global scope. */
d63d5d0c 5443 friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6757edfe
MM
5444 }
5445
c8094d83 5446 if (context)
3e0ec82f
MM
5447 {
5448 if (TREE_CODE (context) == NAMESPACE_DECL)
5449 pop_nested_namespace (context);
5450 else
5451 pop_nested_class ();
5452 }
5453
6757edfe
MM
5454 return friend_type;
5455}
f84b4be9 5456
17f29637
KL
5457/* Returns zero if TYPE cannot be completed later due to circularity.
5458 Otherwise returns one. */
5459
d5372501 5460static int
3a978d72 5461can_complete_type_without_circularity (tree type)
17f29637
KL
5462{
5463 if (type == NULL_TREE || type == error_mark_node)
5464 return 0;
5465 else if (COMPLETE_TYPE_P (type))
5466 return 1;
5467 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5468 return can_complete_type_without_circularity (TREE_TYPE (type));
8c6ab2db
NS
5469 else if (CLASS_TYPE_P (type)
5470 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
17f29637
KL
5471 return 0;
5472 else
5473 return 1;
5474}
5475
8d08fdba 5476tree
3a978d72 5477instantiate_class_template (tree type)
8d08fdba 5478{
7088fca9 5479 tree template, args, pattern, t, member;
36a117a5 5480 tree typedecl;
dbbf88d1 5481 tree pbinfo;
cad7e87b 5482 tree base_list;
c8094d83 5483
5566b478 5484 if (type == error_mark_node)
8d08fdba
MS
5485 return error_mark_node;
5486
c8094d83 5487 if (TYPE_BEING_DEFINED (type)
ca099ac8
MM
5488 || COMPLETE_TYPE_P (type)
5489 || dependent_type_p (type))
5566b478
MS
5490 return type;
5491
6bdb985f 5492 /* Figure out which template is being instantiated. */
36a117a5 5493 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
50bc768d 5494 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
73aad9b9 5495
6bdb985f
MM
5496 /* Figure out which arguments are being used to do the
5497 instantiation. */
5498 args = CLASSTYPE_TI_ARGS (type);
4c571114
MM
5499
5500 /* Determine what specialization of the original template to
5501 instantiate. */
8fbc5ae7
MM
5502 t = most_specialized_class (template, args);
5503 if (t == error_mark_node)
73aad9b9 5504 {
8fbc5ae7 5505 const char *str = "candidates are:";
0f51ccfc 5506 error ("ambiguous class template instantiation for %q#T", type);
c8094d83 5507 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
8fbc5ae7 5508 t = TREE_CHAIN (t))
73aad9b9 5509 {
8c6ab2db 5510 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
73aad9b9 5511 {
dee15844 5512 error ("%s %+#T", str, TREE_TYPE (t));
8fbc5ae7 5513 str = " ";
73aad9b9
JM
5514 }
5515 }
8fbc5ae7
MM
5516 TYPE_BEING_DEFINED (type) = 1;
5517 return error_mark_node;
73aad9b9 5518 }
6bdb985f
MM
5519
5520 if (t)
73aad9b9
JM
5521 pattern = TREE_TYPE (t);
5522 else
5523 pattern = TREE_TYPE (template);
5566b478 5524
4c571114
MM
5525 /* If the template we're instantiating is incomplete, then clearly
5526 there's nothing we can do. */
d0f062fb 5527 if (!COMPLETE_TYPE_P (pattern))
f31c0a32 5528 return type;
5566b478 5529
4c571114
MM
5530 /* If we've recursively instantiated too many templates, stop. */
5531 if (! push_tinst_level (type))
f31c0a32 5532 return type;
4c571114
MM
5533
5534 /* Now we're really doing the instantiation. Mark the type as in
5535 the process of being defined. */
5536 TYPE_BEING_DEFINED (type) = 1;
5537
78757caa
KL
5538 /* We may be in the middle of deferred access check. Disable
5539 it now. */
5540 push_deferring_access_checks (dk_no_deferred);
5541
c353b8e3 5542 push_to_top_level ();
4c571114 5543
73aad9b9 5544 if (t)
36a117a5 5545 {
27631dae 5546 /* This TYPE is actually an instantiation of a partial
36a117a5
MM
5547 specialization. We replace the innermost set of ARGS with
5548 the arguments appropriate for substitution. For example,
5549 given:
5550
5551 template <class T> struct S {};
5552 template <class T> struct S<T*> {};
c8094d83 5553
36a117a5
MM
5554 and supposing that we are instantiating S<int*>, ARGS will
5555 present be {int*} but we need {int}. */
c8094d83 5556 tree inner_args
36a117a5
MM
5557 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5558 args);
5559
5560 /* If there were multiple levels in ARGS, replacing the
5561 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5562 want, so we make a copy first. */
5563 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5564 {
5565 args = copy_node (args);
5566 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5567 }
5568 else
5569 args = inner_args;
5570 }
8d019cef 5571
7813d14c 5572 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8d08fdba 5573
68ea098a
NS
5574 /* Set the input location to the template definition. This is needed
5575 if tsubsting causes an error. */
12af7ba3
MM
5576 typedecl = TYPE_MAIN_DECL (type);
5577 input_location = DECL_SOURCE_LOCATION (typedecl);
5578 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
68ea098a 5579
f7da6097 5580 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
834c6dff
MM
5581 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5582 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
f7da6097 5583 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
f7da6097
MS
5584 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5585 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
f7da6097
MS
5586 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5587 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
5588 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5589 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
f7da6097
MS
5590 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5591 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
11cf4d18 5592 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
eff71ab0 5593 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
5594 if (ANON_AGGR_TYPE_P (pattern))
5595 SET_ANON_AGGR_TYPE_P (type);
8d039470
MS
5596 if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
5597 {
5598 CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
5599 CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
5600 }
f7da6097 5601
dbbf88d1 5602 pbinfo = TYPE_BINFO (pattern);
1456deaf 5603
315fb5db
NS
5604 /* We should never instantiate a nested class before its enclosing
5605 class; we need to look up the nested class by name before we can
5606 instantiate it, and that lookup should instantiate the enclosing
5607 class. */
5608 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5609 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5610 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
1456deaf 5611
cad7e87b 5612 base_list = NULL_TREE;
fa743e8c 5613 if (BINFO_N_BASE_BINFOS (pbinfo))
3fd71a52 5614 {
fa743e8c 5615 tree pbase_binfo;
a2507277 5616 tree context = TYPE_CONTEXT (type);
4514aa8c 5617 tree pushed_scope;
3fd71a52 5618 int i;
5566b478 5619
a2507277
NS
5620 /* We must enter the scope containing the type, as that is where
5621 the accessibility of types named in dependent bases are
5622 looked up from. */
4514aa8c 5623 pushed_scope = push_scope (context ? context : global_namespace);
c8094d83 5624
3fd71a52
MM
5625 /* Substitute into each of the bases to determine the actual
5626 basetypes. */
fa743e8c 5627 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
3fd71a52
MM
5628 {
5629 tree base;
fa743e8c 5630 tree access = BINFO_BASE_ACCESS (pbinfo, i);
711734a9 5631
dc957d14 5632 /* Substitute to figure out the base class. */
fa743e8c 5633 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
3fd71a52
MM
5634 if (base == error_mark_node)
5635 continue;
c8094d83 5636
3fd71a52 5637 base_list = tree_cons (access, base, base_list);
fa743e8c 5638 if (BINFO_VIRTUAL_P (pbase_binfo))
809e3e7f 5639 TREE_TYPE (base_list) = integer_type_node;
3fd71a52 5640 }
dfbcd65a 5641
3fd71a52
MM
5642 /* The list is now in reverse order; correct that. */
5643 base_list = nreverse (base_list);
5644
4514aa8c
NS
5645 if (pushed_scope)
5646 pop_scope (pushed_scope);
3fd71a52 5647 }
cad7e87b
NS
5648 /* Now call xref_basetypes to set up all the base-class
5649 information. */
5650 xref_basetypes (type, base_list);
5651
5566b478 5652
b74a0560
MM
5653 /* Now that our base classes are set up, enter the scope of the
5654 class, so that name lookups into base classes, etc. will work
dc957d14 5655 correctly. This is precisely analogous to what we do in
b74a0560
MM
5656 begin_class_definition when defining an ordinary non-template
5657 class. */
29370796 5658 pushclass (type);
b74a0560 5659
7088fca9 5660 /* Now members are processed in the order of declaration. */
8c6ab2db
NS
5661 for (member = CLASSTYPE_DECL_LIST (pattern);
5662 member; member = TREE_CHAIN (member))
8d08fdba 5663 {
7088fca9 5664 tree t = TREE_VALUE (member);
5566b478 5665
7088fca9 5666 if (TREE_PURPOSE (member))
ed44da02 5667 {
7088fca9
KL
5668 if (TYPE_P (t))
5669 {
5e0c54e5 5670 /* Build new CLASSTYPE_NESTED_UTDS. */
8d08fdba 5671
7088fca9
KL
5672 tree tag = t;
5673 tree name = TYPE_IDENTIFIER (tag);
5674 tree newtag;
883a2bff
MM
5675 bool class_template_p;
5676
5677 class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5678 && TYPE_LANG_SPECIFIC (tag)
5679 && CLASSTYPE_IS_TEMPLATE (tag));
5680 /* If the member is a class template, then -- even after
6c745393 5681 substitution -- there may be dependent types in the
883a2bff
MM
5682 template argument list for the class. We increment
5683 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5684 that function will assume that no types are dependent
5685 when outside of a template. */
5686 if (class_template_p)
5687 ++processing_template_decl;
7088fca9 5688 newtag = tsubst (tag, args, tf_error, NULL_TREE);
883a2bff
MM
5689 if (class_template_p)
5690 --processing_template_decl;
2620d095
KL
5691 if (newtag == error_mark_node)
5692 continue;
5693
7088fca9
KL
5694 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5695 {
883a2bff 5696 if (class_template_p)
7088fca9
KL
5697 /* Unfortunately, lookup_template_class sets
5698 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
3afd2e20
NS
5699 instantiation (i.e., for the type of a member
5700 template class nested within a template class.)
5701 This behavior is required for
5702 maybe_process_partial_specialization to work
5703 correctly, but is not accurate in this case;
5704 the TAG is not an instantiation of anything.
5705 (The corresponding TEMPLATE_DECL is an
5706 instantiation, but the TYPE is not.) */
7088fca9
KL
5707 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5708
5709 /* Now, we call pushtag to put this NEWTAG into the scope of
5710 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5711 pushtag calling push_template_decl. We don't have to do
5712 this for enums because it will already have been done in
5713 tsubst_enum. */
5714 if (name)
5715 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
bd3d082e 5716 pushtag (name, newtag, /*tag_scope=*/ts_current);
7088fca9
KL
5717 }
5718 }
c8094d83 5719 else if (TREE_CODE (t) == FUNCTION_DECL
7088fca9
KL
5720 || DECL_FUNCTION_TEMPLATE_P (t))
5721 {
5722 /* Build new TYPE_METHODS. */
fecafe5e 5723 tree r;
c8094d83 5724
fecafe5e 5725 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5726 ++processing_template_decl;
fecafe5e
NS
5727 r = tsubst (t, args, tf_error, NULL_TREE);
5728 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5729 --processing_template_decl;
7088fca9
KL
5730 set_current_access_from_decl (r);
5731 grok_special_member_properties (r);
5732 finish_member_declaration (r);
5733 }
5734 else
5735 {
5736 /* Build new TYPE_FIELDS. */
fa8d6e85 5737
7088fca9
KL
5738 if (TREE_CODE (t) != CONST_DECL)
5739 {
5740 tree r;
fa8d6e85 5741
d479d37f
NS
5742 /* The the file and line for this declaration, to
5743 assist in error message reporting. Since we
5744 called push_tinst_level above, we don't need to
5745 restore these. */
f31686a3 5746 input_location = DECL_SOURCE_LOCATION (t);
fa8d6e85 5747
fb5ce3c9 5748 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5749 ++processing_template_decl;
7088fca9 5750 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
fb5ce3c9 5751 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5752 --processing_template_decl;
7088fca9
KL
5753 if (TREE_CODE (r) == VAR_DECL)
5754 {
b794e321
MM
5755 /* In [temp.inst]:
5756
5757 [t]he initialization (and any associated
5758 side-effects) of a static data member does
5759 not occur unless the static data member is
5760 itself used in a way that requires the
5761 definition of the static data member to
5762 exist.
5763
5764 Therefore, we do not substitute into the
5765 initialized for the static data member here. */
5766 finish_static_data_member_decl
5767 (r,
5768 /*init=*/NULL_TREE,
5769 /*asmspec_tree=*/NULL_TREE,
5770 /*flags=*/0);
7088fca9
KL
5771 if (DECL_INITIALIZED_IN_CLASS_P (r))
5772 check_static_variable_definition (r, TREE_TYPE (r));
5773 }
5774 else if (TREE_CODE (r) == FIELD_DECL)
5775 {
5776 /* Determine whether R has a valid type and can be
5777 completed later. If R is invalid, then it is
5778 replaced by error_mark_node so that it will not be
5779 added to TYPE_FIELDS. */
5780 tree rtype = TREE_TYPE (r);
5781 if (can_complete_type_without_circularity (rtype))
5782 complete_type (rtype);
5783
5784 if (!COMPLETE_TYPE_P (rtype))
5785 {
5786 cxx_incomplete_type_error (r, rtype);
0cbd7506 5787 r = error_mark_node;
7088fca9
KL
5788 }
5789 }
5566b478 5790
7088fca9
KL
5791 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5792 such a thing will already have been added to the field
5793 list by tsubst_enum in finish_member_declaration in the
5e0c54e5 5794 CLASSTYPE_NESTED_UTDS case above. */
7088fca9
KL
5795 if (!(TREE_CODE (r) == TYPE_DECL
5796 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
43b26a01 5797 && DECL_ARTIFICIAL (r)))
7088fca9
KL
5798 {
5799 set_current_access_from_decl (r);
5800 finish_member_declaration (r);
5801 }
0cbd7506 5802 }
7088fca9 5803 }
61fc8c9e 5804 }
7088fca9
KL
5805 else
5806 {
5807 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5808 {
5809 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5810
5811 tree friend_type = t;
b939a023 5812 bool adjust_processing_template_decl = false;
1aed5355 5813
7088fca9 5814 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
b939a023 5815 {
5a24482e 5816 /* template <class T> friend class C; */
b939a023 5817 friend_type = tsubst_friend_class (friend_type, args);
0cbd7506 5818 adjust_processing_template_decl = true;
b939a023
KL
5819 }
5820 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5821 {
5a24482e 5822 /* template <class T> friend class C::D; */
b939a023
KL
5823 friend_type = tsubst (friend_type, args,
5824 tf_error | tf_warning, NULL_TREE);
5825 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5826 friend_type = TREE_TYPE (friend_type);
0cbd7506 5827 adjust_processing_template_decl = true;
b939a023
KL
5828 }
5829 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5830 {
5a24482e
KL
5831 /* This could be either
5832
5833 friend class T::C;
5834
5835 when dependent_type_p is false or
5836
5837 template <class U> friend class T::C;
5838
5839 otherwise. */
b939a023
KL
5840 friend_type = tsubst (friend_type, args,
5841 tf_error | tf_warning, NULL_TREE);
5842 /* Bump processing_template_decl for correct
5843 dependent_type_p calculation. */
5844 ++processing_template_decl;
5845 if (dependent_type_p (friend_type))
5846 adjust_processing_template_decl = true;
5847 --processing_template_decl;
5848 }
5a24482e
KL
5849 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5850 && hidden_name_p (TYPE_NAME (friend_type)))
7088fca9 5851 {
5a24482e
KL
5852 /* friend class C;
5853
5854 where C hasn't been declared yet. Let's lookup name
5855 from namespace scope directly, bypassing any name that
5856 come from dependent base class. */
7088fca9
KL
5857 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5858
5859 /* The call to xref_tag_from_type does injection for friend
5860 classes. */
5861 push_nested_namespace (ns);
c8094d83
MS
5862 friend_type =
5863 xref_tag_from_type (friend_type, NULL_TREE,
5a24482e 5864 /*tag_scope=*/ts_current);
7088fca9
KL
5865 pop_nested_namespace (ns);
5866 }
5a24482e
KL
5867 else if (uses_template_parms (friend_type))
5868 /* friend class C<T>; */
5869 friend_type = tsubst (friend_type, args,
5870 tf_error | tf_warning, NULL_TREE);
5871 /* Otherwise it's
5872
5873 friend class C;
5874
5875 where C is already declared or
5876
5877 friend class C<int>;
5878
0cbd7506 5879 We don't have to do anything in these cases. */
1aed5355 5880
b939a023 5881 if (adjust_processing_template_decl)
7088fca9
KL
5882 /* Trick make_friend_class into realizing that the friend
5883 we're adding is a template, not an ordinary class. It's
5884 important that we use make_friend_class since it will
5885 perform some error-checking and output cross-reference
5886 information. */
5887 ++processing_template_decl;
fc378698 5888
b939a023 5889 if (friend_type != error_mark_node)
0cbd7506 5890 make_friend_class (type, friend_type, /*complain=*/false);
fc378698 5891
b939a023 5892 if (adjust_processing_template_decl)
7088fca9
KL
5893 --processing_template_decl;
5894 }
5895 else
9579624e
KL
5896 {
5897 /* Build new DECL_FRIENDLIST. */
5898 tree r;
5899
6e432b31
KL
5900 /* The the file and line for this declaration, to
5901 assist in error message reporting. Since we
5902 called push_tinst_level above, we don't need to
5903 restore these. */
5904 input_location = DECL_SOURCE_LOCATION (t);
5905
9579624e 5906 if (TREE_CODE (t) == TEMPLATE_DECL)
cad7e87b
NS
5907 {
5908 ++processing_template_decl;
5909 push_deferring_access_checks (dk_no_check);
5910 }
c8094d83 5911
9579624e 5912 r = tsubst_friend_function (t, args);
9579624e 5913 add_friend (type, r, /*complain=*/false);
cad7e87b
NS
5914 if (TREE_CODE (t) == TEMPLATE_DECL)
5915 {
5916 pop_deferring_access_checks ();
5917 --processing_template_decl;
5918 }
9579624e 5919 }
7088fca9
KL
5920 }
5921 }
5566b478 5922
61a127b3
MM
5923 /* Set the file and line number information to whatever is given for
5924 the class itself. This puts error messages involving generated
5925 implicit functions at a predictable point, and the same point
5926 that would be used for non-template classes. */
f31686a3 5927 input_location = DECL_SOURCE_LOCATION (typedecl);
6de9cd9a 5928
61a127b3 5929 unreverse_member_declarations (type);
9f33663b 5930 finish_struct_1 (type);
5524676d 5931 TYPE_BEING_DEFINED (type) = 0;
8d08fdba 5932
9188c363
MM
5933 /* Now that the class is complete, instantiate default arguments for
5934 any member functions. We don't do this earlier because the
5935 default arguments may reference members of the class. */
5936 if (!PRIMARY_TEMPLATE_P (template))
5937 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
c8094d83 5938 if (TREE_CODE (t) == FUNCTION_DECL
dc957d14 5939 /* Implicitly generated member functions will not have template
9188c363
MM
5940 information; they are not instantiations, but instead are
5941 created "fresh" for each instantiation. */
5942 && DECL_TEMPLATE_INFO (t))
5943 tsubst_default_arguments (t);
5944
b74a0560 5945 popclass ();
5566b478 5946 pop_from_top_level ();
78757caa 5947 pop_deferring_access_checks ();
5566b478
MS
5948 pop_tinst_level ();
5949
4684cd27
MM
5950 /* The vtable for a template class can be emitted in any translation
5951 unit in which the class is instantiated. When there is no key
5952 method, however, finish_struct_1 will already have added TYPE to
5953 the keyed_classes list. */
5954 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9aad8f83
MA
5955 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5956
5566b478 5957 return type;
8d08fdba
MS
5958}
5959
00d3396f 5960static tree
a91db711 5961tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
00d3396f 5962{
a91db711 5963 tree r;
c8094d83 5964
a91db711
NS
5965 if (!t)
5966 r = t;
5967 else if (TYPE_P (t))
5968 r = tsubst (t, args, complain, in_decl);
5969 else
00d3396f 5970 {
a91db711 5971 r = tsubst_expr (t, args, complain, in_decl);
6f25cb35 5972 r = fold_non_dependent_expr (r);
bd83b409 5973 }
a91db711 5974 return r;
bd83b409
NS
5975}
5976
a91db711 5977/* Substitute ARGS into the vector or list of template arguments T. */
830bfa74 5978
e9659ab0 5979static tree
a91db711 5980tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
830bfa74 5981{
bf12d54d 5982 int len = TREE_VEC_LENGTH (t);
a91db711 5983 int need_new = 0, i;
c68b0a84 5984 tree *elts = alloca (len * sizeof (tree));
c8094d83 5985
830bfa74
MM
5986 for (i = 0; i < len; i++)
5987 {
bf12d54d
NS
5988 tree orig_arg = TREE_VEC_ELT (t, i);
5989 tree new_arg;
a91db711 5990
bf12d54d
NS
5991 if (TREE_CODE (orig_arg) == TREE_VEC)
5992 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
830bfa74 5993 else
a91db711 5994 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
c8094d83 5995
a91db711 5996 if (new_arg == error_mark_node)
08e72a19
JM
5997 return error_mark_node;
5998
a91db711
NS
5999 elts[i] = new_arg;
6000 if (new_arg != orig_arg)
830bfa74
MM
6001 need_new = 1;
6002 }
c8094d83 6003
830bfa74
MM
6004 if (!need_new)
6005 return t;
a91db711 6006
bf12d54d
NS
6007 t = make_tree_vec (len);
6008 for (i = 0; i < len; i++)
6009 TREE_VEC_ELT (t, i) = elts[i];
c8094d83 6010
830bfa74
MM
6011 return t;
6012}
6013
36a117a5
MM
6014/* Return the result of substituting ARGS into the template parameters
6015 given by PARMS. If there are m levels of ARGS and m + n levels of
6016 PARMS, then the result will contain n levels of PARMS. For
6017 example, if PARMS is `template <class T> template <class U>
6018 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
6019 result will be `template <int*, double, class V>'. */
6020
e9659ab0 6021static tree
3a978d72 6022tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
36a117a5 6023{
f71f87f9
MM
6024 tree r = NULL_TREE;
6025 tree* new_parms;
36a117a5 6026
8ca4bf25
MM
6027 /* When substituting into a template, we must set
6028 PROCESSING_TEMPLATE_DECL as the template parameters may be
6029 dependent if they are based on one-another, and the dependency
6030 predicates are short-circuit outside of templates. */
6031 ++processing_template_decl;
6032
36a117a5
MM
6033 for (new_parms = &r;
6034 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
6035 new_parms = &(TREE_CHAIN (*new_parms)),
6036 parms = TREE_CHAIN (parms))
6037 {
c8094d83 6038 tree new_vec =
36a117a5
MM
6039 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
6040 int i;
c8094d83 6041
36a117a5
MM
6042 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
6043 {
833aa4c4
NS
6044 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
6045 tree default_value = TREE_PURPOSE (tuple);
6046 tree parm_decl = TREE_VALUE (tuple);
6047
6048 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
a207780f
VR
6049 if (TREE_CODE (parm_decl) == PARM_DECL
6050 && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
6051 parm_decl = error_mark_node;
a91db711
NS
6052 default_value = tsubst_template_arg (default_value, args,
6053 complain, NULL_TREE);
c8094d83 6054
a91db711 6055 tuple = build_tree_list (default_value, parm_decl);
833aa4c4 6056 TREE_VEC_ELT (new_vec, i) = tuple;
36a117a5 6057 }
c8094d83
MS
6058
6059 *new_parms =
6060 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
4890c2f4 6061 - TMPL_ARGS_DEPTH (args)),
36a117a5
MM
6062 new_vec, NULL_TREE);
6063 }
6064
8ca4bf25
MM
6065 --processing_template_decl;
6066
36a117a5
MM
6067 return r;
6068}
6069
ed44da02
MM
6070/* Substitute the ARGS into the indicated aggregate (or enumeration)
6071 type T. If T is not an aggregate or enumeration type, it is
6072 handled as if by tsubst. IN_DECL is as for tsubst. If
838dfd8a 6073 ENTERING_SCOPE is nonzero, T is the context for a template which
dc957d14 6074 we are presently tsubst'ing. Return the substituted value. */
36a117a5 6075
e9659ab0 6076static tree
c8094d83 6077tsubst_aggr_type (tree t,
0cbd7506
MS
6078 tree args,
6079 tsubst_flags_t complain,
6080 tree in_decl,
6081 int entering_scope)
36a117a5
MM
6082{
6083 if (t == NULL_TREE)
6084 return NULL_TREE;
6085
6086 switch (TREE_CODE (t))
6087 {
6088 case RECORD_TYPE:
6089 if (TYPE_PTRMEMFUNC_P (t))
46c895ac 6090 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
36a117a5 6091
f4f206f4 6092 /* Else fall through. */
ed44da02 6093 case ENUMERAL_TYPE:
36a117a5 6094 case UNION_TYPE:
5db698f6 6095 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
6096 {
6097 tree argvec;
6098 tree context;
6099 tree r;
3489ea0c
MM
6100 bool saved_skip_evaluation;
6101
6102 /* In "sizeof(X<I>)" we need to evaluate "I". */
6103 saved_skip_evaluation = skip_evaluation;
6104 skip_evaluation = false;
36a117a5
MM
6105
6106 /* First, determine the context for the type we are looking
6107 up. */
4f7847ca
NS
6108 context = TYPE_CONTEXT (t);
6109 if (context)
6110 context = tsubst_aggr_type (context, args, complain,
36a117a5 6111 in_decl, /*entering_scope=*/1);
36a117a5
MM
6112
6113 /* Then, figure out what arguments are appropriate for the
6114 type we are trying to find. For example, given:
6115
6116 template <class T> struct S;
6117 template <class T, class U> void f(T, U) { S<U> su; }
6118
6119 and supposing that we are instantiating f<int, double>,
6120 then our ARGS will be {int, double}, but, when looking up
6121 S we only want {double}. */
a91db711
NS
6122 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6123 complain, in_decl);
08e72a19 6124 if (argvec == error_mark_node)
3489ea0c
MM
6125 r = error_mark_node;
6126 else
6127 {
6128 r = lookup_template_class (t, argvec, in_decl, context,
6129 entering_scope, complain);
6130 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6131 }
6132
6133 skip_evaluation = saved_skip_evaluation;
36a117a5 6134
3489ea0c 6135 return r;
36a117a5 6136 }
c8094d83 6137 else
36a117a5
MM
6138 /* This is not a template type, so there's nothing to do. */
6139 return t;
6140
6141 default:
4393e105 6142 return tsubst (t, args, complain, in_decl);
36a117a5
MM
6143 }
6144}
6145
9188c363
MM
6146/* Substitute into the default argument ARG (a default argument for
6147 FN), which has the indicated TYPE. */
6148
6149tree
3a978d72 6150tsubst_default_argument (tree fn, tree type, tree arg)
9188c363 6151{
2436b51f
MM
6152 tree saved_class_ptr = NULL_TREE;
6153 tree saved_class_ref = NULL_TREE;
6154
9188c363
MM
6155 /* This default argument came from a template. Instantiate the
6156 default argument here, not in tsubst. In the case of
c8094d83
MS
6157 something like:
6158
9188c363
MM
6159 template <class T>
6160 struct S {
6161 static T t();
6162 void f(T = t());
6163 };
c8094d83 6164
9188c363 6165 we must be careful to do name lookup in the scope of S<T>,
d5a10cf0 6166 rather than in the current class. */
2b59fc25 6167 push_access_scope (fn);
2436b51f
MM
6168 /* The "this" pointer is not valid in a default argument. */
6169 if (cfun)
6170 {
6171 saved_class_ptr = current_class_ptr;
6172 cp_function_chain->x_current_class_ptr = NULL_TREE;
6173 saved_class_ref = current_class_ref;
6174 cp_function_chain->x_current_class_ref = NULL_TREE;
6175 }
9188c363 6176
d5a10cf0 6177 push_deferring_access_checks(dk_no_deferred);
c2ea3a40
NS
6178 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6179 tf_error | tf_warning, NULL_TREE);
d5a10cf0
MM
6180 pop_deferring_access_checks();
6181
2436b51f
MM
6182 /* Restore the "this" pointer. */
6183 if (cfun)
6184 {
6185 cp_function_chain->x_current_class_ptr = saved_class_ptr;
6186 cp_function_chain->x_current_class_ref = saved_class_ref;
6187 }
6188
2b59fc25 6189 pop_access_scope (fn);
9188c363
MM
6190
6191 /* Make sure the default argument is reasonable. */
6192 arg = check_default_argument (type, arg);
6193
6194 return arg;
6195}
6196
6197/* Substitute into all the default arguments for FN. */
6198
6199static void
3a978d72 6200tsubst_default_arguments (tree fn)
9188c363
MM
6201{
6202 tree arg;
6203 tree tmpl_args;
6204
6205 tmpl_args = DECL_TI_ARGS (fn);
6206
6207 /* If this function is not yet instantiated, we certainly don't need
6208 its default arguments. */
6209 if (uses_template_parms (tmpl_args))
6210 return;
6211
c8094d83
MS
6212 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6213 arg;
9188c363
MM
6214 arg = TREE_CHAIN (arg))
6215 if (TREE_PURPOSE (arg))
c8094d83 6216 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9188c363
MM
6217 TREE_VALUE (arg),
6218 TREE_PURPOSE (arg));
6219}
6220
fc6a28d7
MM
6221/* Substitute the ARGS into the T, which is a _DECL. Return the
6222 result of the substitution. Issue error and warning messages under
6223 control of COMPLAIN. */
00d3396f 6224
e9659ab0 6225static tree
fc6a28d7 6226tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8d08fdba 6227{
82a98427 6228 location_t saved_loc;
b370501f 6229 tree r = NULL_TREE;
4b2811e9 6230 tree in_decl = t;
830bfa74 6231
ae58fa02 6232 /* Set the filename and linenumber to improve error-reporting. */
82a98427 6233 saved_loc = input_location;
f31686a3 6234 input_location = DECL_SOURCE_LOCATION (t);
b7484fbe 6235
8d08fdba
MS
6236 switch (TREE_CODE (t))
6237 {
98c1c668
JM
6238 case TEMPLATE_DECL:
6239 {
28e42b7e
KL
6240 /* We can get here when processing a member function template,
6241 member class template, and template template parameter of
6242 a template class. */
98c1c668 6243 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 6244 tree spec;
28e42b7e
KL
6245 tree tmpl_args;
6246 tree full_args;
98c1c668 6247
28e42b7e 6248 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
db2767b6 6249 {
28e42b7e
KL
6250 /* Template template parameter is treated here. */
6251 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6252 if (new_type == error_mark_node)
6253 return error_mark_node;
36a117a5 6254
28e42b7e
KL
6255 r = copy_decl (t);
6256 TREE_CHAIN (r) = NULL_TREE;
6257 TREE_TYPE (r) = new_type;
6258 DECL_TEMPLATE_RESULT (r)
6259 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
c8094d83 6260 DECL_TEMPLATE_PARMS (r)
28e42b7e
KL
6261 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6262 complain);
6263 TYPE_NAME (new_type) = r;
6264 break;
6265 }
36a117a5 6266
28e42b7e
KL
6267 /* We might already have an instance of this template.
6268 The ARGS are for the surrounding class type, so the
6269 full args contain the tsubst'd args for the context,
6270 plus the innermost args from the template decl. */
c8094d83 6271 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
28e42b7e
KL
6272 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6273 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
8ca4bf25
MM
6274 /* Because this is a template, the arguments will still be
6275 dependent, even after substitution. If
6276 PROCESSING_TEMPLATE_DECL is not set, the dependency
6277 predicates will short-circuit. */
6278 ++processing_template_decl;
28e42b7e
KL
6279 full_args = tsubst_template_args (tmpl_args, args,
6280 complain, in_decl);
8ca4bf25 6281 --processing_template_decl;
bf2f7328
VR
6282 if (full_args == error_mark_node)
6283 return error_mark_node;
28e42b7e
KL
6284
6285 /* tsubst_template_args doesn't copy the vector if
6286 nothing changed. But, *something* should have
6287 changed. */
6288 gcc_assert (full_args != tmpl_args);
6289
6290 spec = retrieve_specialization (t, full_args,
6291 /*class_specializations_p=*/true);
6292 if (spec != NULL_TREE)
6293 {
6294 r = spec;
6295 break;
db2767b6 6296 }
98c1c668
JM
6297
6298 /* Make a new template decl. It will be similar to the
c8094d83 6299 original, but will record the current template arguments.
98c1c668
JM
6300 We also create a new function declaration, which is just
6301 like the old one, but points to this new template, rather
6302 than the old one. */
0acf7199 6303 r = copy_decl (t);
50bc768d 6304 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
ae58fa02 6305 TREE_CHAIN (r) = NULL_TREE;
db2767b6 6306
ae58fa02 6307 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
6308
6309 if (TREE_CODE (decl) == TYPE_DECL)
6310 {
8ca4bf25
MM
6311 tree new_type;
6312 ++processing_template_decl;
6313 new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6314 --processing_template_decl;
2620d095
KL
6315 if (new_type == error_mark_node)
6316 return error_mark_node;
6317
ae58fa02
MM
6318 TREE_TYPE (r) = new_type;
6319 CLASSTYPE_TI_TEMPLATE (new_type) = r;
17aec3eb 6320 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
ae58fa02 6321 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
8ca4bf25 6322 DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
93cdc044
JM
6323 }
6324 else
6325 {
8ca4bf25
MM
6326 tree new_decl;
6327 ++processing_template_decl;
6328 new_decl = tsubst (decl, args, complain, in_decl);
6329 --processing_template_decl;
caec1dc0
KL
6330 if (new_decl == error_mark_node)
6331 return error_mark_node;
17aec3eb
RK
6332
6333 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
6334 DECL_TI_TEMPLATE (new_decl) = r;
6335 TREE_TYPE (r) = TREE_TYPE (new_decl);
6336 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
8ca4bf25 6337 DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
93cdc044
JM
6338 }
6339
ae58fa02
MM
6340 SET_DECL_IMPLICIT_INSTANTIATION (r);
6341 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6342 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
6343
6344 /* The template parameters for this new template are all the
6345 template parameters for the old template, except the
c6002625 6346 outermost level of parameters. */
c8094d83 6347 DECL_TEMPLATE_PARMS (r)
4393e105 6348 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
c2ea3a40 6349 complain);
98c1c668 6350
93cdc044 6351 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 6352 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 6353
8c6ab2db
NS
6354 if (TREE_CODE (decl) != TYPE_DECL)
6355 /* Record this non-type partial instantiation. */
c8094d83 6356 register_specialization (r, t,
d63d5d0c
ILT
6357 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
6358 false);
98c1c668 6359 }
ae58fa02 6360 break;
8d08fdba
MS
6361
6362 case FUNCTION_DECL:
6363 {
386b8a85 6364 tree ctx;
87603ed0 6365 tree argvec = NULL_TREE;
cf38f48a 6366 tree *friends;
36a117a5 6367 tree gen_tmpl;
fc6a28d7 6368 tree type;
5566b478 6369 int member;
d8c4447d
MM
6370 int args_depth;
6371 int parms_depth;
5566b478 6372
36a117a5 6373 /* Nobody should be tsubst'ing into non-template functions. */
50bc768d 6374 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
36a117a5
MM
6375
6376 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6377 {
6378 tree spec;
00cf3e31
MM
6379 bool dependent_p;
6380
6381 /* If T is not dependent, just return it. We have to
6382 increment PROCESSING_TEMPLATE_DECL because
6383 value_dependent_expression_p assumes that nothing is
6384 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6385 ++processing_template_decl;
6386 dependent_p = value_dependent_expression_p (t);
6387 --processing_template_decl;
6388 if (!dependent_p)
6389 return t;
36a117a5
MM
6390
6391 /* Calculate the most general template of which R is a
6392 specialization, and the complete set of arguments used to
6393 specialize R. */
6394 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
c8094d83 6395 argvec = tsubst_template_args (DECL_TI_ARGS
a91db711 6396 (DECL_TEMPLATE_RESULT (gen_tmpl)),
c8094d83 6397 args, complain, in_decl);
36a117a5
MM
6398
6399 /* Check to see if we already have this specialization. */
c7222c02
MM
6400 spec = retrieve_specialization (gen_tmpl, argvec,
6401 /*class_specializations_p=*/false);
7ddedda4 6402
36a117a5 6403 if (spec)
ae58fa02
MM
6404 {
6405 r = spec;
6406 break;
6407 }
d8c4447d 6408
f9a7ae04
MM
6409 /* We can see more levels of arguments than parameters if
6410 there was a specialization of a member template, like
6411 this:
6412
0cbd7506 6413 template <class T> struct S { template <class U> void f(); }
c8094d83 6414 template <> template <class U> void S<int>::f(U);
f9a7ae04 6415
dc957d14 6416 Here, we'll be substituting into the specialization,
f9a7ae04
MM
6417 because that's where we can find the code we actually
6418 want to generate, but we'll have enough arguments for
c8094d83 6419 the most general template.
f9a7ae04
MM
6420
6421 We also deal with the peculiar case:
d8c4447d 6422
c8094d83 6423 template <class T> struct S {
d8c4447d
MM
6424 template <class U> friend void f();
6425 };
74b846e0 6426 template <class U> void f() {}
d8c4447d
MM
6427 template S<int>;
6428 template void f<double>();
6429
6430 Here, the ARGS for the instantiation of will be {int,
6431 double}. But, we only need as many ARGS as there are
6432 levels of template parameters in CODE_PATTERN. We are
6433 careful not to get fooled into reducing the ARGS in
6434 situations like:
6435
6436 template <class T> struct S { template <class U> void f(U); }
6437 template <class T> template <> void S<T>::f(int) {}
6438
6439 which we can spot because the pattern will be a
6440 specialization in this case. */
6441 args_depth = TMPL_ARGS_DEPTH (args);
c8094d83
MS
6442 parms_depth =
6443 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
d8c4447d
MM
6444 if (args_depth > parms_depth
6445 && !DECL_TEMPLATE_SPECIALIZATION (t))
f9a7ae04 6446 args = get_innermost_template_args (args, parms_depth);
36a117a5
MM
6447 }
6448 else
6449 {
6450 /* This special case arises when we have something like this:
6451
0cbd7506 6452 template <class T> struct S {
c8094d83 6453 friend void f<int>(int, double);
36a117a5
MM
6454 };
6455
6456 Here, the DECL_TI_TEMPLATE for the friend declaration
10b1d5e7
MM
6457 will be an IDENTIFIER_NODE. We are being called from
6458 tsubst_friend_function, and we want only to create a
6459 new decl (R) with appropriate types so that we can call
6460 determine_specialization. */
36a117a5
MM
6461 gen_tmpl = NULL_TREE;
6462 }
6463
6eb3bb27 6464 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 6465 {
5566b478
MS
6466 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6467 member = 2;
6468 else
6469 member = 1;
c8094d83 6470 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8c6ab2db 6471 complain, t, /*entering_scope=*/1);
5566b478
MS
6472 }
6473 else
6474 {
6475 member = 0;
4f1c5b7d 6476 ctx = DECL_CONTEXT (t);
5566b478 6477 }
fc6a28d7 6478 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
b3da7bb1
MM
6479 if (type == error_mark_node)
6480 return error_mark_node;
8d08fdba 6481
5566b478 6482 /* We do NOT check for matching decls pushed separately at this
0cbd7506
MS
6483 point, as they may not represent instantiations of this
6484 template, and in any case are considered separate under the
6485 discrete model. */
0acf7199 6486 r = copy_decl (t);
e1467ff2 6487 DECL_USE_TEMPLATE (r) = 0;
5566b478 6488 TREE_TYPE (r) = type;
92643fea
MM
6489 /* Clear out the mangled name and RTL for the instantiation. */
6490 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6491 SET_DECL_RTL (r, NULL_RTX);
5bd61841 6492 DECL_INITIAL (r) = NULL_TREE;
4f1c5b7d 6493 DECL_CONTEXT (r) = ctx;
5566b478 6494
c8094d83 6495 if (member && DECL_CONV_FN_P (r))
1f84ec23
MM
6496 /* Type-conversion operator. Reconstruct the name, in
6497 case it's the name of one of the template's parameters. */
6498 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
5566b478 6499
4393e105 6500 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
c2ea3a40 6501 complain, t);
477f6664 6502 DECL_RESULT (r) = NULL_TREE;
711734a9
JM
6503
6504 TREE_STATIC (r) = 0;
6505 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6506 DECL_EXTERNAL (r) = 1;
4684cd27
MM
6507 /* If this is an instantiation of a function with internal
6508 linkage, we already know what object file linkage will be
6509 assigned to the instantiation. */
6510 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
711734a9
JM
6511 DECL_DEFER_OUTPUT (r) = 0;
6512 TREE_CHAIN (r) = NULL_TREE;
6513 DECL_PENDING_INLINE_INFO (r) = 0;
59026e79 6514 DECL_PENDING_INLINE_P (r) = 0;
655dc6ee 6515 DECL_SAVED_TREE (r) = NULL_TREE;
711734a9 6516 TREE_USED (r) = 0;
db9b2174
MM
6517 if (DECL_CLONED_FUNCTION (r))
6518 {
6519 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
c2ea3a40 6520 args, complain, t);
db9b2174
MM
6521 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6522 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6523 }
711734a9 6524
92643fea
MM
6525 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6526 this in the special friend case mentioned above where
6527 GEN_TMPL is NULL. */
36a117a5 6528 if (gen_tmpl)
386b8a85 6529 {
c8094d83 6530 DECL_TEMPLATE_INFO (r)
e1b3e07d 6531 = tree_cons (gen_tmpl, argvec, NULL_TREE);
36a117a5 6532 SET_DECL_IMPLICIT_INSTANTIATION (r);
d63d5d0c 6533 register_specialization (r, gen_tmpl, argvec, false);
36a117a5 6534
9188c363
MM
6535 /* We're not supposed to instantiate default arguments
6536 until they are called, for a template. But, for a
6537 declaration like:
6538
0cbd7506
MS
6539 template <class T> void f ()
6540 { extern void g(int i = T()); }
c8094d83 6541
9188c363
MM
6542 we should do the substitution when the template is
6543 instantiated. We handle the member function case in
6544 instantiate_class_template since the default arguments
6545 might refer to other members of the class. */
6546 if (!member
6547 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6548 && !uses_template_parms (argvec))
6549 tsubst_default_arguments (r);
386b8a85 6550 }
c43e95f8
MM
6551 else
6552 DECL_TEMPLATE_INFO (r) = NULL_TREE;
f181d4ae 6553
cf38f48a
MM
6554 /* Copy the list of befriending classes. */
6555 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6556 *friends;
c8094d83 6557 friends = &TREE_CHAIN (*friends))
cf38f48a
MM
6558 {
6559 *friends = copy_node (*friends);
6560 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
c2ea3a40 6561 args, complain,
cf38f48a
MM
6562 in_decl);
6563 }
6564
212e7048 6565 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
f181d4ae
MM
6566 {
6567 maybe_retrofit_in_chrg (r);
212e7048
MM
6568 if (DECL_CONSTRUCTOR_P (r))
6569 grok_ctor_properties (ctx, r);
2be678ff
JM
6570 /* If this is an instantiation of a member template, clone it.
6571 If it isn't, that'll be handled by
6572 clone_constructors_and_destructors. */
5e818b93 6573 if (PRIMARY_TEMPLATE_P (gen_tmpl))
271e6f02 6574 clone_function_decl (r, /*update_method_vec_p=*/0);
f181d4ae 6575 }
596ea4e5 6576 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
7e45bd18 6577 grok_op_properties (r, (complain & tf_error) != 0);
c8b2e872
MM
6578
6579 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6580 SET_DECL_FRIEND_CONTEXT (r,
6581 tsubst (DECL_FRIEND_CONTEXT (t),
6582 args, complain, in_decl));
8d08fdba 6583 }
ae58fa02 6584 break;
8d08fdba
MS
6585
6586 case PARM_DECL:
6587 {
fc6a28d7
MM
6588 tree type;
6589
ae58fa02 6590 r = copy_node (t);
833aa4c4
NS
6591 if (DECL_TEMPLATE_PARM_P (t))
6592 SET_DECL_TEMPLATE_PARM_P (r);
8e51619a 6593
fc6a28d7 6594 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
02bab9db 6595 type = type_decays_to (type);
5566b478 6596 TREE_TYPE (r) = type;
9804209d 6597 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1 6598
560ad596
MM
6599 if (DECL_INITIAL (r))
6600 {
6601 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6602 DECL_INITIAL (r) = TREE_TYPE (r);
6603 else
6604 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6605 complain, in_decl);
6606 }
db2767b6 6607
5566b478 6608 DECL_CONTEXT (r) = NULL_TREE;
8e51619a
JM
6609
6610 if (!DECL_TEMPLATE_PARM_P (r))
6611 DECL_ARG_TYPE (r) = type_passed_as (type);
8d08fdba 6612 if (TREE_CHAIN (t))
4393e105 6613 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
c2ea3a40 6614 complain, TREE_CHAIN (t));
8d08fdba 6615 }
ae58fa02 6616 break;
8d08fdba 6617
5566b478
MS
6618 case FIELD_DECL:
6619 {
fc6a28d7
MM
6620 tree type;
6621
0acf7199 6622 r = copy_decl (t);
fc6a28d7
MM
6623 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6624 if (type == error_mark_node)
6625 return error_mark_node;
1b8899d1 6626 TREE_TYPE (r) = type;
9804209d 6627 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1
MM
6628
6629 /* We don't have to set DECL_CONTEXT here; it is set by
6630 finish_member_declaration. */
4393e105 6631 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
c2ea3a40 6632 complain, in_decl);
5566b478 6633 TREE_CHAIN (r) = NULL_TREE;
c8094d83 6634 if (VOID_TYPE_P (type))
dee15844 6635 error ("instantiation of %q+D as type %qT", r, type);
5566b478 6636 }
ae58fa02 6637 break;
5566b478
MS
6638
6639 case USING_DECL:
98ed9dae
NS
6640 /* We reach here only for member using decls. */
6641 if (DECL_DEPENDENT_P (t))
6642 {
6643 r = do_class_using_decl
6644 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6645 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6646 if (!r)
6647 r = error_mark_node;
6648 }
6649 else
6650 {
6651 r = copy_node (t);
6652 TREE_CHAIN (r) = NULL_TREE;
6653 }
ae58fa02 6654 break;
5566b478 6655
9188c363 6656 case TYPE_DECL:
5566b478
MS
6657 case VAR_DECL:
6658 {
1cea0434
KG
6659 tree argvec = NULL_TREE;
6660 tree gen_tmpl = NULL_TREE;
36a117a5 6661 tree spec;
1cea0434 6662 tree tmpl = NULL_TREE;
9188c363 6663 tree ctx;
fc6a28d7 6664 tree type = NULL_TREE;
6dfbb909 6665 int local_p;
9188c363 6666
fc6a28d7
MM
6667 if (TREE_CODE (t) == TYPE_DECL)
6668 {
6669 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6670 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6671 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6672 {
6673 /* If this is the canonical decl, we don't have to
6674 mess with instantiations, and often we can't (for
6675 typename, template type parms and such). Note that
6676 TYPE_NAME is not correct for the above test if
6677 we've copied the type for a typedef. */
6678 r = TYPE_NAME (type);
6679 break;
6680 }
6681 }
c8094d83 6682
6dfbb909
MM
6683 /* Assume this is a non-local variable. */
6684 local_p = 0;
5566b478 6685
de96bf57 6686 if (TYPE_P (CP_DECL_CONTEXT (t)))
c8094d83 6687 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
c2ea3a40 6688 complain,
9188c363 6689 in_decl, /*entering_scope=*/1);
2ba9c47e
MM
6690 else if (DECL_NAMESPACE_SCOPE_P (t))
6691 ctx = DECL_CONTEXT (t);
9188c363 6692 else
6dfbb909
MM
6693 {
6694 /* Subsequent calls to pushdecl will fill this in. */
6695 ctx = NULL_TREE;
2ba9c47e 6696 local_p = 1;
6dfbb909 6697 }
9188c363 6698
36a117a5 6699 /* Check to see if we already have this specialization. */
6dfbb909
MM
6700 if (!local_p)
6701 {
6702 tmpl = DECL_TI_TEMPLATE (t);
6703 gen_tmpl = most_general_template (tmpl);
c2ea3a40 6704 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
c7222c02
MM
6705 spec = retrieve_specialization (gen_tmpl, argvec,
6706 /*class_specializations_p=*/false);
6dfbb909 6707 }
9188c363 6708 else
6dfbb909 6709 spec = retrieve_local_specialization (t);
9188c363 6710
36a117a5 6711 if (spec)
ae58fa02
MM
6712 {
6713 r = spec;
6714 break;
6715 }
5566b478 6716
0acf7199 6717 r = copy_decl (t);
edebf865 6718 if (TREE_CODE (r) == VAR_DECL)
39703eb9 6719 {
8b0a8500
MM
6720 /* Even if the original location is out of scope, the
6721 newly substituted one is not. */
6722 DECL_DEAD_FOR_LOCAL (r) = 0;
6723 DECL_INITIALIZED_P (r) = 0;
6724 DECL_TEMPLATE_INSTANTIATED (r) = 0;
fc6a28d7
MM
6725 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6726 if (type == error_mark_node)
6727 return error_mark_node;
39703eb9
MM
6728 type = complete_type (type);
6729 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6730 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
62e19030 6731 type = check_var_type (DECL_NAME (r), type);
56b4ea3d
RH
6732
6733 if (DECL_HAS_VALUE_EXPR_P (t))
6734 {
6735 tree ve = DECL_VALUE_EXPR (t);
6736 ve = tsubst_expr (ve, args, complain, in_decl);
6737 SET_DECL_VALUE_EXPR (r, ve);
6738 }
39703eb9 6739 }
a3d87771
MM
6740 else if (DECL_SELF_REFERENCE_P (t))
6741 SET_DECL_SELF_REFERENCE_P (r);
01f4137f 6742 TREE_TYPE (r) = type;
9804209d 6743 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
5566b478 6744 DECL_CONTEXT (r) = ctx;
92643fea
MM
6745 /* Clear out the mangled name and RTL for the instantiation. */
6746 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
820cc88f
DB
6747 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6748 SET_DECL_RTL (r, NULL_RTX);
8b0a8500
MM
6749 /* The initializer must not be expanded until it is required;
6750 see [temp.inst]. */
d11ad92e 6751 DECL_INITIAL (r) = NULL_TREE;
820cc88f
DB
6752 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6753 SET_DECL_RTL (r, NULL_RTX);
06ceef4e 6754 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
5566b478 6755
6dfbb909
MM
6756 if (!local_p)
6757 {
6758 /* A static data member declaration is always marked
6759 external when it is declared in-class, even if an
6760 initializer is present. We mimic the non-template
6761 processing here. */
6762 DECL_EXTERNAL (r) = 1;
fa8d6e85 6763
d63d5d0c 6764 register_specialization (r, gen_tmpl, argvec, false);
6dfbb909
MM
6765 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6766 SET_DECL_IMPLICIT_INSTANTIATION (r);
6767 }
9188c363 6768 else
6dfbb909 6769 register_local_specialization (r, t);
5566b478 6770
5566b478 6771 TREE_CHAIN (r) = NULL_TREE;
edebf865 6772 layout_decl (r, 0);
5566b478 6773 }
ae58fa02 6774 break;
5566b478 6775
ae58fa02 6776 default:
315fb5db 6777 gcc_unreachable ();
c8094d83 6778 }
ae58fa02
MM
6779
6780 /* Restore the file and line information. */
82a98427 6781 input_location = saved_loc;
ae58fa02
MM
6782
6783 return r;
6784}
6785
34cd5ae7 6786/* Substitute into the ARG_TYPES of a function type. */
cabc336a 6787
e9659ab0 6788static tree
c8094d83 6789tsubst_arg_types (tree arg_types,
0cbd7506
MS
6790 tree args,
6791 tsubst_flags_t complain,
6792 tree in_decl)
cabc336a
MM
6793{
6794 tree remaining_arg_types;
cabc336a 6795 tree type;
5e97d404
NS
6796 tree default_arg;
6797 tree result = NULL_TREE;
cabc336a
MM
6798
6799 if (!arg_types || arg_types == void_list_node)
6800 return arg_types;
c8094d83 6801
cabc336a 6802 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
6803 args, complain, in_decl);
6804 if (remaining_arg_types == error_mark_node)
6805 return error_mark_node;
6806
6807 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6808 if (type == error_mark_node)
6809 return error_mark_node;
4b2811e9
NS
6810 if (VOID_TYPE_P (type))
6811 {
c2ea3a40 6812 if (complain & tf_error)
0cbd7506
MS
6813 {
6814 error ("invalid parameter type %qT", type);
6815 if (in_decl)
dee15844 6816 error ("in declaration %q+D", in_decl);
0cbd7506 6817 }
4b2811e9
NS
6818 return error_mark_node;
6819 }
cabc336a 6820
4393e105
MM
6821 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6822 top-level qualifiers as required. */
6823 type = TYPE_MAIN_VARIANT (type_decays_to (type));
cabc336a 6824
5e97d404
NS
6825 /* We do not substitute into default arguments here. The standard
6826 mandates that they be instantiated only when needed, which is
6827 done in build_over_call. */
6828 default_arg = TREE_PURPOSE (arg_types);
c8094d83 6829
5e97d404
NS
6830 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6831 {
6832 /* We've instantiated a template before its default arguments
0cbd7506
MS
6833 have been parsed. This can happen for a nested template
6834 class, and is not an error unless we require the default
6835 argument in a call of this function. */
5e97d404 6836 result = tree_cons (default_arg, type, remaining_arg_types);
01ea1ea8 6837 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
5e97d404
NS
6838 }
6839 else
6840 result = hash_tree_cons (default_arg, type, remaining_arg_types);
c8094d83 6841
5e97d404 6842 return result;
cabc336a
MM
6843}
6844
4393e105
MM
6845/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6846 *not* handle the exception-specification for FNTYPE, because the
6847 initial substitution of explicitly provided template parameters
6848 during argument deduction forbids substitution into the
6849 exception-specification:
6850
6851 [temp.deduct]
6852
6853 All references in the function type of the function template to the
6854 corresponding template parameters are replaced by the specified tem-
6855 plate argument values. If a substitution in a template parameter or
6856 in the function type of the function template results in an invalid
6857 type, type deduction fails. [Note: The equivalent substitution in
6858 exception specifications is done only when the function is instanti-
6859 ated, at which point a program is ill-formed if the substitution
6860 results in an invalid type.] */
6861
6862static tree
c8094d83 6863tsubst_function_type (tree t,
0cbd7506
MS
6864 tree args,
6865 tsubst_flags_t complain,
6866 tree in_decl)
4393e105
MM
6867{
6868 tree return_type;
6869 tree arg_types;
6870 tree fntype;
6871
8dd3f57a 6872 /* The TYPE_CONTEXT is not used for function/method types. */
50bc768d 6873 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
4393e105 6874
46c895ac 6875 /* Substitute the return type. */
4393e105
MM
6876 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6877 if (return_type == error_mark_node)
6878 return error_mark_node;
6e2993bf
MM
6879 /* The standard does not presently indicate that creation of a
6880 function type with an invalid return type is a deduction failure.
270af55d 6881 However, that is clearly analogous to creating an array of "void"
c8094d83 6882 or a reference to a reference. This is core issue #486. */
6e2993bf
MM
6883 if (TREE_CODE (return_type) == ARRAY_TYPE
6884 || TREE_CODE (return_type) == FUNCTION_TYPE)
6885 {
6886 if (complain & tf_error)
6887 {
6888 if (TREE_CODE (return_type) == ARRAY_TYPE)
6889 error ("function returning an array");
6890 else
6891 error ("function returning a function");
6892 }
6893 return error_mark_node;
6894 }
4393e105 6895
34cd5ae7 6896 /* Substitute the argument types. */
4393e105 6897 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
c8094d83 6898 complain, in_decl);
4393e105
MM
6899 if (arg_types == error_mark_node)
6900 return error_mark_node;
c8094d83 6901
4393e105
MM
6902 /* Construct a new type node and return it. */
6903 if (TREE_CODE (t) == FUNCTION_TYPE)
6904 fntype = build_function_type (return_type, arg_types);
6905 else
6906 {
6907 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6908 if (! IS_AGGR_TYPE (r))
6909 {
6910 /* [temp.deduct]
c8094d83 6911
4393e105
MM
6912 Type deduction may fail for any of the following
6913 reasons:
c8094d83 6914
4393e105
MM
6915 -- Attempting to create "pointer to member of T" when T
6916 is not a class type. */
c2ea3a40 6917 if (complain & tf_error)
0f51ccfc 6918 error ("creating pointer to member function of non-class type %qT",
4393e105
MM
6919 r);
6920 return error_mark_node;
6921 }
c8094d83
MS
6922
6923 fntype = build_method_type_directly (r, return_type,
43dc123f 6924 TREE_CHAIN (arg_types));
4393e105 6925 }
c2ea3a40 6926 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
e9525111 6927 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
c8094d83
MS
6928
6929 return fntype;
4393e105
MM
6930}
6931
c7222c02
MM
6932/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6933 ARGS into that specification, and return the substituted
6934 specification. If there is no specification, return NULL_TREE. */
6935
6936static tree
c8094d83
MS
6937tsubst_exception_specification (tree fntype,
6938 tree args,
c7222c02
MM
6939 tsubst_flags_t complain,
6940 tree in_decl)
6941{
6942 tree specs;
6943 tree new_specs;
6944
6945 specs = TYPE_RAISES_EXCEPTIONS (fntype);
6946 new_specs = NULL_TREE;
6947 if (specs)
6948 {
6949 if (! TREE_VALUE (specs))
6950 new_specs = specs;
6951 else
6952 while (specs)
6953 {
6954 tree spec;
6955 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6956 if (spec == error_mark_node)
6957 return spec;
6958 new_specs = add_exception_specifier (new_specs, spec, complain);
6959 specs = TREE_CHAIN (specs);
6960 }
6961 }
6962 return new_specs;
6963}
6964
297e73d8
MM
6965/* Substitute into the PARMS of a call-declarator. */
6966
e9659ab0 6967static tree
c8094d83 6968tsubst_call_declarator_parms (tree parms,
0cbd7506
MS
6969 tree args,
6970 tsubst_flags_t complain,
6971 tree in_decl)
297e73d8
MM
6972{
6973 tree new_parms;
6974 tree type;
6975 tree defarg;
6976
6977 if (!parms || parms == void_list_node)
6978 return parms;
c8094d83 6979
297e73d8 6980 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
4393e105 6981 args, complain, in_decl);
297e73d8
MM
6982
6983 /* Figure out the type of this parameter. */
4393e105 6984 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
c8094d83 6985
297e73d8 6986 /* Figure out the default argument as well. Note that we use
4393e105
MM
6987 tsubst_expr since the default argument is really an expression. */
6988 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
297e73d8
MM
6989
6990 /* Chain this parameter on to the front of those we have already
6991 processed. We don't use hash_tree_cons because that function
6992 doesn't check TREE_PARMLIST. */
6993 new_parms = tree_cons (defarg, type, new_parms);
6994
297e73d8
MM
6995 return new_parms;
6996}
6997
4393e105
MM
6998/* Take the tree structure T and replace template parameters used
6999 therein with the argument vector ARGS. IN_DECL is an associated
7000 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
c2ea3a40
NS
7001 Issue error and warning messages under control of COMPLAIN. Note
7002 that we must be relatively non-tolerant of extensions here, in
7003 order to preserve conformance; if we allow substitutions that
7004 should not be allowed, we may allow argument deductions that should
7005 not succeed, and therefore report ambiguous overload situations
7006 where there are none. In theory, we could allow the substitution,
7007 but indicate that it should have failed, and allow our caller to
7008 make sure that the right thing happens, but we don't try to do this
7009 yet.
4393e105
MM
7010
7011 This function is used for dealing with types, decls and the like;
7012 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02 7013
14d22dd6 7014static tree
3a978d72 7015tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
ae58fa02 7016{
0ecfe0b4 7017 tree type, r;
ae58fa02
MM
7018
7019 if (t == NULL_TREE || t == error_mark_node
7020 || t == integer_type_node
7021 || t == void_type_node
7022 || t == char_type_node
539599c1 7023 || t == unknown_type_node
ae58fa02
MM
7024 || TREE_CODE (t) == NAMESPACE_DECL)
7025 return t;
7026
fc6a28d7
MM
7027 if (DECL_P (t))
7028 return tsubst_decl (t, args, complain);
7029
ae58fa02
MM
7030 if (TREE_CODE (t) == IDENTIFIER_NODE)
7031 type = IDENTIFIER_TYPE_VALUE (t);
7032 else
7033 type = TREE_TYPE (t);
399dedb9 7034
50bc768d 7035 gcc_assert (type != unknown_type_node);
ae58fa02 7036
fc6a28d7 7037 if (type
ae58fa02 7038 && TREE_CODE (t) != TYPENAME_TYPE
4393e105
MM
7039 && TREE_CODE (t) != IDENTIFIER_NODE
7040 && TREE_CODE (t) != FUNCTION_TYPE
7041 && TREE_CODE (t) != METHOD_TYPE)
7042 type = tsubst (type, args, complain, in_decl);
7043 if (type == error_mark_node)
7044 return error_mark_node;
ae58fa02 7045
ae58fa02
MM
7046 switch (TREE_CODE (t))
7047 {
7048 case RECORD_TYPE:
7049 case UNION_TYPE:
7050 case ENUMERAL_TYPE:
4393e105
MM
7051 return tsubst_aggr_type (t, args, complain, in_decl,
7052 /*entering_scope=*/0);
ae58fa02
MM
7053
7054 case ERROR_MARK:
7055 case IDENTIFIER_NODE:
ae58fa02
MM
7056 case VOID_TYPE:
7057 case REAL_TYPE:
7058 case COMPLEX_TYPE:
c00996a3 7059 case VECTOR_TYPE:
ae58fa02
MM
7060 case BOOLEAN_TYPE:
7061 case INTEGER_CST:
7062 case REAL_CST:
7063 case STRING_CST:
7064 return t;
7065
7066 case INTEGER_TYPE:
7067 if (t == integer_type_node)
7068 return t;
7069
7070 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
7071 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
7072 return t;
d2e5ee5c 7073
5566b478 7074 {
ddce3528 7075 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 7076
a91db711
NS
7077 /* The array dimension behaves like a non-type template arg,
7078 in that we want to fold it as much as possible. */
7079 max = tsubst_template_arg (omax, args, complain, in_decl);
4ef69b83 7080 max = fold_decl_constant_value (max);
8dd3f57a 7081
95cd6f6f 7082 /* [temp.deduct]
4393e105 7083
95cd6f6f
JC
7084 Type deduction may fail for any of the following
7085 reasons:
4393e105 7086
95cd6f6f
JC
7087 Attempting to create an array with a size that is
7088 zero or negative. */
7089 if (integer_zerop (max) && !(complain & tf_error))
7090 /* We must fail if performing argument deduction (as
7091 indicated by the state of complain), so that
7092 another substitution can be found. */
7093 return error_mark_node;
7094
7095 else if (TREE_CODE (max) == INTEGER_CST
7096 && INT_CST_LT (max, integer_zero_node))
7097 {
c2ea3a40 7098 if (complain & tf_error)
95cd6f6f 7099 error ("creating array with negative size (%qE)", max);
4393e105
MM
7100
7101 return error_mark_node;
0ecfe0b4
JM
7102 }
7103
c95cd22e 7104 return compute_array_index_type (NULL_TREE, max);
ae58fa02
MM
7105 }
7106
7107 case TEMPLATE_TYPE_PARM:
7108 case TEMPLATE_TEMPLATE_PARM:
a1281f45 7109 case BOUND_TEMPLATE_TEMPLATE_PARM:
ae58fa02
MM
7110 case TEMPLATE_PARM_INDEX:
7111 {
7112 int idx;
7113 int level;
7114 int levels;
315fb5db 7115 tree arg = NULL_TREE;
0ecfe0b4
JM
7116
7117 r = NULL_TREE;
ae58fa02 7118
315fb5db 7119 gcc_assert (TREE_VEC_LENGTH (args) > 0);
ae58fa02 7120 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
a1281f45
KL
7121 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7122 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
ae58fa02
MM
7123 {
7124 idx = TEMPLATE_TYPE_IDX (t);
7125 level = TEMPLATE_TYPE_LEVEL (t);
7126 }
7127 else
7128 {
7129 idx = TEMPLATE_PARM_IDX (t);
7130 level = TEMPLATE_PARM_LEVEL (t);
7131 }
7132
315fb5db
NS
7133 levels = TMPL_ARGS_DEPTH (args);
7134 if (level <= levels)
7135 arg = TMPL_ARG (args, level, idx);
ae58fa02 7136
315fb5db
NS
7137 if (arg == error_mark_node)
7138 return error_mark_node;
7139 else if (arg != NULL_TREE)
7140 {
7141 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
ae58fa02 7142 {
315fb5db
NS
7143 gcc_assert (TYPE_P (arg));
7144 return cp_build_qualified_type_real
7145 (arg, cp_type_quals (arg) | cp_type_quals (t),
7146 complain | tf_ignore_bad_quals);
7147 }
7148 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7149 {
7150 /* We are processing a type constructed from a
7151 template template parameter. */
7152 tree argvec = tsubst (TYPE_TI_ARGS (t),
7153 args, complain, in_decl);
7154 if (argvec == error_mark_node)
7155 return error_mark_node;
c8094d83 7156
315fb5db
NS
7157 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7158 are resolving nested-types in the signature of a
7159 member function templates. Otherwise ARG is a
7160 TEMPLATE_DECL and is the real template to be
7161 instantiated. */
7162 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7163 arg = TYPE_NAME (arg);
c8094d83
MS
7164
7165 r = lookup_template_class (arg,
7166 argvec, in_decl,
315fb5db
NS
7167 DECL_CONTEXT (arg),
7168 /*entering_scope=*/0,
7169 complain);
7170 return cp_build_qualified_type_real
7171 (r, TYPE_QUALS (t), complain);
ae58fa02 7172 }
315fb5db
NS
7173 else
7174 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7175 return arg;
ae58fa02
MM
7176 }
7177
7178 if (level == 1)
7179 /* This can happen during the attempted tsubst'ing in
7180 unify. This means that we don't yet have any information
7181 about the template parameter in question. */
7182 return t;
7183
7184 /* If we get here, we must have been looking at a parm for a
7185 more deeply nested template. Make a new version of this
7186 template parameter, but with a lower level. */
7187 switch (TREE_CODE (t))
7188 {
7189 case TEMPLATE_TYPE_PARM:
7190 case TEMPLATE_TEMPLATE_PARM:
a1281f45 7191 case BOUND_TEMPLATE_TEMPLATE_PARM:
89d684bb 7192 if (cp_type_quals (t))
ae58fa02 7193 {
9ccf6541 7194 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
0cbd7506
MS
7195 r = cp_build_qualified_type_real
7196 (r, cp_type_quals (t),
4f2b0fb2
NS
7197 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7198 ? tf_ignore_bad_quals : 0));
9ccf6541
MM
7199 }
7200 else
7201 {
11e74ea6 7202 r = copy_type (t);
9ccf6541
MM
7203 TEMPLATE_TYPE_PARM_INDEX (r)
7204 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7205 r, levels);
7206 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7207 TYPE_MAIN_VARIANT (r) = r;
7208 TYPE_POINTER_TO (r) = NULL_TREE;
7209 TYPE_REFERENCE_TO (r) = NULL_TREE;
7210
a1281f45 7211 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9ccf6541
MM
7212 {
7213 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
c8094d83 7214 complain, in_decl);
9ccf6541
MM
7215 if (argvec == error_mark_node)
7216 return error_mark_node;
4393e105 7217
9ccf6541
MM
7218 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7219 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7220 }
ae58fa02
MM
7221 }
7222 break;
7223
7224 case TEMPLATE_PARM_INDEX:
7225 r = reduce_template_parm_level (t, type, levels);
7226 break;
c8094d83 7227
ae58fa02 7228 default:
315fb5db 7229 gcc_unreachable ();
ae58fa02
MM
7230 }
7231
5566b478 7232 return r;
ae58fa02 7233 }
5566b478 7234
8d08fdba
MS
7235 case TREE_LIST:
7236 {
058b15c1 7237 tree purpose, value, chain;
8d08fdba
MS
7238
7239 if (t == void_list_node)
7240 return t;
7241
8d08fdba
MS
7242 purpose = TREE_PURPOSE (t);
7243 if (purpose)
4393e105
MM
7244 {
7245 purpose = tsubst (purpose, args, complain, in_decl);
7246 if (purpose == error_mark_node)
7247 return error_mark_node;
7248 }
8d08fdba
MS
7249 value = TREE_VALUE (t);
7250 if (value)
4393e105
MM
7251 {
7252 value = tsubst (value, args, complain, in_decl);
7253 if (value == error_mark_node)
7254 return error_mark_node;
7255 }
8d08fdba
MS
7256 chain = TREE_CHAIN (t);
7257 if (chain && chain != void_type_node)
4393e105
MM
7258 {
7259 chain = tsubst (chain, args, complain, in_decl);
7260 if (chain == error_mark_node)
7261 return error_mark_node;
7262 }
8d08fdba
MS
7263 if (purpose == TREE_PURPOSE (t)
7264 && value == TREE_VALUE (t)
7265 && chain == TREE_CHAIN (t))
7266 return t;
058b15c1 7267 return hash_tree_cons (purpose, value, chain);
8d08fdba 7268 }
c8094d83 7269
95b4aca6 7270 case TREE_BINFO:
bd7eccc4 7271 /* We should never be tsubsting a binfo. */
315fb5db 7272 gcc_unreachable ();
85b71cf2 7273
95b4aca6
NS
7274 case TREE_VEC:
7275 /* A vector of template arguments. */
50bc768d 7276 gcc_assert (!type);
a91db711 7277 return tsubst_template_args (t, args, complain, in_decl);
8d08fdba 7278
8d08fdba
MS
7279 case POINTER_TYPE:
7280 case REFERENCE_TYPE:
7281 {
8d08fdba 7282 enum tree_code code;
79a7c7fa 7283
46c895ac 7284 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8d08fdba
MS
7285 return t;
7286
7287 code = TREE_CODE (t);
4393e105
MM
7288
7289
7290 /* [temp.deduct]
c8094d83 7291
4393e105 7292 Type deduction may fail for any of the following
c8094d83 7293 reasons:
4393e105
MM
7294
7295 -- Attempting to create a pointer to reference type.
7296 -- Attempting to create a reference to a reference type or
7297 a reference to void. */
0ecfe0b4
JM
7298 if (TREE_CODE (type) == REFERENCE_TYPE
7299 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa 7300 {
82a98427 7301 static location_t last_loc;
79a7c7fa
JM
7302
7303 /* We keep track of the last time we issued this error
7304 message to avoid spewing a ton of messages during a
7305 single bad template instantiation. */
c2ea3a40 7306 if (complain & tf_error
93409b8c 7307#ifdef USE_MAPPED_LOCATION
9b60dfd7 7308 && last_loc != input_location
93409b8c 7309#else
82a98427 7310 && (last_loc.line != input_line
9b60dfd7 7311 || last_loc.file != input_filename)
93409b8c 7312#endif
9b60dfd7 7313 )
79a7c7fa 7314 {
0ecfe0b4 7315 if (TREE_CODE (type) == VOID_TYPE)
33bd39a2 7316 error ("forming reference to void");
0ecfe0b4 7317 else
0f51ccfc 7318 error ("forming %s to reference type %qT",
0cbd7506
MS
7319 (code == POINTER_TYPE) ? "pointer" : "reference",
7320 type);
82a98427 7321 last_loc = input_location;
79a7c7fa
JM
7322 }
7323
4393e105 7324 return error_mark_node;
79a7c7fa
JM
7325 }
7326 else if (code == POINTER_TYPE)
46c895ac
NS
7327 {
7328 r = build_pointer_type (type);
7329 if (TREE_CODE (type) == METHOD_TYPE)
7330 r = build_ptrmemfunc_type (r);
7331 }
8d08fdba
MS
7332 else
7333 r = build_reference_type (type);
adecb3f4 7334 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
79a7c7fa 7335
a5f1c5f8
NS
7336 if (r != error_mark_node)
7337 /* Will this ever be needed for TYPE_..._TO values? */
7338 layout_type (r);
c8094d83 7339
8d08fdba
MS
7340 return r;
7341 }
a4443a08 7342 case OFFSET_TYPE:
0ecfe0b4 7343 {
4393e105
MM
7344 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7345 if (r == error_mark_node || !IS_AGGR_TYPE (r))
7346 {
7347 /* [temp.deduct]
7348
7349 Type deduction may fail for any of the following
7350 reasons:
c8094d83 7351
4393e105 7352 -- Attempting to create "pointer to member of T" when T
0cbd7506 7353 is not a class type. */
c2ea3a40 7354 if (complain & tf_error)
0f51ccfc 7355 error ("creating pointer to member of non-class type %qT", r);
4393e105
MM
7356 return error_mark_node;
7357 }
46c895ac
NS
7358 if (TREE_CODE (type) == REFERENCE_TYPE)
7359 {
4f09be91 7360 if (complain & tf_error)
0f51ccfc 7361 error ("creating pointer to member reference type %qT", type);
cb6d4a9f
VR
7362 return error_mark_node;
7363 }
7364 if (TREE_CODE (type) == VOID_TYPE)
7365 {
7366 if (complain & tf_error)
7367 error ("creating pointer to member of type void");
46c895ac
NS
7368 return error_mark_node;
7369 }
50bc768d 7370 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
46c895ac 7371 if (TREE_CODE (type) == FUNCTION_TYPE)
a5ac359a 7372 {
0cbd7506
MS
7373 /* The type of the implicit object parameter gets its
7374 cv-qualifiers from the FUNCTION_TYPE. */
a5ac359a 7375 tree method_type;
0cbd7506
MS
7376 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7377 cp_type_quals (type));
7378 tree memptr;
7379 method_type = build_method_type_directly (this_type,
43dc123f
MM
7380 TREE_TYPE (type),
7381 TYPE_ARG_TYPES (type));
0cbd7506
MS
7382 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7383 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7384 complain);
a5ac359a 7385 }
46c895ac 7386 else
b7a78333
MM
7387 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7388 TYPE_QUALS (t),
7389 complain);
0ecfe0b4 7390 }
8d08fdba
MS
7391 case FUNCTION_TYPE:
7392 case METHOD_TYPE:
7393 {
c11b6f21 7394 tree fntype;
c7222c02 7395 tree specs;
4393e105
MM
7396 fntype = tsubst_function_type (t, args, complain, in_decl);
7397 if (fntype == error_mark_node)
7398 return error_mark_node;
cabc336a 7399
34cd5ae7 7400 /* Substitute the exception specification. */
c8094d83 7401 specs = tsubst_exception_specification (t, args, complain,
c7222c02 7402 in_decl);
9f6206d9
VR
7403 if (specs == error_mark_node)
7404 return error_mark_node;
c7222c02
MM
7405 if (specs)
7406 fntype = build_exception_variant (fntype, specs);
c11b6f21 7407 return fntype;
8d08fdba
MS
7408 }
7409 case ARRAY_TYPE:
7410 {
4393e105
MM
7411 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7412 if (domain == error_mark_node)
7413 return error_mark_node;
7414
7415 /* As an optimization, we avoid regenerating the array type if
7416 it will obviously be the same as T. */
8d08fdba
MS
7417 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7418 return t;
0ecfe0b4 7419
c8094d83 7420 /* These checks should match the ones in grokdeclarator.
4393e105 7421
c8094d83
MS
7422 [temp.deduct]
7423
7424 The deduction may fail for any of the following reasons:
4393e105
MM
7425
7426 -- Attempting to create an array with an element type that
c8094d83 7427 is void, a function type, or a reference type, or [DR337]
cfb91b67 7428 an abstract class type. */
c8094d83 7429 if (TREE_CODE (type) == VOID_TYPE
4393e105
MM
7430 || TREE_CODE (type) == FUNCTION_TYPE
7431 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 7432 {
c2ea3a40 7433 if (complain & tf_error)
0f51ccfc 7434 error ("creating array of %qT", type);
4393e105 7435 return error_mark_node;
0ecfe0b4 7436 }
cfb91b67
GB
7437 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7438 {
7439 if (complain & tf_error)
c8094d83 7440 error ("creating array of %qT, which is an abstract class type",
cfb91b67 7441 type);
c8094d83 7442 return error_mark_node;
cfb91b67 7443 }
0ecfe0b4 7444
8d08fdba
MS
7445 r = build_cplus_array_type (type, domain);
7446 return r;
7447 }
7448
8d08fdba 7449 case PLUS_EXPR:
5566b478 7450 case MINUS_EXPR:
4393e105 7451 {
c2ea3a40
NS
7452 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7453 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
7454
7455 if (e1 == error_mark_node || e2 == error_mark_node)
7456 return error_mark_node;
7457
7866705a 7458 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
4393e105 7459 }
8d08fdba
MS
7460
7461 case NEGATE_EXPR:
7462 case NOP_EXPR:
4393e105 7463 {
c2ea3a40 7464 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
7465 if (e == error_mark_node)
7466 return error_mark_node;
7467
7866705a 7468 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
4393e105 7469 }
8d08fdba 7470
5566b478
MS
7471 case TYPENAME_TYPE:
7472 {
4393e105
MM
7473 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7474 in_decl, /*entering_scope=*/1);
7475 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
c8094d83 7476 complain, in_decl);
4393e105
MM
7477
7478 if (ctx == error_mark_node || f == error_mark_node)
7479 return error_mark_node;
ae58fa02 7480
bf8f3f93
MM
7481 if (!IS_AGGR_TYPE (ctx))
7482 {
c2ea3a40 7483 if (complain & tf_error)
0f51ccfc 7484 error ("%qT is not a class, struct, or union type", ctx);
bf8f3f93
MM
7485 return error_mark_node;
7486 }
7487 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7488 {
7489 /* Normally, make_typename_type does not require that the CTX
7490 have complete type in order to allow things like:
c8094d83 7491
0cbd7506 7492 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 7493
bf8f3f93
MM
7494 But, such constructs have already been resolved by this
7495 point, so here CTX really should have complete type, unless
7496 it's a partial instantiation. */
4393e105 7497 ctx = complete_type (ctx);
d0f062fb 7498 if (!COMPLETE_TYPE_P (ctx))
4393e105 7499 {
c2ea3a40 7500 if (complain & tf_error)
7a228918 7501 cxx_incomplete_type_error (NULL_TREE, ctx);
4393e105
MM
7502 return error_mark_node;
7503 }
7504 }
ae58fa02 7505
fc6a28d7 7506 f = make_typename_type (ctx, f, typename_type,
4f2b0fb2 7507 (complain & tf_error) | tf_keep_type_decl);
f0bcd168
MM
7508 if (f == error_mark_node)
7509 return f;
0cbd7506
MS
7510 if (TREE_CODE (f) == TYPE_DECL)
7511 {
4f2b0fb2 7512 complain |= tf_ignore_bad_quals;
0cbd7506
MS
7513 f = TREE_TYPE (f);
7514 }
c8094d83 7515
fc6a28d7
MM
7516 if (TREE_CODE (f) != TYPENAME_TYPE)
7517 {
7518 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
c8094d83 7519 error ("%qT resolves to %qT, which is not an enumeration type",
fc6a28d7
MM
7520 t, f);
7521 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
c8094d83 7522 error ("%qT resolves to %qT, which is is not a class type",
fc6a28d7
MM
7523 t, f);
7524 }
7525
0cbd7506
MS
7526 return cp_build_qualified_type_real
7527 (f, cp_type_quals (f) | cp_type_quals (t), complain);
5566b478 7528 }
c8094d83 7529
b8c6534b
KL
7530 case UNBOUND_CLASS_TEMPLATE:
7531 {
7532 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7533 in_decl, /*entering_scope=*/1);
7534 tree name = TYPE_IDENTIFIER (t);
b939a023 7535 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
b8c6534b
KL
7536
7537 if (ctx == error_mark_node || name == error_mark_node)
7538 return error_mark_node;
7539
b939a023
KL
7540 if (parm_list)
7541 parm_list = tsubst_template_parms (parm_list, args, complain);
7542 return make_unbound_class_template (ctx, name, parm_list, complain);
b8c6534b
KL
7543 }
7544
5566b478 7545 case INDIRECT_REF:
5566b478 7546 case ADDR_EXPR:
058b15c1 7547 case CALL_EXPR:
315fb5db 7548 gcc_unreachable ();
5566b478
MS
7549
7550 case ARRAY_REF:
4393e105 7551 {
c2ea3a40
NS
7552 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7553 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
7554 if (e1 == error_mark_node || e2 == error_mark_node)
7555 return error_mark_node;
7556
44de5aeb 7557 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
4393e105 7558 }
5566b478 7559
fc378698 7560 case SCOPE_REF:
4393e105 7561 {
c2ea3a40 7562 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
7563 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7564 if (e1 == error_mark_node || e2 == error_mark_node)
7565 return error_mark_node;
7566
02ed62dd
MM
7567 return build_qualified_name (/*type=*/NULL_TREE,
7568 e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
4393e105 7569 }
fc378698 7570
b894fc05 7571 case TYPEOF_TYPE:
4393e105 7572 {
b830b74c 7573 tree type;
4393e105 7574
eb34af89
RK
7575 type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7576 complain, in_decl));
b830b74c 7577 return cp_build_qualified_type_real (type,
dce50630 7578 cp_type_quals (t)
b830b74c 7579 | cp_type_quals (type),
dce50630 7580 complain);
4393e105 7581 }
b894fc05 7582
8d08fdba 7583 default:
9e637a26 7584 sorry ("use of %qs in template",
8d08fdba
MS
7585 tree_code_name [(int) TREE_CODE (t)]);
7586 return error_mark_node;
7587 }
7588}
7589
ee76b931
MM
7590/* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7591 type of the expression on the left-hand side of the "." or "->"
7592 operator. */
7593
7594static tree
7595tsubst_baselink (tree baselink, tree object_type,
7596 tree args, tsubst_flags_t complain, tree in_decl)
7597{
7598 tree name;
7599 tree qualifying_scope;
7600 tree fns;
7601 tree template_args = 0;
7602 bool template_id_p = false;
7603
7604 /* A baselink indicates a function from a base class. The
7605 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7606 non-dependent types; otherwise, the lookup could not have
7607 succeeded. However, they may indicate bases of the template
c8094d83 7608 class, rather than the instantiated class.
ee76b931
MM
7609
7610 In addition, lookups that were not ambiguous before may be
04c06002 7611 ambiguous now. Therefore, we perform the lookup again. */
ee76b931
MM
7612 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7613 fns = BASELINK_FUNCTIONS (baselink);
7614 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7615 {
7616 template_id_p = true;
7617 template_args = TREE_OPERAND (fns, 1);
7618 fns = TREE_OPERAND (fns, 0);
bf12d54d
NS
7619 if (template_args)
7620 template_args = tsubst_template_args (template_args, args,
7621 complain, in_decl);
ee76b931
MM
7622 }
7623 name = DECL_NAME (get_first_fn (fns));
7624 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
c8094d83 7625
9b60dfd7
MM
7626 /* If lookup found a single function, mark it as used at this
7627 point. (If it lookup found multiple functions the one selected
7628 later by overload resolution will be marked as used at that
7629 point.) */
7630 if (BASELINK_P (baselink))
7631 fns = BASELINK_FUNCTIONS (baselink);
7632 if (!template_id_p && !really_overloaded_fn (fns))
7633 mark_used (OVL_CURRENT (fns));
7634
7635 /* Add back the template arguments, if present. */
ee76b931 7636 if (BASELINK_P (baselink) && template_id_p)
c8094d83 7637 BASELINK_FUNCTIONS (baselink)
ee76b931
MM
7638 = build_nt (TEMPLATE_ID_EXPR,
7639 BASELINK_FUNCTIONS (baselink),
7640 template_args);
9b60dfd7 7641
ee76b931
MM
7642 if (!object_type)
7643 object_type = current_class_type;
c8094d83 7644 return adjust_result_of_qualified_name_lookup (baselink,
ee76b931
MM
7645 qualifying_scope,
7646 object_type);
7647}
7648
7649/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7650 true if the qualified-id will be a postfix-expression in-and-of
7651 itself; false if more of the postfix-expression follows the
7652 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7653 of "&". */
7654
7655static tree
c8094d83 7656tsubst_qualified_id (tree qualified_id, tree args,
ee76b931
MM
7657 tsubst_flags_t complain, tree in_decl,
7658 bool done, bool address_p)
7659{
7660 tree expr;
7661 tree scope;
7662 tree name;
7663 bool is_template;
7664 tree template_args;
7665
50bc768d 7666 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
ee76b931 7667
ee76b931
MM
7668 /* Figure out what name to look up. */
7669 name = TREE_OPERAND (qualified_id, 1);
7670 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7671 {
7672 is_template = true;
bf12d54d
NS
7673 template_args = TREE_OPERAND (name, 1);
7674 if (template_args)
7675 template_args = tsubst_template_args (template_args, args,
7676 complain, in_decl);
ee76b931
MM
7677 name = TREE_OPERAND (name, 0);
7678 }
7679 else
7680 {
7681 is_template = false;
7682 template_args = NULL_TREE;
7683 }
7684
6eeba0cc
MM
7685 /* Substitute into the qualifying scope. When there are no ARGS, we
7686 are just trying to simplify a non-dependent expression. In that
7687 case the qualifying scope may be dependent, and, in any case,
7688 substituting will not help. */
7689 scope = TREE_OPERAND (qualified_id, 0);
7690 if (args)
7691 {
7692 scope = tsubst (scope, args, complain, in_decl);
7693 expr = tsubst_copy (name, args, complain, in_decl);
7694 }
7695 else
7696 expr = name;
10b1d5e7 7697
ab73670a 7698 if (dependent_type_p (scope))
02ed62dd
MM
7699 return build_qualified_name (/*type=*/NULL_TREE,
7700 scope, expr,
7701 QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
c8094d83 7702
5e08432e 7703 if (!BASELINK_P (name) && !DECL_P (expr))
12483c9f 7704 {
8ca4bf25
MM
7705 if (TREE_CODE (expr) == BIT_NOT_EXPR)
7706 /* If this were actually a destructor call, it would have been
7707 parsed as such by the parser. */
7708 expr = error_mark_node;
7709 else
7710 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12483c9f
NS
7711 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7712 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7713 {
7714 if (complain & tf_error)
b2693faf 7715 {
0f51ccfc 7716 error ("dependent-name %qE is parsed as a non-type, but "
b2693faf 7717 "instantiation yields a type", qualified_id);
0f51ccfc 7718 inform ("say %<typename %E%> if a type is meant", qualified_id);
b2693faf 7719 }
12483c9f
NS
7720 return error_mark_node;
7721 }
7722 }
c8094d83 7723
279b8466 7724 if (DECL_P (expr))
8f78f01f
MM
7725 {
7726 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7727 scope);
7728 /* Remember that there was a reference to this entity. */
7729 mark_used (expr);
7730 }
7731
7732 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7733 {
7734 if (complain & tf_error)
c8094d83 7735 qualified_name_lookup_error (scope,
8f78f01f
MM
7736 TREE_OPERAND (qualified_id, 1),
7737 expr);
7738 return error_mark_node;
7739 }
ee76b931
MM
7740
7741 if (is_template)
10b1d5e7 7742 expr = lookup_template_function (expr, template_args);
ee76b931 7743
22038b2c 7744 if (expr == error_mark_node && complain & tf_error)
8f78f01f
MM
7745 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7746 expr);
22038b2c 7747 else if (TYPE_P (scope))
ee76b931 7748 {
c8094d83 7749 expr = (adjust_result_of_qualified_name_lookup
ee76b931 7750 (expr, scope, current_class_type));
02ed62dd
MM
7751 expr = (finish_qualified_id_expr
7752 (scope, expr, done, address_p,
7753 QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
7754 /*template_arg_p=*/false));
ee76b931 7755 }
c8094d83 7756
aec5ba60
NS
7757 if (TREE_CODE (expr) != SCOPE_REF)
7758 expr = convert_from_reference (expr);
ee76b931
MM
7759
7760 return expr;
7761}
7762
00d3396f
JM
7763/* Like tsubst, but deals with expressions. This function just replaces
7764 template parms; to finish processing the resultant expression, use
7765 tsubst_expr. */
7766
14d22dd6 7767static tree
3a978d72 7768tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478
MS
7769{
7770 enum tree_code code;
8452b1d3 7771 tree r;
8d08fdba 7772
5566b478
MS
7773 if (t == NULL_TREE || t == error_mark_node)
7774 return t;
7775
7776 code = TREE_CODE (t);
b7484fbe 7777
5566b478
MS
7778 switch (code)
7779 {
7780 case PARM_DECL:
a723baf1 7781 r = retrieve_local_specialization (t);
50bc768d 7782 gcc_assert (r != NULL);
c0694c4b 7783 mark_used (r);
a723baf1 7784 return r;
5566b478
MS
7785
7786 case CONST_DECL:
ed44da02
MM
7787 {
7788 tree enum_type;
7789 tree v;
7790
a723baf1
MM
7791 if (DECL_TEMPLATE_PARM_P (t))
7792 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7b6d72fc
MM
7793 /* There is no need to substitute into namespace-scope
7794 enumerators. */
7795 if (DECL_NAMESPACE_SCOPE_P (t))
ed44da02 7796 return t;
d5a10cf0
MM
7797 /* If ARGS is NULL, then T is known to be non-dependent. */
7798 if (args == NULL_TREE)
8a784e4a 7799 return integral_constant_value (t);
ed44da02
MM
7800
7801 /* Unfortunately, we cannot just call lookup_name here.
9188c363 7802 Consider:
c8094d83 7803
9188c363
MM
7804 template <int I> int f() {
7805 enum E { a = I };
7806 struct S { void g() { E e = a; } };
7807 };
c8094d83 7808
9188c363
MM
7809 When we instantiate f<7>::S::g(), say, lookup_name is not
7810 clever enough to find f<7>::a. */
c8094d83
MS
7811 enum_type
7812 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
7813 /*entering_scope=*/0);
7814
c8094d83
MS
7815 for (v = TYPE_VALUES (enum_type);
7816 v != NULL_TREE;
ed44da02
MM
7817 v = TREE_CHAIN (v))
7818 if (TREE_PURPOSE (v) == DECL_NAME (t))
7819 return TREE_VALUE (v);
7820
7821 /* We didn't find the name. That should never happen; if
7822 name-lookup found it during preliminary parsing, we
7823 should find it again here during instantiation. */
315fb5db 7824 gcc_unreachable ();
ed44da02 7825 }
db04386f 7826 return t;
ed44da02 7827
5566b478
MS
7828 case FIELD_DECL:
7829 if (DECL_CONTEXT (t))
7830 {
0978790f 7831 tree ctx;
0978790f 7832
4393e105 7833 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 7834 /*entering_scope=*/1);
0978790f 7835 if (ctx != DECL_CONTEXT (t))
bad1f462
KL
7836 {
7837 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7838 if (!r)
7839 {
7840 if (complain & tf_error)
7841 error ("using invalid field %qD", t);
7842 return error_mark_node;
7843 }
7844 return r;
7845 }
5566b478 7846 }
c8094d83 7847
5566b478
MS
7848 return t;
7849
7850 case VAR_DECL:
7851 case FUNCTION_DECL:
a723baf1
MM
7852 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7853 || local_variable_p (t))
4393e105 7854 t = tsubst (t, args, complain, in_decl);
5566b478
MS
7855 mark_used (t);
7856 return t;
7857
a723baf1 7858 case BASELINK:
ee76b931 7859 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
a723baf1 7860
98c1c668 7861 case TEMPLATE_DECL:
a723baf1 7862 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
c8094d83 7863 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
a723baf1 7864 args, complain, in_decl);
c7222c02 7865 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
4393e105 7866 return tsubst (t, args, complain, in_decl);
fcea7401
KL
7867 else if (DECL_CLASS_SCOPE_P (t)
7868 && uses_template_parms (DECL_CONTEXT (t)))
7869 {
7870 /* Template template argument like the following example need
7871 special treatment:
7872
7873 template <template <class> class TT> struct C {};
7874 template <class T> struct D {
7875 template <class U> struct E {};
0cbd7506 7876 C<E> c; // #1
fcea7401
KL
7877 };
7878 D<int> d; // #2
7879
7880 We are processing the template argument `E' in #1 for
7881 the template instantiation #2. Originally, `E' is a
7882 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7883 have to substitute this with one having context `D<int>'. */
7884
7885 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7886 return lookup_field (context, DECL_NAME(t), 0, false);
7887 }
98c1c668 7888 else
fcea7401 7889 /* Ordinary template template argument. */
98c1c668
JM
7890 return t;
7891
5566b478
MS
7892 case CAST_EXPR:
7893 case REINTERPRET_CAST_EXPR:
e92cc029
MS
7894 case CONST_CAST_EXPR:
7895 case STATIC_CAST_EXPR:
7896 case DYNAMIC_CAST_EXPR:
51924768 7897 case NOP_EXPR:
5566b478 7898 return build1
4393e105
MM
7899 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7900 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
7901
7902 case INDIRECT_REF:
5566b478
MS
7903 case NEGATE_EXPR:
7904 case TRUTH_NOT_EXPR:
b87692e5 7905 case BIT_NOT_EXPR:
5566b478 7906 case ADDR_EXPR:
392e3d51 7907 case UNARY_PLUS_EXPR: /* Unary + */
5566b478 7908 case SIZEOF_EXPR:
abff8e06 7909 case ALIGNOF_EXPR:
5566b478 7910 case ARROW_EXPR:
fc378698 7911 case THROW_EXPR:
5156628f 7912 case TYPEID_EXPR:
f5733617
SS
7913 case REALPART_EXPR:
7914 case IMAGPART_EXPR:
5566b478 7915 return build1
6a629cac 7916 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 7917 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478 7918
a723baf1
MM
7919 case COMPONENT_REF:
7920 {
7921 tree object;
7922 tree name;
7923
7924 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7925 name = TREE_OPERAND (t, 1);
c8094d83 7926 if (TREE_CODE (name) == BIT_NOT_EXPR)
a723baf1
MM
7927 {
7928 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7929 complain, in_decl);
7930 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7931 }
7932 else if (TREE_CODE (name) == SCOPE_REF
7933 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7934 {
7935 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7936 complain, in_decl);
7937 name = TREE_OPERAND (name, 1);
7938 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7939 complain, in_decl);
7940 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
02ed62dd
MM
7941 name = build_qualified_name (/*type=*/NULL_TREE,
7942 base, name,
7943 /*template_p=*/false);
a723baf1 7944 }
ee76b931 7945 else if (TREE_CODE (name) == BASELINK)
c8094d83
MS
7946 name = tsubst_baselink (name,
7947 non_reference (TREE_TYPE (object)),
7948 args, complain,
ee76b931 7949 in_decl);
a723baf1 7950 else
ee76b931 7951 name = tsubst_copy (name, args, complain, in_decl);
44de5aeb 7952 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
a723baf1
MM
7953 }
7954
5566b478
MS
7955 case PLUS_EXPR:
7956 case MINUS_EXPR:
7957 case MULT_EXPR:
7958 case TRUNC_DIV_EXPR:
7959 case CEIL_DIV_EXPR:
7960 case FLOOR_DIV_EXPR:
7961 case ROUND_DIV_EXPR:
7962 case EXACT_DIV_EXPR:
7963 case BIT_AND_EXPR:
5566b478
MS
7964 case BIT_IOR_EXPR:
7965 case BIT_XOR_EXPR:
7966 case TRUNC_MOD_EXPR:
7967 case FLOOR_MOD_EXPR:
7968 case TRUTH_ANDIF_EXPR:
7969 case TRUTH_ORIF_EXPR:
7970 case TRUTH_AND_EXPR:
7971 case TRUTH_OR_EXPR:
7972 case RSHIFT_EXPR:
7973 case LSHIFT_EXPR:
7974 case RROTATE_EXPR:
7975 case LROTATE_EXPR:
7976 case EQ_EXPR:
7977 case NE_EXPR:
7978 case MAX_EXPR:
7979 case MIN_EXPR:
7980 case LE_EXPR:
7981 case GE_EXPR:
7982 case LT_EXPR:
7983 case GT_EXPR:
5566b478 7984 case COMPOUND_EXPR:
5566b478
MS
7985 case DOTSTAR_EXPR:
7986 case MEMBER_REF:
519c9806
MM
7987 case PREDECREMENT_EXPR:
7988 case PREINCREMENT_EXPR:
7989 case POSTDECREMENT_EXPR:
7990 case POSTINCREMENT_EXPR:
5566b478 7991 return build_nt
4393e105
MM
7992 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7993 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478 7994
02ed62dd
MM
7995 case SCOPE_REF:
7996 return build_qualified_name (/*type=*/NULL_TREE,
7997 tsubst_copy (TREE_OPERAND (t, 0),
7998 args, complain, in_decl),
7999 tsubst_copy (TREE_OPERAND (t, 1),
8000 args, complain, in_decl),
8001 QUALIFIED_NAME_IS_TEMPLATE (t));
8002
d8987adb
NS
8003 case ARRAY_REF:
8004 return build_nt
8005 (ARRAY_REF,
8006 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8007 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
8008 NULL_TREE, NULL_TREE);
8009
5566b478 8010 case CALL_EXPR:
c8094d83 8011 return build_nt (code,
a723baf1
MM
8012 tsubst_copy (TREE_OPERAND (t, 0), args,
8013 complain, in_decl),
8014 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
8015 in_decl),
8016 NULL_TREE);
5566b478 8017
5566b478
MS
8018 case COND_EXPR:
8019 case MODOP_EXPR:
40242ccf 8020 case PSEUDO_DTOR_EXPR:
67da3287 8021 {
8452b1d3 8022 r = build_nt
4393e105
MM
8023 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8024 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
8025 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
e4c2c34b 8026 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
67da3287
MM
8027 return r;
8028 }
5566b478
MS
8029
8030 case NEW_EXPR:
8031 {
8452b1d3 8032 r = build_nt
4393e105
MM
8033 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8034 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
8035 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
8036 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
8037 return r;
8038 }
8039
8040 case DELETE_EXPR:
8041 {
8452b1d3 8042 r = build_nt
4393e105
MM
8043 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
8044 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
8045 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
8046 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
8047 return r;
8048 }
8049
386b8a85
JM
8050 case TEMPLATE_ID_EXPR:
8051 {
0cbd7506 8052 /* Substituted template arguments */
a91db711
NS
8053 tree fn = TREE_OPERAND (t, 0);
8054 tree targs = TREE_OPERAND (t, 1);
856216bb 8055
a91db711 8056 fn = tsubst_copy (fn, args, complain, in_decl);
bf12d54d
NS
8057 if (targs)
8058 targs = tsubst_template_args (targs, args, complain, in_decl);
c8094d83 8059
a91db711 8060 return lookup_template_function (fn, targs);
386b8a85
JM
8061 }
8062
5566b478
MS
8063 case TREE_LIST:
8064 {
8065 tree purpose, value, chain;
8066
8067 if (t == void_list_node)
8068 return t;
8069
8070 purpose = TREE_PURPOSE (t);
8071 if (purpose)
4393e105 8072 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
8073 value = TREE_VALUE (t);
8074 if (value)
4393e105 8075 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
8076 chain = TREE_CHAIN (t);
8077 if (chain && chain != void_type_node)
4393e105 8078 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
8079 if (purpose == TREE_PURPOSE (t)
8080 && value == TREE_VALUE (t)
8081 && chain == TREE_CHAIN (t))
8082 return t;
8083 return tree_cons (purpose, value, chain);
8084 }
8085
8086 case RECORD_TYPE:
8087 case UNION_TYPE:
8088 case ENUMERAL_TYPE:
8089 case INTEGER_TYPE:
8090 case TEMPLATE_TYPE_PARM:
73b0fce8 8091 case TEMPLATE_TEMPLATE_PARM:
a1281f45 8092 case BOUND_TEMPLATE_TEMPLATE_PARM:
f84b4be9 8093 case TEMPLATE_PARM_INDEX:
5566b478
MS
8094 case POINTER_TYPE:
8095 case REFERENCE_TYPE:
8096 case OFFSET_TYPE:
8097 case FUNCTION_TYPE:
8098 case METHOD_TYPE:
8099 case ARRAY_TYPE:
8100 case TYPENAME_TYPE:
b8c6534b 8101 case UNBOUND_CLASS_TEMPLATE:
2a2b1d56 8102 case TYPEOF_TYPE:
f84b4be9 8103 case TYPE_DECL:
4393e105 8104 return tsubst (t, args, complain, in_decl);
5566b478 8105
e92cc029 8106 case IDENTIFIER_NODE:
421844e7 8107 if (IDENTIFIER_TYPENAME_P (t))
1f6e1acc
AS
8108 {
8109 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
1f84ec23 8110 return mangle_conv_op_name_for_type (new_type);
1f6e1acc 8111 }
e92cc029
MS
8112 else
8113 return t;
8114
5156628f 8115 case CONSTRUCTOR:
4038c495
GB
8116 /* This is handled by tsubst_copy_and_build. */
8117 gcc_unreachable ();
5156628f 8118
371534a9 8119 case VA_ARG_EXPR:
ea333e1c 8120 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
c2ea3a40
NS
8121 in_decl),
8122 tsubst (TREE_TYPE (t), args, complain, in_decl));
f9817201 8123
543a0daa
RH
8124 case CLEANUP_POINT_EXPR:
8125 /* We shouldn't have built any of these during initial template
8126 generation. Instead, they should be built during instantiation
8127 in response to the saved STMT_IS_FULL_EXPR_P setting. */
315fb5db 8128 gcc_unreachable ();
543a0daa 8129
5566b478
MS
8130 default:
8131 return t;
8132 }
8133}
8134
f74dcfb7
JJ
8135/* Like tsubst_copy_and_build, but unshare TREE_LIST nodes. */
8136
8137static tree
8138tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
8139 tree in_decl)
8140{
8141#define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
8142
8143 tree purpose, value, chain;
8144
8145 if (t == NULL)
8146 return t;
8147
8148 if (TREE_CODE (t) != TREE_LIST)
8149 return tsubst_copy_and_build (t, args, complain, in_decl,
8150 /*function_p=*/false);
8151
8152 if (t == void_list_node)
8153 return t;
8154
8155 purpose = TREE_PURPOSE (t);
8156 if (purpose)
8157 purpose = RECUR (purpose);
8158 value = TREE_VALUE (t);
8159 if (value)
8160 value = RECUR (value);
8161 chain = TREE_CHAIN (t);
8162 if (chain && chain != void_type_node)
8163 chain = RECUR (chain);
8164 return tree_cons (purpose, value, chain);
8165#undef RECUR
8166}
8167
cc23546e
JO
8168/* Like tsubst_copy for expressions, etc. but also does semantic
8169 processing. */
00d3396f 8170
14d22dd6 8171static tree
3a978d72 8172tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478 8173{
fd10dd09 8174 tree stmt, tmp;
558475f0 8175
5566b478
MS
8176 if (t == NULL_TREE || t == error_mark_node)
8177 return t;
8178
93409b8c
PB
8179 if (EXPR_HAS_LOCATION (t))
8180 input_location = EXPR_LOCATION (t);
7c34ced1
RH
8181 if (STATEMENT_CODE_P (TREE_CODE (t)))
8182 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8183
5566b478 8184 switch (TREE_CODE (t))
8d08fdba 8185 {
325c3691
RH
8186 case STATEMENT_LIST:
8187 {
8188 tree_stmt_iterator i;
8189 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8190 tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8191 break;
8192 }
8193
558475f0 8194 case CTOR_INITIALIZER:
c8094d83 8195 finish_mem_initializers (tsubst_initializer_list
2282d28d
MM
8196 (TREE_OPERAND (t, 0), args));
8197 break;
558475f0 8198
5088b058
RH
8199 case RETURN_EXPR:
8200 finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
4393e105 8201 args, complain, in_decl));
5566b478
MS
8202 break;
8203
8204 case EXPR_STMT:
7c34ced1
RH
8205 tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8206 if (EXPR_STMT_STMT_EXPR_RESULT (t))
8207 finish_stmt_expr_expr (tmp, cur_stmt_expr);
8208 else
8209 finish_expr_stmt (tmp);
8210 break;
5566b478 8211
9da99f7d 8212 case USING_STMT:
9da99f7d
NS
8213 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8214 args, complain, in_decl));
8215 break;
c8094d83 8216
350fae66 8217 case DECL_EXPR:
5566b478 8218 {
e0942dcd
MM
8219 tree decl;
8220 tree init;
5566b478 8221
350fae66 8222 decl = DECL_EXPR_DECL (t);
acef433b
MM
8223 if (TREE_CODE (decl) == LABEL_DECL)
8224 finish_label_decl (DECL_NAME (decl));
fbfe8c9e
NS
8225 else if (TREE_CODE (decl) == USING_DECL)
8226 {
98ed9dae 8227 tree scope = USING_DECL_SCOPE (decl);
fbfe8c9e 8228 tree name = DECL_NAME (decl);
22038b2c 8229 tree decl;
c8094d83 8230
fbfe8c9e 8231 scope = tsubst_expr (scope, args, complain, in_decl);
22038b2c 8232 decl = lookup_qualified_name (scope, name,
12483c9f
NS
8233 /*is_type_p=*/false,
8234 /*complain=*/false);
8f78f01f
MM
8235 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8236 qualified_name_lookup_error (scope, name, decl);
22038b2c 8237 else
ed5f054f 8238 do_local_using_decl (decl, scope, name);
fbfe8c9e 8239 }
acef433b
MM
8240 else
8241 {
8242 init = DECL_INITIAL (decl);
8243 decl = tsubst (decl, args, complain, in_decl);
ce2e5191
NS
8244 if (decl != error_mark_node)
8245 {
0cbd7506
MS
8246 if (init)
8247 DECL_INITIAL (decl) = error_mark_node;
8248 /* By marking the declaration as instantiated, we avoid
8249 trying to instantiate it. Since instantiate_decl can't
8250 handle local variables, and since we've already done
8251 all that needs to be done, that's the right thing to
8252 do. */
8253 if (TREE_CODE (decl) == VAR_DECL)
8254 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
edebf865
MM
8255 if (TREE_CODE (decl) == VAR_DECL
8256 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8257 /* Anonymous aggregates are a special case. */
8258 finish_anon_union (decl);
c8094d83 8259 else
ed2fa432 8260 {
edebf865 8261 maybe_push_decl (decl);
39703eb9
MM
8262 if (TREE_CODE (decl) == VAR_DECL
8263 && DECL_PRETTY_FUNCTION_P (decl))
edebf865
MM
8264 {
8265 /* For __PRETTY_FUNCTION__ we have to adjust the
8266 initializer. */
8267 const char *const name
8268 = cxx_printable_name (current_function_decl, 2);
bb885938 8269 init = cp_fname_init (name, &TREE_TYPE (decl));
edebf865
MM
8270 }
8271 else
8272 init = tsubst_expr (init, args, complain, in_decl);
8273 cp_finish_decl (decl, init, NULL_TREE, 0);
ed2fa432 8274 }
ce2e5191 8275 }
acef433b 8276 }
fd10dd09 8277
350fae66 8278 /* A DECL_EXPR can also be used as an expression, in the condition
325c3691
RH
8279 clause of an if/for/while construct. */
8280 return decl;
5566b478 8281 }
8d08fdba 8282
5566b478 8283 case FOR_STMT:
7c34ced1
RH
8284 stmt = begin_for_stmt ();
8285 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8286 finish_for_init_stmt (stmt);
8287 tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8288 finish_for_cond (tmp, stmt);
8289 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8290 finish_for_expr (tmp, stmt);
8291 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8292 finish_for_stmt (stmt);
5566b478 8293 break;
8d08fdba 8294
5566b478 8295 case WHILE_STMT:
7c34ced1
RH
8296 stmt = begin_while_stmt ();
8297 tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8298 finish_while_stmt_cond (tmp, stmt);
8299 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8300 finish_while_stmt (stmt);
5566b478 8301 break;
8d08fdba 8302
5566b478 8303 case DO_STMT:
7c34ced1
RH
8304 stmt = begin_do_stmt ();
8305 tsubst_expr (DO_BODY (t), args, complain, in_decl);
8306 finish_do_body (stmt);
8307 tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8308 finish_do_stmt (tmp, stmt);
5566b478 8309 break;
a0a33927 8310
5566b478 8311 case IF_STMT:
7c34ced1
RH
8312 stmt = begin_if_stmt ();
8313 tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8314 finish_if_stmt_cond (tmp, stmt);
8315 tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8316 finish_then_clause (stmt);
8d08fdba 8317
7c34ced1
RH
8318 if (ELSE_CLAUSE (t))
8319 {
8320 begin_else_clause (stmt);
8321 tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8322 finish_else_clause (stmt);
8323 }
8324
8325 finish_if_stmt (stmt);
5566b478 8326 break;
8d08fdba 8327
5882f0f3 8328 case BIND_EXPR:
7c34ced1
RH
8329 if (BIND_EXPR_BODY_BLOCK (t))
8330 stmt = begin_function_body ();
8331 else
8332 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8333 ? BCS_TRY_BLOCK : 0);
ade3dc07 8334
7c34ced1 8335 tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
ade3dc07 8336
7c34ced1
RH
8337 if (BIND_EXPR_BODY_BLOCK (t))
8338 finish_function_body (stmt);
8339 else
8340 finish_compound_stmt (stmt);
5566b478 8341 break;
8d08fdba 8342
5566b478 8343 case BREAK_STMT:
ad321293 8344 finish_break_stmt ();
5566b478 8345 break;
8d08fdba 8346
6467930b 8347 case CONTINUE_STMT:
ad321293 8348 finish_continue_stmt ();
6467930b
MS
8349 break;
8350
5566b478 8351 case SWITCH_STMT:
7c34ced1 8352 stmt = begin_switch_stmt ();
ebaae582 8353 tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
7c34ced1 8354 finish_switch_cond (tmp, stmt);
ebaae582 8355 tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
7c34ced1 8356 finish_switch_stmt (stmt);
5566b478
MS
8357 break;
8358
8c161995 8359 case CASE_LABEL_EXPR:
4393e105 8360 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
56cb9733
MM
8361 tsubst_expr (CASE_HIGH (t), args, complain,
8362 in_decl));
5566b478
MS
8363 break;
8364
9e14e18f 8365 case LABEL_EXPR:
9e14e18f 8366 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
5566b478
MS
8367 break;
8368
9e14e18f 8369 case GOTO_EXPR:
fd10dd09
JM
8370 tmp = GOTO_DESTINATION (t);
8371 if (TREE_CODE (tmp) != LABEL_DECL)
aa09da44
MM
8372 /* Computed goto's must be tsubst'd into. On the other hand,
8373 non-computed gotos must not be; the identifier in question
8374 will have no binding. */
fd10dd09 8375 tmp = tsubst_expr (tmp, args, complain, in_decl);
3fa56191 8376 else
fd10dd09
JM
8377 tmp = DECL_NAME (tmp);
8378 finish_goto_stmt (tmp);
ad321293
MM
8379 break;
8380
e130a54b 8381 case ASM_EXPR:
c87978aa 8382 tmp = finish_asm_stmt
6de9cd9a 8383 (ASM_VOLATILE_P (t),
c87978aa 8384 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
f74dcfb7
JJ
8385 tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
8386 tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
8387 tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
131263fa
AP
8388 {
8389 tree asm_expr = tmp;
8390 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8391 asm_expr = TREE_OPERAND (asm_expr, 0);
8392 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8393 }
5566b478 8394 break;
faf5394a
MS
8395
8396 case TRY_BLOCK:
f1dedc31 8397 if (CLEANUP_P (t))
62409b39 8398 {
57b52417 8399 stmt = begin_try_block ();
62409b39
MM
8400 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8401 finish_cleanup_try_block (stmt);
8402 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8403 complain, in_decl),
8404 stmt);
8405 }
f1dedc31
MM
8406 else
8407 {
62409b39
MM
8408 if (FN_TRY_BLOCK_P (t))
8409 stmt = begin_function_try_block ();
8410 else
8411 stmt = begin_try_block ();
8412
8413 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8414
8415 if (FN_TRY_BLOCK_P (t))
8416 finish_function_try_block (stmt);
8417 else
8418 finish_try_block (stmt);
8419
fd10dd09 8420 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
84df082b
MM
8421 if (FN_TRY_BLOCK_P (t))
8422 finish_function_handler_sequence (stmt);
8423 else
8424 finish_handler_sequence (stmt);
f1dedc31 8425 }
faf5394a 8426 break;
c8094d83 8427
faf5394a 8428 case HANDLER:
b35d4555
MM
8429 {
8430 tree decl;
b35d4555 8431
b35d4555
MM
8432 stmt = begin_handler ();
8433 if (HANDLER_PARMS (t))
8434 {
325c3691 8435 decl = HANDLER_PARMS (t);
b35d4555 8436 decl = tsubst (decl, args, complain, in_decl);
f8191e64
MM
8437 /* Prevent instantiate_decl from trying to instantiate
8438 this variable. We've already done all that needs to be
8439 done. */
8440 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
b35d4555
MM
8441 }
8442 else
8443 decl = NULL_TREE;
1a6025b4 8444 finish_handler_parms (decl, stmt);
b35d4555 8445 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
1a6025b4 8446 finish_handler (stmt);
b35d4555 8447 }
faf5394a
MS
8448 break;
8449
b87692e5 8450 case TAG_DEFN:
fd10dd09 8451 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
b87692e5
MS
8452 break;
8453
5566b478 8454 default:
315fb5db 8455 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
c8094d83 8456
315fb5db
NS
8457 return tsubst_copy_and_build (t, args, complain, in_decl,
8458 /*function_p=*/false);
5566b478 8459 }
fd10dd09 8460
325c3691 8461 return NULL_TREE;
8d08fdba
MS
8462}
8463
b3445994
MM
8464/* T is a postfix-expression that is not being used in a function
8465 call. Return the substituted version of T. */
8466
8467static tree
c8094d83 8468tsubst_non_call_postfix_expression (tree t, tree args,
b3445994
MM
8469 tsubst_flags_t complain,
8470 tree in_decl)
8471{
8472 if (TREE_CODE (t) == SCOPE_REF)
8473 t = tsubst_qualified_id (t, args, complain, in_decl,
8474 /*done=*/false, /*address_p=*/false);
8475 else
8476 t = tsubst_copy_and_build (t, args, complain, in_decl,
8477 /*function_p=*/false);
8478
8479 return t;
8480}
8481
cc23546e 8482/* Like tsubst but deals with expressions and performs semantic
b3445994 8483 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
cc23546e 8484
ee76b931 8485tree
c8094d83 8486tsubst_copy_and_build (tree t,
0cbd7506
MS
8487 tree args,
8488 tsubst_flags_t complain,
8489 tree in_decl,
b3445994 8490 bool function_p)
cc23546e 8491{
b3445994
MM
8492#define RECUR(NODE) \
8493 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8494
ee76b931
MM
8495 tree op1;
8496
cc23546e
JO
8497 if (t == NULL_TREE || t == error_mark_node)
8498 return t;
8499
8500 switch (TREE_CODE (t))
8501 {
399dedb9
NS
8502 case USING_DECL:
8503 t = DECL_NAME (t);
852dcbdd 8504 /* Fall through. */
b3445994 8505 case IDENTIFIER_NODE:
cc23546e 8506 {
b3445994 8507 tree decl;
b3445994 8508 cp_id_kind idk;
67c03833 8509 bool non_integral_constant_expression_p;
b3445994
MM
8510 const char *error_msg;
8511
b3445994 8512 if (IDENTIFIER_TYPENAME_P (t))
cc23546e 8513 {
b3445994
MM
8514 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8515 t = mangle_conv_op_name_for_type (new_type);
cc23546e 8516 }
b3445994
MM
8517
8518 /* Look up the name. */
10e6657a 8519 decl = lookup_name (t);
b3445994
MM
8520
8521 /* By convention, expressions use ERROR_MARK_NODE to indicate
8522 failure, not NULL_TREE. */
8523 if (decl == NULL_TREE)
8524 decl = error_mark_node;
8525
10b1d5e7 8526 decl = finish_id_expression (t, decl, NULL_TREE,
b3445994 8527 &idk,
67c03833
JM
8528 /*integral_constant_expression_p=*/false,
8529 /*allow_non_integral_constant_expression_p=*/false,
8530 &non_integral_constant_expression_p,
02ed62dd
MM
8531 /*template_p=*/false,
8532 /*done=*/true,
8533 /*address_p=*/false,
8534 /*template_arg_p=*/false,
b3445994
MM
8535 &error_msg);
8536 if (error_msg)
8537 error (error_msg);
8538 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8539 decl = unqualified_name_lookup_error (decl);
8540 return decl;
cc23546e
JO
8541 }
8542
8543 case TEMPLATE_ID_EXPR:
8544 {
8545 tree object;
b3445994 8546 tree template = RECUR (TREE_OPERAND (t, 0));
bf12d54d
NS
8547 tree targs = TREE_OPERAND (t, 1);
8548
8549 if (targs)
8550 targs = tsubst_template_args (targs, args, complain, in_decl);
c8094d83 8551
cc23546e
JO
8552 if (TREE_CODE (template) == COMPONENT_REF)
8553 {
8554 object = TREE_OPERAND (template, 0);
8555 template = TREE_OPERAND (template, 1);
8556 }
8557 else
8558 object = NULL_TREE;
bd83b409 8559 template = lookup_template_function (template, targs);
c8094d83 8560
cc23546e 8561 if (object)
c8094d83 8562 return build3 (COMPONENT_REF, TREE_TYPE (template),
f293ce4b 8563 object, template, NULL_TREE);
cc23546e
JO
8564 else
8565 return template;
8566 }
8567
8568 case INDIRECT_REF:
db24eb1f
NS
8569 {
8570 tree r = RECUR (TREE_OPERAND (t, 0));
8571
8572 if (REFERENCE_REF_P (t))
8573 {
e8c66fe0
NS
8574 /* A type conversion to reference type will be enclosed in
8575 such an indirect ref, but the substitution of the cast
8576 will have also added such an indirect ref. */
8577 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8578 r = convert_from_reference (r);
db24eb1f
NS
8579 }
8580 else
8581 r = build_x_indirect_ref (r, "unary *");
8582 return r;
8583 }
cc23546e 8584
0da99d4e
GB
8585 case NOP_EXPR:
8586 return build_nop
8587 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8588 RECUR (TREE_OPERAND (t, 0)));
8589
cc23546e
JO
8590 case CAST_EXPR:
8591 return build_functional_cast
8592 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8593 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8594
8595 case REINTERPRET_CAST_EXPR:
8596 return build_reinterpret_cast
8597 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8598 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8599
8600 case CONST_CAST_EXPR:
8601 return build_const_cast
8602 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8603 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8604
8605 case DYNAMIC_CAST_EXPR:
8606 return build_dynamic_cast
8607 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8608 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8609
8610 case STATIC_CAST_EXPR:
8611 return build_static_cast
8612 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8613 RECUR (TREE_OPERAND (t, 0)));
cc23546e 8614
cc23546e
JO
8615 case POSTDECREMENT_EXPR:
8616 case POSTINCREMENT_EXPR:
b3445994
MM
8617 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8618 args, complain, in_decl);
ee76b931
MM
8619 return build_x_unary_op (TREE_CODE (t), op1);
8620
8621 case PREDECREMENT_EXPR:
8622 case PREINCREMENT_EXPR:
cc23546e
JO
8623 case NEGATE_EXPR:
8624 case BIT_NOT_EXPR:
cc23546e 8625 case ABS_EXPR:
d17811fd 8626 case TRUTH_NOT_EXPR:
392e3d51 8627 case UNARY_PLUS_EXPR: /* Unary + */
d17811fd
MM
8628 case REALPART_EXPR:
8629 case IMAGPART_EXPR:
b3445994 8630 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
cc23546e 8631
cc23546e 8632 case ADDR_EXPR:
ee76b931
MM
8633 op1 = TREE_OPERAND (t, 0);
8634 if (TREE_CODE (op1) == SCOPE_REF)
c8094d83 8635 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
ee76b931
MM
8636 /*done=*/true, /*address_p=*/true);
8637 else
c8094d83 8638 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
b3445994 8639 in_decl);
fc2b8477
MM
8640 if (TREE_CODE (op1) == LABEL_DECL)
8641 return finish_label_address_expr (DECL_NAME (op1));
ee76b931
MM
8642 return build_x_unary_op (ADDR_EXPR, op1);
8643
cc23546e
JO
8644 case PLUS_EXPR:
8645 case MINUS_EXPR:
8646 case MULT_EXPR:
8647 case TRUNC_DIV_EXPR:
8648 case CEIL_DIV_EXPR:
8649 case FLOOR_DIV_EXPR:
8650 case ROUND_DIV_EXPR:
8651 case EXACT_DIV_EXPR:
8652 case BIT_AND_EXPR:
cc23546e
JO
8653 case BIT_IOR_EXPR:
8654 case BIT_XOR_EXPR:
8655 case TRUNC_MOD_EXPR:
8656 case FLOOR_MOD_EXPR:
8657 case TRUTH_ANDIF_EXPR:
8658 case TRUTH_ORIF_EXPR:
8659 case TRUTH_AND_EXPR:
8660 case TRUTH_OR_EXPR:
8661 case RSHIFT_EXPR:
8662 case LSHIFT_EXPR:
8663 case RROTATE_EXPR:
8664 case LROTATE_EXPR:
8665 case EQ_EXPR:
8666 case NE_EXPR:
8667 case MAX_EXPR:
8668 case MIN_EXPR:
8669 case LE_EXPR:
8670 case GE_EXPR:
8671 case LT_EXPR:
8672 case GT_EXPR:
8673 case MEMBER_REF:
b3445994 8674 case DOTSTAR_EXPR:
cc23546e 8675 return build_x_binary_op
c8094d83 8676 (TREE_CODE (t),
b3445994 8677 RECUR (TREE_OPERAND (t, 0)),
ec835fb2
MM
8678 RECUR (TREE_OPERAND (t, 1)),
8679 /*overloaded_p=*/NULL);
cc23546e
JO
8680
8681 case SCOPE_REF:
ee76b931
MM
8682 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8683 /*address_p=*/false);
cc23546e 8684 case ARRAY_REF:
b3445994
MM
8685 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8686 args, complain, in_decl);
d8987adb
NS
8687 return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8688 /*overloaded_p=*/NULL);
c8094d83 8689
cc23546e
JO
8690 case SIZEOF_EXPR:
8691 case ALIGNOF_EXPR:
d17811fd
MM
8692 op1 = TREE_OPERAND (t, 0);
8693 if (!args)
8694 {
8695 /* When there are no ARGS, we are trying to evaluate a
8696 non-dependent expression from the parser. Trying to do
8697 the substitutions may not work. */
8698 if (!TYPE_P (op1))
8699 op1 = TREE_TYPE (op1);
8700 }
8701 else
8702 {
8703 ++skip_evaluation;
b3445994 8704 op1 = RECUR (op1);
d17811fd
MM
8705 --skip_evaluation;
8706 }
7a18b933
NS
8707 if (TYPE_P (op1))
8708 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
d17811fd 8709 else
7a18b933 8710 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
cc23546e
JO
8711
8712 case MODOP_EXPR:
e4c2c34b
JM
8713 {
8714 tree r = build_x_modify_expr
8715 (RECUR (TREE_OPERAND (t, 0)),
8716 TREE_CODE (TREE_OPERAND (t, 1)),
8717 RECUR (TREE_OPERAND (t, 2)));
bcf9a914
JM
8718 /* TREE_NO_WARNING must be set if either the expression was
8719 parenthesized or it uses an operator such as >>= rather
8720 than plain assignment. In the former case, it was already
8721 set and must be copied. In the latter case,
8722 build_x_modify_expr sets it and it must not be reset
8723 here. */
8724 if (TREE_NO_WARNING (t))
8725 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
e4c2c34b
JM
8726 return r;
8727 }
cc23546e
JO
8728
8729 case ARROW_EXPR:
b3445994
MM
8730 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8731 args, complain, in_decl);
ee76b931
MM
8732 /* Remember that there was a reference to this entity. */
8733 if (DECL_P (op1))
8734 mark_used (op1);
8735 return build_x_arrow (op1);
cc23546e
JO
8736
8737 case NEW_EXPR:
8738 return build_new
b3445994
MM
8739 (RECUR (TREE_OPERAND (t, 0)),
8740 RECUR (TREE_OPERAND (t, 1)),
8741 RECUR (TREE_OPERAND (t, 2)),
058b15c1 8742 RECUR (TREE_OPERAND (t, 3)),
cc23546e
JO
8743 NEW_EXPR_USE_GLOBAL (t));
8744
8745 case DELETE_EXPR:
8746 return delete_sanity
b3445994
MM
8747 (RECUR (TREE_OPERAND (t, 0)),
8748 RECUR (TREE_OPERAND (t, 1)),
cc23546e
JO
8749 DELETE_EXPR_USE_VEC (t),
8750 DELETE_EXPR_USE_GLOBAL (t));
8751
8752 case COMPOUND_EXPR:
b3445994
MM
8753 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8754 RECUR (TREE_OPERAND (t, 1)));
cc23546e 8755
ee76b931 8756 case CALL_EXPR:
cc23546e 8757 {
ee76b931
MM
8758 tree function;
8759 tree call_args;
ee76b931 8760 bool qualified_p;
ee935db4 8761 bool koenig_p;
ee76b931
MM
8762
8763 function = TREE_OPERAND (t, 0);
6d80c4b9
MM
8764 /* When we parsed the expression, we determined whether or
8765 not Koenig lookup should be performed. */
8766 koenig_p = KOENIG_LOOKUP_P (t);
ee76b931 8767 if (TREE_CODE (function) == SCOPE_REF)
cc23546e 8768 {
ee76b931
MM
8769 qualified_p = true;
8770 function = tsubst_qualified_id (function, args, complain, in_decl,
c8094d83 8771 /*done=*/false,
ee76b931 8772 /*address_p=*/false);
cc23546e 8773 }
ee76b931 8774 else
cc23546e 8775 {
61e71a9e
NS
8776 if (TREE_CODE (function) == COMPONENT_REF)
8777 {
8778 tree op = TREE_OPERAND (function, 1);
8779
8780 qualified_p = (TREE_CODE (op) == SCOPE_REF
8781 || (BASELINK_P (op)
8782 && BASELINK_QUALIFIED_P (op)));
8783 }
8784 else
8785 qualified_p = false;
8786
c8094d83 8787 function = tsubst_copy_and_build (function, args, complain,
b3445994
MM
8788 in_decl,
8789 !qualified_p);
6d80c4b9
MM
8790 if (BASELINK_P (function))
8791 qualified_p = true;
cc23546e 8792 }
cc23546e 8793
b3445994 8794 call_args = RECUR (TREE_OPERAND (t, 1));
676e33ca
MM
8795
8796 /* We do not perform argument-dependent lookup if normal
8797 lookup finds a non-function, in accordance with the
8798 expected resolution of DR 218. */
ee935db4 8799 if (koenig_p
44370687
MM
8800 && ((is_overloaded_fn (function)
8801 /* If lookup found a member function, the Koenig lookup is
8802 not appropriate, even if an unqualified-name was used
8803 to denote the function. */
8804 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
b3445994 8805 || TREE_CODE (function) == IDENTIFIER_NODE))
6d80c4b9
MM
8806 function = perform_koenig_lookup (function, call_args);
8807
8808 if (TREE_CODE (function) == IDENTIFIER_NODE)
b3445994 8809 {
6d80c4b9
MM
8810 unqualified_name_lookup_error (function);
8811 return error_mark_node;
b3445994
MM
8812 }
8813
8814 /* Remember that there was a reference to this entity. */
8815 if (DECL_P (function))
8816 mark_used (function);
8817
d17811fd
MM
8818 if (TREE_CODE (function) == OFFSET_REF)
8819 return build_offset_ref_call_from_tree (function, call_args);
8820 if (TREE_CODE (function) == COMPONENT_REF)
9f880ef9
MM
8821 {
8822 if (!BASELINK_P (TREE_OPERAND (function, 1)))
8823 return finish_call_expr (function, call_args,
8824 /*disallow_virtual=*/false,
8825 /*koenig_p=*/false);
8826 else
c8094d83 8827 return (build_new_method_call
9f880ef9
MM
8828 (TREE_OPERAND (function, 0),
8829 TREE_OPERAND (function, 1),
c8094d83 8830 call_args, NULL_TREE,
9f880ef9
MM
8831 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8832 }
c8094d83 8833 return finish_call_expr (function, call_args,
6d80c4b9
MM
8834 /*disallow_virtual=*/qualified_p,
8835 koenig_p);
cc23546e
JO
8836 }
8837
8838 case COND_EXPR:
8839 return build_x_conditional_expr
b3445994
MM
8840 (RECUR (TREE_OPERAND (t, 0)),
8841 RECUR (TREE_OPERAND (t, 1)),
8842 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8843
8844 case PSEUDO_DTOR_EXPR:
c8094d83 8845 return finish_pseudo_destructor_expr
b3445994
MM
8846 (RECUR (TREE_OPERAND (t, 0)),
8847 RECUR (TREE_OPERAND (t, 1)),
8848 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8849
8850 case TREE_LIST:
8851 {
8852 tree purpose, value, chain;
8853
8854 if (t == void_list_node)
8855 return t;
8856
8857 purpose = TREE_PURPOSE (t);
8858 if (purpose)
b3445994 8859 purpose = RECUR (purpose);
cc23546e
JO
8860 value = TREE_VALUE (t);
8861 if (value)
b3445994 8862 value = RECUR (value);
cc23546e
JO
8863 chain = TREE_CHAIN (t);
8864 if (chain && chain != void_type_node)
b3445994 8865 chain = RECUR (chain);
cc23546e
JO
8866 if (purpose == TREE_PURPOSE (t)
8867 && value == TREE_VALUE (t)
8868 && chain == TREE_CHAIN (t))
8869 return t;
8870 return tree_cons (purpose, value, chain);
8871 }
8872
8873 case COMPONENT_REF:
8874 {
ee76b931
MM
8875 tree object;
8876 tree member;
8877
b3445994
MM
8878 object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8879 args, complain, in_decl);
ee76b931
MM
8880 /* Remember that there was a reference to this entity. */
8881 if (DECL_P (object))
8882 mark_used (object);
8883
8884 member = TREE_OPERAND (t, 1);
8885 if (BASELINK_P (member))
c8094d83 8886 member = tsubst_baselink (member,
ee76b931
MM
8887 non_reference (TREE_TYPE (object)),
8888 args, complain, in_decl);
8889 else
8890 member = tsubst_copy (member, args, complain, in_decl);
cc23546e 8891
bad1f462
KL
8892 if (member == error_mark_node)
8893 return error_mark_node;
8894 else if (!CLASS_TYPE_P (TREE_TYPE (object)))
cc23546e
JO
8895 {
8896 if (TREE_CODE (member) == BIT_NOT_EXPR)
c8094d83 8897 return finish_pseudo_destructor_expr (object,
cc23546e
JO
8898 NULL_TREE,
8899 TREE_TYPE (object));
8900 else if (TREE_CODE (member) == SCOPE_REF
8901 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
c8094d83 8902 return finish_pseudo_destructor_expr (object,
cc23546e
JO
8903 object,
8904 TREE_TYPE (object));
8905 }
8906 else if (TREE_CODE (member) == SCOPE_REF
8907 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8908 {
8909 tree tmpl;
8910 tree args;
c8094d83 8911
cc23546e
JO
8912 /* Lookup the template functions now that we know what the
8913 scope is. */
8914 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8915 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
c8094d83 8916 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12483c9f
NS
8917 /*is_type_p=*/false,
8918 /*complain=*/false);
cc23546e 8919 if (BASELINK_P (member))
44370687 8920 {
c8094d83 8921 BASELINK_FUNCTIONS (member)
44370687
MM
8922 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8923 args);
c8094d83
MS
8924 member = (adjust_result_of_qualified_name_lookup
8925 (member, BINFO_TYPE (BASELINK_BINFO (member)),
44370687
MM
8926 TREE_TYPE (object)));
8927 }
cc23546e
JO
8928 else
8929 {
8f78f01f
MM
8930 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8931 member);
cc23546e
JO
8932 return error_mark_node;
8933 }
8934 }
2436b51f
MM
8935 else if (TREE_CODE (member) == SCOPE_REF
8936 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8937 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8938 {
8939 if (complain & tf_error)
8940 {
8941 if (TYPE_P (TREE_OPERAND (member, 0)))
c8094d83 8942 error ("%qT is not a class or namespace",
2436b51f
MM
8943 TREE_OPERAND (member, 0));
8944 else
c8094d83 8945 error ("%qD is not a class or namespace",
2436b51f
MM
8946 TREE_OPERAND (member, 0));
8947 }
8948 return error_mark_node;
8949 }
a3f10e50
NS
8950 else if (TREE_CODE (member) == FIELD_DECL)
8951 return finish_non_static_data_member (member, object, NULL_TREE);
cc23546e 8952
02ed62dd
MM
8953 return finish_class_member_access_expr (object, member,
8954 /*template_p=*/false);
cc23546e
JO
8955 }
8956
8957 case THROW_EXPR:
8958 return build_throw
b3445994 8959 (RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8960
8961 case CONSTRUCTOR:
8962 {
4038c495
GB
8963 VEC(constructor_elt,gc) *n;
8964 constructor_elt *ce;
8965 unsigned HOST_WIDE_INT idx;
cc23546e 8966 tree r;
cc23546e 8967 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
4038c495 8968 bool process_index_p;
cc23546e
JO
8969
8970 /* digest_init will do the wrong thing if we let it. */
8971 if (type && TYPE_PTRMEMFUNC_P (type))
8972 return t;
8973
4038c495 8974 /* We do not want to process the index of aggregate
cc23546e
JO
8975 initializers as they are identifier nodes which will be
8976 looked up by digest_init. */
4038c495 8977 process_index_p = !(type && IS_AGGR_TYPE (type));
c8094d83 8978
4038c495
GB
8979 n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
8980 for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
8981 {
8982 if (ce->index && process_index_p)
8983 ce->index = RECUR (ce->index);
8984 ce->value = RECUR (ce->value);
cc23546e 8985 }
c8094d83 8986
4038c495 8987 r = build_constructor (NULL_TREE, n);
cc23546e
JO
8988 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8989
8990 if (type)
4038c495 8991 return digest_init (type, r);
cc23546e
JO
8992 return r;
8993 }
8994
8995 case TYPEID_EXPR:
8996 {
b3445994 8997 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
cc23546e
JO
8998 if (TYPE_P (operand_0))
8999 return get_typeid (operand_0);
9000 return build_typeid (operand_0);
9001 }
9002
cc23546e 9003 case VAR_DECL:
db24eb1f
NS
9004 if (!args)
9005 return t;
9006 /* Fall through */
c8094d83 9007
db24eb1f
NS
9008 case PARM_DECL:
9009 {
9010 tree r = tsubst_copy (t, args, complain, in_decl);
c8094d83 9011
db24eb1f
NS
9012 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
9013 /* If the original type was a reference, we'll be wrapped in
9014 the appropriate INDIRECT_REF. */
9015 r = convert_from_reference (r);
9016 return r;
9017 }
cc23546e
JO
9018
9019 case VA_ARG_EXPR:
b3445994 9020 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
c8094d83 9021 tsubst_copy (TREE_TYPE (t), args, complain,
b3445994 9022 in_decl));
cc23546e 9023
4bceb077
RH
9024 case OFFSETOF_EXPR:
9025 return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
9026
0fe0caa6
RH
9027 case STMT_EXPR:
9028 {
9029 tree old_stmt_expr = cur_stmt_expr;
9030 tree stmt_expr = begin_stmt_expr ();
9031
9032 cur_stmt_expr = stmt_expr;
9033 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
9034 stmt_expr = finish_stmt_expr (stmt_expr, false);
9035 cur_stmt_expr = old_stmt_expr;
9036
9037 return stmt_expr;
9038 }
9039
a5201a91
MM
9040 case CONST_DECL:
9041 t = tsubst_copy (t, args, complain, in_decl);
9042 /* As in finish_id_expression, we resolve enumeration constants
9043 to their underlying values. */
9044 if (TREE_CODE (t) == CONST_DECL)
9045 return DECL_INITIAL (t);
9046 return t;
9047
cc23546e 9048 default:
e58a9aa1
ZL
9049 /* Handle Objective-C++ constructs, if appropriate. */
9050 {
9051 tree subst
9052 = objcp_tsubst_copy_and_build (t, args, complain,
9053 in_decl, /*function_p=*/false);
9054 if (subst)
9055 return subst;
9056 }
cc23546e
JO
9057 return tsubst_copy (t, args, complain, in_decl);
9058 }
b3445994
MM
9059
9060#undef RECUR
cc23546e
JO
9061}
9062
3e4a3562
NS
9063/* Verify that the instantiated ARGS are valid. For type arguments,
9064 make sure that the type's linkage is ok. For non-type arguments,
34cd5ae7 9065 make sure they are constants if they are integral or enumerations.
9bcb9aae 9066 Emit an error under control of COMPLAIN, and return TRUE on error. */
3e4a3562
NS
9067
9068static bool
3a978d72 9069check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
3e4a3562
NS
9070{
9071 int ix, len = DECL_NTPARMS (tmpl);
9072 bool result = false;
9073
9074 for (ix = 0; ix != len; ix++)
9075 {
9076 tree t = TREE_VEC_ELT (args, ix);
c8094d83 9077
3e4a3562
NS
9078 if (TYPE_P (t))
9079 {
9080 /* [basic.link]: A name with no linkage (notably, the name
9081 of a class or enumeration declared in a local scope)
9082 shall not be used to declare an entity with linkage.
9083 This implies that names with no linkage cannot be used as
9084 template arguments. */
4684cd27 9085 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
3e4a3562
NS
9086
9087 if (nt)
9088 {
cb807ba3 9089 /* DR 488 makes use of a type with no linkage cause
2010cdcd
MM
9090 type deduction to fail. */
9091 if (complain & tf_error)
9092 {
9093 if (TYPE_ANONYMOUS_P (nt))
9094 error ("%qT is/uses anonymous type", t);
9095 else
9096 error ("%qT uses local type %qT", t, nt);
9097 }
3e4a3562
NS
9098 result = true;
9099 }
9100 /* In order to avoid all sorts of complications, we do not
9101 allow variably-modified types as template arguments. */
5377d5ba 9102 else if (variably_modified_type_p (t, NULL_TREE))
3e4a3562
NS
9103 {
9104 if (complain & tf_error)
0f51ccfc 9105 error ("%qT is a variably modified type", t);
3e4a3562
NS
9106 result = true;
9107 }
9108 }
9109 /* A non-type argument of integral or enumerated type must be a
9110 constant. */
9111 else if (TREE_TYPE (t)
9112 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
9113 && !TREE_CONSTANT (t))
9114 {
9115 if (complain & tf_error)
0f51ccfc 9116 error ("integral expression %qE is not constant", t);
3e4a3562
NS
9117 result = true;
9118 }
9119 }
2010cdcd 9120 if (result && (complain & tf_error))
0f51ccfc 9121 error (" trying to instantiate %qD", tmpl);
3e4a3562
NS
9122 return result;
9123}
9124
6ba89f8e 9125/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
9126 the template arguments in TARG_PTR. */
9127
5566b478 9128tree
3a978d72 9129instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8d08fdba 9130{
5566b478 9131 tree fndecl;
36a117a5
MM
9132 tree gen_tmpl;
9133 tree spec;
5566b478 9134
27fafc8d
JM
9135 if (tmpl == error_mark_node)
9136 return error_mark_node;
9137
50bc768d 9138 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
386b8a85 9139
db9b2174
MM
9140 /* If this function is a clone, handle it specially. */
9141 if (DECL_CLONED_FUNCTION_P (tmpl))
3ad97789 9142 {
a30f62e0 9143 tree spec;
3ad97789 9144 tree clone;
c8094d83 9145
a30f62e0
MM
9146 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
9147 complain);
9148 if (spec == error_mark_node)
9149 return error_mark_node;
9150
c6002625 9151 /* Look for the clone. */
4684cd27 9152 FOR_EACH_CLONE (clone, spec)
3ad97789
NS
9153 if (DECL_NAME (clone) == DECL_NAME (tmpl))
9154 return clone;
9155 /* We should always have found the clone by now. */
315fb5db 9156 gcc_unreachable ();
3ad97789
NS
9157 return NULL_TREE;
9158 }
c8094d83 9159
36a117a5 9160 /* Check to see if we already have this specialization. */
c8094d83 9161 spec = retrieve_specialization (tmpl, targ_ptr,
c7222c02 9162 /*class_specializations_p=*/false);
36a117a5
MM
9163 if (spec != NULL_TREE)
9164 return spec;
9165
f9a7ae04
MM
9166 gen_tmpl = most_general_template (tmpl);
9167 if (tmpl != gen_tmpl)
386b8a85 9168 {
36a117a5
MM
9169 /* The TMPL is a partial instantiation. To get a full set of
9170 arguments we must add the arguments used to perform the
9171 partial instantiation. */
9172 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9173 targ_ptr);
36a117a5
MM
9174
9175 /* Check to see if we already have this specialization. */
c7222c02
MM
9176 spec = retrieve_specialization (gen_tmpl, targ_ptr,
9177 /*class_specializations_p=*/false);
75650646
MM
9178 if (spec != NULL_TREE)
9179 return spec;
386b8a85
JM
9180 }
9181
3e4a3562
NS
9182 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9183 complain))
9184 return error_mark_node;
c8094d83 9185
2b907f5c
KL
9186 /* We are building a FUNCTION_DECL, during which the access of its
9187 parameters and return types have to be checked. However this
9188 FUNCTION_DECL which is the desired context for access checking
9189 is not built yet. We solve this chicken-and-egg problem by
9190 deferring all checks until we have the FUNCTION_DECL. */
9191 push_deferring_access_checks (dk_deferred);
5c74d5b0 9192
f4f206f4 9193 /* Substitute template parameters. */
17aec3eb 9194 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
3e4a3562 9195 targ_ptr, complain, gen_tmpl);
5c74d5b0 9196
2b907f5c
KL
9197 /* Now we know the specialization, compute access previously
9198 deferred. */
9199 push_access_scope (fndecl);
9200 perform_deferred_access_checks ();
9201 pop_access_scope (fndecl);
9202 pop_deferring_access_checks ();
5c74d5b0 9203
36a117a5
MM
9204 /* The DECL_TI_TEMPLATE should always be the immediate parent
9205 template, not the most general template. */
9206 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 9207
94350948 9208 /* If we've just instantiated the main entry point for a function,
3ad97789
NS
9209 instantiate all the alternate entry points as well. We do this
9210 by cloning the instantiation of the main entry point, not by
9211 instantiating the template clones. */
9212 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9213 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
94350948 9214
5566b478 9215 return fndecl;
8d08fdba 9216}
5566b478 9217
4393e105
MM
9218/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9219 arguments that are being used when calling it. TARGS is a vector
c8094d83 9220 into which the deduced template arguments are placed.
8d08fdba
MS
9221
9222 Return zero for success, 2 for an incomplete match that doesn't resolve
9223 all the types, and 1 for complete failure. An error message will be
9224 printed only for an incomplete match.
9225
e5214479
JM
9226 If FN is a conversion operator, or we are trying to produce a specific
9227 specialization, RETURN_TYPE is the return type desired.
9f54c803
MM
9228
9229 The EXPLICIT_TARGS are explicit template arguments provided via a
9230 template-id.
6467930b 9231
830bfa74
MM
9232 The parameter STRICT is one of:
9233
c8094d83 9234 DEDUCE_CALL:
830bfa74
MM
9235 We are deducing arguments for a function call, as in
9236 [temp.deduct.call].
9237
9238 DEDUCE_CONV:
c8094d83 9239 We are deducing arguments for a conversion function, as in
830bfa74
MM
9240 [temp.deduct.conv].
9241
9242 DEDUCE_EXACT:
62e4a758
NS
9243 We are deducing arguments when doing an explicit instantiation
9244 as in [temp.explicit], when determining an explicit specialization
9245 as in [temp.expl.spec], or when taking the address of a function
a34d3336 9246 template, as in [temp.deduct.funcaddr]. */
8d08fdba
MS
9247
9248int
c8094d83 9249fn_type_unification (tree fn,
0cbd7506
MS
9250 tree explicit_targs,
9251 tree targs,
9252 tree args,
9253 tree return_type,
30f86ec3
FJ
9254 unification_kind_t strict,
9255 int flags)
386b8a85 9256{
4393e105
MM
9257 tree parms;
9258 tree fntype;
adecb3f4 9259 int result;
386b8a85 9260
50bc768d 9261 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
2b59fc25 9262
4393e105
MM
9263 fntype = TREE_TYPE (fn);
9264 if (explicit_targs)
75650646 9265 {
4393e105 9266 /* [temp.deduct]
c8094d83 9267
4393e105
MM
9268 The specified template arguments must match the template
9269 parameters in kind (i.e., type, nontype, template), and there
9270 must not be more arguments than there are parameters;
9271 otherwise type deduction fails.
9272
9273 Nontype arguments must match the types of the corresponding
9274 nontype template parameters, or must be convertible to the
9275 types of the corresponding nontype parameters as specified in
9276 _temp.arg.nontype_, otherwise type deduction fails.
9277
9278 All references in the function type of the function template
9279 to the corresponding template parameters are replaced by the
9280 specified template argument values. If a substitution in a
9281 template parameter or in the function type of the function
9282 template results in an invalid type, type deduction fails. */
9283 int i;
9284 tree converted_args;
ffd49b19 9285 bool incomplete;
75650646 9286
c8a7ed43
AO
9287 if (explicit_targs == error_mark_node)
9288 return 1;
9289
4393e105 9290 converted_args
c8094d83
MS
9291 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9292 explicit_targs, NULL_TREE, tf_none,
4393e105
MM
9293 /*require_all_arguments=*/0));
9294 if (converted_args == error_mark_node)
75650646 9295 return 1;
386b8a85 9296
ffd49b19 9297 /* Substitute the explicit args into the function type. This is
0cbd7506
MS
9298 necessary so that, for instance, explicitly declared function
9299 arguments can match null pointed constants. If we were given
9300 an incomplete set of explicit args, we must not do semantic
9301 processing during substitution as we could create partial
9302 instantiations. */
ffd49b19
NS
9303 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9304 processing_template_decl += incomplete;
c2ea3a40 9305 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
ffd49b19 9306 processing_template_decl -= incomplete;
c8094d83 9307
4393e105
MM
9308 if (fntype == error_mark_node)
9309 return 1;
050367a3 9310
4393e105 9311 /* Place the explicitly specified arguments in TARGS. */
ffd49b19 9312 for (i = NUM_TMPL_ARGS (converted_args); i--;)
4393e105 9313 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 9314 }
c8094d83 9315
4393e105 9316 parms = TYPE_ARG_TYPES (fntype);
e5214479
JM
9317 /* Never do unification on the 'this' parameter. */
9318 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9319 parms = TREE_CHAIN (parms);
c8094d83 9320
8d3631f8
NS
9321 if (return_type)
9322 {
8d3631f8
NS
9323 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9324 args = tree_cons (NULL_TREE, return_type, args);
4393e105
MM
9325 }
9326
4393e105
MM
9327 /* We allow incomplete unification without an error message here
9328 because the standard doesn't seem to explicitly prohibit it. Our
9329 callers must be ready to deal with unification failures in any
9330 event. */
c8094d83 9331 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
adecb3f4 9332 targs, parms, args, /*subr=*/0,
30f86ec3 9333 strict, flags);
adecb3f4 9334
c8094d83 9335 if (result == 0)
adecb3f4 9336 /* All is well so far. Now, check:
c8094d83
MS
9337
9338 [temp.deduct]
9339
adecb3f4
MM
9340 When all template arguments have been deduced, all uses of
9341 template parameters in nondeduced contexts are replaced with
9342 the corresponding deduced argument values. If the
9343 substitution results in an invalid type, as described above,
9344 type deduction fails. */
c2ea3a40 9345 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
adecb3f4
MM
9346 == error_mark_node)
9347 return 1;
9348
9349 return result;
830bfa74
MM
9350}
9351
9352/* Adjust types before performing type deduction, as described in
9353 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
9354 sections are symmetric. PARM is the type of a function parameter
9355 or the return type of the conversion function. ARG is the type of
9356 the argument passed to the call, or the type of the value
dc957d14 9357 initialized with the result of the conversion function. */
386b8a85 9358
62e4a758 9359static int
c8094d83 9360maybe_adjust_types_for_deduction (unification_kind_t strict,
0cbd7506
MS
9361 tree* parm,
9362 tree* arg)
830bfa74 9363{
62e4a758 9364 int result = 0;
c8094d83 9365
830bfa74
MM
9366 switch (strict)
9367 {
9368 case DEDUCE_CALL:
9369 break;
9370
9371 case DEDUCE_CONV:
9372 {
4c7d0dff
MM
9373 /* Swap PARM and ARG throughout the remainder of this
9374 function; the handling is precisely symmetric since PARM
9375 will initialize ARG rather than vice versa. */
830bfa74
MM
9376 tree* temp = parm;
9377 parm = arg;
9378 arg = temp;
9379 break;
9380 }
9381
9382 case DEDUCE_EXACT:
9383 /* There is nothing to do in this case. */
62e4a758 9384 return 0;
830bfa74
MM
9385
9386 default:
315fb5db 9387 gcc_unreachable ();
830bfa74
MM
9388 }
9389
9390 if (TREE_CODE (*parm) != REFERENCE_TYPE)
9391 {
9392 /* [temp.deduct.call]
c8094d83 9393
830bfa74 9394 If P is not a reference type:
c8094d83 9395
830bfa74
MM
9396 --If A is an array type, the pointer type produced by the
9397 array-to-pointer standard conversion (_conv.array_) is
9398 used in place of A for type deduction; otherwise,
c8094d83 9399
830bfa74
MM
9400 --If A is a function type, the pointer type produced by
9401 the function-to-pointer standard conversion
9402 (_conv.func_) is used in place of A for type deduction;
9403 otherwise,
c8094d83 9404
830bfa74
MM
9405 --If A is a cv-qualified type, the top level
9406 cv-qualifiers of A's type are ignored for type
9407 deduction. */
9408 if (TREE_CODE (*arg) == ARRAY_TYPE)
9409 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 9410 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
9411 *arg = build_pointer_type (*arg);
9412 else
9413 *arg = TYPE_MAIN_VARIANT (*arg);
9414 }
c8094d83 9415
830bfa74 9416 /* [temp.deduct.call]
c8094d83 9417
830bfa74
MM
9418 If P is a cv-qualified type, the top level cv-qualifiers
9419 of P's type are ignored for type deduction. If P is a
9420 reference type, the type referred to by P is used for
9421 type deduction. */
9422 *parm = TYPE_MAIN_VARIANT (*parm);
9423 if (TREE_CODE (*parm) == REFERENCE_TYPE)
62e4a758
NS
9424 {
9425 *parm = TREE_TYPE (*parm);
9426 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9427 }
1c82cc90
NS
9428
9429 /* DR 322. For conversion deduction, remove a reference type on parm
9430 too (which has been swapped into ARG). */
9431 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9432 *arg = TREE_TYPE (*arg);
c8094d83 9433
62e4a758 9434 return result;
386b8a85
JM
9435}
9436
e5214479 9437/* Most parms like fn_type_unification.
9f54c803
MM
9438
9439 If SUBR is 1, we're being called recursively (to unify the
9440 arguments of a function or method parameter of a function
38d18b1a 9441 template). */
386b8a85 9442
4966381a 9443static int
c8094d83 9444type_unification_real (tree tparms,
0cbd7506
MS
9445 tree targs,
9446 tree xparms,
9447 tree xargs,
9448 int subr,
30f86ec3
FJ
9449 unification_kind_t strict,
9450 int flags)
8d08fdba
MS
9451{
9452 tree parm, arg;
9453 int i;
9454 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 9455 int sub_strict;
bd0d5d4a
JM
9456 int saw_undeduced = 0;
9457 tree parms, args;
8d08fdba 9458
50bc768d
NS
9459 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9460 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9461 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9462 gcc_assert (ntparms > 0);
8d08fdba 9463
830bfa74
MM
9464 switch (strict)
9465 {
9466 case DEDUCE_CALL:
028d1f20 9467 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
0cbd7506 9468 | UNIFY_ALLOW_DERIVED);
830bfa74 9469 break;
c8094d83 9470
830bfa74
MM
9471 case DEDUCE_CONV:
9472 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9473 break;
9474
9475 case DEDUCE_EXACT:
9476 sub_strict = UNIFY_ALLOW_NONE;
9477 break;
c8094d83 9478
830bfa74 9479 default:
315fb5db 9480 gcc_unreachable ();
830bfa74
MM
9481 }
9482
bd0d5d4a
JM
9483 again:
9484 parms = xparms;
9485 args = xargs;
bd0d5d4a 9486
a34d3336
NS
9487 while (parms && parms != void_list_node
9488 && args && args != void_list_node)
8d08fdba
MS
9489 {
9490 parm = TREE_VALUE (parms);
9491 parms = TREE_CHAIN (parms);
9492 arg = TREE_VALUE (args);
9493 args = TREE_CHAIN (args);
9494
9495 if (arg == error_mark_node)
9496 return 1;
9497 if (arg == unknown_type_node)
34016c81
JM
9498 /* We can't deduce anything from this, but we might get all the
9499 template args from other function args. */
9500 continue;
b7484fbe 9501
03e70705
JM
9502 /* Conversions will be performed on a function argument that
9503 corresponds with a function parameter that contains only
9504 non-deducible template parameters and explicitly specified
9505 template parameters. */
c353b8e3 9506 if (!uses_template_parms (parm))
b7484fbe 9507 {
03e70705
JM
9508 tree type;
9509
2f939d94 9510 if (!TYPE_P (arg))
03e70705
JM
9511 type = TREE_TYPE (arg);
9512 else
c353b8e3 9513 type = arg;
03e70705 9514
fad86f7a 9515 if (same_type_p (parm, type))
343c89cd 9516 continue;
fad86f7a 9517 if (strict != DEDUCE_EXACT
30f86ec3
FJ
9518 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
9519 flags))
fad86f7a
GK
9520 continue;
9521
b7484fbe
MS
9522 return 1;
9523 }
c8094d83 9524
2f939d94 9525 if (!TYPE_P (arg))
8d08fdba 9526 {
50bc768d 9527 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
34016c81 9528 if (type_unknown_p (arg))
28cbf42c 9529 {
34016c81
JM
9530 /* [temp.deduct.type] A template-argument can be deduced from
9531 a pointer to function or pointer to member function
9532 argument if the set of overloaded functions does not
9533 contain function templates and at most one of a set of
9534 overloaded functions provides a unique match. */
9535
9536 if (resolve_overloaded_unification
4393e105 9537 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
9538 != 0)
9539 return 1;
9540 continue;
28cbf42c 9541 }
8d08fdba 9542 arg = TREE_TYPE (arg);
08476342
NS
9543 if (arg == error_mark_node)
9544 return 1;
8d08fdba 9545 }
c8094d83 9546
62e4a758 9547 {
0cbd7506 9548 int arg_strict = sub_strict;
c8094d83 9549
0cbd7506 9550 if (!subr)
62e4a758 9551 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
4393e105 9552
0cbd7506
MS
9553 if (unify (tparms, targs, parm, arg, arg_strict))
9554 return 1;
62e4a758 9555 }
8d08fdba 9556 }
c8094d83 9557
8d08fdba
MS
9558 /* Fail if we've reached the end of the parm list, and more args
9559 are present, and the parm list isn't variadic. */
9560 if (args && args != void_list_node && parms == void_list_node)
9561 return 1;
f4f206f4 9562 /* Fail if parms are left and they don't have default values. */
a34d3336 9563 if (parms && parms != void_list_node
8d08fdba
MS
9564 && TREE_PURPOSE (parms) == NULL_TREE)
9565 return 1;
bd0d5d4a 9566
8d08fdba
MS
9567 if (!subr)
9568 for (i = 0; i < ntparms; i++)
a34d3336 9569 if (!TREE_VEC_ELT (targs, i))
8d08fdba 9570 {
bd0d5d4a
JM
9571 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9572
9573 /* If this is an undeduced nontype parameter that depends on
9574 a type parameter, try another pass; its type may have been
9575 deduced from a later argument than the one from which
9576 this parameter can be deduced. */
9577 if (TREE_CODE (tparm) == PARM_DECL
9578 && uses_template_parms (TREE_TYPE (tparm))
9579 && !saw_undeduced++)
9580 goto again;
9581
8d08fdba
MS
9582 return 2;
9583 }
c8094d83 9584
8d08fdba
MS
9585 return 0;
9586}
9587
34016c81
JM
9588/* Subroutine of type_unification_real. Args are like the variables at the
9589 call site. ARG is an overloaded function (or template-id); we try
9590 deducing template args from each of the overloads, and if only one
9591 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9592
9593static int
c8094d83 9594resolve_overloaded_unification (tree tparms,
0cbd7506
MS
9595 tree targs,
9596 tree parm,
9597 tree arg,
9598 unification_kind_t strict,
3a978d72 9599 int sub_strict)
34016c81
JM
9600{
9601 tree tempargs = copy_node (targs);
9602 int good = 0;
f23fb7f5 9603 bool addr_p;
34016c81
JM
9604
9605 if (TREE_CODE (arg) == ADDR_EXPR)
f23fb7f5
MM
9606 {
9607 arg = TREE_OPERAND (arg, 0);
9608 addr_p = true;
9609 }
9610 else
9611 addr_p = false;
9f3d9e46 9612
d8f8dca1
MM
9613 if (TREE_CODE (arg) == COMPONENT_REF)
9614 /* Handle `&x' where `x' is some static or non-static member
9615 function name. */
9616 arg = TREE_OPERAND (arg, 1);
9617
05e0b2f4
JM
9618 if (TREE_CODE (arg) == OFFSET_REF)
9619 arg = TREE_OPERAND (arg, 1);
9620
9f3d9e46 9621 /* Strip baselink information. */
50ad9642
MM
9622 if (BASELINK_P (arg))
9623 arg = BASELINK_FUNCTIONS (arg);
9f3d9e46 9624
34016c81
JM
9625 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9626 {
9627 /* If we got some explicit template args, we need to plug them into
9628 the affected templates before we try to unify, in case the
9629 explicit args will completely resolve the templates in question. */
9630
9631 tree expl_subargs = TREE_OPERAND (arg, 1);
9632 arg = TREE_OPERAND (arg, 0);
9633
9634 for (; arg; arg = OVL_NEXT (arg))
9635 {
9636 tree fn = OVL_CURRENT (arg);
9637 tree subargs, elem;
9638
9639 if (TREE_CODE (fn) != TEMPLATE_DECL)
9640 continue;
9641
a34d3336
NS
9642 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9643 expl_subargs, /*check_ret=*/false);
34016c81
JM
9644 if (subargs)
9645 {
c2ea3a40 9646 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
c8094d83 9647 good += try_one_overload (tparms, targs, tempargs, parm,
f23fb7f5 9648 elem, strict, sub_strict, addr_p);
34016c81
JM
9649 }
9650 }
9651 }
315fb5db 9652 else
34016c81 9653 {
315fb5db
NS
9654 gcc_assert (TREE_CODE (arg) == OVERLOAD
9655 || TREE_CODE (arg) == FUNCTION_DECL);
c8094d83 9656
34016c81 9657 for (; arg; arg = OVL_NEXT (arg))
f23fb7f5
MM
9658 good += try_one_overload (tparms, targs, tempargs, parm,
9659 TREE_TYPE (OVL_CURRENT (arg)),
9660 strict, sub_strict, addr_p);
34016c81 9661 }
34016c81
JM
9662
9663 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9664 to function or pointer to member function argument if the set of
9665 overloaded functions does not contain function templates and at most
9666 one of a set of overloaded functions provides a unique match.
9667
9668 So if we found multiple possibilities, we return success but don't
9669 deduce anything. */
9670
9671 if (good == 1)
9672 {
9673 int i = TREE_VEC_LENGTH (targs);
9674 for (; i--; )
9675 if (TREE_VEC_ELT (tempargs, i))
9676 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9677 }
9678 if (good)
9679 return 0;
9680
9681 return 1;
9682}
9683
9684/* Subroutine of resolve_overloaded_unification; does deduction for a single
9685 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9686 different overloads deduce different arguments for a given parm.
f23fb7f5
MM
9687 ADDR_P is true if the expression for which deduction is being
9688 performed was of the form "& fn" rather than simply "fn".
9689
34016c81
JM
9690 Returns 1 on success. */
9691
9692static int
3a978d72 9693try_one_overload (tree tparms,
0cbd7506
MS
9694 tree orig_targs,
9695 tree targs,
9696 tree parm,
9697 tree arg,
9698 unification_kind_t strict,
f23fb7f5
MM
9699 int sub_strict,
9700 bool addr_p)
34016c81
JM
9701{
9702 int nargs;
9703 tree tempargs;
9704 int i;
9705
9706 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9707 to function or pointer to member function argument if the set of
9708 overloaded functions does not contain function templates and at most
9709 one of a set of overloaded functions provides a unique match.
9710
9711 So if this is a template, just return success. */
9712
9713 if (uses_template_parms (arg))
9714 return 1;
9715
f23fb7f5
MM
9716 if (TREE_CODE (arg) == METHOD_TYPE)
9717 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9718 else if (addr_p)
9719 arg = build_pointer_type (arg);
9720
62e4a758 9721 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
34016c81
JM
9722
9723 /* We don't copy orig_targs for this because if we have already deduced
9724 some template args from previous args, unify would complain when we
9725 try to deduce a template parameter for the same argument, even though
9726 there isn't really a conflict. */
9727 nargs = TREE_VEC_LENGTH (targs);
f31c0a32 9728 tempargs = make_tree_vec (nargs);
34016c81 9729
4393e105 9730 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
9731 return 0;
9732
9733 /* First make sure we didn't deduce anything that conflicts with
e97e5263 9734 explicitly specified args. */
34016c81
JM
9735 for (i = nargs; i--; )
9736 {
9737 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 9738 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81 9739
a34d3336
NS
9740 if (!elt)
9741 /*NOP*/;
34016c81 9742 else if (uses_template_parms (elt))
a34d3336
NS
9743 /* Since we're unifying against ourselves, we will fill in
9744 template args used in the function parm list with our own
9745 template parms. Discard them. */
9746 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9747 else if (oldelt && !template_args_equal (oldelt, elt))
34016c81
JM
9748 return 0;
9749 }
9750
9751 for (i = nargs; i--; )
9752 {
9753 tree elt = TREE_VEC_ELT (tempargs, i);
9754
9755 if (elt)
9756 TREE_VEC_ELT (targs, i) = elt;
9757 }
9758
9759 return 1;
9760}
9761
74601d7c
KL
9762/* Verify that nondeduce template argument agrees with the type
9763 obtained from argument deduction. Return nonzero if the
9764 verification fails.
9765
9766 For example:
9767
9768 struct A { typedef int X; };
9769 template <class T, class U> struct C {};
9770 template <class T> struct C<T, typename T::X> {};
9771
9772 Then with the instantiation `C<A, int>', we can deduce that
9773 `T' is `A' but unify () does not check whether `typename T::X'
9774 is `int'. This function ensure that they agree.
9775
9776 TARGS, PARMS are the same as the arguments of unify.
9777 ARGS contains template arguments from all levels. */
9778
9779static int
3a978d72 9780verify_class_unification (tree targs, tree parms, tree args)
74601d7c 9781{
e2005c8d 9782 parms = tsubst (parms, add_outermost_template_args (args, targs),
0cbd7506 9783 tf_none, NULL_TREE);
e2005c8d 9784 if (parms == error_mark_node)
74601d7c
KL
9785 return 1;
9786
e2005c8d 9787 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
74601d7c
KL
9788}
9789
4393e105
MM
9790/* PARM is a template class (perhaps with unbound template
9791 parameters). ARG is a fully instantiated type. If ARG can be
9792 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9793 TARGS are as for unify. */
fcfb9f96
MM
9794
9795static tree
3a978d72 9796try_class_unification (tree tparms, tree targs, tree parm, tree arg)
4393e105 9797{
4393e105
MM
9798 tree copy_of_targs;
9799
9800 if (!CLASSTYPE_TEMPLATE_INFO (arg)
c8094d83 9801 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
68361a03 9802 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
4393e105
MM
9803 return NULL_TREE;
9804
9805 /* We need to make a new template argument vector for the call to
9806 unify. If we used TARGS, we'd clutter it up with the result of
9807 the attempted unification, even if this class didn't work out.
9808 We also don't want to commit ourselves to all the unifications
9809 we've already done, since unification is supposed to be done on
9810 an argument-by-argument basis. In other words, consider the
9811 following pathological case:
9812
9813 template <int I, int J, int K>
9814 struct S {};
c8094d83 9815
4393e105
MM
9816 template <int I, int J>
9817 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
c8094d83 9818
4393e105
MM
9819 template <int I, int J, int K>
9820 void f(S<I, J, K>, S<I, I, I>);
c8094d83 9821
4393e105 9822 void g() {
0cbd7506
MS
9823 S<0, 0, 0> s0;
9824 S<0, 1, 2> s2;
c8094d83 9825
0cbd7506 9826 f(s0, s2);
4393e105
MM
9827 }
9828
9829 Now, by the time we consider the unification involving `s2', we
9830 already know that we must have `f<0, 0, 0>'. But, even though
0e339752 9831 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
4393e105
MM
9832 because there are two ways to unify base classes of S<0, 1, 2>
9833 with S<I, I, I>. If we kept the already deduced knowledge, we
9834 would reject the possibility I=1. */
f31c0a32 9835 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
c8094d83 9836
4393e105 9837 /* If unification failed, we're done. */
74601d7c
KL
9838 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9839 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
4393e105 9840 return NULL_TREE;
74601d7c
KL
9841
9842 return arg;
4393e105
MM
9843}
9844
a3a0fc7f
NS
9845/* Given a template type PARM and a class type ARG, find the unique
9846 base type in ARG that is an instance of PARM. We do not examine
9847 ARG itself; only its base-classes. If there is not exactly one
9848 appropriate base class, return NULL_TREE. PARM may be the type of
9849 a partial specialization, as well as a plain template type. Used
9850 by unify. */
4393e105
MM
9851
9852static tree
a3a0fc7f 9853get_template_base (tree tparms, tree targs, tree parm, tree arg)
fcfb9f96 9854{
a3a0fc7f
NS
9855 tree rval = NULL_TREE;
9856 tree binfo;
9857
9858 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
c8094d83 9859
a3a0fc7f
NS
9860 binfo = TYPE_BINFO (complete_type (arg));
9861 if (!binfo)
9862 /* The type could not be completed. */
9863 return NULL_TREE;
fcfb9f96 9864
a3a0fc7f
NS
9865 /* Walk in inheritance graph order. The search order is not
9866 important, and this avoids multiple walks of virtual bases. */
9867 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
fcfb9f96 9868 {
a3a0fc7f 9869 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
fcfb9f96 9870
8d83768f
NS
9871 if (r)
9872 {
9873 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 9874
8d83768f 9875 [temp.deduct.call]
fcfb9f96 9876
8d83768f
NS
9877 If they yield more than one possible deduced A, the type
9878 deduction fails.
4393e105 9879
8d83768f 9880 applies. */
a3a0fc7f
NS
9881 if (rval && !same_type_p (r, rval))
9882 return NULL_TREE;
c8094d83 9883
a3a0fc7f 9884 rval = r;
8d83768f 9885 }
fcfb9f96
MM
9886 }
9887
a3a0fc7f 9888 return rval;
fcfb9f96
MM
9889}
9890
db2767b6
MM
9891/* Returns the level of DECL, which declares a template parameter. */
9892
e9659ab0 9893static int
3a978d72 9894template_decl_level (tree decl)
db2767b6
MM
9895{
9896 switch (TREE_CODE (decl))
9897 {
9898 case TYPE_DECL:
9899 case TEMPLATE_DECL:
9900 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9901
9902 case PARM_DECL:
9903 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9904
9905 default:
315fb5db 9906 gcc_unreachable ();
db2767b6 9907 }
315fb5db 9908 return 0;
db2767b6
MM
9909}
9910
830bfa74
MM
9911/* Decide whether ARG can be unified with PARM, considering only the
9912 cv-qualifiers of each type, given STRICT as documented for unify.
324f9dfb 9913 Returns nonzero iff the unification is OK on that basis. */
e92cc029 9914
e9659ab0 9915static int
3a978d72 9916check_cv_quals_for_unify (int strict, tree arg, tree parm)
830bfa74 9917{
4f2b0fb2
NS
9918 int arg_quals = cp_type_quals (arg);
9919 int parm_quals = cp_type_quals (parm);
9920
355f774d
NS
9921 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9922 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 9923 {
2e9ceb77 9924 /* Although a CVR qualifier is ignored when being applied to a
0cbd7506
MS
9925 substituted template parameter ([8.3.2]/1 for example), that
9926 does not apply during deduction [14.8.2.4]/1, (even though
9927 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9928 this). Except when we're allowing additional CV qualifiers
9929 at the outer level [14.8.2.1]/3,1st bullet. */
2e9ceb77
NS
9930 if ((TREE_CODE (arg) == REFERENCE_TYPE
9931 || TREE_CODE (arg) == FUNCTION_TYPE
9932 || TREE_CODE (arg) == METHOD_TYPE)
9933 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9934 return 0;
9935
9936 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9937 && (parm_quals & TYPE_QUAL_RESTRICT))
9938 return 0;
4f2b0fb2 9939 }
2e9ceb77 9940
62e4a758 9941 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 9942 && (arg_quals & parm_quals) != parm_quals)
ef637255
MM
9943 return 0;
9944
62e4a758 9945 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
4f2b0fb2 9946 && (parm_quals & arg_quals) != arg_quals)
ef637255
MM
9947 return 0;
9948
ef637255 9949 return 1;
830bfa74
MM
9950}
9951
9952/* Takes parameters as for type_unification. Returns 0 if the
dc957d14 9953 type deduction succeeds, 1 otherwise. The parameter STRICT is a
830bfa74
MM
9954 bitwise or of the following flags:
9955
9956 UNIFY_ALLOW_NONE:
9957 Require an exact match between PARM and ARG.
9958 UNIFY_ALLOW_MORE_CV_QUAL:
028d1f20
NS
9959 Allow the deduced ARG to be more cv-qualified (by qualification
9960 conversion) than ARG.
830bfa74
MM
9961 UNIFY_ALLOW_LESS_CV_QUAL:
9962 Allow the deduced ARG to be less cv-qualified than ARG.
9963 UNIFY_ALLOW_DERIVED:
9964 Allow the deduced ARG to be a template base class of ARG,
9965 or a pointer to a template base class of the type pointed to by
161c12b0
JM
9966 ARG.
9967 UNIFY_ALLOW_INTEGER:
9968 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
c8094d83 9969 case for more information.
028d1f20
NS
9970 UNIFY_ALLOW_OUTER_LEVEL:
9971 This is the outermost level of a deduction. Used to determine validity
9972 of qualification conversions. A valid qualification conversion must
9973 have const qualified pointers leading up to the inner type which
9974 requires additional CV quals, except at the outer level, where const
9975 is not required [conv.qual]. It would be normal to set this flag in
62e4a758
NS
9976 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9977 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9978 This is the outermost level of a deduction, and PARM can be more CV
9979 qualified at this point.
9980 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9981 This is the outermost level of a deduction, and PARM can be less CV
8baddbf1 9982 qualified at this point. */
830bfa74 9983
e9659ab0 9984static int
3a978d72 9985unify (tree tparms, tree targs, tree parm, tree arg, int strict)
8d08fdba
MS
9986{
9987 int idx;
050367a3 9988 tree targ;
db2767b6 9989 tree tparm;
028d1f20 9990 int strict_in = strict;
8d08fdba
MS
9991
9992 /* I don't think this will do the right thing with respect to types.
9993 But the only case I've seen it in so far has been array bounds, where
9994 signedness is the only information lost, and I think that will be
9995 okay. */
9996 while (TREE_CODE (parm) == NOP_EXPR)
9997 parm = TREE_OPERAND (parm, 0);
9998
9999 if (arg == error_mark_node)
10000 return 1;
10001 if (arg == unknown_type_node)
34016c81
JM
10002 /* We can't deduce anything from this, but we might get all the
10003 template args from other function args. */
10004 return 0;
10005
db2767b6 10006 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 10007 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
10008 template parameters. We might need them if we're trying to
10009 figure out which of two things is more specialized. */
10010 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
10011 return 0;
10012
830bfa74
MM
10013 /* Immediately reject some pairs that won't unify because of
10014 cv-qualification mismatches. */
10015 if (TREE_CODE (arg) == TREE_CODE (parm)
2f939d94 10016 && TYPE_P (arg)
d0ab7624 10017 /* It is the elements of the array which hold the cv quals of an array
0cbd7506
MS
10018 type, and the elements might be template type parms. We'll check
10019 when we recurse. */
d0ab7624 10020 && TREE_CODE (arg) != ARRAY_TYPE
830bfa74
MM
10021 /* We check the cv-qualifiers when unifying with template type
10022 parameters below. We want to allow ARG `const T' to unify with
10023 PARM `T' for example, when computing which of two templates
10024 is more specialized, for example. */
10025 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
028d1f20 10026 && !check_cv_quals_for_unify (strict_in, arg, parm))
49432171
JM
10027 return 1;
10028
028d1f20 10029 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
3ea099f1 10030 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
028d1f20
NS
10031 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
10032 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
10033 strict &= ~UNIFY_ALLOW_DERIVED;
62e4a758
NS
10034 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
10035 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
c8094d83 10036
8d08fdba
MS
10037 switch (TREE_CODE (parm))
10038 {
2ca340ae 10039 case TYPENAME_TYPE:
fccef71e 10040 case SCOPE_REF:
b8c6534b 10041 case UNBOUND_CLASS_TEMPLATE:
2ca340ae
JM
10042 /* In a type which contains a nested-name-specifier, template
10043 argument values cannot be deduced for template parameters used
10044 within the nested-name-specifier. */
10045 return 0;
10046
8d08fdba 10047 case TEMPLATE_TYPE_PARM:
73b0fce8 10048 case TEMPLATE_TEMPLATE_PARM:
a1281f45 10049 case BOUND_TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
10050 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10051
10052 if (TEMPLATE_TYPE_LEVEL (parm)
10053 != template_decl_level (tparm))
10054 /* The PARM is not one we're trying to unify. Just check
10055 to see if it matches ARG. */
10056 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 10057 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 10058 idx = TEMPLATE_TYPE_IDX (parm);
050367a3 10059 targ = TREE_VEC_ELT (targs, idx);
db2767b6 10060 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 10061
73b0fce8 10062 /* Check for mixed types and values. */
db2767b6
MM
10063 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
10064 && TREE_CODE (tparm) != TYPE_DECL)
c8094d83 10065 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
db2767b6 10066 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
10067 return 1;
10068
a1281f45 10069 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
73b0fce8 10070 {
b429fdf0
KL
10071 /* ARG must be constructed from a template class or a template
10072 template parameter. */
10073 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
10074 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
a1281f45 10075 return 1;
73b0fce8 10076
a1281f45
KL
10077 {
10078 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
10079 tree parmvec = TYPE_TI_ARGS (parm);
6df91b00 10080 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
a1281f45 10081 tree argtmplvec
b429fdf0 10082 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
a1281f45 10083 int i;
73b0fce8 10084
c8094d83
MS
10085 /* The parameter and argument roles have to be switched here
10086 in order to handle default arguments properly. For example,
10087 template<template <class> class TT> void f(TT<int>)
10088 should be able to accept vector<int> which comes from
10089 template <class T, class Allocator = allocator>
a1281f45
KL
10090 class vector. */
10091
ee3071ef 10092 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
0cbd7506 10093 == error_mark_node)
a1281f45 10094 return 1;
c8094d83
MS
10095
10096 /* Deduce arguments T, i from TT<T> or TT<i>.
a1281f45
KL
10097 We check each element of PARMVEC and ARGVEC individually
10098 rather than the whole TREE_VEC since they can have
10099 different number of elements. */
6b9b6b15 10100
a1281f45
KL
10101 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
10102 {
0cbd7506 10103 if (unify (tparms, targs,
c8094d83
MS
10104 TREE_VEC_ELT (parmvec, i),
10105 TREE_VEC_ELT (argvec, i),
a1281f45
KL
10106 UNIFY_ALLOW_NONE))
10107 return 1;
73b0fce8 10108 }
a1281f45 10109 }
b429fdf0 10110 arg = TYPE_TI_TEMPLATE (arg);
a1281f45
KL
10111
10112 /* Fall through to deduce template name. */
10113 }
10114
10115 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
10116 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
10117 {
10118 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
10119
10120 /* Simple cases: Value already set, does match or doesn't. */
10121 if (targ != NULL_TREE && template_args_equal (targ, arg))
10122 return 0;
10123 else if (targ)
10124 return 1;
db2767b6
MM
10125 }
10126 else
10127 {
830bfa74
MM
10128 /* If PARM is `const T' and ARG is only `int', we don't have
10129 a match unless we are allowing additional qualification.
10130 If ARG is `const int' and PARM is just `T' that's OK;
10131 that binds `const int' to `T'. */
c8094d83 10132 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
830bfa74 10133 arg, parm))
db2767b6
MM
10134 return 1;
10135
830bfa74
MM
10136 /* Consider the case where ARG is `const volatile int' and
10137 PARM is `const T'. Then, T should be `volatile int'. */
c2ea3a40
NS
10138 arg = cp_build_qualified_type_real
10139 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
adecb3f4
MM
10140 if (arg == error_mark_node)
10141 return 1;
73b0fce8 10142
a1281f45
KL
10143 /* Simple cases: Value already set, does match or doesn't. */
10144 if (targ != NULL_TREE && same_type_p (targ, arg))
10145 return 0;
10146 else if (targ)
10147 return 1;
61cd552e 10148
94fc547c
MM
10149 /* Make sure that ARG is not a variable-sized array. (Note
10150 that were talking about variable-sized arrays (like
10151 `int[n]'), rather than arrays of unknown size (like
10152 `int[]').) We'll get very confused by such a type since
10153 the bound of the array will not be computable in an
10154 instantiation. Besides, such types are not allowed in
10155 ISO C++, so we can do as we please here. */
5377d5ba 10156 if (variably_modified_type_p (arg, NULL_TREE))
94fc547c
MM
10157 return 1;
10158 }
61cd552e 10159
050367a3 10160 TREE_VEC_ELT (targs, idx) = arg;
73b0fce8
KL
10161 return 0;
10162
f84b4be9 10163 case TEMPLATE_PARM_INDEX:
db2767b6
MM
10164 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10165
c8094d83 10166 if (TEMPLATE_PARM_LEVEL (parm)
db2767b6
MM
10167 != template_decl_level (tparm))
10168 /* The PARM is not one we're trying to unify. Just check
10169 to see if it matches ARG. */
c8a209ca
NS
10170 return !(TREE_CODE (arg) == TREE_CODE (parm)
10171 && cp_tree_equal (parm, arg));
db2767b6 10172
f84b4be9 10173 idx = TEMPLATE_PARM_IDX (parm);
050367a3 10174 targ = TREE_VEC_ELT (targs, idx);
db2767b6 10175
050367a3 10176 if (targ)
c8a209ca 10177 return !cp_tree_equal (targ, arg);
8d08fdba 10178
161c12b0
JM
10179 /* [temp.deduct.type] If, in the declaration of a function template
10180 with a non-type template-parameter, the non-type
10181 template-parameter is used in an expression in the function
10182 parameter-list and, if the corresponding template-argument is
10183 deduced, the template-argument type shall match the type of the
10184 template-parameter exactly, except that a template-argument
c8094d83 10185 deduced from an array bound may be of any integral type.
d7c4edd0 10186 The non-type parameter might use already deduced type parameters. */
bd0d5d4a 10187 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
e2005c8d
KL
10188 if (!TREE_TYPE (arg))
10189 /* Template-parameter dependent expression. Just accept it for now.
10190 It will later be processed in convert_template_argument. */
10191 ;
10192 else if (same_type_p (TREE_TYPE (arg), tparm))
10193 /* OK */;
161c12b0 10194 else if ((strict & UNIFY_ALLOW_INTEGER)
bd0d5d4a
JM
10195 && (TREE_CODE (tparm) == INTEGER_TYPE
10196 || TREE_CODE (tparm) == BOOLEAN_TYPE))
8baddbf1
MM
10197 /* Convert the ARG to the type of PARM; the deduced non-type
10198 template argument must exactly match the types of the
10199 corresponding parameter. */
10200 arg = fold (build_nop (TREE_TYPE (parm), arg));
bd0d5d4a
JM
10201 else if (uses_template_parms (tparm))
10202 /* We haven't deduced the type of this parameter yet. Try again
10203 later. */
10204 return 0;
161c12b0
JM
10205 else
10206 return 1;
10207
2a1e9fdd 10208 TREE_VEC_ELT (targs, idx) = arg;
8d08fdba
MS
10209 return 0;
10210
28e8f3a0
GB
10211 case PTRMEM_CST:
10212 {
0cbd7506
MS
10213 /* A pointer-to-member constant can be unified only with
10214 another constant. */
28e8f3a0 10215 if (TREE_CODE (arg) != PTRMEM_CST)
0cbd7506 10216 return 1;
28e8f3a0
GB
10217
10218 /* Just unify the class member. It would be useless (and possibly
0cbd7506
MS
10219 wrong, depending on the strict flags) to unify also
10220 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10221 arg refer to the same variable, even if through different
10222 classes. For instance:
28e8f3a0 10223
0cbd7506
MS
10224 struct A { int x; };
10225 struct B : A { };
28e8f3a0 10226
0cbd7506 10227 Unification of &A::x and &B::x must succeed. */
28e8f3a0 10228 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
0cbd7506 10229 PTRMEM_CST_MEMBER (arg), strict);
28e8f3a0
GB
10230 }
10231
8d08fdba 10232 case POINTER_TYPE:
830bfa74 10233 {
830bfa74
MM
10234 if (TREE_CODE (arg) != POINTER_TYPE)
10235 return 1;
c8094d83 10236
830bfa74
MM
10237 /* [temp.deduct.call]
10238
10239 A can be another pointer or pointer to member type that can
10240 be converted to the deduced A via a qualification
10241 conversion (_conv.qual_).
10242
10243 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10244 This will allow for additional cv-qualification of the
028d1f20 10245 pointed-to types if appropriate. */
c8094d83 10246
028d1f20 10247 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
830bfa74
MM
10248 /* The derived-to-base conversion only persists through one
10249 level of pointers. */
028d1f20 10250 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
830bfa74 10251
c8094d83 10252 return unify (tparms, targs, TREE_TYPE (parm),
028d1f20 10253 TREE_TYPE (arg), strict);
830bfa74 10254 }
8d08fdba
MS
10255
10256 case REFERENCE_TYPE:
830bfa74
MM
10257 if (TREE_CODE (arg) != REFERENCE_TYPE)
10258 return 1;
10259 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
028d1f20 10260 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
10261
10262 case ARRAY_TYPE:
10263 if (TREE_CODE (arg) != ARRAY_TYPE)
10264 return 1;
3042d5be
MM
10265 if ((TYPE_DOMAIN (parm) == NULL_TREE)
10266 != (TYPE_DOMAIN (arg) == NULL_TREE))
10267 return 1;
8baddbf1
MM
10268 if (TYPE_DOMAIN (parm) != NULL_TREE)
10269 {
10270 tree parm_max;
10271 tree arg_max;
10272
10273 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10274 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10275
10276 /* Our representation of array types uses "N - 1" as the
10277 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10278 not an integer constant. */
10279 if (TREE_CODE (parm_max) == MINUS_EXPR)
10280 {
c8094d83 10281 arg_max = fold_build2 (PLUS_EXPR,
7866705a
SB
10282 integer_type_node,
10283 arg_max,
10284 TREE_OPERAND (parm_max, 1));
8baddbf1
MM
10285 parm_max = TREE_OPERAND (parm_max, 0);
10286 }
10287
10288 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10289 return 1;
10290 }
830bfa74 10291 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
712467a4 10292 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
10293
10294 case REAL_TYPE:
37c46b43 10295 case COMPLEX_TYPE:
c00996a3 10296 case VECTOR_TYPE:
8d08fdba 10297 case INTEGER_TYPE:
42976354 10298 case BOOLEAN_TYPE:
3590f0a6 10299 case ENUMERAL_TYPE:
5ad5a526 10300 case VOID_TYPE:
f376e137
MS
10301 if (TREE_CODE (arg) != TREE_CODE (parm))
10302 return 1;
c8094d83 10303
9edc3913 10304 /* We have already checked cv-qualification at the top of the
514a1f18 10305 function. */
8baddbf1 10306 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
ca79f85d
JM
10307 return 1;
10308
8d08fdba
MS
10309 /* As far as unification is concerned, this wins. Later checks
10310 will invalidate it if necessary. */
10311 return 0;
10312
10313 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 10314 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 10315 case INTEGER_CST:
bd6dd845
MS
10316 while (TREE_CODE (arg) == NOP_EXPR)
10317 arg = TREE_OPERAND (arg, 0);
10318
8d08fdba
MS
10319 if (TREE_CODE (arg) != INTEGER_CST)
10320 return 1;
10321 return !tree_int_cst_equal (parm, arg);
10322
8d08fdba
MS
10323 case TREE_VEC:
10324 {
10325 int i;
10326 if (TREE_CODE (arg) != TREE_VEC)
10327 return 1;
10328 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10329 return 1;
0dc09a61 10330 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
830bfa74 10331 if (unify (tparms, targs,
8d08fdba 10332 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 10333 UNIFY_ALLOW_NONE))
8d08fdba
MS
10334 return 1;
10335 return 0;
10336 }
10337
8d08fdba 10338 case RECORD_TYPE:
f181d4ae 10339 case UNION_TYPE:
f181d4ae 10340 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 10341 return 1;
c8094d83 10342
a7a64a77
MM
10343 if (TYPE_PTRMEMFUNC_P (parm))
10344 {
10345 if (!TYPE_PTRMEMFUNC_P (arg))
10346 return 1;
10347
c8094d83 10348 return unify (tparms, targs,
a7a64a77
MM
10349 TYPE_PTRMEMFUNC_FN_TYPE (parm),
10350 TYPE_PTRMEMFUNC_FN_TYPE (arg),
10351 strict);
10352 }
10353
5db698f6 10354 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 10355 {
6467930b 10356 tree t = NULL_TREE;
4393e105 10357
028d1f20 10358 if (strict_in & UNIFY_ALLOW_DERIVED)
4393e105
MM
10359 {
10360 /* First, we try to unify the PARM and ARG directly. */
10361 t = try_class_unification (tparms, targs,
10362 parm, arg);
10363
10364 if (!t)
10365 {
10366 /* Fallback to the special case allowed in
10367 [temp.deduct.call]:
c8094d83 10368
4393e105
MM
10369 If P is a class, and P has the form
10370 template-id, then A can be a derived class of
10371 the deduced A. Likewise, if P is a pointer to
10372 a class of the form template-id, A can be a
10373 pointer to a derived class pointed to by the
10374 deduced A. */
8d83768f 10375 t = get_template_base (tparms, targs, parm, arg);
4393e105 10376
8d83768f 10377 if (!t)
4393e105
MM
10378 return 1;
10379 }
10380 }
c8094d83
MS
10381 else if (CLASSTYPE_TEMPLATE_INFO (arg)
10382 && (CLASSTYPE_TI_TEMPLATE (parm)
9fbf56f7 10383 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
10384 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10385 Then, we should unify `int' and `U'. */
6467930b 10386 t = arg;
4393e105 10387 else
dc957d14 10388 /* There's no chance of unification succeeding. */
5566b478 10389 return 1;
6467930b 10390
830bfa74 10391 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 10392 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 10393 }
9edc3913 10394 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
5566b478 10395 return 1;
a4443a08 10396 return 0;
8d08fdba
MS
10397
10398 case METHOD_TYPE:
8d08fdba 10399 case FUNCTION_TYPE:
830bfa74 10400 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 10401 return 1;
830bfa74 10402
38d18b1a
NS
10403 /* CV qualifications for methods can never be deduced, they must
10404 match exactly. We need to check them explicitly here,
10405 because type_unification_real treats them as any other
10406 cvqualified parameter. */
10407 if (TREE_CODE (parm) == METHOD_TYPE
10408 && (!check_cv_quals_for_unify
10409 (UNIFY_ALLOW_NONE,
10410 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
10411 TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
10412 return 1;
10413
830bfa74 10414 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 10415 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 10416 return 1;
386b8a85 10417 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
30f86ec3
FJ
10418 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10419 LOOKUP_NORMAL);
a4443a08
MS
10420
10421 case OFFSET_TYPE:
9804209d 10422 /* Unify a pointer to member with a pointer to member function, which
0cbd7506 10423 deduces the type of the member as a function type. */
9804209d 10424 if (TYPE_PTRMEMFUNC_P (arg))
0cbd7506
MS
10425 {
10426 tree method_type;
10427 tree fntype;
10428 cp_cv_quals cv_quals;
10429
10430 /* Check top-level cv qualifiers */
10431 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10432 return 1;
10433
10434 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10435 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10436 return 1;
10437
10438 /* Determine the type of the function we are unifying against. */
10439 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10440 fntype =
10441 build_function_type (TREE_TYPE (method_type),
10442 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10443
10444 /* Extract the cv-qualifiers of the member function from the
10445 implicit object parameter and place them on the function
10446 type to be restored later. */
10447 cv_quals =
10448 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10449 fntype = build_qualified_type (fntype, cv_quals);
10450 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10451 }
9804209d 10452
a4443a08
MS
10453 if (TREE_CODE (arg) != OFFSET_TYPE)
10454 return 1;
830bfa74 10455 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 10456 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 10457 return 1;
830bfa74 10458 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 10459 strict);
a4443a08 10460
f62dbf03 10461 case CONST_DECL:
a723baf1
MM
10462 if (DECL_TEMPLATE_PARM_P (parm))
10463 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
c8094d83 10464 if (arg != integral_constant_value (parm))
f62dbf03
JM
10465 return 1;
10466 return 0;
10467
28e8f3a0 10468 case FIELD_DECL:
027905b4
KL
10469 case TEMPLATE_DECL:
10470 /* Matched cases are handled by the ARG == PARM test above. */
10471 return 1;
10472
8d08fdba 10473 default:
6615c446 10474 gcc_assert (EXPR_P (parm));
c8094d83 10475
98ddffc1 10476 /* We must be looking at an expression. This can happen with
c8094d83
MS
10477 something like:
10478
98ddffc1
NS
10479 template <int I>
10480 void foo(S<I>, S<I + 2>);
050367a3 10481
98ddffc1 10482 This is a "nondeduced context":
050367a3 10483
98ddffc1 10484 [deduct.type]
c8094d83 10485
98ddffc1 10486 The nondeduced contexts are:
050367a3 10487
98ddffc1
NS
10488 --A type that is a template-id in which one or more of
10489 the template-arguments is an expression that references
c8094d83 10490 a template-parameter.
050367a3 10491
98ddffc1
NS
10492 In these cases, we assume deduction succeeded, but don't
10493 actually infer any unifications. */
74601d7c 10494
98ddffc1
NS
10495 if (!uses_template_parms (parm)
10496 && !template_args_equal (parm, arg))
10497 return 1;
10498 else
10499 return 0;
8d08fdba
MS
10500 }
10501}
8d08fdba 10502\f
4684cd27
MM
10503/* Note that DECL can be defined in this translation unit, if
10504 required. */
10505
10506static void
10507mark_definable (tree decl)
10508{
10509 tree clone;
10510 DECL_NOT_REALLY_EXTERN (decl) = 1;
10511 FOR_EACH_CLONE (clone, decl)
10512 DECL_NOT_REALLY_EXTERN (clone) = 1;
10513}
10514
03d0f4af 10515/* Called if RESULT is explicitly instantiated, or is a member of an
4684cd27 10516 explicitly instantiated class. */
03d0f4af 10517
faae18ab 10518void
3a978d72 10519mark_decl_instantiated (tree result, int extern_p)
faae18ab 10520{
415c974c 10521 SET_DECL_EXPLICIT_INSTANTIATION (result);
3ae18eaf 10522
1f6f0cb6
MM
10523 /* If this entity has already been written out, it's too late to
10524 make any modifications. */
10525 if (TREE_ASM_WRITTEN (result))
10526 return;
10527
10528 if (TREE_CODE (result) != FUNCTION_DECL)
10529 /* The TREE_PUBLIC flag for function declarations will have been
10530 set correctly by tsubst. */
10531 TREE_PUBLIC (result) = 1;
10532
346eeb15
JM
10533 /* This might have been set by an earlier implicit instantiation. */
10534 DECL_COMDAT (result) = 0;
10535
4684cd27
MM
10536 if (extern_p)
10537 DECL_NOT_REALLY_EXTERN (result) = 0;
10538 else
faae18ab 10539 {
4684cd27 10540 mark_definable (result);
1a408d07
JM
10541 /* Always make artificials weak. */
10542 if (DECL_ARTIFICIAL (result) && flag_weak)
10543 comdat_linkage (result);
a7d87521
JM
10544 /* For WIN32 we also want to put explicit instantiations in
10545 linkonce sections. */
1a408d07 10546 else if (TREE_PUBLIC (result))
b385c841 10547 maybe_make_one_only (result);
faae18ab 10548 }
c8094d83 10549
4684cd27
MM
10550 /* If EXTERN_P, then this function will not be emitted -- unless
10551 followed by an explicit instantiation, at which point its linkage
10552 will be adjusted. If !EXTERN_P, then this function will be
10553 emitted here. In neither circumstance do we want
10554 import_export_decl to adjust the linkage. */
c8094d83 10555 DECL_INTERFACE_KNOWN (result) = 1;
faae18ab
MS
10556}
10557
e5214479 10558/* Given two function templates PAT1 and PAT2, return:
6467930b
MS
10559
10560 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10561 -1 if PAT2 is more specialized than PAT1.
e5214479
JM
10562 0 if neither is more specialized.
10563
dda04398
NS
10564 LEN indicates the number of parameters we should consider
10565 (defaulted parameters should not be considered).
10566
10567 The 1998 std underspecified function template partial ordering, and
10568 DR214 addresses the issue. We take pairs of arguments, one from
c51940a2 10569 each of the templates, and deduce them against each other. One of
dda04398
NS
10570 the templates will be more specialized if all the *other*
10571 template's arguments deduce against its arguments and at least one
10572 of its arguments *does* *not* deduce against the other template's
10573 corresponding argument. Deduction is done as for class templates.
10574 The arguments used in deduction have reference and top level cv
10575 qualifiers removed. Iff both arguments were originally reference
10576 types *and* deduction succeeds in both directions, the template
10577 with the more cv-qualified argument wins for that pairing (if
10578 neither is more cv-qualified, they both are equal). Unlike regular
10579 deduction, after all the arguments have been deduced in this way,
10580 we do *not* verify the deduced template argument values can be
10581 substituted into non-deduced contexts, nor do we have to verify
10582 that all template arguments have been deduced. */
c8094d83 10583
6467930b 10584int
dda04398
NS
10585more_specialized_fn (tree pat1, tree pat2, int len)
10586{
10587 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10588 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10589 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10590 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10591 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10592 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10593 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10594 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10595 int better1 = 0;
10596 int better2 = 0;
48884537
NS
10597
10598 /* Remove the this parameter from non-static member functions. If
10599 one is a non-static member function and the other is not a static
10600 member function, remove the first parameter from that function
10601 also. This situation occurs for operator functions where we
10602 locate both a member function (with this pointer) and non-member
10603 operator (with explicit first operand). */
dda04398 10604 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
48884537
NS
10605 {
10606 len--; /* LEN is the number of significant arguments for DECL1 */
10607 args1 = TREE_CHAIN (args1);
10608 if (!DECL_STATIC_FUNCTION_P (decl2))
10609 args2 = TREE_CHAIN (args2);
10610 }
10611 else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10612 {
10613 args2 = TREE_CHAIN (args2);
10614 if (!DECL_STATIC_FUNCTION_P (decl1))
10615 {
10616 len--;
10617 args1 = TREE_CHAIN (args1);
10618 }
10619 }
10620
ee307009
NS
10621 /* If only one is a conversion operator, they are unordered. */
10622 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10623 return 0;
c8094d83 10624
dda04398
NS
10625 /* Consider the return type for a conversion function */
10626 if (DECL_CONV_FN_P (decl1))
10627 {
dda04398
NS
10628 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10629 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10630 len++;
10631 }
c8094d83 10632
dda04398 10633 processing_template_decl++;
c8094d83 10634
dda04398
NS
10635 while (len--)
10636 {
10637 tree arg1 = TREE_VALUE (args1);
10638 tree arg2 = TREE_VALUE (args2);
10639 int deduce1, deduce2;
10640 int quals1 = -1;
10641 int quals2 = -1;
6467930b 10642
dda04398
NS
10643 if (TREE_CODE (arg1) == REFERENCE_TYPE)
10644 {
10645 arg1 = TREE_TYPE (arg1);
10646 quals1 = cp_type_quals (arg1);
10647 }
c8094d83 10648
dda04398
NS
10649 if (TREE_CODE (arg2) == REFERENCE_TYPE)
10650 {
10651 arg2 = TREE_TYPE (arg2);
10652 quals2 = cp_type_quals (arg2);
10653 }
6467930b 10654
dda04398
NS
10655 if ((quals1 < 0) != (quals2 < 0))
10656 {
10657 /* Only of the args is a reference, see if we should apply
10658 array/function pointer decay to it. This is not part of
10659 DR214, but is, IMHO, consistent with the deduction rules
10660 for the function call itself, and with our earlier
10661 implementation of the underspecified partial ordering
10662 rules. (nathan). */
10663 if (quals1 >= 0)
10664 {
10665 switch (TREE_CODE (arg1))
10666 {
10667 case ARRAY_TYPE:
10668 arg1 = TREE_TYPE (arg1);
10669 /* FALLTHROUGH. */
10670 case FUNCTION_TYPE:
10671 arg1 = build_pointer_type (arg1);
10672 break;
c8094d83 10673
dda04398
NS
10674 default:
10675 break;
10676 }
10677 }
10678 else
10679 {
10680 switch (TREE_CODE (arg2))
10681 {
10682 case ARRAY_TYPE:
10683 arg2 = TREE_TYPE (arg2);
10684 /* FALLTHROUGH. */
10685 case FUNCTION_TYPE:
10686 arg2 = build_pointer_type (arg2);
10687 break;
c8094d83 10688
dda04398
NS
10689 default:
10690 break;
10691 }
10692 }
10693 }
c8094d83 10694
dda04398
NS
10695 arg1 = TYPE_MAIN_VARIANT (arg1);
10696 arg2 = TYPE_MAIN_VARIANT (arg2);
c8094d83 10697
dda04398
NS
10698 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10699 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10700
10701 if (!deduce1)
10702 better2 = -1;
10703 if (!deduce2)
10704 better1 = -1;
10705 if (better1 < 0 && better2 < 0)
10706 /* We've failed to deduce something in either direction.
10707 These must be unordered. */
10708 break;
c8094d83 10709
dda04398
NS
10710 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10711 {
10712 /* Deduces in both directions, see if quals can
10713 disambiguate. Pretend the worse one failed to deduce. */
10714 if ((quals1 & quals2) == quals2)
10715 deduce1 = 0;
10716 if ((quals1 & quals2) == quals1)
10717 deduce2 = 0;
10718 }
10719 if (deduce1 && !deduce2 && !better2)
10720 better2 = 1;
10721 if (deduce2 && !deduce1 && !better1)
10722 better1 = 1;
c8094d83 10723
dda04398
NS
10724 args1 = TREE_CHAIN (args1);
10725 args2 = TREE_CHAIN (args2);
10726 }
10727
10728 processing_template_decl--;
10729
10730 return (better1 > 0) - (better2 > 0);
73aad9b9 10731}
6467930b 10732
73aad9b9 10733/* Given two class template specialization list nodes PAT1 and PAT2, return:
6467930b 10734
73aad9b9
JM
10735 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10736 -1 if PAT2 is more specialized than PAT1.
55ece1b3
KL
10737 0 if neither is more specialized.
10738
10739 FULL_ARGS is the full set of template arguments that triggers this
10740 partial ordering. */
c8094d83 10741
73aad9b9 10742int
55ece1b3 10743more_specialized_class (tree pat1, tree pat2, tree full_args)
73aad9b9
JM
10744{
10745 tree targs;
10746 int winner = 0;
10747
c8094d83 10748 /* Just like what happens for functions, if we are ordering between
baa49730
GB
10749 different class template specializations, we may encounter dependent
10750 types in the arguments, and we need our dependency check functions
10751 to behave correctly. */
10752 ++processing_template_decl;
36a117a5 10753 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
55ece1b3 10754 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
73aad9b9
JM
10755 if (targs)
10756 --winner;
10757
36a117a5 10758 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
55ece1b3 10759 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
73aad9b9 10760 if (targs)
6467930b 10761 ++winner;
baa49730 10762 --processing_template_decl;
6467930b
MS
10763
10764 return winner;
10765}
73aad9b9
JM
10766
10767/* Return the template arguments that will produce the function signature
e1467ff2 10768 DECL from the function template FN, with the explicit template
a34d3336 10769 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
4393e105 10770 also match. Return NULL_TREE if no satisfactory arguments could be
a34d3336 10771 found. */
c8094d83 10772
76b9a14d 10773static tree
a34d3336 10774get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
73aad9b9 10775{
98c1c668 10776 int ntparms = DECL_NTPARMS (fn);
f31c0a32 10777 tree targs = make_tree_vec (ntparms);
4393e105 10778 tree decl_type;
03017874 10779 tree decl_arg_types;
98c1c668 10780
4393e105
MM
10781 /* Substitute the explicit template arguments into the type of DECL.
10782 The call to fn_type_unification will handle substitution into the
10783 FN. */
10784 decl_type = TREE_TYPE (decl);
10785 if (explicit_args && uses_template_parms (decl_type))
10786 {
10787 tree tmpl;
10788 tree converted_args;
10789
10790 if (DECL_TEMPLATE_INFO (decl))
10791 tmpl = DECL_TI_TEMPLATE (decl);
10792 else
0e339752 10793 /* We can get here for some invalid specializations. */
4393e105
MM
10794 return NULL_TREE;
10795
10796 converted_args
10797 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10798 explicit_args, NULL_TREE,
c2ea3a40 10799 tf_none, /*require_all_arguments=*/0));
4393e105
MM
10800 if (converted_args == error_mark_node)
10801 return NULL_TREE;
c8094d83
MS
10802
10803 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
4393e105
MM
10804 if (decl_type == error_mark_node)
10805 return NULL_TREE;
10806 }
10807
10808 decl_arg_types = TYPE_ARG_TYPES (decl_type);
e5214479
JM
10809 /* Never do unification on the 'this' parameter. */
10810 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
03017874 10811 decl_arg_types = TREE_CHAIN (decl_arg_types);
d7684f2d 10812
c8094d83 10813 if (fn_type_unification (fn, explicit_args, targs,
03017874 10814 decl_arg_types,
8d3631f8 10815 (check_rettype || DECL_CONV_FN_P (fn)
0cbd7506 10816 ? TREE_TYPE (decl_type) : NULL_TREE),
30f86ec3 10817 DEDUCE_EXACT, LOOKUP_NORMAL))
76b9a14d
JM
10818 return NULL_TREE;
10819
76b9a14d
JM
10820 return targs;
10821}
10822
36a117a5
MM
10823/* Return the innermost template arguments that, when applied to a
10824 template specialization whose innermost template parameters are
9471d3e2 10825 TPARMS, and whose specialization arguments are PARMS, yield the
c8094d83 10826 ARGS.
36a117a5
MM
10827
10828 For example, suppose we have:
10829
10830 template <class T, class U> struct S {};
10831 template <class T> struct S<T*, int> {};
10832
10833 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10834 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10835 int}. The resulting vector will be {double}, indicating that `T'
10836 is bound to `double'. */
10837
bd6dd845 10838static tree
3a978d72 10839get_class_bindings (tree tparms, tree parms, tree args)
73aad9b9 10840{
3b3ba9f0 10841 int i, ntparms = TREE_VEC_LENGTH (tparms);
f31c0a32 10842 tree vec = make_tree_vec (ntparms);
73aad9b9 10843
74601d7c 10844 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
0cbd7506 10845 UNIFY_ALLOW_NONE))
fcfb9f96 10846 return NULL_TREE;
73aad9b9
JM
10847
10848 for (i = 0; i < ntparms; ++i)
10849 if (! TREE_VEC_ELT (vec, i))
10850 return NULL_TREE;
10851
74601d7c
KL
10852 if (verify_class_unification (vec, parms, args))
10853 return NULL_TREE;
10854
73aad9b9
JM
10855 return vec;
10856}
10857
104bf76a
MM
10858/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10859 Pick the most specialized template, and return the corresponding
10860 instantiation, or if there is no corresponding instantiation, the
e5214479
JM
10861 template itself. If there is no most specialized template,
10862 error_mark_node is returned. If there are no templates at all,
10863 NULL_TREE is returned. */
73aad9b9
JM
10864
10865tree
3a978d72 10866most_specialized_instantiation (tree instantiations)
73aad9b9 10867{
104bf76a 10868 tree fn, champ;
73aad9b9 10869
104bf76a 10870 if (!instantiations)
73aad9b9 10871 return NULL_TREE;
c8094d83 10872
dda04398 10873 ++processing_template_decl;
c8094d83 10874
104bf76a
MM
10875 champ = instantiations;
10876 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
73aad9b9 10877 {
dda04398 10878 int fate = 0;
c8094d83 10879
a34d3336
NS
10880 if (get_bindings (TREE_VALUE (champ),
10881 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10882 NULL_TREE, /*check_ret=*/false))
dda04398
NS
10883 fate--;
10884
a34d3336
NS
10885 if (get_bindings (TREE_VALUE (fn),
10886 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10887 NULL_TREE, /*check_ret=*/false))
dda04398 10888 fate++;
c8094d83 10889
8ca4bf25
MM
10890 if (fate == -1)
10891 champ = fn;
10892 else if (!fate)
73aad9b9 10893 {
8ca4bf25
MM
10894 /* Equally specialized, move to next function. If there
10895 is no next function, nothing's most specialized. */
10896 fn = TREE_CHAIN (fn);
10897 if (!fn)
10898 break;
73aad9b9
JM
10899 }
10900 }
c8094d83 10901
dda04398
NS
10902 if (champ)
10903 /* Now verify that champ is better than everything earlier in the
10904 instantiation list. */
10905 for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
a34d3336
NS
10906 if (get_bindings (TREE_VALUE (champ),
10907 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10908 NULL_TREE, /*check_ret=*/false)
10909 || !get_bindings (TREE_VALUE (fn),
10910 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10911 NULL_TREE, /*check_ret=*/false))
dda04398
NS
10912 {
10913 champ = NULL_TREE;
10914 break;
10915 }
c8094d83 10916
dda04398 10917 processing_template_decl--;
c8094d83 10918
dda04398
NS
10919 if (!champ)
10920 return error_mark_node;
73aad9b9 10921
104bf76a
MM
10922 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10923}
10924
10925/* Return the most specialized of the list of templates in FNS that can
10926 produce an instantiation matching DECL, given the explicit template
10927 arguments EXPLICIT_ARGS. */
10928
e9659ab0 10929static tree
3a978d72 10930most_specialized (tree fns, tree decl, tree explicit_args)
104bf76a
MM
10931{
10932 tree candidates = NULL_TREE;
10933 tree fn, args;
10934
10935 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10936 {
10937 tree candidate = TREE_VALUE (fn);
10938
a34d3336 10939 args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
104bf76a 10940 if (args)
e1b3e07d 10941 candidates = tree_cons (NULL_TREE, candidate, candidates);
104bf76a
MM
10942 }
10943
e5214479 10944 return most_specialized_instantiation (candidates);
73aad9b9
JM
10945}
10946
36a117a5 10947/* If DECL is a specialization of some template, return the most
f9a7ae04
MM
10948 general such template. Otherwise, returns NULL_TREE.
10949
10950 For example, given:
36a117a5
MM
10951
10952 template <class T> struct S { template <class U> void f(U); };
10953
10954 if TMPL is `template <class U> void S<int>::f(U)' this will return
10955 the full template. This function will not trace past partial
10956 specializations, however. For example, given in addition:
10957
10958 template <class T> struct S<T*> { template <class U> void f(U); };
10959
10960 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10961 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 10962
612c671a 10963tree
3a978d72 10964most_general_template (tree decl)
73aad9b9 10965{
f9a7ae04
MM
10966 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10967 an immediate specialization. */
10968 if (TREE_CODE (decl) == FUNCTION_DECL)
10969 {
10970 if (DECL_TEMPLATE_INFO (decl)) {
10971 decl = DECL_TI_TEMPLATE (decl);
10972
10973 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10974 template friend. */
10975 if (TREE_CODE (decl) != TEMPLATE_DECL)
10976 return NULL_TREE;
10977 } else
10978 return NULL_TREE;
10979 }
10980
10981 /* Look for more and more general templates. */
10982 while (DECL_TEMPLATE_INFO (decl))
10983 {
10b1d5e7
MM
10984 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10985 (See cp-tree.h for details.) */
f9a7ae04
MM
10986 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10987 break;
10988
6e049fcd
KL
10989 if (CLASS_TYPE_P (TREE_TYPE (decl))
10990 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10991 break;
10992
f9a7ae04
MM
10993 /* Stop if we run into an explicitly specialized class template. */
10994 if (!DECL_NAMESPACE_SCOPE_P (decl)
10995 && DECL_CONTEXT (decl)
10996 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10997 break;
10998
10999 decl = DECL_TI_TEMPLATE (decl);
11000 }
36a117a5
MM
11001
11002 return decl;
11003}
11004
11005/* Return the most specialized of the class template specializations
11006 of TMPL which can produce an instantiation matching ARGS, or
11007 error_mark_node if the choice is ambiguous. */
11008
e9659ab0 11009static tree
3a978d72 11010most_specialized_class (tree tmpl, tree args)
36a117a5
MM
11011{
11012 tree list = NULL_TREE;
11013 tree t;
11014 tree champ;
73aad9b9
JM
11015 int fate;
11016
36a117a5
MM
11017 tmpl = most_general_template (tmpl);
11018 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 11019 {
c8094d83 11020 tree spec_args
36a117a5
MM
11021 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
11022 if (spec_args)
73aad9b9 11023 {
1f8f4a0b 11024 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
73aad9b9
JM
11025 TREE_TYPE (list) = TREE_TYPE (t);
11026 }
11027 }
11028
11029 if (! list)
11030 return NULL_TREE;
11031
11032 t = list;
11033 champ = t;
11034 t = TREE_CHAIN (t);
11035 for (; t; t = TREE_CHAIN (t))
11036 {
55ece1b3 11037 fate = more_specialized_class (champ, t, args);
73aad9b9
JM
11038 if (fate == 1)
11039 ;
11040 else
11041 {
11042 if (fate == 0)
11043 {
11044 t = TREE_CHAIN (t);
11045 if (! t)
11046 return error_mark_node;
11047 }
11048 champ = t;
11049 }
11050 }
11051
11052 for (t = list; t && t != champ; t = TREE_CHAIN (t))
11053 {
55ece1b3 11054 fate = more_specialized_class (champ, t, args);
73aad9b9
JM
11055 if (fate != 1)
11056 return error_mark_node;
11057 }
11058
11059 return champ;
11060}
11061
eb8845be 11062/* Explicitly instantiate DECL. */
e92cc029 11063
8d08fdba 11064void
eb8845be 11065do_decl_instantiation (tree decl, tree storage)
8d08fdba 11066{
8d08fdba 11067 tree result = NULL_TREE;
faae18ab 11068 int extern_p = 0;
e8abc66f 11069
3fa56191 11070 if (!decl)
dc957d14 11071 /* An error occurred, for which grokdeclarator has already issued
3fa56191
MM
11072 an appropriate message. */
11073 return;
11074 else if (! DECL_LANG_SPECIFIC (decl))
ec255269 11075 {
0f51ccfc 11076 error ("explicit instantiation of non-template %q#D", decl);
ec255269
MS
11077 return;
11078 }
03d0f4af 11079 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 11080 {
03d0f4af
MM
11081 /* There is an asymmetry here in the way VAR_DECLs and
11082 FUNCTION_DECLs are handled by grokdeclarator. In the case of
11083 the latter, the DECL we get back will be marked as a
11084 template instantiation, and the appropriate
11085 DECL_TEMPLATE_INFO will be set up. This does not happen for
11086 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
11087 should handle VAR_DECLs as it currently handles
11088 FUNCTION_DECLs. */
86ac0575 11089 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
e0860732 11090 if (!result || TREE_CODE (result) != VAR_DECL)
03d0f4af 11091 {
0f51ccfc 11092 error ("no matching template for %qD found", decl);
03d0f4af
MM
11093 return;
11094 }
6633d636
MS
11095 }
11096 else if (TREE_CODE (decl) != FUNCTION_DECL)
11097 {
0f51ccfc 11098 error ("explicit instantiation of %q#D", decl);
6633d636
MS
11099 return;
11100 }
03d0f4af
MM
11101 else
11102 result = decl;
672476cb 11103
03d0f4af 11104 /* Check for various error cases. Note that if the explicit
0e339752 11105 instantiation is valid the RESULT will currently be marked as an
03d0f4af
MM
11106 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
11107 until we get here. */
11108
11109 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 11110 {
07782718
KL
11111 /* DR 259 [temp.spec].
11112
11113 Both an explicit instantiation and a declaration of an explicit
11114 specialization shall not appear in a program unless the explicit
11115 instantiation follows a declaration of the explicit specialization.
03d0f4af 11116
07782718
KL
11117 For a given set of template parameters, if an explicit
11118 instantiation of a template appears after a declaration of an
11119 explicit specialization for that template, the explicit
11120 instantiation has no effect. */
672476cb
MM
11121 return;
11122 }
03d0f4af
MM
11123 else if (DECL_EXPLICIT_INSTANTIATION (result))
11124 {
11125 /* [temp.spec]
98c1c668 11126
03d0f4af 11127 No program shall explicitly instantiate any template more
c8094d83 11128 than once.
03d0f4af 11129
4684cd27
MM
11130 We check DECL_NOT_REALLY_EXTERN so as not to complain when
11131 the first instantiation was `extern' and the second is not,
11132 and EXTERN_P for the opposite case. */
11133 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
0f51ccfc 11134 pedwarn ("duplicate explicit instantiation of %q#D", result);
4684cd27
MM
11135 /* If an "extern" explicit instantiation follows an ordinary
11136 explicit instantiation, the template is instantiated. */
11137 if (extern_p)
03d0f4af
MM
11138 return;
11139 }
11140 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 11141 {
0f51ccfc 11142 error ("no matching template for %qD found", result);
faae18ab
MS
11143 return;
11144 }
03d0f4af 11145 else if (!DECL_TEMPLATE_INFO (result))
6633d636 11146 {
0f51ccfc 11147 pedwarn ("explicit instantiation of non-template %q#D", result);
6633d636
MS
11148 return;
11149 }
11150
f0e01782 11151 if (storage == NULL_TREE)
00595019 11152 ;
faae18ab 11153 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af 11154 {
c02f5e29 11155 if (pedantic && !in_system_header)
0f51ccfc 11156 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
0cbd7506 11157 "instantiations");
03d0f4af
MM
11158 extern_p = 1;
11159 }
f0e01782 11160 else
0f51ccfc 11161 error ("storage class %qD applied to template instantiation", storage);
9c12301f
MM
11162
11163 check_explicit_instantiation_namespace (result);
5566b478 11164 mark_decl_instantiated (result, extern_p);
c91a56d2 11165 if (! extern_p)
eba839f9
MM
11166 instantiate_decl (result, /*defer_ok=*/1,
11167 /*expl_inst_class_mem_p=*/false);
7177d104
MS
11168}
11169
faae18ab 11170void
3a978d72 11171mark_class_instantiated (tree t, int extern_p)
faae18ab
MS
11172{
11173 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
11174 SET_CLASSTYPE_INTERFACE_KNOWN (t);
11175 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
11176 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11177 if (! extern_p)
11178 {
11179 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11180 rest_of_type_compilation (t, 1);
11181 }
c8094d83 11182}
e8abc66f 11183
5e0c54e5 11184/* Called from do_type_instantiation through binding_table_foreach to
9bcb9aae 11185 do recursive instantiation for the type bound in ENTRY. */
5e0c54e5
GDR
11186static void
11187bt_instantiate_type_proc (binding_entry entry, void *data)
11188{
11189 tree storage = *(tree *) data;
11190
11191 if (IS_AGGR_TYPE (entry->type)
11192 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11193 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11194}
11195
415c974c
MA
11196/* Called from do_type_instantiation to instantiate a member
11197 (a member function or a static member variable) of an
03fd3f84 11198 explicitly instantiated class template. */
415c974c
MA
11199static void
11200instantiate_class_member (tree decl, int extern_p)
11201{
11202 mark_decl_instantiated (decl, extern_p);
415c974c 11203 if (! extern_p)
eba839f9
MM
11204 instantiate_decl (decl, /*defer_ok=*/1,
11205 /*expl_inst_class_mem_p=*/true);
415c974c
MA
11206}
11207
a1bcc528
JM
11208/* Perform an explicit instantiation of template class T. STORAGE, if
11209 non-null, is the RID for extern, inline or static. COMPLAIN is
838dfd8a 11210 nonzero if this is called from the parser, zero if called recursively,
a1bcc528 11211 since the standard is unclear (as detailed below). */
c8094d83 11212
7177d104 11213void
3a978d72 11214do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
7177d104 11215{
e8abc66f
MS
11216 int extern_p = 0;
11217 int nomem_p = 0;
5566b478 11218 int static_p = 0;
4746cf84 11219 int previous_instantiation_extern_p = 0;
5566b478 11220
ca79f85d
JM
11221 if (TREE_CODE (t) == TYPE_DECL)
11222 t = TREE_TYPE (t);
11223
7ddedda4 11224 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 11225 {
0f51ccfc 11226 error ("explicit instantiation of non-template type %qT", t);
ca79f85d
JM
11227 return;
11228 }
11229
5566b478 11230 complete_type (t);
7177d104 11231
d0f062fb 11232 if (!COMPLETE_TYPE_P (t))
f0e01782 11233 {
c2ea3a40 11234 if (complain & tf_error)
0f51ccfc 11235 error ("explicit instantiation of %q#T before definition of template",
0cbd7506 11236 t);
f0e01782
MS
11237 return;
11238 }
11239
03d0f4af 11240 if (storage != NULL_TREE)
f0e01782 11241 {
c02f5e29 11242 if (pedantic && !in_system_header)
c8094d83 11243 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
0cbd7506 11244 storage);
03d0f4af
MM
11245
11246 if (storage == ridpointers[(int) RID_INLINE])
11247 nomem_p = 1;
11248 else if (storage == ridpointers[(int) RID_EXTERN])
11249 extern_p = 1;
11250 else if (storage == ridpointers[(int) RID_STATIC])
11251 static_p = 1;
11252 else
11253 {
0f51ccfc 11254 error ("storage class %qD applied to template instantiation",
0cbd7506 11255 storage);
03d0f4af
MM
11256 extern_p = 0;
11257 }
f0e01782
MS
11258 }
11259
370af2d5 11260 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
03d0f4af 11261 {
07782718 11262 /* DR 259 [temp.spec].
a292b002 11263
07782718
KL
11264 Both an explicit instantiation and a declaration of an explicit
11265 specialization shall not appear in a program unless the explicit
11266 instantiation follows a declaration of the explicit specialization.
11267
11268 For a given set of template parameters, if an explicit
11269 instantiation of a template appears after a declaration of an
11270 explicit specialization for that template, the explicit
11271 instantiation has no effect. */
03d0f4af
MM
11272 return;
11273 }
11274 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 11275 {
03d0f4af
MM
11276 /* [temp.spec]
11277
11278 No program shall explicitly instantiate any template more
c8094d83 11279 than once.
03d0f4af 11280
0cbd7506 11281 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
4746cf84 11282 instantiation was `extern'. If EXTERN_P then the second is.
4684cd27 11283 These cases are OK. */
4746cf84
MA
11284 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11285
11286 if (!previous_instantiation_extern_p && !extern_p
c2ea3a40 11287 && (complain & tf_error))
0f51ccfc 11288 pedwarn ("duplicate explicit instantiation of %q#T", t);
c8094d83 11289
03d0f4af
MM
11290 /* If we've already instantiated the template, just return now. */
11291 if (!CLASSTYPE_INTERFACE_ONLY (t))
11292 return;
44a8d0b3 11293 }
e8abc66f 11294
9c12301f 11295 check_explicit_instantiation_namespace (TYPE_NAME (t));
03d0f4af 11296 mark_class_instantiated (t, extern_p);
03d0f4af 11297
e8abc66f
MS
11298 if (nomem_p)
11299 return;
11300
7177d104 11301 {
db5ae43f 11302 tree tmp;
5566b478 11303
03d0f4af
MM
11304 /* In contrast to implicit instantiation, where only the
11305 declarations, and not the definitions, of members are
11306 instantiated, we have here:
11307
0cbd7506 11308 [temp.explicit]
03d0f4af
MM
11309
11310 The explicit instantiation of a class template specialization
11311 implies the instantiation of all of its members not
11312 previously explicitly specialized in the translation unit
c8094d83 11313 containing the explicit instantiation.
03d0f4af
MM
11314
11315 Of course, we can't instantiate member template classes, since
11316 we don't have any arguments for them. Note that the standard
dc957d14 11317 is unclear on whether the instantiation of the members are
415c974c 11318 *explicit* instantiations or not. However, the most natural
03fd3f84 11319 interpretation is that it should be an explicit instantiation. */
03d0f4af 11320
5566b478
MS
11321 if (! static_p)
11322 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 11323 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 11324 && DECL_TEMPLATE_INSTANTIATION (tmp))
415c974c 11325 instantiate_class_member (tmp, extern_p);
5566b478
MS
11326
11327 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11328 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
415c974c 11329 instantiate_class_member (tmp, extern_p);
7177d104 11330
5e0c54e5
GDR
11331 if (CLASSTYPE_NESTED_UTDS (t))
11332 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
0cbd7506 11333 bt_instantiate_type_proc, &storage);
a292b002 11334 }
8d08fdba 11335}
a28e3c7f 11336
36a117a5
MM
11337/* Given a function DECL, which is a specialization of TMPL, modify
11338 DECL to be a re-instantiation of TMPL with the same template
11339 arguments. TMPL should be the template into which tsubst'ing
11340 should occur for DECL, not the most general template.
830bfa74
MM
11341
11342 One reason for doing this is a scenario like this:
11343
11344 template <class T>
11345 void f(const T&, int i);
11346
11347 void g() { f(3, 7); }
11348
11349 template <class T>
11350 void f(const T& t, const int i) { }
11351
11352 Note that when the template is first instantiated, with
11353 instantiate_template, the resulting DECL will have no name for the
11354 first parameter, and the wrong type for the second. So, when we go
11355 to instantiate the DECL, we regenerate it. */
11356
e9659ab0 11357static void
3a978d72 11358regenerate_decl_from_template (tree decl, tree tmpl)
830bfa74 11359{
f9a7ae04
MM
11360 /* The arguments used to instantiate DECL, from the most general
11361 template. */
830bfa74 11362 tree args;
830bfa74 11363 tree code_pattern;
830bfa74
MM
11364
11365 args = DECL_TI_ARGS (decl);
11366 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11367
2b907f5c
KL
11368 /* Make sure that we can see identifiers, and compute access
11369 correctly. */
11370 push_access_scope (decl);
11371
c7222c02
MM
11372 if (TREE_CODE (decl) == FUNCTION_DECL)
11373 {
11374 tree decl_parm;
11375 tree pattern_parm;
11376 tree specs;
11377 int args_depth;
11378 int parms_depth;
c8094d83 11379
c7222c02 11380 args_depth = TMPL_ARGS_DEPTH (args);
c8094d83 11381 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
c7222c02
MM
11382 if (args_depth > parms_depth)
11383 args = get_innermost_template_args (args, parms_depth);
11384
11385 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11386 args, tf_error, NULL_TREE);
11387 if (specs)
11388 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11389 specs);
11390
11391 /* Merge parameter declarations. */
c8094d83 11392 decl_parm = skip_artificial_parms_for (decl,
c7222c02 11393 DECL_ARGUMENTS (decl));
c8094d83 11394 pattern_parm
c7222c02
MM
11395 = skip_artificial_parms_for (code_pattern,
11396 DECL_ARGUMENTS (code_pattern));
11397 while (decl_parm)
11398 {
11399 tree parm_type;
b17bba6d 11400 tree attributes;
c7222c02
MM
11401
11402 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11403 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11404 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11405 NULL_TREE);
02bab9db 11406 parm_type = type_decays_to (parm_type);
c7222c02
MM
11407 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11408 TREE_TYPE (decl_parm) = parm_type;
b17bba6d
MM
11409 attributes = DECL_ATTRIBUTES (pattern_parm);
11410 if (DECL_ATTRIBUTES (decl_parm) != attributes)
11411 {
11412 DECL_ATTRIBUTES (decl_parm) = attributes;
11413 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11414 }
c7222c02
MM
11415 decl_parm = TREE_CHAIN (decl_parm);
11416 pattern_parm = TREE_CHAIN (pattern_parm);
11417 }
830bfa74 11418
c7222c02
MM
11419 /* Merge additional specifiers from the CODE_PATTERN. */
11420 if (DECL_DECLARED_INLINE_P (code_pattern)
11421 && !DECL_DECLARED_INLINE_P (decl))
11422 DECL_DECLARED_INLINE_P (decl) = 1;
11423 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11424 DECL_INLINE (decl) = 1;
11425 }
11426 else if (TREE_CODE (decl) == VAR_DECL)
b794e321
MM
11427 DECL_INITIAL (decl) =
11428 tsubst_expr (DECL_INITIAL (code_pattern), args,
11429 tf_error, DECL_TI_TEMPLATE (decl));
c7222c02
MM
11430 else
11431 gcc_unreachable ();
36a117a5 11432
2b59fc25 11433 pop_access_scope (decl);
830bfa74
MM
11434}
11435
a723baf1
MM
11436/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11437 substituted to get DECL. */
11438
d58b7c2d 11439tree
a723baf1
MM
11440template_for_substitution (tree decl)
11441{
11442 tree tmpl = DECL_TI_TEMPLATE (decl);
11443
11444 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11445 for the instantiation. This is not always the most general
11446 template. Consider, for example:
11447
0cbd7506 11448 template <class T>
a723baf1 11449 struct S { template <class U> void f();
0cbd7506 11450 template <> void f<int>(); };
a723baf1
MM
11451
11452 and an instantiation of S<double>::f<int>. We want TD to be the
11453 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11454 while (/* An instantiation cannot have a definition, so we need a
11455 more general template. */
11456 DECL_TEMPLATE_INSTANTIATION (tmpl)
11457 /* We must also deal with friend templates. Given:
11458
c8094d83 11459 template <class T> struct S {
a723baf1
MM
11460 template <class U> friend void f() {};
11461 };
11462
11463 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11464 so far as the language is concerned, but that's still
11465 where we get the pattern for the instantiation from. On
11466 other hand, if the definition comes outside the class, say:
11467
c8094d83 11468 template <class T> struct S {
a723baf1
MM
11469 template <class U> friend void f();
11470 };
11471 template <class U> friend void f() {}
11472
11473 we don't need to look any further. That's what the check for
11474 DECL_INITIAL is for. */
11475 || (TREE_CODE (decl) == FUNCTION_DECL
11476 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11477 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11478 {
11479 /* The present template, TD, should not be a definition. If it
11480 were a definition, we should be using it! Note that we
11481 cannot restructure the loop to just keep going until we find
11482 a template with a definition, since that might go too far if
11483 a specialization was declared, but not defined. */
50bc768d
NS
11484 gcc_assert (TREE_CODE (decl) != VAR_DECL
11485 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
c8094d83 11486
a723baf1
MM
11487 /* Fetch the more general template. */
11488 tmpl = DECL_TI_TEMPLATE (tmpl);
11489 }
11490
11491 return tmpl;
11492}
11493
16d53b64 11494/* Produce the definition of D, a _DECL generated from a template. If
838dfd8a 11495 DEFER_OK is nonzero, then we don't have to actually do the
415c974c
MA
11496 instantiation now; we just have to do it sometime. Normally it is
11497 an error if this is an explicit instantiation but D is undefined.
eba839f9
MM
11498 EXPL_INST_CLASS_MEM_P is true iff D is a member of an
11499 explicitly instantiated class template. */
f84b4be9 11500
a28e3c7f 11501tree
eba839f9
MM
11502instantiate_decl (tree d, int defer_ok,
11503 bool expl_inst_class_mem_p)
a28e3c7f 11504{
36a117a5 11505 tree tmpl = DECL_TI_TEMPLATE (d);
65f8b0fb
MM
11506 tree gen_args;
11507 tree args;
830bfa74 11508 tree td;
36a117a5
MM
11509 tree code_pattern;
11510 tree spec;
11511 tree gen_tmpl;
b794e321 11512 bool pattern_defined;
31a714f6 11513 int need_push;
82a98427 11514 location_t saved_loc = input_location;
f7e4e484 11515 bool external_p;
c8094d83 11516
36a117a5
MM
11517 /* This function should only be used to instantiate templates for
11518 functions and static member variables. */
50bc768d
NS
11519 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11520 || TREE_CODE (d) == VAR_DECL);
36a117a5 11521
cec24319
MM
11522 /* Variables are never deferred; if instantiation is required, they
11523 are instantiated right away. That allows for better code in the
11524 case that an expression refers to the value of the variable --
11525 if the variable has a constant value the referring expression can
11526 take advantage of that fact. */
11527 if (TREE_CODE (d) == VAR_DECL)
11528 defer_ok = 0;
11529
db9b2174
MM
11530 /* Don't instantiate cloned functions. Instead, instantiate the
11531 functions they cloned. */
11532 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11533 d = DECL_CLONED_FUNCTION (d);
11534
fbf1c34b 11535 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af 11536 /* D has already been instantiated. It might seem reasonable to
dc957d14 11537 check whether or not D is an explicit instantiation, and, if so,
03d0f4af
MM
11538 stop here. But when an explicit instantiation is deferred
11539 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11540 is set, even though we still need to do the instantiation. */
36a117a5
MM
11541 return d;
11542
11543 /* If we already have a specialization of this declaration, then
11544 there's no reason to instantiate it. Note that
11545 retrieve_specialization gives us both instantiations and
11546 specializations, so we must explicitly check
11547 DECL_TEMPLATE_SPECIALIZATION. */
11548 gen_tmpl = most_general_template (tmpl);
65f8b0fb 11549 gen_args = DECL_TI_ARGS (d);
c7222c02
MM
11550 spec = retrieve_specialization (gen_tmpl, gen_args,
11551 /*class_specializations_p=*/false);
36a117a5
MM
11552 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11553 return spec;
11554
11555 /* This needs to happen before any tsubsting. */
11556 if (! push_tinst_level (d))
11557 return d;
11558
297a5329
JM
11559 timevar_push (TV_PARSE);
11560
4d85e00e 11561 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
a723baf1
MM
11562 for the instantiation. */
11563 td = template_for_substitution (d);
fee23f54 11564 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 11565
2d22db1f
MM
11566 /* We should never be trying to instantiate a member of a class
11567 template or partial specialization. */
11568 gcc_assert (d != code_pattern);
11569
76d3baad
KL
11570 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11571 || DECL_TEMPLATE_SPECIALIZATION (td))
649fc72d
NS
11572 /* In the case of a friend template whose definition is provided
11573 outside the class, we may have too many arguments. Drop the
76d3baad 11574 ones we don't need. The same is true for specializations. */
649fc72d
NS
11575 args = get_innermost_template_args
11576 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
11577 else
11578 args = gen_args;
65f8b0fb 11579
5566b478 11580 if (TREE_CODE (d) == FUNCTION_DECL)
39c76b4f 11581 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
5566b478 11582 else
36a117a5 11583 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
b794e321
MM
11584
11585 /* We may be in the middle of deferred access check. Disable it now. */
11586 push_deferring_access_checks (dk_no_deferred);
11587
4684cd27
MM
11588 /* Unless an explicit instantiation directive has already determined
11589 the linkage of D, remember that a definition is available for
11590 this entity. */
c8094d83 11591 if (pattern_defined
4684cd27
MM
11592 && !DECL_INTERFACE_KNOWN (d)
11593 && !DECL_NOT_REALLY_EXTERN (d))
11594 mark_definable (d);
de22184b 11595
f31686a3 11596 input_location = DECL_SOURCE_LOCATION (d);
de22184b 11597
eba839f9
MM
11598 /* If D is a member of an explicitly instantiated class template,
11599 and no definition is available, treat it like an implicit
11600 instantiation. */
11601 if (!pattern_defined && expl_inst_class_mem_p
11602 && DECL_EXPLICIT_INSTANTIATION (d))
5566b478 11603 {
4684cd27 11604 DECL_NOT_REALLY_EXTERN (d) = 0;
eba839f9 11605 DECL_INTERFACE_KNOWN (d) = 0;
4684cd27 11606 SET_DECL_IMPLICIT_INSTANTIATION (d);
5566b478
MS
11607 }
11608
4f2b0fb2
NS
11609 if (!defer_ok)
11610 {
11611 /* Recheck the substitutions to obtain any warning messages
11612 about ignoring cv qualifiers. */
11613 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11614 tree type = TREE_TYPE (gen);
11615
0e902d98 11616 /* Make sure that we can see identifiers, and compute access
2b59fc25
KL
11617 correctly. D is already the target FUNCTION_DECL with the
11618 right context. */
11619 push_access_scope (d);
0e902d98 11620
4f2b0fb2
NS
11621 if (TREE_CODE (gen) == FUNCTION_DECL)
11622 {
65f8b0fb
MM
11623 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11624 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
4f2b0fb2
NS
11625 tf_error | tf_warning, d);
11626 /* Don't simply tsubst the function type, as that will give
11627 duplicate warnings about poor parameter qualifications.
11628 The function arguments are the same as the decl_arguments
c6002625 11629 without the top level cv qualifiers. */
4f2b0fb2
NS
11630 type = TREE_TYPE (type);
11631 }
65f8b0fb 11632 tsubst (type, gen_args, tf_error | tf_warning, d);
0e902d98 11633
2b59fc25 11634 pop_access_scope (d);
4f2b0fb2 11635 }
c8094d83 11636
f7e4e484
MM
11637 /* Check to see whether we know that this template will be
11638 instantiated in some other file, as with "extern template"
11639 extension. */
11640 external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
11641 /* In general, we do not instantiate such templates... */
11642 if (external_p
11643 /* ... but we instantiate inline functions so that we can inline
11644 them and ... */
11645 && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
11646 /* ... we instantiate static data members whose values are
11647 needed in integral constant expressions. */
11648 && ! (TREE_CODE (d) == VAR_DECL
11649 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
930cd796 11650 goto out;
16d53b64 11651 /* Defer all other templates, unless we have been explicitly
f7e4e484
MM
11652 forbidden from doing so. */
11653 if (/* If there is no definition, we cannot instantiate the
11654 template. */
11655 ! pattern_defined
11656 /* If it's OK to postpone instantiation, do so. */
11657 || defer_ok
11658 /* If this is a static data member that will be defined
11659 elsewhere, we don't want to instantiate the entire data
11660 member, but we do want to instantiate the initializer so that
11661 we can substitute that elsewhere. */
11662 || (external_p && TREE_CODE (d) == VAR_DECL))
16d53b64 11663 {
b794e321
MM
11664 /* The definition of the static data member is now required so
11665 we must substitute the initializer. */
11666 if (TREE_CODE (d) == VAR_DECL
11667 && !DECL_INITIAL (d)
11668 && DECL_INITIAL (code_pattern))
11669 {
4bff36d3
MM
11670 tree ns;
11671 tree init;
11672
11673 ns = decl_namespace_context (d);
27a725e2 11674 push_nested_namespace (ns);
b794e321 11675 push_nested_class (DECL_CONTEXT (d));
4bff36d3
MM
11676 init = tsubst_expr (DECL_INITIAL (code_pattern),
11677 args,
11678 tf_error | tf_warning, NULL_TREE);
86414779
MM
11679 DECL_INITIAL (d) = init;
11680 cp_finish_decl (d, init, /*asmspec_tree=*/NULL_TREE,
11681 LOOKUP_ONLYCONVERTING);
b794e321 11682 pop_nested_class ();
27a725e2 11683 pop_nested_namespace (ns);
b794e321
MM
11684 }
11685
f7e4e484
MM
11686 /* We restore the source position here because it's used by
11687 add_pending_template. */
82a98427 11688 input_location = saved_loc;
c27be9b9 11689
c8094d83 11690 if (at_eof && !pattern_defined
03d0f4af
MM
11691 && DECL_EXPLICIT_INSTANTIATION (d))
11692 /* [temp.explicit]
11693
11694 The definition of a non-exported function template, a
11695 non-exported member function template, or a non-exported
11696 member function or static data member of a class template
11697 shall be present in every translation unit in which it is
11698 explicitly instantiated. */
33bd39a2 11699 pedwarn
0f51ccfc 11700 ("explicit instantiation of %qD but no definition available", d);
03d0f4af 11701
f7e4e484
MM
11702 /* ??? Historically, we have instantiated inline functions, even
11703 when marked as "extern template". */
11704 if (!(external_p && TREE_CODE (d) == VAR_DECL))
11705 add_pending_template (d);
de22184b 11706 goto out;
5566b478 11707 }
4684cd27
MM
11708 /* Tell the repository that D is available in this translation unit
11709 -- and see if it is supposed to be instantiated here. */
11710 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11711 {
11712 /* In a PCH file, despite the fact that the repository hasn't
11713 requested instantiation in the PCH it is still possible that
11714 an instantiation will be required in a file that includes the
11715 PCH. */
11716 if (pch_file)
11717 add_pending_template (d);
11718 /* Instantiate inline functions so that the inliner can do its
11719 job, even though we'll not be emitting a copy of this
11720 function. */
c2a124b2 11721 if (!(TREE_CODE (d) == FUNCTION_DECL
c8094d83 11722 && flag_inline_trees
c2a124b2 11723 && DECL_DECLARED_INLINE_P (d)))
4684cd27
MM
11724 goto out;
11725 }
5566b478 11726
6de9cd9a 11727 need_push = !cfun || !global_bindings_p ();
31a714f6
MM
11728 if (need_push)
11729 push_to_top_level ();
414ea4aa 11730
66e0c440
KL
11731 /* Mark D as instantiated so that recursive calls to
11732 instantiate_decl do not try to instantiate it again. */
11733 DECL_TEMPLATE_INSTANTIATED (d) = 1;
11734
2b0a63a3
MM
11735 /* Regenerate the declaration in case the template has been modified
11736 by a subsequent redeclaration. */
11737 regenerate_decl_from_template (d, td);
4684cd27 11738
120722ac 11739 /* We already set the file and line above. Reset them now in case
6de9cd9a 11740 they changed as a result of calling regenerate_decl_from_template. */
f31686a3 11741 input_location = DECL_SOURCE_LOCATION (d);
5156628f 11742
5566b478
MS
11743 if (TREE_CODE (d) == VAR_DECL)
11744 {
1d62c33e
MM
11745 /* Clear out DECL_RTL; whatever was there before may not be right
11746 since we've reset the type of the declaration. */
11747 SET_DECL_RTL (d, NULL_RTX);
5566b478 11748 DECL_IN_AGGR_P (d) = 0;
ea56c40c 11749
4684cd27
MM
11750 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11751 initializer. That function will defer actual emission until
11752 we have a chance to determine linkage. */
11753 DECL_EXTERNAL (d) = 0;
11754
73a8adb6 11755 /* Enter the scope of D so that access-checking works correctly. */
4684cd27 11756 push_nested_class (DECL_CONTEXT (d));
b794e321 11757 cp_finish_decl (d, DECL_INITIAL (d), NULL_TREE, 0);
73a8adb6 11758 pop_nested_class ();
5566b478
MS
11759 }
11760 else if (TREE_CODE (d) == FUNCTION_DECL)
11761 {
6bbf1598 11762 htab_t saved_local_specializations;
a723baf1
MM
11763 tree subst_decl;
11764 tree tmpl_parm;
11765 tree spec_parm;
6bbf1598
MM
11766
11767 /* Save away the current list, in case we are instantiating one
11768 template from within the body of another. */
11769 saved_local_specializations = local_specializations;
11770
6dfbb909 11771 /* Set up the list of local specializations. */
c8094d83 11772 local_specializations = htab_create (37,
69f794a7 11773 hash_local_specialization,
a723baf1 11774 eq_local_specializations,
6dfbb909
MM
11775 NULL);
11776
558475f0 11777 /* Set up context. */
058b15c1 11778 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
5566b478 11779
a723baf1
MM
11780 /* Create substitution entries for the parameters. */
11781 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11782 tmpl_parm = DECL_ARGUMENTS (subst_decl);
11783 spec_parm = DECL_ARGUMENTS (d);
11784 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11785 {
11786 register_local_specialization (spec_parm, tmpl_parm);
11787 spec_parm = skip_artificial_parms_for (d, spec_parm);
11788 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11789 }
11790 while (tmpl_parm)
11791 {
11792 register_local_specialization (spec_parm, tmpl_parm);
11793 tmpl_parm = TREE_CHAIN (tmpl_parm);
11794 spec_parm = TREE_CHAIN (spec_parm);
11795 }
50bc768d 11796 gcc_assert (!spec_parm);
a723baf1 11797
558475f0
MM
11798 /* Substitute into the body of the function. */
11799 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
c2ea3a40 11800 tf_error | tf_warning, tmpl);
558475f0 11801
6dfbb909
MM
11802 /* We don't need the local specializations any more. */
11803 htab_delete (local_specializations);
6bbf1598 11804 local_specializations = saved_local_specializations;
6dfbb909 11805
4d6abc1c 11806 /* Finish the function. */
b2dd096b 11807 d = finish_function (0);
8cd2462c 11808 expand_or_defer_fn (d);
5566b478
MS
11809 }
11810
971cbc14
MM
11811 /* We're not deferring instantiation any more. */
11812 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11813
31a714f6
MM
11814 if (need_push)
11815 pop_from_top_level ();
414ea4aa 11816
de22184b 11817out:
82a98427 11818 input_location = saved_loc;
7d021397 11819 pop_deferring_access_checks ();
5566b478 11820 pop_tinst_level ();
a28e3c7f 11821
297a5329
JM
11822 timevar_pop (TV_PARSE);
11823
a28e3c7f
MS
11824 return d;
11825}
5566b478 11826
0aafb128 11827/* Run through the list of templates that we wish we could
35046a54
KL
11828 instantiate, and instantiate any we can. RETRIES is the
11829 number of times we retry pending template instantiation. */
0aafb128 11830
35046a54
KL
11831void
11832instantiate_pending_templates (int retries)
0aafb128
MM
11833{
11834 tree *t;
46ccf50a 11835 tree last = NULL_TREE;
0aafb128 11836 int reconsider;
aad626f7 11837 location_t saved_loc = input_location;
12af7ba3 11838 int saved_in_system_header = in_system_header;
35046a54
KL
11839
11840 /* Instantiating templates may trigger vtable generation. This in turn
11841 may require further template instantiations. We place a limit here
11842 to avoid infinite loop. */
11843 if (pending_templates && retries >= max_tinst_depth)
11844 {
96c993a8
JM
11845 tree decl = TREE_VALUE (pending_templates);
11846
dee15844 11847 error ("template instantiation depth exceeds maximum of %d"
96c993a8
JM
11848 " instantiating %q+D, possibly from virtual table generation"
11849 " (use -ftemplate-depth-NN to increase the maximum)",
11850 max_tinst_depth, decl);
11851 if (TREE_CODE (decl) == FUNCTION_DECL)
11852 /* Pretend that we defined it. */
11853 DECL_INITIAL (decl) = error_mark_node;
35046a54
KL
11854 return;
11855 }
11856
c8094d83 11857 do
0aafb128
MM
11858 {
11859 reconsider = 0;
11860
11861 t = &pending_templates;
11862 while (*t)
11863 {
0aafb128
MM
11864 tree instantiation = TREE_VALUE (*t);
11865
3ae18eaf 11866 reopen_tinst_level (TREE_PURPOSE (*t));
0aafb128 11867
2f939d94 11868 if (TYPE_P (instantiation))
0aafb128
MM
11869 {
11870 tree fn;
11871
d0f062fb 11872 if (!COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11873 {
11874 instantiate_class_template (instantiation);
11875 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
c8094d83 11876 for (fn = TYPE_METHODS (instantiation);
0aafb128
MM
11877 fn;
11878 fn = TREE_CHAIN (fn))
11879 if (! DECL_ARTIFICIAL (fn))
eba839f9
MM
11880 instantiate_decl (fn,
11881 /*defer_ok=*/0,
11882 /*expl_inst_class_mem_p=*/false);
d0f062fb 11883 if (COMPLETE_TYPE_P (instantiation))
35046a54 11884 reconsider = 1;
0aafb128
MM
11885 }
11886
d0f062fb 11887 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11888 /* If INSTANTIATION has been instantiated, then we don't
11889 need to consider it again in the future. */
11890 *t = TREE_CHAIN (*t);
46ccf50a
JM
11891 else
11892 {
11893 last = *t;
11894 t = &TREE_CHAIN (*t);
11895 }
0aafb128
MM
11896 }
11897 else
11898 {
16d53b64 11899 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
11900 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11901 {
eba839f9
MM
11902 instantiation
11903 = instantiate_decl (instantiation,
11904 /*defer_ok=*/0,
11905 /*expl_inst_class_mem_p=*/false);
0aafb128 11906 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
35046a54 11907 reconsider = 1;
0aafb128
MM
11908 }
11909
16d53b64 11910 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
11911 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11912 /* If INSTANTIATION has been instantiated, then we don't
11913 need to consider it again in the future. */
11914 *t = TREE_CHAIN (*t);
46ccf50a
JM
11915 else
11916 {
11917 last = *t;
11918 t = &TREE_CHAIN (*t);
11919 }
0aafb128 11920 }
84e5ca0f
NS
11921 tinst_depth = 0;
11922 current_tinst_level = NULL_TREE;
0aafb128 11923 }
46ccf50a 11924 last_pending_template = last;
c8094d83 11925 }
0aafb128
MM
11926 while (reconsider);
11927
aad626f7 11928 input_location = saved_loc;
12af7ba3 11929 in_system_header = saved_in_system_header;
0aafb128
MM
11930}
11931
fd74ca0b
MM
11932/* Substitute ARGVEC into T, which is a list of initializers for
11933 either base class or a non-static data member. The TREE_PURPOSEs
11934 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11935 instantiate_decl. */
4393e105 11936
824b9a4c 11937static tree
3a978d72 11938tsubst_initializer_list (tree t, tree argvec)
5566b478 11939{
2282d28d 11940 tree inits = NULL_TREE;
5566b478
MS
11941
11942 for (; t; t = TREE_CHAIN (t))
11943 {
fd74ca0b
MM
11944 tree decl;
11945 tree init;
fd74ca0b 11946
c2ea3a40 11947 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
fd74ca0b 11948 NULL_TREE);
1f5a253a
NS
11949 decl = expand_member_init (decl);
11950 if (decl && !DECL_P (decl))
11951 in_base_initializer = 1;
c8094d83 11952
c2ea3a40 11953 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
fd74ca0b 11954 NULL_TREE);
1f5a253a
NS
11955 in_base_initializer = 0;
11956
11957 if (decl)
2282d28d 11958 {
1f5a253a 11959 init = build_tree_list (decl, init);
2282d28d
MM
11960 TREE_CHAIN (init) = inits;
11961 inits = init;
11962 }
5566b478 11963 }
2282d28d 11964 return inits;
5566b478
MS
11965}
11966
61a127b3
MM
11967/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11968
11969static void
3a978d72 11970set_current_access_from_decl (tree decl)
61a127b3
MM
11971{
11972 if (TREE_PRIVATE (decl))
11973 current_access_specifier = access_private_node;
11974 else if (TREE_PROTECTED (decl))
11975 current_access_specifier = access_protected_node;
11976 else
11977 current_access_specifier = access_public_node;
11978}
11979
dbfe2124
MM
11980/* Instantiate an enumerated type. TAG is the template type, NEWTAG
11981 is the instantiation (which should have been created with
11982 start_enum) and ARGS are the template arguments to use. */
b87692e5 11983
dbfe2124 11984static void
3a978d72 11985tsubst_enum (tree tag, tree newtag, tree args)
b87692e5 11986{
dbfe2124 11987 tree e;
b87692e5
MS
11988
11989 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11990 {
61a127b3 11991 tree value;
7b6d72fc
MM
11992 tree decl;
11993
11994 decl = TREE_VALUE (e);
61a127b3
MM
11995 /* Note that in a template enum, the TREE_VALUE is the
11996 CONST_DECL, not the corresponding INTEGER_CST. */
c8094d83 11997 value = tsubst_expr (DECL_INITIAL (decl),
c2ea3a40 11998 args, tf_error | tf_warning,
4393e105 11999 NULL_TREE);
61a127b3
MM
12000
12001 /* Give this enumeration constant the correct access. */
7b6d72fc 12002 set_current_access_from_decl (decl);
61a127b3
MM
12003
12004 /* Actually build the enumerator itself. */
c8094d83 12005 build_enumerator (DECL_NAME (decl), value, newtag);
dbfe2124 12006 }
b3d5a58b 12007
219670f1 12008 finish_enum (newtag);
f31686a3
RH
12009 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
12010 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
b87692e5 12011}
36a117a5 12012
1f6e1acc
AS
12013/* DECL is a FUNCTION_DECL that is a template specialization. Return
12014 its type -- but without substituting the innermost set of template
12015 arguments. So, innermost set of template parameters will appear in
5c74d5b0 12016 the type. */
1f6e1acc 12017
c8094d83 12018tree
3a978d72 12019get_mostly_instantiated_function_type (tree decl)
1f6e1acc 12020{
1f6e1acc
AS
12021 tree fn_type;
12022 tree tmpl;
12023 tree targs;
12024 tree tparms;
12025 int parm_depth;
12026
12027 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12028 targs = DECL_TI_ARGS (decl);
12029 tparms = DECL_TEMPLATE_PARMS (tmpl);
12030 parm_depth = TMPL_PARMS_DEPTH (tparms);
12031
12032 /* There should be as many levels of arguments as there are levels
12033 of parameters. */
50bc768d 12034 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
1f6e1acc
AS
12035
12036 fn_type = TREE_TYPE (tmpl);
1f6e1acc
AS
12037
12038 if (parm_depth == 1)
12039 /* No substitution is necessary. */
12040 ;
12041 else
12042 {
fae6e246 12043 int i, save_access_control;
1f6e1acc
AS
12044 tree partial_args;
12045
12046 /* Replace the innermost level of the TARGS with NULL_TREEs to
dc957d14 12047 let tsubst know not to substitute for those parameters. */
1f6e1acc
AS
12048 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
12049 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
12050 SET_TMPL_ARGS_LEVEL (partial_args, i,
12051 TMPL_ARGS_LEVEL (targs, i));
12052 SET_TMPL_ARGS_LEVEL (partial_args,
12053 TMPL_ARGS_DEPTH (targs),
12054 make_tree_vec (DECL_NTPARMS (tmpl)));
12055
fae6e246
RH
12056 /* Disable access control as this function is used only during
12057 name-mangling. */
12058 save_access_control = flag_access_control;
12059 flag_access_control = 0;
5c74d5b0 12060
9579624e 12061 ++processing_template_decl;
1f6e1acc
AS
12062 /* Now, do the (partial) substitution to figure out the
12063 appropriate function type. */
c2ea3a40 12064 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
9579624e 12065 --processing_template_decl;
1f6e1acc
AS
12066
12067 /* Substitute into the template parameters to obtain the real
12068 innermost set of parameters. This step is important if the
12069 innermost set of template parameters contains value
12070 parameters whose types depend on outer template parameters. */
12071 TREE_VEC_LENGTH (partial_args)--;
c2ea3a40 12072 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
1f6e1acc 12073
fae6e246 12074 flag_access_control = save_access_control;
5c74d5b0 12075 }
1f6e1acc
AS
12076
12077 return fn_type;
12078}
669ec2b4 12079
cb753e49 12080/* Return truthvalue if we're processing a template different from
dc957d14 12081 the last one involved in diagnostics. */
cb753e49 12082int
3a978d72 12083problematic_instantiation_changed (void)
cb753e49
GDR
12084{
12085 return last_template_error_tick != tinst_level_tick;
12086}
12087
12088/* Remember current template involved in diagnostics. */
12089void
3a978d72 12090record_last_problematic_instantiation (void)
cb753e49
GDR
12091{
12092 last_template_error_tick = tinst_level_tick;
12093}
12094
12095tree
3a978d72 12096current_instantiation (void)
cb753e49
GDR
12097{
12098 return current_tinst_level;
12099}
db3f4e4e
NS
12100
12101/* [temp.param] Check that template non-type parm TYPE is of an allowable
838dfd8a 12102 type. Return zero for ok, nonzero for disallowed. Issue error and
c2ea3a40 12103 warning messages under control of COMPLAIN. */
db3f4e4e
NS
12104
12105static int
3a978d72 12106invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
db3f4e4e
NS
12107{
12108 if (INTEGRAL_TYPE_P (type))
12109 return 0;
12110 else if (POINTER_TYPE_P (type))
12111 return 0;
a5ac359a 12112 else if (TYPE_PTR_TO_MEMBER_P (type))
db3f4e4e 12113 return 0;
db3f4e4e
NS
12114 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12115 return 0;
12116 else if (TREE_CODE (type) == TYPENAME_TYPE)
12117 return 0;
c8094d83 12118
c2ea3a40 12119 if (complain & tf_error)
0f51ccfc 12120 error ("%q#T is not a valid type for a template constant parameter", type);
db3f4e4e
NS
12121 return 1;
12122}
e2500fed 12123
5552b43c
MM
12124/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
12125 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
1fb3244a 12126
5552b43c
MM
12127static bool
12128dependent_type_p_r (tree type)
1fb3244a
MM
12129{
12130 tree scope;
12131
1fb3244a
MM
12132 /* [temp.dep.type]
12133
12134 A type is dependent if it is:
12135
6615c446
JO
12136 -- a template parameter. Template template parameters are types
12137 for us (since TYPE_P holds true for them) so we handle
12138 them here. */
c8094d83 12139 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
6bf92cb6 12140 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
1fb3244a
MM
12141 return true;
12142 /* -- a qualified-id with a nested-name-specifier which contains a
0cbd7506 12143 class-name that names a dependent type or whose unqualified-id
1fb3244a
MM
12144 names a dependent type. */
12145 if (TREE_CODE (type) == TYPENAME_TYPE)
12146 return true;
12147 /* -- a cv-qualified type where the cv-unqualified type is
0cbd7506 12148 dependent. */
1fb3244a
MM
12149 type = TYPE_MAIN_VARIANT (type);
12150 /* -- a compound type constructed from any dependent type. */
a5ac359a 12151 if (TYPE_PTR_TO_MEMBER_P (type))
1fb3244a 12152 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
c8094d83 12153 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
1fb3244a
MM
12154 (type)));
12155 else if (TREE_CODE (type) == POINTER_TYPE
12156 || TREE_CODE (type) == REFERENCE_TYPE)
12157 return dependent_type_p (TREE_TYPE (type));
12158 else if (TREE_CODE (type) == FUNCTION_TYPE
12159 || TREE_CODE (type) == METHOD_TYPE)
12160 {
12161 tree arg_type;
12162
12163 if (dependent_type_p (TREE_TYPE (type)))
12164 return true;
c8094d83
MS
12165 for (arg_type = TYPE_ARG_TYPES (type);
12166 arg_type;
1fb3244a
MM
12167 arg_type = TREE_CHAIN (arg_type))
12168 if (dependent_type_p (TREE_VALUE (arg_type)))
12169 return true;
12170 return false;
12171 }
12172 /* -- an array type constructed from any dependent type or whose
0cbd7506 12173 size is specified by a constant expression that is
1fb3244a
MM
12174 value-dependent. */
12175 if (TREE_CODE (type) == ARRAY_TYPE)
12176 {
12177 if (TYPE_DOMAIN (type)
c8094d83 12178 && ((value_dependent_expression_p
1fb3244a
MM
12179 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
12180 || (type_dependent_expression_p
12181 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
12182 return true;
12183 return dependent_type_p (TREE_TYPE (type));
12184 }
c8094d83 12185
1fb3244a 12186 /* -- a template-id in which either the template name is a template
86306a6b
NS
12187 parameter ... */
12188 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
1fb3244a 12189 return true;
86306a6b 12190 /* ... or any of the template arguments is a dependent type or
04c06002 12191 an expression that is type-dependent or value-dependent. */
86306a6b 12192 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
c8094d83 12193 && (any_dependent_template_arguments_p
7e99327d 12194 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
1fb3244a 12195 return true;
c8094d83 12196
1fb3244a
MM
12197 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
12198 expression is not type-dependent, then it should already been
12199 have resolved. */
12200 if (TREE_CODE (type) == TYPEOF_TYPE)
12201 return true;
c8094d83 12202
1fb3244a
MM
12203 /* The standard does not specifically mention types that are local
12204 to template functions or local classes, but they should be
12205 considered dependent too. For example:
12206
c8094d83 12207 template <int I> void f() {
0cbd7506 12208 enum E { a = I };
1fb3244a
MM
12209 S<sizeof (E)> s;
12210 }
12211
12212 The size of `E' cannot be known until the value of `I' has been
12213 determined. Therefore, `E' must be considered dependent. */
12214 scope = TYPE_CONTEXT (type);
12215 if (scope && TYPE_P (scope))
12216 return dependent_type_p (scope);
12217 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12218 return type_dependent_expression_p (scope);
12219
12220 /* Other types are non-dependent. */
12221 return false;
12222}
12223
5552b43c
MM
12224/* Returns TRUE if TYPE is dependent, in the sense of
12225 [temp.dep.type]. */
12226
12227bool
12228dependent_type_p (tree type)
12229{
12230 /* If there are no template parameters in scope, then there can't be
12231 any dependent types. */
12232 if (!processing_template_decl)
12233 return false;
12234
12235 /* If the type is NULL, we have not computed a type for the entity
12236 in question; in that case, the type is dependent. */
12237 if (!type)
12238 return true;
12239
12240 /* Erroneous types can be considered non-dependent. */
12241 if (type == error_mark_node)
12242 return false;
12243
12244 /* If we have not already computed the appropriate value for TYPE,
12245 do so now. */
12246 if (!TYPE_DEPENDENT_P_VALID (type))
12247 {
12248 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12249 TYPE_DEPENDENT_P_VALID (type) = 1;
12250 }
12251
12252 return TYPE_DEPENDENT_P (type);
12253}
12254
8d83f792
MM
12255/* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12256
12257static bool
12258dependent_scope_ref_p (tree expression, bool criterion (tree))
12259{
12260 tree scope;
12261 tree name;
12262
50bc768d 12263 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
8d83f792
MM
12264
12265 if (!TYPE_P (TREE_OPERAND (expression, 0)))
12266 return true;
12267
12268 scope = TREE_OPERAND (expression, 0);
12269 name = TREE_OPERAND (expression, 1);
12270
12271 /* [temp.dep.expr]
12272
12273 An id-expression is type-dependent if it contains a
12274 nested-name-specifier that contains a class-name that names a
12275 dependent type. */
12276 /* The suggested resolution to Core Issue 2 implies that if the
12277 qualifying type is the current class, then we must peek
12278 inside it. */
c8094d83 12279 if (DECL_P (name)
8d83f792
MM
12280 && currently_open_class (scope)
12281 && !criterion (name))
12282 return false;
12283 if (dependent_type_p (scope))
12284 return true;
12285
12286 return false;
12287}
12288
20929c7f
GB
12289/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12290 [temp.dep.constexpr] */
1fb3244a 12291
14d22dd6 12292bool
1fb3244a
MM
12293value_dependent_expression_p (tree expression)
12294{
12295 if (!processing_template_decl)
12296 return false;
12297
12298 /* A name declared with a dependent type. */
7416ab02 12299 if (DECL_P (expression) && type_dependent_expression_p (expression))
1fb3244a 12300 return true;
c8094d83 12301
7416ab02
NS
12302 switch (TREE_CODE (expression))
12303 {
12304 case IDENTIFIER_NODE:
12305 /* A name that has not been looked up -- must be dependent. */
12306 return true;
12307
12308 case TEMPLATE_PARM_INDEX:
12309 /* A non-type template parm. */
12310 return true;
12311
12312 case CONST_DECL:
12313 /* A non-type template parm. */
12314 if (DECL_TEMPLATE_PARM_P (expression))
d17811fd 12315 return true;
7416ab02 12316 return false;
d36d5600 12317
7416ab02 12318 case VAR_DECL:
c8094d83 12319 /* A constant with integral or enumeration type and is initialized
0cbd7506 12320 with an expression that is value-dependent. */
7416ab02
NS
12321 if (DECL_INITIAL (expression)
12322 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12323 && value_dependent_expression_p (DECL_INITIAL (expression)))
12324 return true;
12325 return false;
12326
12327 case DYNAMIC_CAST_EXPR:
12328 case STATIC_CAST_EXPR:
12329 case CONST_CAST_EXPR:
12330 case REINTERPRET_CAST_EXPR:
12331 case CAST_EXPR:
12332 /* These expressions are value-dependent if the type to which
0cbd7506
MS
12333 the cast occurs is dependent or the expression being casted
12334 is value-dependent. */
7416ab02
NS
12335 {
12336 tree type = TREE_TYPE (expression);
c8094d83 12337
7416ab02
NS
12338 if (dependent_type_p (type))
12339 return true;
c8094d83 12340
7416ab02
NS
12341 /* A functional cast has a list of operands. */
12342 expression = TREE_OPERAND (expression, 0);
12343 if (!expression)
12344 {
12345 /* If there are no operands, it must be an expression such
12346 as "int()". This should not happen for aggregate types
12347 because it would form non-constant expressions. */
12348 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
c8094d83 12349
7416ab02
NS
12350 return false;
12351 }
c8094d83 12352
7416ab02
NS
12353 if (TREE_CODE (expression) == TREE_LIST)
12354 {
12355 for (; expression; expression = TREE_CHAIN (expression))
d17811fd
MM
12356 if (value_dependent_expression_p (TREE_VALUE (expression)))
12357 return true;
7416ab02
NS
12358 return false;
12359 }
c8094d83 12360
d17811fd 12361 return value_dependent_expression_p (expression);
7416ab02 12362 }
c8094d83 12363
7416ab02
NS
12364 case SIZEOF_EXPR:
12365 case ALIGNOF_EXPR:
12366 /* A `sizeof' expression is value-dependent if the operand is
0cbd7506 12367 type-dependent. */
d17811fd
MM
12368 expression = TREE_OPERAND (expression, 0);
12369 if (TYPE_P (expression))
12370 return dependent_type_p (expression);
12371 return type_dependent_expression_p (expression);
100d337a 12372
7416ab02
NS
12373 case SCOPE_REF:
12374 return dependent_scope_ref_p (expression, value_dependent_expression_p);
100d337a 12375
7416ab02
NS
12376 case COMPONENT_REF:
12377 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12378 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12379
12380 case CALL_EXPR:
12381 /* A CALL_EXPR is value-dependent if any argument is
0cbd7506
MS
12382 value-dependent. Why do we have to handle CALL_EXPRs in this
12383 function at all? First, some function calls, those for which
12384 value_dependent_expression_p is true, man appear in constant
12385 expressions. Second, there appear to be bugs which result in
12386 other CALL_EXPRs reaching this point. */
7416ab02
NS
12387 {
12388 tree function = TREE_OPERAND (expression, 0);
12389 tree args = TREE_OPERAND (expression, 1);
c8094d83 12390
7416ab02
NS
12391 if (value_dependent_expression_p (function))
12392 return true;
c8094d83 12393
7416ab02
NS
12394 if (! args)
12395 return false;
c8094d83 12396
7416ab02
NS
12397 if (TREE_CODE (args) == TREE_LIST)
12398 {
12399 for (; args; args = TREE_CHAIN (args))
100d337a
MA
12400 if (value_dependent_expression_p (TREE_VALUE (args)))
12401 return true;
7416ab02
NS
12402 return false;
12403 }
c8094d83 12404
100d337a 12405 return value_dependent_expression_p (args);
7416ab02
NS
12406 }
12407
12408 default:
12409 /* A constant expression is value-dependent if any subexpression is
0cbd7506 12410 value-dependent. */
1fb3244a
MM
12411 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12412 {
7416ab02 12413 case tcc_reference:
6615c446 12414 case tcc_unary:
c8094d83 12415 return (value_dependent_expression_p
1fb3244a 12416 (TREE_OPERAND (expression, 0)));
c8094d83 12417
6615c446
JO
12418 case tcc_comparison:
12419 case tcc_binary:
c8094d83 12420 return ((value_dependent_expression_p
1fb3244a 12421 (TREE_OPERAND (expression, 0)))
c8094d83 12422 || (value_dependent_expression_p
1fb3244a 12423 (TREE_OPERAND (expression, 1))));
c8094d83 12424
6615c446 12425 case tcc_expression:
1fb3244a
MM
12426 {
12427 int i;
54e4aedb 12428 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
14d22dd6
MM
12429 /* In some cases, some of the operands may be missing.
12430 (For example, in the case of PREDECREMENT_EXPR, the
12431 amount to increment by may be missing.) That doesn't
12432 make the expression dependent. */
12433 if (TREE_OPERAND (expression, i)
12434 && (value_dependent_expression_p
12435 (TREE_OPERAND (expression, i))))
1fb3244a
MM
12436 return true;
12437 return false;
12438 }
c8094d83 12439
6615c446 12440 default:
7416ab02 12441 break;
1fb3244a
MM
12442 }
12443 }
c8094d83 12444
1fb3244a
MM
12445 /* The expression is not value-dependent. */
12446 return false;
12447}
12448
12449/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12450 [temp.dep.expr]. */
12451
12452bool
3a978d72 12453type_dependent_expression_p (tree expression)
1fb3244a
MM
12454{
12455 if (!processing_template_decl)
12456 return false;
12457
7efa3e22
NS
12458 if (expression == error_mark_node)
12459 return false;
10b1d5e7
MM
12460
12461 /* An unresolved name is always dependent. */
12462 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12463 return true;
c8094d83 12464
1fb3244a
MM
12465 /* Some expression forms are never type-dependent. */
12466 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12467 || TREE_CODE (expression) == SIZEOF_EXPR
12468 || TREE_CODE (expression) == ALIGNOF_EXPR
12469 || TREE_CODE (expression) == TYPEID_EXPR
12470 || TREE_CODE (expression) == DELETE_EXPR
12471 || TREE_CODE (expression) == VEC_DELETE_EXPR
12472 || TREE_CODE (expression) == THROW_EXPR)
12473 return false;
12474
12475 /* The types of these expressions depends only on the type to which
12476 the cast occurs. */
12477 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12478 || TREE_CODE (expression) == STATIC_CAST_EXPR
12479 || TREE_CODE (expression) == CONST_CAST_EXPR
12480 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12481 || TREE_CODE (expression) == CAST_EXPR)
12482 return dependent_type_p (TREE_TYPE (expression));
d17811fd 12483
1fb3244a
MM
12484 /* The types of these expressions depends only on the type created
12485 by the expression. */
d17811fd
MM
12486 if (TREE_CODE (expression) == NEW_EXPR
12487 || TREE_CODE (expression) == VEC_NEW_EXPR)
09d2f85f
KL
12488 {
12489 /* For NEW_EXPR tree nodes created inside a template, either
12490 the object type itself or a TREE_LIST may appear as the
12491 operand 1. */
12492 tree type = TREE_OPERAND (expression, 1);
12493 if (TREE_CODE (type) == TREE_LIST)
12494 /* This is an array type. We need to check array dimensions
12495 as well. */
12496 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12497 || value_dependent_expression_p
12498 (TREE_OPERAND (TREE_VALUE (type), 1));
12499 else
12500 return dependent_type_p (type);
12501 }
1fb3244a 12502
5a57f1b2
JM
12503 if (TREE_CODE (expression) == SCOPE_REF
12504 && dependent_scope_ref_p (expression,
12505 type_dependent_expression_p))
12506 return true;
12507
12508 if (TREE_CODE (expression) == FUNCTION_DECL
12509 && DECL_LANG_SPECIFIC (expression)
12510 && DECL_TEMPLATE_INFO (expression)
12511 && (any_dependent_template_arguments_p
12512 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12513 return true;
12514
12515 if (TREE_CODE (expression) == TEMPLATE_DECL
12516 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12517 return false;
12518
d17811fd
MM
12519 if (TREE_TYPE (expression) == unknown_type_node)
12520 {
12521 if (TREE_CODE (expression) == ADDR_EXPR)
12522 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
c353b8e3
MM
12523 if (TREE_CODE (expression) == COMPONENT_REF
12524 || TREE_CODE (expression) == OFFSET_REF)
6cb89308
NS
12525 {
12526 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12527 return true;
12528 expression = TREE_OPERAND (expression, 1);
12529 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12530 return false;
12531 }
3601f003
KL
12532 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12533 if (TREE_CODE (expression) == SCOPE_REF)
12534 return false;
c8094d83 12535
d17811fd
MM
12536 if (TREE_CODE (expression) == BASELINK)
12537 expression = BASELINK_FUNCTIONS (expression);
c8094d83 12538
d17811fd
MM
12539 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12540 {
ee3071ef
NS
12541 if (any_dependent_template_arguments_p
12542 (TREE_OPERAND (expression, 1)))
d17811fd
MM
12543 return true;
12544 expression = TREE_OPERAND (expression, 0);
12545 }
b207d6e2
MM
12546 gcc_assert (TREE_CODE (expression) == OVERLOAD
12547 || TREE_CODE (expression) == FUNCTION_DECL);
c8094d83 12548
315fb5db 12549 while (expression)
d17811fd 12550 {
315fb5db
NS
12551 if (type_dependent_expression_p (OVL_CURRENT (expression)))
12552 return true;
12553 expression = OVL_NEXT (expression);
d17811fd 12554 }
315fb5db 12555 return false;
d17811fd 12556 }
c8094d83 12557
3ce5fa4f
NS
12558 gcc_assert (TREE_CODE (expression) != TYPE_DECL);
12559
1fb3244a
MM
12560 return (dependent_type_p (TREE_TYPE (expression)));
12561}
12562
d17811fd
MM
12563/* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12564 contains a type-dependent expression. */
1fb3244a
MM
12565
12566bool
d17811fd
MM
12567any_type_dependent_arguments_p (tree args)
12568{
12569 while (args)
12570 {
7efa3e22
NS
12571 tree arg = TREE_VALUE (args);
12572
12573 if (type_dependent_expression_p (arg))
d17811fd
MM
12574 return true;
12575 args = TREE_CHAIN (args);
12576 }
12577 return false;
12578}
12579
12580/* Returns TRUE if the ARG (a template argument) is dependent. */
12581
12582static bool
1fb3244a
MM
12583dependent_template_arg_p (tree arg)
12584{
12585 if (!processing_template_decl)
12586 return false;
12587
12588 if (TREE_CODE (arg) == TEMPLATE_DECL
12589 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12590 return dependent_template_p (arg);
12591 else if (TYPE_P (arg))
12592 return dependent_type_p (arg);
12593 else
12594 return (type_dependent_expression_p (arg)
12595 || value_dependent_expression_p (arg));
12596}
12597
d17811fd
MM
12598/* Returns true if ARGS (a collection of template arguments) contains
12599 any dependent arguments. */
1fb3244a 12600
d17811fd
MM
12601bool
12602any_dependent_template_arguments_p (tree args)
1fb3244a 12603{
bf12d54d 12604 int i;
c353b8e3
MM
12605 int j;
12606
d17811fd
MM
12607 if (!args)
12608 return false;
12609
c353b8e3
MM
12610 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12611 {
12612 tree level = TMPL_ARGS_LEVEL (args, i + 1);
12613 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12614 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12615 return true;
12616 }
1fb3244a 12617
1fb3244a
MM
12618 return false;
12619}
12620
12621/* Returns TRUE if the template TMPL is dependent. */
12622
12623bool
12624dependent_template_p (tree tmpl)
12625{
b95cc51a
MM
12626 if (TREE_CODE (tmpl) == OVERLOAD)
12627 {
12628 while (tmpl)
12629 {
12630 if (dependent_template_p (OVL_FUNCTION (tmpl)))
12631 return true;
12632 tmpl = OVL_CHAIN (tmpl);
12633 }
12634 return false;
12635 }
12636
1fb3244a
MM
12637 /* Template template parameters are dependent. */
12638 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12639 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12640 return true;
27ab0504 12641 /* So are names that have not been looked up. */
acccf788
MM
12642 if (TREE_CODE (tmpl) == SCOPE_REF
12643 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
d17811fd 12644 return true;
1fb3244a
MM
12645 /* So are member templates of dependent classes. */
12646 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12647 return dependent_type_p (DECL_CONTEXT (tmpl));
12648 return false;
12649}
12650
d17811fd
MM
12651/* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12652
12653bool
12654dependent_template_id_p (tree tmpl, tree args)
12655{
12656 return (dependent_template_p (tmpl)
12657 || any_dependent_template_arguments_p (args));
12658}
12659
14d22dd6
MM
12660/* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12661 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12662 can be found. Note that this function peers inside uninstantiated
12663 templates and therefore should be used only in extremely limited
dda04398 12664 situations. ONLY_CURRENT_P restricts this peering to the currently
c51940a2 12665 open classes hierarchy (which is required when comparing types). */
14d22dd6
MM
12666
12667tree
12668resolve_typename_type (tree type, bool only_current_p)
12669{
12670 tree scope;
12671 tree name;
12672 tree decl;
12673 int quals;
4514aa8c 12674 tree pushed_scope;
14d22dd6 12675
50bc768d 12676 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
14d22dd6
MM
12677
12678 scope = TYPE_CONTEXT (type);
12679 name = TYPE_IDENTIFIER (type);
12680
12681 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12682 it first before we can figure out what NAME refers to. */
12683 if (TREE_CODE (scope) == TYPENAME_TYPE)
12684 scope = resolve_typename_type (scope, only_current_p);
12685 /* If we don't know what SCOPE refers to, then we cannot resolve the
12686 TYPENAME_TYPE. */
12687 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12688 return error_mark_node;
12689 /* If the SCOPE is a template type parameter, we have no way of
12690 resolving the name. */
12691 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12692 return type;
12693 /* If the SCOPE is not the current instantiation, there's no reason
12694 to look inside it. */
12695 if (only_current_p && !currently_open_class (scope))
12696 return error_mark_node;
ca099ac8
MM
12697 /* If SCOPE is a partial instantiation, it will not have a valid
12698 TYPE_FIELDS list, so use the original template. */
353b4fc0 12699 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
14d22dd6
MM
12700 /* Enter the SCOPE so that name lookup will be resolved as if we
12701 were in the class definition. In particular, SCOPE will no
12702 longer be considered a dependent type. */
4514aa8c 12703 pushed_scope = push_scope (scope);
14d22dd6 12704 /* Look up the declaration. */
86ac0575 12705 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
14d22dd6
MM
12706 /* Obtain the set of qualifiers applied to the TYPE. */
12707 quals = cp_type_quals (type);
12708 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12709 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12710 if (!decl)
12711 type = error_mark_node;
12712 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12713 && TREE_CODE (decl) == TYPE_DECL)
12714 type = TREE_TYPE (decl);
12715 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12716 && DECL_CLASS_TEMPLATE_P (decl))
12717 {
12718 tree tmpl;
12719 tree args;
12720 /* Obtain the template and the arguments. */
12721 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12722 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12723 /* Instantiate the template. */
12724 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
42eaed49 12725 /*entering_scope=*/0, tf_error | tf_user);
14d22dd6
MM
12726 }
12727 else
12728 type = error_mark_node;
12729 /* Qualify the resulting type. */
12730 if (type != error_mark_node && quals)
12731 type = cp_build_qualified_type (type, quals);
12732 /* Leave the SCOPE. */
4514aa8c
NS
12733 if (pushed_scope)
12734 pop_scope (pushed_scope);
14d22dd6
MM
12735
12736 return type;
12737}
12738
d17811fd
MM
12739/* EXPR is an expression which is not type-dependent. Return a proxy
12740 for EXPR that can be used to compute the types of larger
12741 expressions containing EXPR. */
12742
12743tree
12744build_non_dependent_expr (tree expr)
12745{
0deb916c
MM
12746 tree inner_expr;
12747
c8094d83 12748 /* Preserve null pointer constants so that the type of things like
d17811fd
MM
12749 "p == 0" where "p" is a pointer can be determined. */
12750 if (null_ptr_cst_p (expr))
12751 return expr;
12752 /* Preserve OVERLOADs; the functions must be available to resolve
12753 types. */
c8094d83 12754 inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
fdeff563
NS
12755 TREE_OPERAND (expr, 0) :
12756 TREE_CODE (expr) == COMPONENT_REF ?
12757 TREE_OPERAND (expr, 1) : expr);
2226e997 12758 if (is_overloaded_fn (inner_expr)
6439fffd 12759 || TREE_CODE (inner_expr) == OFFSET_REF)
d17811fd 12760 return expr;
5ae9ba3e
MM
12761 /* There is no need to return a proxy for a variable. */
12762 if (TREE_CODE (expr) == VAR_DECL)
12763 return expr;
7433e6d4
MM
12764 /* Preserve string constants; conversions from string constants to
12765 "char *" are allowed, even though normally a "const char *"
12766 cannot be used to initialize a "char *". */
12767 if (TREE_CODE (expr) == STRING_CST)
12768 return expr;
b7c707d1
MM
12769 /* Preserve arithmetic constants, as an optimization -- there is no
12770 reason to create a new node. */
12771 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12772 return expr;
9b7be7b5
MM
12773 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12774 There is at least one place where we want to know that a
12775 particular expression is a throw-expression: when checking a ?:
12776 expression, there are special rules if the second or third
878cbb73 12777 argument is a throw-expression. */
9b7be7b5
MM
12778 if (TREE_CODE (expr) == THROW_EXPR)
12779 return expr;
47d4c811
NS
12780
12781 if (TREE_CODE (expr) == COND_EXPR)
f293ce4b
RS
12782 return build3 (COND_EXPR,
12783 TREE_TYPE (expr),
12784 TREE_OPERAND (expr, 0),
c8094d83 12785 (TREE_OPERAND (expr, 1)
f293ce4b
RS
12786 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12787 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12788 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
8e1daa34
NS
12789 if (TREE_CODE (expr) == COMPOUND_EXPR
12790 && !COMPOUND_EXPR_OVERLOADED (expr))
f293ce4b
RS
12791 return build2 (COMPOUND_EXPR,
12792 TREE_TYPE (expr),
12793 TREE_OPERAND (expr, 0),
12794 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
c8094d83 12795
fdeff563
NS
12796 /* If the type is unknown, it can't really be non-dependent */
12797 gcc_assert (TREE_TYPE (expr) != unknown_type_node);
12798
c8094d83 12799 /* Otherwise, build a NON_DEPENDENT_EXPR.
d17811fd
MM
12800
12801 REFERENCE_TYPEs are not stripped for expressions in templates
12802 because doing so would play havoc with mangling. Consider, for
12803 example:
12804
c8094d83 12805 template <typename T> void f<T& g>() { g(); }
d17811fd
MM
12806
12807 In the body of "f", the expression for "g" will have
12808 REFERENCE_TYPE, even though the standard says that it should
12809 not. The reason is that we must preserve the syntactic form of
12810 the expression so that mangling (say) "f<g>" inside the body of
12811 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12812 stripped here. */
018a5803 12813 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
d17811fd
MM
12814}
12815
12816/* ARGS is a TREE_LIST of expressions as arguments to a function call.
12817 Return a new TREE_LIST with the various arguments replaced with
12818 equivalent non-dependent expressions. */
12819
12820tree
12821build_non_dependent_args (tree args)
12822{
12823 tree a;
12824 tree new_args;
12825
12826 new_args = NULL_TREE;
12827 for (a = args; a; a = TREE_CHAIN (a))
c8094d83 12828 new_args = tree_cons (NULL_TREE,
d17811fd
MM
12829 build_non_dependent_expr (TREE_VALUE (a)),
12830 new_args);
12831 return nreverse (new_args);
12832}
12833
e2500fed 12834#include "gt-cp-pt.h"