]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/pt.c
tree-cfg.c (dump_cfg_stats): Add a new fmt_str_2 format string and use it when printi...
[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,
c510f071 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
b1cc95ce
MM
645/* A explicit specialization or partial specialization TMPL is being
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
36a117a5
MM
675/* The TYPE is being declared. If it is a template type, that means it
676 is a partial specialization. Do appropriate error-checking. */
677
c8094d83 678void
3a978d72 679maybe_process_partial_specialization (tree type)
36a117a5 680{
6e049fcd
KL
681 /* TYPE maybe an ERROR_MARK_NODE. */
682 tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
683
a723baf1 684 if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
36a117a5 685 {
6e049fcd
KL
686 /* This is for ordinary explicit specialization and partial
687 specialization of a template class such as:
688
689 template <> class C<int>;
690
691 or:
692
693 template <class T> class C<T*>;
694
695 Make sure that `C<int>' and `C<T*>' are implicit instantiations. */
696
36a117a5 697 if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
d0f062fb 698 && !COMPLETE_TYPE_P (type))
36a117a5 699 {
b1cc95ce 700 check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
370af2d5 701 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
36a117a5
MM
702 if (processing_template_decl)
703 push_template_decl (TYPE_MAIN_DECL (type));
704 }
705 else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
0f51ccfc 706 error ("specialization of %qT after instantiation", type);
36a117a5 707 }
6e049fcd
KL
708 else if (CLASS_TYPE_P (type)
709 && !CLASSTYPE_USE_TEMPLATE (type)
710 && CLASSTYPE_TEMPLATE_INFO (type)
711 && context && CLASS_TYPE_P (context)
712 && CLASSTYPE_TEMPLATE_INFO (context))
713 {
714 /* This is for an explicit specialization of member class
715 template according to [temp.expl.spec/18]:
716
717 template <> template <class U> class C<int>::D;
718
719 The context `C<int>' must be an implicit instantiation.
720 Otherwise this is just a member class template declared
721 earlier like:
722
723 template <> class C<int> { template <class U> class D; };
724 template <> template <class U> class C<int>::D;
725
726 In the first case, `C<int>::D' is a specialization of `C<T>::D'
727 while in the second case, `C<int>::D' is a primary template
728 and `C<T>::D' may not exist. */
729
730 if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
731 && !COMPLETE_TYPE_P (type))
732 {
733 tree t;
734
735 if (current_namespace
736 != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
737 {
0f51ccfc 738 pedwarn ("specializing %q#T in different namespace", type);
dee15844
JM
739 pedwarn (" from definition of %q+#D",
740 CLASSTYPE_TI_TEMPLATE (type));
6e049fcd
KL
741 }
742
743 /* Check for invalid specialization after instantiation:
744
745 template <> template <> class C<int>::D<int>;
746 template <> template <class U> class C<int>::D; */
747
748 for (t = DECL_TEMPLATE_INSTANTIATIONS
749 (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
750 t; t = TREE_CHAIN (t))
751 if (TREE_VALUE (t) != type
752 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
0f51ccfc 753 error ("specialization %qT after instantiation %qT",
6e049fcd
KL
754 type, TREE_VALUE (t));
755
756 /* Mark TYPE as a specialization. And as a result, we only
757 have one level of template argument for the innermost
758 class template. */
759 SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
760 CLASSTYPE_TI_ARGS (type)
761 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
762 }
763 }
20496fa2 764 else if (processing_specialization)
0f51ccfc 765 error ("explicit specialization of non-template %qT", type);
36a117a5
MM
766}
767
ee81147e 768/* Returns nonzero if we can optimize the retrieval of specializations
c7222c02
MM
769 for TMPL, a TEMPLATE_DECL. In particular, for such a template, we
770 do not use DECL_TEMPLATE_SPECIALIZATIONS at all. */
771
c8094d83 772static inline bool
c7222c02
MM
773optimize_specialization_lookup_p (tree tmpl)
774{
775 return (DECL_FUNCTION_TEMPLATE_P (tmpl)
776 && DECL_CLASS_SCOPE_P (tmpl)
777 /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
778 parameter. */
779 && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1ca939e5
MM
780 /* The optimized lookup depends on the fact that the
781 template arguments for the member function template apply
782 purely to the containing class, which is not true if the
783 containing class is an explicit or partial
784 specialization. */
785 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
c7222c02
MM
786 && !DECL_MEMBER_TEMPLATE_P (tmpl)
787 && !DECL_CONV_FN_P (tmpl)
788 /* It is possible to have a template that is not a member
789 template and is not a member of a template class:
c8094d83
MS
790
791 template <typename T>
c7222c02 792 struct S { friend A::f(); };
c8094d83 793
c7222c02
MM
794 Here, the friend function is a template, but the context does
795 not have template information. The optimized lookup relies
796 on having ARGS be the template arguments for both the class
797 and the function template. */
798 && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
799}
800
75650646
MM
801/* Retrieve the specialization (in the sense of [temp.spec] - a
802 specialization is either an instantiation or an explicit
803 specialization) of TMPL for the given template ARGS. If there is
804 no such specialization, return NULL_TREE. The ARGS are a vector of
805 arguments, or a vector of vectors of arguments, in the case of
c8094d83 806 templates with more than one level of parameters.
c7222c02
MM
807
808 If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
809 then we search for a partial specialization matching ARGS. This
810 parameter is ignored if TMPL is not a class template. */
c8094d83 811
75650646 812static tree
c8094d83 813retrieve_specialization (tree tmpl, tree args,
c7222c02 814 bool class_specializations_p)
75650646 815{
50bc768d 816 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
75650646 817
36a117a5
MM
818 /* There should be as many levels of arguments as there are
819 levels of parameters. */
c8094d83 820 gcc_assert (TMPL_ARGS_DEPTH (args)
50bc768d 821 == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
c8094d83 822
c7222c02
MM
823 if (optimize_specialization_lookup_p (tmpl))
824 {
825 tree class_template;
826 tree class_specialization;
d4e6fecb 827 VEC(tree,gc) *methods;
c7222c02
MM
828 tree fns;
829 int idx;
830
831 /* The template arguments actually apply to the containing
832 class. Find the class specialization with those
833 arguments. */
834 class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
c8094d83 835 class_specialization
c7222c02
MM
836 = retrieve_specialization (class_template, args,
837 /*class_specializations_p=*/false);
838 if (!class_specialization)
839 return NULL_TREE;
840 /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
841 for the specialization. */
842 idx = class_method_index_for_fn (class_specialization, tmpl);
843 if (idx == -1)
844 return NULL_TREE;
845 /* Iterate through the methods with the indicated name, looking
846 for the one that has an instance of TMPL. */
847 methods = CLASSTYPE_METHOD_VEC (class_specialization);
848 for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
849 {
850 tree fn = OVL_CURRENT (fns);
851 if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
852 return fn;
853 }
854 return NULL_TREE;
855 }
856 else
857 {
858 tree *sp;
859 tree *head;
860
861 /* Class templates store their instantiations on the
862 DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
863 DECL_TEMPLATE_SPECIALIZATIONS list. */
864 if (!class_specializations_p
865 && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
866 sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
867 else
868 sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
869 head = sp;
870 /* Iterate through the list until we find a matching template. */
871 while (*sp != NULL_TREE)
872 {
873 tree spec = *sp;
c8094d83 874
c7222c02
MM
875 if (comp_template_args (TREE_PURPOSE (spec), args))
876 {
877 /* Use the move-to-front heuristic to speed up future
c8094d83 878 searches. */
c7222c02
MM
879 if (spec != *head)
880 {
881 *sp = TREE_CHAIN (*sp);
882 TREE_CHAIN (spec) = *head;
883 *head = spec;
884 }
885 return TREE_VALUE (spec);
886 }
887 sp = &TREE_CHAIN (spec);
888 }
889 }
75650646
MM
890
891 return NULL_TREE;
386b8a85
JM
892}
893
dc957d14 894/* Like retrieve_specialization, but for local declarations. */
9188c363
MM
895
896static tree
3a978d72 897retrieve_local_specialization (tree tmpl)
9188c363 898{
c68b0a84
KG
899 tree spec = htab_find_with_hash (local_specializations, tmpl,
900 htab_hash_pointer (tmpl));
a723baf1 901 return spec ? TREE_PURPOSE (spec) : NULL_TREE;
9188c363
MM
902}
903
838dfd8a 904/* Returns nonzero iff DECL is a specialization of TMPL. */
6757edfe
MM
905
906int
3a978d72 907is_specialization_of (tree decl, tree tmpl)
6757edfe
MM
908{
909 tree t;
910
911 if (TREE_CODE (decl) == FUNCTION_DECL)
912 {
c8094d83 913 for (t = decl;
6757edfe
MM
914 t != NULL_TREE;
915 t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
916 if (t == tmpl)
917 return 1;
918 }
c8094d83 919 else
6757edfe 920 {
50bc768d 921 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
6757edfe
MM
922
923 for (t = TREE_TYPE (decl);
924 t != NULL_TREE;
925 t = CLASSTYPE_USE_TEMPLATE (t)
926 ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
9edc3913 927 if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
6757edfe 928 return 1;
c8094d83 929 }
386b8a85 930
6757edfe
MM
931 return 0;
932}
75650646 933
d43f603d
KL
934/* Returns nonzero iff DECL is a specialization of friend declaration
935 FRIEND according to [temp.friend]. */
936
937bool
938is_specialization_of_friend (tree decl, tree friend)
939{
940 bool need_template = true;
941 int template_depth;
942
b939a023
KL
943 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
944 || TREE_CODE (decl) == TYPE_DECL);
d43f603d
KL
945
946 /* For [temp.friend/6] when FRIEND is an ordinary member function
947 of a template class, we want to check if DECL is a specialization
948 if this. */
949 if (TREE_CODE (friend) == FUNCTION_DECL
950 && DECL_TEMPLATE_INFO (friend)
951 && !DECL_USE_TEMPLATE (friend))
952 {
b939a023 953 /* We want a TEMPLATE_DECL for `is_specialization_of'. */
d43f603d
KL
954 friend = DECL_TI_TEMPLATE (friend);
955 need_template = false;
956 }
b939a023
KL
957 else if (TREE_CODE (friend) == TEMPLATE_DECL
958 && !PRIMARY_TEMPLATE_P (friend))
959 need_template = false;
d43f603d
KL
960
961 /* There is nothing to do if this is not a template friend. */
962 if (TREE_CODE (friend) != TEMPLATE_DECL)
b939a023 963 return false;
d43f603d
KL
964
965 if (is_specialization_of (decl, friend))
b939a023 966 return true;
d43f603d
KL
967
968 /* [temp.friend/6]
969 A member of a class template may be declared to be a friend of a
970 non-template class. In this case, the corresponding member of
971 every specialization of the class template is a friend of the
972 class granting friendship.
c8094d83 973
d43f603d
KL
974 For example, given a template friend declaration
975
976 template <class T> friend void A<T>::f();
977
978 the member function below is considered a friend
979
980 template <> struct A<int> {
981 void f();
982 };
983
984 For this type of template friend, TEMPLATE_DEPTH below will be
5c425df5 985 nonzero. To determine if DECL is a friend of FRIEND, we first
d43f603d
KL
986 check if the enclosing class is a specialization of another. */
987
988 template_depth = template_class_depth (DECL_CONTEXT (friend));
989 if (template_depth
990 && DECL_CLASS_SCOPE_P (decl)
c8094d83 991 && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
d43f603d
KL
992 CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
993 {
994 /* Next, we check the members themselves. In order to handle
b939a023 995 a few tricky cases, such as when FRIEND's are
d43f603d
KL
996
997 template <class T> friend void A<T>::g(T t);
998 template <class T> template <T t> friend void A<T>::h();
999
b939a023
KL
1000 and DECL's are
1001
1002 void A<int>::g(int);
1003 template <int> void A<int>::h();
1004
1005 we need to figure out ARGS, the template arguments from
1006 the context of DECL. This is required for template substitution
1007 of `T' in the function parameter of `g' and template parameter
1008 of `h' in the above examples. Here ARGS corresponds to `int'. */
d43f603d
KL
1009
1010 tree context = DECL_CONTEXT (decl);
1011 tree args = NULL_TREE;
1012 int current_depth = 0;
b939a023 1013
d43f603d
KL
1014 while (current_depth < template_depth)
1015 {
1016 if (CLASSTYPE_TEMPLATE_INFO (context))
1017 {
1018 if (current_depth == 0)
1019 args = TYPE_TI_ARGS (context);
1020 else
1021 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1022 current_depth++;
1023 }
1024 context = TYPE_CONTEXT (context);
1025 }
1026
1027 if (TREE_CODE (decl) == FUNCTION_DECL)
1028 {
1029 bool is_template;
1030 tree friend_type;
1031 tree decl_type;
1032 tree friend_args_type;
1033 tree decl_args_type;
1034
1035 /* Make sure that both DECL and FRIEND are templates or
1036 non-templates. */
1037 is_template = DECL_TEMPLATE_INFO (decl)
1038 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1039 if (need_template ^ is_template)
b939a023 1040 return false;
d43f603d
KL
1041 else if (is_template)
1042 {
da1d7781 1043 /* If both are templates, check template parameter list. */
d43f603d
KL
1044 tree friend_parms
1045 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1046 args, tf_none);
1047 if (!comp_template_parms
1048 (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1049 friend_parms))
b939a023 1050 return false;
d43f603d
KL
1051
1052 decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1053 }
1054 else
1055 decl_type = TREE_TYPE (decl);
1056
1057 friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1058 tf_none, NULL_TREE);
1059 if (friend_type == error_mark_node)
b939a023 1060 return false;
d43f603d
KL
1061
1062 /* Check if return types match. */
1063 if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
b939a023 1064 return false;
d43f603d
KL
1065
1066 /* Check if function parameter types match, ignoring the
1067 `this' parameter. */
1068 friend_args_type = TYPE_ARG_TYPES (friend_type);
1069 decl_args_type = TYPE_ARG_TYPES (decl_type);
1070 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1071 friend_args_type = TREE_CHAIN (friend_args_type);
1072 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1073 decl_args_type = TREE_CHAIN (decl_args_type);
b939a023
KL
1074
1075 return compparms (decl_args_type, friend_args_type);
1076 }
1077 else
1078 {
1079 /* DECL is a TYPE_DECL */
1080 bool is_template;
1081 tree decl_type = TREE_TYPE (decl);
1082
1083 /* Make sure that both DECL and FRIEND are templates or
1084 non-templates. */
1085 is_template
1086 = CLASSTYPE_TEMPLATE_INFO (decl_type)
1087 && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1088
1089 if (need_template ^ is_template)
1090 return false;
1091 else if (is_template)
1092 {
1093 tree friend_parms;
1094 /* If both are templates, check the name of the two
1095 TEMPLATE_DECL's first because is_friend didn't. */
1096 if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1097 != DECL_NAME (friend))
1098 return false;
1099
1100 /* Now check template parameter list. */
1101 friend_parms
1102 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1103 args, tf_none);
1104 return comp_template_parms
1105 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1106 friend_parms);
1107 }
1108 else
1109 return (DECL_NAME (decl)
1110 == DECL_NAME (friend));
d43f603d
KL
1111 }
1112 }
b939a023 1113 return false;
d43f603d
KL
1114}
1115
75650646 1116/* Register the specialization SPEC as a specialization of TMPL with
36a117a5
MM
1117 the indicated ARGS. Returns SPEC, or an equivalent prior
1118 declaration, if available. */
75650646 1119
36a117a5 1120static tree
3a978d72 1121register_specialization (tree spec, tree tmpl, tree args)
75650646 1122{
c7222c02 1123 tree fn;
75650646 1124
50bc768d 1125 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
75650646 1126
c8094d83 1127 if (TREE_CODE (spec) == FUNCTION_DECL
36a117a5
MM
1128 && uses_template_parms (DECL_TI_ARGS (spec)))
1129 /* This is the FUNCTION_DECL for a partial instantiation. Don't
1130 register it; we want the corresponding TEMPLATE_DECL instead.
1131 We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1132 the more obvious `uses_template_parms (spec)' to avoid problems
1133 with default function arguments. In particular, given
1134 something like this:
1135
0cbd7506 1136 template <class T> void f(T t1, T t = T())
36a117a5
MM
1137
1138 the default argument expression is not substituted for in an
1139 instantiation unless and until it is actually needed. */
1140 return spec;
28ba38e3 1141
c8094d83 1142 fn = retrieve_specialization (tmpl, args,
c7222c02
MM
1143 /*class_specializations_p=*/false);
1144 /* We can sometimes try to re-register a specialization that we've
1145 already got. In particular, regenerate_decl_from_template calls
1146 duplicate_decls which will update the specialization list. But,
1147 we'll still get called again here anyhow. It's more convenient
1148 to simply allow this than to try to prevent it. */
1149 if (fn == spec)
1150 return spec;
1151 else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
22e9174f 1152 {
c7222c02 1153 if (DECL_TEMPLATE_INSTANTIATION (fn))
22e9174f 1154 {
c8094d83 1155 if (TREE_USED (fn)
c7222c02 1156 || DECL_EXPLICIT_INSTANTIATION (fn))
22e9174f 1157 {
c7222c02
MM
1158 error ("specialization of %qD after instantiation",
1159 fn);
1160 return spec;
22e9174f 1161 }
c7222c02 1162 else
b1cc95ce 1163 {
c7222c02
MM
1164 /* This situation should occur only if the first
1165 specialization is an implicit instantiation, the
1166 second is an explicit specialization, and the
1167 implicit instantiation has not yet been used. That
1168 situation can occur if we have implicitly
1169 instantiated a member function and then specialized
1170 it later.
c8094d83 1171
c7222c02
MM
1172 We can also wind up here if a friend declaration that
1173 looked like an instantiation turns out to be a
1174 specialization:
c8094d83 1175
c7222c02
MM
1176 template <class T> void foo(T);
1177 class S { friend void foo<>(int) };
c8094d83
MS
1178 template <> void foo(int);
1179
c7222c02
MM
1180 We transform the existing DECL in place so that any
1181 pointers to it become pointers to the updated
1182 declaration.
1183
1184 If there was a definition for the template, but not
1185 for the specialization, we want this to look as if
1186 there were no definition, and vice versa. */
1187 DECL_INITIAL (fn) = NULL_TREE;
1188 duplicate_decls (spec, fn);
c8094d83 1189
b1cc95ce
MM
1190 return fn;
1191 }
22e9174f 1192 }
c7222c02
MM
1193 else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1194 {
1195 if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
1196 /* Dup decl failed, but this is a new definition. Set the
1197 line number so any errors match this new
1198 definition. */
1199 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
c8094d83 1200
c7222c02
MM
1201 return fn;
1202 }
b1cc95ce
MM
1203 }
1204
1205 /* A specialization must be declared in the same namespace as the
1206 template it is specializing. */
1207 if (DECL_TEMPLATE_SPECIALIZATION (spec)
1208 && !check_specialization_namespace (tmpl))
1209 DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
75650646 1210
c7222c02
MM
1211 if (!optimize_specialization_lookup_p (tmpl))
1212 DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1213 = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
36a117a5
MM
1214
1215 return spec;
1216}
1217
1218/* Unregister the specialization SPEC as a specialization of TMPL.
b3445994
MM
1219 Replace it with NEW_SPEC, if NEW_SPEC is non-NULL. Returns true
1220 if the SPEC was listed as a specialization of TMPL. */
36a117a5 1221
b3445994
MM
1222bool
1223reregister_specialization (tree spec, tree tmpl, tree new_spec)
36a117a5
MM
1224{
1225 tree* s;
1226
1227 for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1228 *s != NULL_TREE;
1229 s = &TREE_CHAIN (*s))
1230 if (TREE_VALUE (*s) == spec)
1231 {
b3445994
MM
1232 if (!new_spec)
1233 *s = TREE_CHAIN (*s);
1234 else
a3d87771 1235 TREE_VALUE (*s) = new_spec;
36a117a5
MM
1236 return 1;
1237 }
1238
1239 return 0;
75650646
MM
1240}
1241
a723baf1
MM
1242/* Compare an entry in the local specializations hash table P1 (which
1243 is really a pointer to a TREE_LIST) with P2 (which is really a
1244 DECL). */
1245
1246static int
1247eq_local_specializations (const void *p1, const void *p2)
1248{
1249 return TREE_VALUE ((tree) p1) == (tree) p2;
1250}
1251
69f794a7
MM
1252/* Hash P1, an entry in the local specializations table. */
1253
1254static hashval_t
1255hash_local_specialization (const void* p1)
1256{
1257 return htab_hash_pointer (TREE_VALUE ((tree) p1));
1258}
1259
6dfbb909
MM
1260/* Like register_specialization, but for local declarations. We are
1261 registering SPEC, an instantiation of TMPL. */
9188c363 1262
414ea4aa 1263static void
3a978d72 1264register_local_specialization (tree spec, tree tmpl)
9188c363 1265{
6dfbb909
MM
1266 void **slot;
1267
c8094d83 1268 slot = htab_find_slot_with_hash (local_specializations, tmpl,
69f794a7 1269 htab_hash_pointer (tmpl), INSERT);
a723baf1 1270 *slot = build_tree_list (spec, tmpl);
9188c363
MM
1271}
1272
e1467ff2
MM
1273/* Print the list of candidate FNS in an error message. */
1274
104bf76a 1275void
3a978d72 1276print_candidates (tree fns)
e1467ff2
MM
1277{
1278 tree fn;
1279
d8e178a0 1280 const char *str = "candidates are:";
e1467ff2
MM
1281
1282 for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1283 {
d6479fe7
MM
1284 tree f;
1285
1286 for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
dee15844 1287 error ("%s %+#D", str, OVL_CURRENT (f));
e1467ff2
MM
1288 str = " ";
1289 }
1290}
1291
75650646 1292/* Returns the template (one of the functions given by TEMPLATE_ID)
e1467ff2 1293 which can be specialized to match the indicated DECL with the
03017874
MM
1294 explicit template args given in TEMPLATE_ID. The DECL may be
1295 NULL_TREE if none is available. In that case, the functions in
1296 TEMPLATE_ID are non-members.
1297
838dfd8a 1298 If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
03017874
MM
1299 specialization of a member template.
1300
5fe7b654
GB
1301 The TEMPLATE_COUNT is the number of references to qualifying
1302 template classes that appeared in the name of the function. See
1303 check_explicit_specialization for a more accurate description.
1304
03017874
MM
1305 The template args (those explicitly specified and those deduced)
1306 are output in a newly created vector *TARGS_OUT.
1307
1308 If it is impossible to determine the result, an error message is
bf8f3f93 1309 issued. The error_mark_node is returned to indicate failure. */
75650646 1310
e9659ab0 1311static tree
c8094d83 1312determine_specialization (tree template_id,
0cbd7506
MS
1313 tree decl,
1314 tree* targs_out,
5fe7b654
GB
1315 int need_member_template,
1316 int template_count)
386b8a85 1317{
03017874
MM
1318 tree fns;
1319 tree targs;
1320 tree explicit_targs;
1321 tree candidates = NULL_TREE;
1322 tree templates = NULL_TREE;
5fe7b654
GB
1323 int header_count;
1324 struct cp_binding_level *b;
386b8a85 1325
e1467ff2
MM
1326 *targs_out = NULL_TREE;
1327
f2e48b67
BK
1328 if (template_id == error_mark_node)
1329 return error_mark_node;
1330
1331 fns = TREE_OPERAND (template_id, 0);
03017874 1332 explicit_targs = TREE_OPERAND (template_id, 1);
f2e48b67 1333
27fafc8d
JM
1334 if (fns == error_mark_node)
1335 return error_mark_node;
1336
c6002625 1337 /* Check for baselinks. */
91e490ab 1338 if (BASELINK_P (fns))
da15dae6 1339 fns = BASELINK_FUNCTIONS (fns);
386b8a85 1340
91e490ab
MM
1341 if (!is_overloaded_fn (fns))
1342 {
0f51ccfc 1343 error ("%qD is not a function template", fns);
91e490ab
MM
1344 return error_mark_node;
1345 }
1346
5fe7b654
GB
1347 /* Count the number of template headers specified for this
1348 specialization. */
1349 header_count = 0;
c8094d83 1350 for (b = current_binding_level;
98f99d7f 1351 b->kind == sk_template_parms;
5fe7b654
GB
1352 b = b->level_chain)
1353 ++header_count;
1354
2c73f9f5 1355 for (; fns; fns = OVL_NEXT (fns))
386b8a85 1356 {
9dfce8fd 1357 tree fn = OVL_CURRENT (fns);
03017874
MM
1358
1359 if (TREE_CODE (fn) == TEMPLATE_DECL)
d955f6ea
KL
1360 {
1361 tree decl_arg_types;
0da99d4e 1362 tree fn_arg_types;
d955f6ea
KL
1363
1364 /* DECL might be a specialization of FN. */
1365
1366 /* Adjust the type of DECL in case FN is a static member. */
1367 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
c8094d83 1368 if (DECL_STATIC_FUNCTION_P (fn)
d955f6ea
KL
1369 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1370 decl_arg_types = TREE_CHAIN (decl_arg_types);
1371
1372 /* Check that the number of function parameters matches.
1373 For example,
1374 template <class T> void f(int i = 0);
1375 template <> void f<int>();
0e339752 1376 The specialization f<int> is invalid but is not caught
d955f6ea
KL
1377 by get_bindings below. */
1378
0da99d4e
GB
1379 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1380 if (list_length (fn_arg_types) != list_length (decl_arg_types))
1381 continue;
1382
1383 /* For a non-static member function, we need to make sure that
1384 the const qualification is the same. This can be done by
1385 checking the 'this' in the argument list. */
1386 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
c8094d83 1387 && !same_type_p (TREE_VALUE (fn_arg_types),
0da99d4e 1388 TREE_VALUE (decl_arg_types)))
d955f6ea
KL
1389 continue;
1390
5fe7b654
GB
1391 /* In case of explicit specialization, we need to check if
1392 the number of template headers appearing in the specialization
1393 is correct. This is usually done in check_explicit_specialization,
1394 but the check done there cannot be exhaustive when specializing
1395 member functions. Consider the following code:
1396
1397 template <> void A<int>::f(int);
1398 template <> template <> void A<int>::f(int);
1399
1400 Assuming that A<int> is not itself an explicit specialization
1401 already, the first line specializes "f" which is a non-template
1402 member function, whilst the second line specializes "f" which
1403 is a template member function. So both lines are syntactically
1404 correct, and check_explicit_specialization does not reject
1405 them.
c8094d83 1406
5fe7b654
GB
1407 Here, we can do better, as we are matching the specialization
1408 against the declarations. We count the number of template
1409 headers, and we check if they match TEMPLATE_COUNT + 1
1410 (TEMPLATE_COUNT is the number of qualifying template classes,
1411 plus there must be another header for the member template
1412 itself).
c8094d83 1413
5fe7b654
GB
1414 Notice that if header_count is zero, this is not a
1415 specialization but rather a template instantiation, so there
1416 is no check we can perform here. */
1417 if (header_count && header_count != template_count + 1)
1418 continue;
1419
98f99d7f
MM
1420 /* Check that the number of template arguments at the
1421 innermost level for DECL is the same as for FN. */
1422 if (current_binding_level->kind == sk_template_parms
1423 && !current_binding_level->explicit_spec_p
1424 && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1425 != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms))))
1426 continue;
c8094d83 1427
d955f6ea
KL
1428 /* See whether this function might be a specialization of this
1429 template. */
a34d3336 1430 targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
d955f6ea
KL
1431
1432 if (!targs)
1433 /* We cannot deduce template arguments that when used to
1434 specialize TMPL will produce DECL. */
1435 continue;
1436
1437 /* Save this template, and the arguments deduced. */
1438 templates = tree_cons (targs, fn, templates);
1439 }
03017874
MM
1440 else if (need_member_template)
1441 /* FN is an ordinary member function, and we need a
1442 specialization of a member template. */
d955f6ea 1443 ;
03017874
MM
1444 else if (TREE_CODE (fn) != FUNCTION_DECL)
1445 /* We can get IDENTIFIER_NODEs here in certain erroneous
1446 cases. */
d955f6ea 1447 ;
03017874
MM
1448 else if (!DECL_FUNCTION_MEMBER_P (fn))
1449 /* This is just an ordinary non-member function. Nothing can
1450 be a specialization of that. */
d955f6ea 1451 ;
3b82c249
KL
1452 else if (DECL_ARTIFICIAL (fn))
1453 /* Cannot specialize functions that are created implicitly. */
d955f6ea 1454 ;
75650646 1455 else
03017874
MM
1456 {
1457 tree decl_arg_types;
386b8a85 1458
03017874
MM
1459 /* This is an ordinary member function. However, since
1460 we're here, we can assume it's enclosing class is a
1461 template class. For example,
c8094d83 1462
03017874
MM
1463 template <typename T> struct S { void f(); };
1464 template <> void S<int>::f() {}
1465
1466 Here, S<int>::f is a non-template, but S<int> is a
1467 template class. If FN has the same type as DECL, we
1468 might be in business. */
f5d47abd
KL
1469
1470 if (!DECL_TEMPLATE_INFO (fn))
1471 /* Its enclosing class is an explicit specialization
1472 of a template class. This is not a candidate. */
1473 continue;
1474
03017874
MM
1475 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1476 TREE_TYPE (TREE_TYPE (fn))))
1477 /* The return types differ. */
1478 continue;
1479
1480 /* Adjust the type of DECL in case FN is a static member. */
1481 decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
c8094d83 1482 if (DECL_STATIC_FUNCTION_P (fn)
03017874
MM
1483 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1484 decl_arg_types = TREE_CHAIN (decl_arg_types);
1485
c8094d83 1486 if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
03017874
MM
1487 decl_arg_types))
1488 /* They match! */
1489 candidates = tree_cons (NULL_TREE, fn, candidates);
03017874 1490 }
386b8a85 1491 }
03017874 1492
bf8f3f93 1493 if (templates && TREE_CHAIN (templates))
386b8a85 1494 {
03017874 1495 /* We have:
c8094d83 1496
03017874
MM
1497 [temp.expl.spec]
1498
1499 It is possible for a specialization with a given function
1500 signature to be instantiated from more than one function
1501 template. In such cases, explicit specification of the
1502 template arguments must be used to uniquely identify the
1503 function template specialization being specialized.
1504
1505 Note that here, there's no suggestion that we're supposed to
1506 determine which of the candidate templates is most
1507 specialized. However, we, also have:
1508
1509 [temp.func.order]
1510
1511 Partial ordering of overloaded function template
1512 declarations is used in the following contexts to select
1513 the function template to which a function template
c8094d83 1514 specialization refers:
03017874 1515
0cbd7506 1516 -- when an explicit specialization refers to a function
c8094d83 1517 template.
03017874
MM
1518
1519 So, we do use the partial ordering rules, at least for now.
0e339752 1520 This extension can only serve to make invalid programs valid,
03017874
MM
1521 so it's safe. And, there is strong anecdotal evidence that
1522 the committee intended the partial ordering rules to apply;
1523 the EDG front-end has that behavior, and John Spicer claims
1524 that the committee simply forgot to delete the wording in
1525 [temp.expl.spec]. */
1526 tree tmpl = most_specialized (templates, decl, explicit_targs);
1527 if (tmpl && tmpl != error_mark_node)
1528 {
a34d3336 1529 targs = get_bindings (tmpl, decl, explicit_targs, /*check_ret=*/true);
e1b3e07d 1530 templates = tree_cons (targs, tmpl, NULL_TREE);
03017874 1531 }
e1467ff2
MM
1532 }
1533
03017874 1534 if (templates == NULL_TREE && candidates == NULL_TREE)
e1467ff2 1535 {
dee15844
JM
1536 error ("template-id %qD for %q+D does not match any template "
1537 "declaration", template_id, decl);
03017874 1538 return error_mark_node;
386b8a85 1539 }
03017874 1540 else if ((templates && TREE_CHAIN (templates))
bf8f3f93
MM
1541 || (candidates && TREE_CHAIN (candidates))
1542 || (templates && candidates))
386b8a85 1543 {
dee15844
JM
1544 error ("ambiguous template specialization %qD for %q+D",
1545 template_id, decl);
bf8f3f93
MM
1546 chainon (candidates, templates);
1547 print_candidates (candidates);
03017874 1548 return error_mark_node;
386b8a85
JM
1549 }
1550
c6002625 1551 /* We have one, and exactly one, match. */
03017874
MM
1552 if (candidates)
1553 {
1554 /* It was a specialization of an ordinary member function in a
1555 template class. */
1556 *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1557 return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1558 }
1559
1560 /* It was a specialization of a template. */
17aec3eb 1561 targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
03017874
MM
1562 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1563 {
1564 *targs_out = copy_node (targs);
c8094d83 1565 SET_TMPL_ARGS_LEVEL (*targs_out,
03017874
MM
1566 TMPL_ARGS_DEPTH (*targs_out),
1567 TREE_PURPOSE (templates));
1568 }
1569 else
1570 *targs_out = TREE_PURPOSE (templates);
e1467ff2 1571 return TREE_VALUE (templates);
8d08fdba 1572}
8afa707f
MM
1573
1574/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1575 but with the default argument values filled in from those in the
1576 TMPL_TYPES. */
c8094d83 1577
8afa707f 1578static tree
3a978d72
NN
1579copy_default_args_to_explicit_spec_1 (tree spec_types,
1580 tree tmpl_types)
8afa707f
MM
1581{
1582 tree new_spec_types;
1583
1584 if (!spec_types)
1585 return NULL_TREE;
1586
1587 if (spec_types == void_list_node)
1588 return void_list_node;
1589
1590 /* Substitute into the rest of the list. */
1591 new_spec_types =
1592 copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1593 TREE_CHAIN (tmpl_types));
c8094d83 1594
8afa707f
MM
1595 /* Add the default argument for this parameter. */
1596 return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1597 TREE_VALUE (spec_types),
1598 new_spec_types);
1599}
1600
1601/* DECL is an explicit specialization. Replicate default arguments
1602 from the template it specializes. (That way, code like:
1603
1604 template <class T> void f(T = 3);
1605 template <> void f(double);
c8094d83 1606 void g () { f (); }
8afa707f
MM
1607
1608 works, as required.) An alternative approach would be to look up
1609 the correct default arguments at the call-site, but this approach
1610 is consistent with how implicit instantiations are handled. */
1611
1612static void
3a978d72 1613copy_default_args_to_explicit_spec (tree decl)
8afa707f
MM
1614{
1615 tree tmpl;
1616 tree spec_types;
1617 tree tmpl_types;
1618 tree new_spec_types;
1619 tree old_type;
1620 tree new_type;
1621 tree t;
08c2df0f
NS
1622 tree object_type = NULL_TREE;
1623 tree in_charge = NULL_TREE;
e0fff4b3 1624 tree vtt = NULL_TREE;
8afa707f
MM
1625
1626 /* See if there's anything we need to do. */
1627 tmpl = DECL_TI_TEMPLATE (decl);
1628 tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1629 for (t = tmpl_types; t; t = TREE_CHAIN (t))
1630 if (TREE_PURPOSE (t))
1631 break;
1632 if (!t)
1633 return;
1634
1635 old_type = TREE_TYPE (decl);
1636 spec_types = TYPE_ARG_TYPES (old_type);
c8094d83 1637
8afa707f
MM
1638 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1639 {
08c2df0f 1640 /* Remove the this pointer, but remember the object's type for
0cbd7506 1641 CV quals. */
08c2df0f 1642 object_type = TREE_TYPE (TREE_VALUE (spec_types));
8afa707f
MM
1643 spec_types = TREE_CHAIN (spec_types);
1644 tmpl_types = TREE_CHAIN (tmpl_types);
c8094d83 1645
8afa707f 1646 if (DECL_HAS_IN_CHARGE_PARM_P (decl))
0cbd7506
MS
1647 {
1648 /* DECL may contain more parameters than TMPL due to the extra
1649 in-charge parameter in constructors and destructors. */
1650 in_charge = spec_types;
08c2df0f
NS
1651 spec_types = TREE_CHAIN (spec_types);
1652 }
e0fff4b3
JM
1653 if (DECL_HAS_VTT_PARM_P (decl))
1654 {
1655 vtt = spec_types;
1656 spec_types = TREE_CHAIN (spec_types);
1657 }
8afa707f
MM
1658 }
1659
1660 /* Compute the merged default arguments. */
c8094d83 1661 new_spec_types =
8afa707f
MM
1662 copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1663
08c2df0f
NS
1664 /* Compute the new FUNCTION_TYPE. */
1665 if (object_type)
8afa707f 1666 {
e0fff4b3 1667 if (vtt)
0cbd7506
MS
1668 new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1669 TREE_VALUE (vtt),
1670 new_spec_types);
e0fff4b3 1671
08c2df0f 1672 if (in_charge)
0cbd7506
MS
1673 /* Put the in-charge parameter back. */
1674 new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1675 TREE_VALUE (in_charge),
1676 new_spec_types);
08c2df0f 1677
43dc123f
MM
1678 new_type = build_method_type_directly (object_type,
1679 TREE_TYPE (old_type),
1680 new_spec_types);
8afa707f 1681 }
8afa707f
MM
1682 else
1683 new_type = build_function_type (TREE_TYPE (old_type),
08c2df0f 1684 new_spec_types);
e9525111
MM
1685 new_type = cp_build_type_attribute_variant (new_type,
1686 TYPE_ATTRIBUTES (old_type));
8afa707f
MM
1687 new_type = build_exception_variant (new_type,
1688 TYPE_RAISES_EXCEPTIONS (old_type));
1689 TREE_TYPE (decl) = new_type;
1690}
1691
386b8a85 1692/* Check to see if the function just declared, as indicated in
75650646
MM
1693 DECLARATOR, and in DECL, is a specialization of a function
1694 template. We may also discover that the declaration is an explicit
1695 instantiation at this point.
1696
e1467ff2 1697 Returns DECL, or an equivalent declaration that should be used
03017874
MM
1698 instead if all goes well. Issues an error message if something is
1699 amiss. Returns error_mark_node if the error is not easily
1700 recoverable.
c8094d83
MS
1701
1702 FLAGS is a bitmask consisting of the following flags:
75650646 1703
75650646
MM
1704 2: The function has a definition.
1705 4: The function is a friend.
75650646
MM
1706
1707 The TEMPLATE_COUNT is the number of references to qualifying
1708 template classes that appeared in the name of the function. For
1709 example, in
1710
1711 template <class T> struct S { void f(); };
1712 void S<int>::f();
c8094d83 1713
75650646
MM
1714 the TEMPLATE_COUNT would be 1. However, explicitly specialized
1715 classes are not counted in the TEMPLATE_COUNT, so that in
1716
1717 template <class T> struct S {};
1718 template <> struct S<int> { void f(); }
36a117a5 1719 template <> void S<int>::f();
75650646
MM
1720
1721 the TEMPLATE_COUNT would be 0. (Note that this declaration is
0e339752 1722 invalid; there should be no template <>.)
75650646
MM
1723
1724 If the function is a specialization, it is marked as such via
1725 DECL_TEMPLATE_SPECIALIZATION. Furthermore, its DECL_TEMPLATE_INFO
c8094d83 1726 is set up correctly, and it is added to the list of specializations
75650646 1727 for that template. */
386b8a85 1728
e1467ff2 1729tree
c8094d83 1730check_explicit_specialization (tree declarator,
0cbd7506
MS
1731 tree decl,
1732 int template_count,
1733 int flags)
386b8a85 1734{
75650646
MM
1735 int have_def = flags & 2;
1736 int is_friend = flags & 4;
1737 int specialization = 0;
e1467ff2 1738 int explicit_instantiation = 0;
fd4de5ff 1739 int member_specialization = 0;
75650646
MM
1740 tree ctype = DECL_CLASS_CONTEXT (decl);
1741 tree dname = DECL_NAME (decl);
74b846e0 1742 tmpl_spec_kind tsk;
386b8a85 1743
f65b7de3
GB
1744 if (is_friend)
1745 {
1746 if (!processing_specialization)
1747 tsk = tsk_none;
1748 else
1749 tsk = tsk_excessive_parms;
1750 }
1751 else
1752 tsk = current_tmpl_spec_kind (template_count);
75650646 1753
74b846e0
MM
1754 switch (tsk)
1755 {
1756 case tsk_none:
c8094d83 1757 if (processing_specialization)
75650646 1758 {
fd4de5ff
MM
1759 specialization = 1;
1760 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
75650646 1761 }
74b846e0 1762 else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
386b8a85 1763 {
74b846e0
MM
1764 if (is_friend)
1765 /* This could be something like:
75650646 1766
74b846e0
MM
1767 template <class T> void f(T);
1768 class S { friend void f<>(int); } */
1769 specialization = 1;
1770 else
1771 {
1772 /* This case handles bogus declarations like template <>
1773 template <class T> void f<int>(); */
1774
0f51ccfc 1775 error ("template-id %qD in declaration of primary template",
0cbd7506 1776 declarator);
74b846e0
MM
1777 return decl;
1778 }
1779 }
1780 break;
1781
1782 case tsk_invalid_member_spec:
1783 /* The error has already been reported in
1784 check_specialization_scope. */
1785 return error_mark_node;
1786
1787 case tsk_invalid_expl_inst:
33bd39a2 1788 error ("template parameter list used in explicit instantiation");
74b846e0
MM
1789
1790 /* Fall through. */
1791
1792 case tsk_expl_inst:
fd4de5ff 1793 if (have_def)
33bd39a2 1794 error ("definition provided for explicit instantiation");
c8094d83 1795
fd4de5ff 1796 explicit_instantiation = 1;
74b846e0 1797 break;
fd4de5ff 1798
74b846e0 1799 case tsk_excessive_parms:
f03adc6b
GB
1800 case tsk_insufficient_parms:
1801 if (tsk == tsk_excessive_parms)
0cbd7506 1802 error ("too many template parameter lists in declaration of %qD",
f03adc6b
GB
1803 decl);
1804 else if (template_header_count)
0f51ccfc 1805 error("too few template parameter lists in declaration of %qD", decl);
f03adc6b 1806 else
0f51ccfc 1807 error("explicit specialization of %qD must be introduced by "
9e637a26 1808 "%<template <>%>", decl);
75650646 1809
74b846e0
MM
1810 /* Fall through. */
1811 case tsk_expl_spec:
1812 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1813 if (ctype)
1814 member_specialization = 1;
1815 else
1816 specialization = 1;
1817 break;
74b846e0
MM
1818
1819 case tsk_template:
1820 if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
c6f2ed0d 1821 {
fd4de5ff
MM
1822 /* This case handles bogus declarations like template <>
1823 template <class T> void f<int>(); */
75650646 1824
655dc6ee 1825 if (uses_template_parms (declarator))
0f51ccfc 1826 error ("function template partial specialization %qD "
e1e93ad8 1827 "is not allowed", declarator);
655dc6ee 1828 else
0f51ccfc 1829 error ("template-id %qD in declaration of primary template",
0cbd7506 1830 declarator);
fd4de5ff 1831 return decl;
386b8a85 1832 }
74b846e0
MM
1833
1834 if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1835 /* This is a specialization of a member template, without
1836 specialization the containing class. Something like:
1837
1838 template <class T> struct S {
c8094d83 1839 template <class U> void f (U);
0cbd7506 1840 };
74b846e0 1841 template <> template <class U> void S<int>::f(U) {}
c8094d83 1842
74b846e0
MM
1843 That's a specialization -- but of the entire template. */
1844 specialization = 1;
1845 break;
1846
1847 default:
315fb5db 1848 gcc_unreachable ();
75650646 1849 }
386b8a85 1850
670960ac
JM
1851 if (specialization || member_specialization)
1852 {
1853 tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1854 for (; t; t = TREE_CHAIN (t))
1855 if (TREE_PURPOSE (t))
1856 {
33bd39a2 1857 pedwarn
8251199e 1858 ("default argument specified in explicit specialization");
670960ac
JM
1859 break;
1860 }
f3400fe2 1861 if (current_lang_name == lang_name_c)
33bd39a2 1862 error ("template specialization with C linkage");
670960ac
JM
1863 }
1864
e1467ff2 1865 if (specialization || member_specialization || explicit_instantiation)
75650646
MM
1866 {
1867 tree tmpl = NULL_TREE;
1868 tree targs = NULL_TREE;
75650646
MM
1869
1870 /* Make sure that the declarator is a TEMPLATE_ID_EXPR. */
386b8a85
JM
1871 if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1872 {
1873 tree fns;
1874
50bc768d 1875 gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2f54a1db 1876 if (ctype)
386b8a85 1877 fns = dname;
2f54a1db
GB
1878 else
1879 {
1880 /* If there is no class context, the explicit instantiation
0cbd7506 1881 must be at namespace scope. */
50bc768d 1882 gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2f54a1db
GB
1883
1884 /* Find the namespace binding, using the declaration
0cbd7506 1885 context. */
2f54a1db 1886 fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
4230cec2
NS
1887 if (!fns || !is_overloaded_fn (fns))
1888 {
1889 error ("%qD is not a template function", dname);
1890 fns = error_mark_node;
1891 }
2f54a1db 1892 }
386b8a85 1893
2f54a1db 1894 declarator = lookup_template_function (fns, NULL_TREE);
386b8a85
JM
1895 }
1896
f2e48b67
BK
1897 if (declarator == error_mark_node)
1898 return error_mark_node;
1899
75650646
MM
1900 if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1901 {
8ec2ac34 1902 if (!explicit_instantiation)
0e339752 1903 /* A specialization in class scope. This is invalid,
6c30752f
MM
1904 but the error will already have been flagged by
1905 check_specialization_scope. */
1906 return error_mark_node;
8ec2ac34 1907 else
b370501f 1908 {
0e339752 1909 /* It's not valid to write an explicit instantiation in
b370501f 1910 class scope, e.g.:
8ec2ac34 1911
0cbd7506 1912 class C { template void f(); }
8ec2ac34 1913
b370501f
KG
1914 This case is caught by the parser. However, on
1915 something like:
c8094d83 1916
b370501f 1917 template class C { void f(); };
8ec2ac34 1918
0e339752 1919 (which is invalid) we can get here. The error will be
b370501f
KG
1920 issued later. */
1921 ;
1922 }
8ec2ac34 1923
e1467ff2 1924 return decl;
75650646 1925 }
c8094d83 1926 else if (ctype != NULL_TREE
75650646
MM
1927 && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1928 IDENTIFIER_NODE))
386b8a85 1929 {
75650646
MM
1930 /* Find the list of functions in ctype that have the same
1931 name as the declared function. */
1932 tree name = TREE_OPERAND (declarator, 0);
03017874
MM
1933 tree fns = NULL_TREE;
1934 int idx;
1935
8ba658ee 1936 if (constructor_name_p (name, ctype))
386b8a85 1937 {
75650646 1938 int is_constructor = DECL_CONSTRUCTOR_P (decl);
c8094d83 1939
75650646 1940 if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
9f4faeae 1941 : !CLASSTYPE_DESTRUCTORS (ctype))
75650646
MM
1942 {
1943 /* From [temp.expl.spec]:
c8094d83 1944
75650646
MM
1945 If such an explicit specialization for the member
1946 of a class template names an implicitly-declared
1947 special member function (clause _special_), the
c8094d83 1948 program is ill-formed.
e1467ff2
MM
1949
1950 Similar language is found in [temp.explicit]. */
33bd39a2 1951 error ("specialization of implicitly-declared special member function");
03017874 1952 return error_mark_node;
75650646 1953 }
386b8a85 1954
42da2fd8 1955 name = is_constructor ? ctor_identifier : dtor_identifier;
75650646 1956 }
42da2fd8 1957
421844e7 1958 if (!DECL_CONV_FN_P (decl))
03017874
MM
1959 {
1960 idx = lookup_fnfields_1 (ctype, name);
1961 if (idx >= 0)
aaaa46d2 1962 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
03017874
MM
1963 }
1964 else
1965 {
d4e6fecb 1966 VEC(tree,gc) *methods;
aaaa46d2 1967 tree ovl;
03017874
MM
1968
1969 /* For a type-conversion operator, we cannot do a
1970 name-based lookup. We might be looking for `operator
1971 int' which will be a specialization of `operator T'.
1972 So, we find *all* the conversion operators, and then
1973 select from them. */
1974 fns = NULL_TREE;
1975
1976 methods = CLASSTYPE_METHOD_VEC (ctype);
1977 if (methods)
5dd236e2 1978 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
9ba5ff0f 1979 VEC_iterate (tree, methods, idx, ovl);
aaaa46d2 1980 ++idx)
03017874 1981 {
aaaa46d2 1982 if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
03017874
MM
1983 /* There are no more conversion functions. */
1984 break;
1985
1986 /* Glue all these conversion functions together
1987 with those we already have. */
1988 for (; ovl; ovl = OVL_NEXT (ovl))
1989 fns = ovl_cons (OVL_CURRENT (ovl), fns);
1990 }
1991 }
c8094d83
MS
1992
1993 if (fns == NULL_TREE)
386b8a85 1994 {
0f51ccfc 1995 error ("no member function %qD declared in %qT", name, ctype);
03017874 1996 return error_mark_node;
386b8a85
JM
1997 }
1998 else
1999 TREE_OPERAND (declarator, 0) = fns;
2000 }
c8094d83 2001
e1467ff2
MM
2002 /* Figure out what exactly is being specialized at this point.
2003 Note that for an explicit instantiation, even one for a
38e01259 2004 member function, we cannot tell apriori whether the
e1467ff2 2005 instantiation is for a member template, or just a member
36a117a5
MM
2006 function of a template class. Even if a member template is
2007 being instantiated, the member template arguments may be
2008 elided if they can be deduced from the rest of the
2009 declaration. */
e1467ff2 2010 tmpl = determine_specialization (declarator, decl,
c8094d83 2011 &targs,
5fe7b654
GB
2012 member_specialization,
2013 template_count);
c8094d83 2014
03017874
MM
2015 if (!tmpl || tmpl == error_mark_node)
2016 /* We couldn't figure out what this declaration was
2017 specializing. */
2018 return error_mark_node;
2019 else
386b8a85 2020 {
25aab5d0 2021 tree gen_tmpl = most_general_template (tmpl);
36a117a5 2022
e1467ff2
MM
2023 if (explicit_instantiation)
2024 {
03d0f4af 2025 /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
c8094d83 2026 is done by do_decl_instantiation later. */
25aab5d0
MM
2027
2028 int arg_depth = TMPL_ARGS_DEPTH (targs);
2029 int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2030
2031 if (arg_depth > parm_depth)
2032 {
2033 /* If TMPL is not the most general template (for
2034 example, if TMPL is a friend template that is
2035 injected into namespace scope), then there will
dc957d14 2036 be too many levels of TARGS. Remove some of them
25aab5d0
MM
2037 here. */
2038 int i;
2039 tree new_targs;
2040
f31c0a32 2041 new_targs = make_tree_vec (parm_depth);
25aab5d0
MM
2042 for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2043 TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2044 = TREE_VEC_ELT (targs, i);
2045 targs = new_targs;
2046 }
c8094d83 2047
3e4a3562 2048 return instantiate_template (tmpl, targs, tf_error);
e1467ff2 2049 }
74b846e0 2050
6c07f448
KL
2051 /* If we thought that the DECL was a member function, but it
2052 turns out to be specializing a static member function,
4546865e 2053 make DECL a static member function as well. */
6c07f448
KL
2054 if (DECL_STATIC_FUNCTION_P (tmpl)
2055 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
4546865e 2056 revert_static_member_fn (decl);
6c07f448 2057
f9a7ae04
MM
2058 /* If this is a specialization of a member template of a
2059 template class. In we want to return the TEMPLATE_DECL,
2060 not the specialization of it. */
74b846e0
MM
2061 if (tsk == tsk_template)
2062 {
2063 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
f9a7ae04 2064 DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
b190f239
NS
2065 if (have_def)
2066 {
f31686a3
RH
2067 DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2068 DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2069 = DECL_SOURCE_LOCATION (decl);
08167d1c
AO
2070 /* We want to use the argument list specified in the
2071 definition, not in the original declaration. */
2072 DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2073 = DECL_ARGUMENTS (decl);
b190f239 2074 }
74b846e0
MM
2075 return tmpl;
2076 }
2077
36a117a5 2078 /* Set up the DECL_TEMPLATE_INFO for DECL. */
e1b3e07d 2079 DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
36a117a5 2080
8afa707f
MM
2081 /* Inherit default function arguments from the template
2082 DECL is specializing. */
2083 copy_default_args_to_explicit_spec (decl);
2084
c750255c
MM
2085 /* This specialization has the same protection as the
2086 template it specializes. */
2087 TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2088 TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2089
386b8a85 2090 if (is_friend && !have_def)
36a117a5
MM
2091 /* This is not really a declaration of a specialization.
2092 It's just the name of an instantiation. But, it's not
2093 a request for an instantiation, either. */
fbf1c34b 2094 SET_DECL_IMPLICIT_INSTANTIATION (decl);
08511114
KL
2095 else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2096 /* This is indeed a specialization. In case of constructors
2097 and destructors, we need in-charge and not-in-charge
2098 versions in V3 ABI. */
2099 clone_function_decl (decl, /*update_method_vec_p=*/0);
75650646 2100
36a117a5
MM
2101 /* Register this specialization so that we can find it
2102 again. */
2103 decl = register_specialization (decl, gen_tmpl, targs);
386b8a85
JM
2104 }
2105 }
c8094d83 2106
e1467ff2 2107 return decl;
386b8a85 2108}
75650646 2109
75650646
MM
2110/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2111 parameters. These are represented in the same format used for
2112 DECL_TEMPLATE_PARMS. */
2113
50bc768d
NS
2114int
2115comp_template_parms (tree parms1, tree parms2)
75650646
MM
2116{
2117 tree p1;
2118 tree p2;
2119
2120 if (parms1 == parms2)
2121 return 1;
2122
c8094d83 2123 for (p1 = parms1, p2 = parms2;
75650646
MM
2124 p1 != NULL_TREE && p2 != NULL_TREE;
2125 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2126 {
2127 tree t1 = TREE_VALUE (p1);
2128 tree t2 = TREE_VALUE (p2);
2129 int i;
2130
50bc768d
NS
2131 gcc_assert (TREE_CODE (t1) == TREE_VEC);
2132 gcc_assert (TREE_CODE (t2) == TREE_VEC);
75650646
MM
2133
2134 if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2135 return 0;
2136
c8094d83 2137 for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
75650646
MM
2138 {
2139 tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2140 tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2141
2142 if (TREE_CODE (parm1) != TREE_CODE (parm2))
2143 return 0;
2144
2145 if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2146 continue;
3bfdc719 2147 else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
75650646
MM
2148 return 0;
2149 }
2150 }
2151
2152 if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2153 /* One set of parameters has more parameters lists than the
2154 other. */
2155 return 0;
2156
2157 return 1;
2158}
2159
f3400fe2
JM
2160/* Complain if DECL shadows a template parameter.
2161
2162 [temp.local]: A template-parameter shall not be redeclared within its
2163 scope (including nested scopes). */
2164
2165void
3a978d72 2166check_template_shadow (tree decl)
f3400fe2 2167{
8f032717
MM
2168 tree olddecl;
2169
b5d9b9ab
MM
2170 /* If we're not in a template, we can't possibly shadow a template
2171 parameter. */
2172 if (!current_template_parms)
2173 return;
2174
2175 /* Figure out what we're shadowing. */
8f032717
MM
2176 if (TREE_CODE (decl) == OVERLOAD)
2177 decl = OVL_CURRENT (decl);
90ea9897 2178 olddecl = innermost_non_namespace_value (DECL_NAME (decl));
f3400fe2 2179
b5d9b9ab
MM
2180 /* If there's no previous binding for this name, we're not shadowing
2181 anything, let alone a template parameter. */
2182 if (!olddecl)
2183 return;
2184
2185 /* If we're not shadowing a template parameter, we're done. Note
2186 that OLDDECL might be an OVERLOAD (or perhaps even an
2187 ERROR_MARK), so we can't just blithely assume it to be a _DECL
2188 node. */
2f939d94 2189 if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
b5d9b9ab
MM
2190 return;
2191
2192 /* We check for decl != olddecl to avoid bogus errors for using a
2193 name inside a class. We check TPFI to avoid duplicate errors for
2194 inline member templates. */
c8094d83 2195 if (decl == olddecl
b5d9b9ab
MM
2196 || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2197 return;
2198
dee15844
JM
2199 error ("declaration of %q+#D", decl);
2200 error (" shadows template parm %q+#D", olddecl);
f3400fe2 2201}
22a7be53 2202
f3400fe2 2203/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
f84b4be9
JM
2204 ORIG_LEVEL, DECL, and TYPE. */
2205
2206static tree
c8094d83 2207build_template_parm_index (int index,
0cbd7506
MS
2208 int level,
2209 int orig_level,
2210 tree decl,
2211 tree type)
f84b4be9
JM
2212{
2213 tree t = make_node (TEMPLATE_PARM_INDEX);
2214 TEMPLATE_PARM_IDX (t) = index;
2215 TEMPLATE_PARM_LEVEL (t) = level;
2216 TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2217 TEMPLATE_PARM_DECL (t) = decl;
2218 TREE_TYPE (t) = type;
3e4a3562 2219 TREE_CONSTANT (t) = TREE_CONSTANT (decl);
6de9cd9a 2220 TREE_INVARIANT (t) = TREE_INVARIANT (decl);
3e4a3562 2221 TREE_READONLY (t) = TREE_READONLY (decl);
f84b4be9
JM
2222
2223 return t;
2224}
2225
f84b4be9 2226/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
93cdc044 2227 TEMPLATE_PARM_LEVEL has been decreased by LEVELS. If such a
f84b4be9
JM
2228 TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2229 new one is created. */
2230
c8094d83 2231static tree
3a978d72 2232reduce_template_parm_level (tree index, tree type, int levels)
f84b4be9
JM
2233{
2234 if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2235 || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
93cdc044 2236 != TEMPLATE_PARM_LEVEL (index) - levels))
f84b4be9 2237 {
3e4a3562
NS
2238 tree orig_decl = TEMPLATE_PARM_DECL (index);
2239 tree decl, t;
c8094d83 2240
3e4a3562
NS
2241 decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2242 TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
6de9cd9a 2243 TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
3e4a3562
NS
2244 TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2245 DECL_ARTIFICIAL (decl) = 1;
2246 SET_DECL_TEMPLATE_PARM_P (decl);
c8094d83 2247
3e4a3562 2248 t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
93cdc044 2249 TEMPLATE_PARM_LEVEL (index) - levels,
f84b4be9
JM
2250 TEMPLATE_PARM_ORIG_LEVEL (index),
2251 decl, type);
2252 TEMPLATE_PARM_DESCENDANTS (index) = t;
cae40af6 2253
820cc88f
DB
2254 /* Template template parameters need this. */
2255 if (TREE_CODE (decl) != CONST_DECL)
2256 DECL_TEMPLATE_PARMS (decl)
2257 = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
f84b4be9
JM
2258 }
2259
2260 return TEMPLATE_PARM_DESCENDANTS (index);
2261}
2262
8d08fdba 2263/* Process information from new template parameter NEXT and append it to the
058b15c1
MM
2264 LIST being built. This new parameter is a non-type parameter iff
2265 IS_NON_TYPE is true. */
e92cc029 2266
8d08fdba 2267tree
058b15c1 2268process_template_parm (tree list, tree next, bool is_non_type)
8d08fdba
MS
2269{
2270 tree parm;
2271 tree decl = 0;
a292b002 2272 tree defval;
058b15c1 2273 int idx;
f84b4be9 2274
8d08fdba 2275 parm = next;
50bc768d 2276 gcc_assert (TREE_CODE (parm) == TREE_LIST);
a292b002 2277 defval = TREE_PURPOSE (parm);
5566b478
MS
2278
2279 if (list)
2280 {
2281 tree p = TREE_VALUE (tree_last (list));
2282
1899c3a4 2283 if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
5566b478
MS
2284 idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2285 else
f84b4be9 2286 idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
5566b478
MS
2287 ++idx;
2288 }
2289 else
2290 idx = 0;
2291
058b15c1 2292 if (is_non_type)
8d08fdba 2293 {
058b15c1
MM
2294 parm = TREE_VALUE (parm);
2295
833aa4c4 2296 SET_DECL_TEMPLATE_PARM_P (parm);
d490621d
MM
2297
2298 /* [temp.param]
2299
2300 The top-level cv-qualifiers on the template-parameter are
2301 ignored when determining its type. */
2302 TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2303
8d08fdba 2304 /* A template parameter is not modifiable. */
6de9cd9a
DN
2305 TREE_CONSTANT (parm) = 1;
2306 TREE_INVARIANT (parm) = 1;
2307 TREE_READONLY (parm) = 1;
11b810f1 2308 if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
0cbd7506 2309 TREE_TYPE (parm) = void_type_node;
8d08fdba 2310 decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
6de9cd9a
DN
2311 TREE_CONSTANT (decl) = 1;
2312 TREE_INVARIANT (decl) = 1;
2313 TREE_READONLY (decl) = 1;
c8094d83 2314 DECL_INITIAL (parm) = DECL_INITIAL (decl)
f84b4be9
JM
2315 = build_template_parm_index (idx, processing_template_decl,
2316 processing_template_decl,
2317 decl, TREE_TYPE (parm));
8d08fdba
MS
2318 }
2319 else
2320 {
73b0fce8 2321 tree t;
058b15c1 2322 parm = TREE_VALUE (TREE_VALUE (parm));
c8094d83 2323
73b0fce8
KL
2324 if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2325 {
33848bb0 2326 t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
c8094d83 2327 /* This is for distinguishing between real templates and template
73b0fce8
KL
2328 template parameters */
2329 TREE_TYPE (parm) = t;
2330 TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2331 decl = parm;
2332 }
2333 else
2334 {
33848bb0 2335 t = make_aggr_type (TEMPLATE_TYPE_PARM);
f4f206f4 2336 /* parm is either IDENTIFIER_NODE or NULL_TREE. */
73b0fce8
KL
2337 decl = build_decl (TYPE_DECL, parm, t);
2338 }
c8094d83 2339
d2e5ee5c
MS
2340 TYPE_NAME (t) = decl;
2341 TYPE_STUB_DECL (t) = decl;
a292b002 2342 parm = decl;
f84b4be9 2343 TEMPLATE_TYPE_PARM_INDEX (t)
c8094d83 2344 = build_template_parm_index (idx, processing_template_decl,
f84b4be9
JM
2345 processing_template_decl,
2346 decl, TREE_TYPE (parm));
8d08fdba 2347 }
c727aa5e 2348 DECL_ARTIFICIAL (decl) = 1;
cd9f6678 2349 SET_DECL_TEMPLATE_PARM_P (decl);
8d08fdba 2350 pushdecl (decl);
a292b002 2351 parm = build_tree_list (defval, parm);
8d08fdba
MS
2352 return chainon (list, parm);
2353}
2354
2355/* The end of a template parameter list has been reached. Process the
2356 tree list into a parameter vector, converting each parameter into a more
2357 useful form. Type parameters are saved as IDENTIFIER_NODEs, and others
2358 as PARM_DECLs. */
2359
2360tree
3a978d72 2361end_template_parm_list (tree parms)
8d08fdba 2362{
5566b478 2363 int nparms;
9471d3e2 2364 tree parm, next;
5566b478
MS
2365 tree saved_parmlist = make_tree_vec (list_length (parms));
2366
5566b478 2367 current_template_parms
4890c2f4 2368 = tree_cons (size_int (processing_template_decl),
5566b478 2369 saved_parmlist, current_template_parms);
8d08fdba 2370
9471d3e2
NS
2371 for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2372 {
2373 next = TREE_CHAIN (parm);
2374 TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2375 TREE_CHAIN (parm) = NULL_TREE;
2376 }
a292b002 2377
67ffc812
MM
2378 --processing_template_parmlist;
2379
8d08fdba
MS
2380 return saved_parmlist;
2381}
2382
5566b478
MS
2383/* end_template_decl is called after a template declaration is seen. */
2384
8d08fdba 2385void
3a978d72 2386end_template_decl (void)
8d08fdba 2387{
386b8a85
JM
2388 reset_specialization ();
2389
5156628f 2390 if (! processing_template_decl)
73aad9b9
JM
2391 return;
2392
5566b478 2393 /* This matches the pushlevel in begin_template_parm_list. */
74b846e0 2394 finish_scope ();
8d08fdba 2395
5566b478
MS
2396 --processing_template_decl;
2397 current_template_parms = TREE_CHAIN (current_template_parms);
5566b478 2398}
8d08fdba 2399
36a117a5
MM
2400/* Given a template argument vector containing the template PARMS.
2401 The innermost PARMS are given first. */
9a3b49ac
MS
2402
2403tree
3a978d72 2404current_template_args (void)
5566b478 2405{
36a117a5 2406 tree header;
b370501f 2407 tree args = NULL_TREE;
36a117a5 2408 int length = TMPL_PARMS_DEPTH (current_template_parms);
98c1c668
JM
2409 int l = length;
2410
36a117a5
MM
2411 /* If there is only one level of template parameters, we do not
2412 create a TREE_VEC of TREE_VECs. Instead, we return a single
2413 TREE_VEC containing the arguments. */
2414 if (length > 1)
2415 args = make_tree_vec (length);
2416
2417 for (header = current_template_parms; header; header = TREE_CHAIN (header))
8d08fdba 2418 {
5566b478 2419 tree a = copy_node (TREE_VALUE (header));
36a117a5
MM
2420 int i;
2421
5566b478 2422 TREE_TYPE (a) = NULL_TREE;
36a117a5 2423 for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
5566b478 2424 {
98c1c668
JM
2425 tree t = TREE_VEC_ELT (a, i);
2426
36a117a5 2427 /* T will be a list if we are called from within a
98c1c668
JM
2428 begin/end_template_parm_list pair, but a vector directly
2429 if within a begin/end_member_template_processing pair. */
c8094d83 2430 if (TREE_CODE (t) == TREE_LIST)
98c1c668
JM
2431 {
2432 t = TREE_VALUE (t);
c8094d83
MS
2433
2434 if (TREE_CODE (t) == TYPE_DECL
73b0fce8 2435 || TREE_CODE (t) == TEMPLATE_DECL)
98c1c668
JM
2436 t = TREE_TYPE (t);
2437 else
2438 t = DECL_INITIAL (t);
36a117a5 2439 TREE_VEC_ELT (a, i) = t;
98c1c668 2440 }
5566b478 2441 }
36a117a5
MM
2442
2443 if (length > 1)
2444 TREE_VEC_ELT (args, --l) = a;
2445 else
2446 args = a;
8d08fdba
MS
2447 }
2448
9a3b49ac
MS
2449 return args;
2450}
75650646 2451
e1467ff2 2452/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
c7222c02 2453 template PARMS. If MEMBER_TEMPLATE_P is true, the new template is
ee81147e 2454 a member template. Used by push_template_decl below. */
e1467ff2 2455
75650646 2456static tree
c7222c02 2457build_template_decl (tree decl, tree parms, bool member_template_p)
75650646
MM
2458{
2459 tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2460 DECL_TEMPLATE_PARMS (tmpl) = parms;
2461 DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
c7222c02 2462 DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
75650646
MM
2463 if (DECL_LANG_SPECIFIC (decl))
2464 {
8f032717
MM
2465 DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2466 DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
c8460010 2467 DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
11f98788 2468 DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
1f6e1acc
AS
2469 DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2470 if (DECL_OVERLOADED_OPERATOR_P (decl))
c8094d83 2471 SET_OVERLOADED_OPERATOR_CODE (tmpl,
1f6e1acc 2472 DECL_OVERLOADED_OPERATOR_P (decl));
75650646
MM
2473 }
2474
2475 return tmpl;
2476}
2477
050367a3
MM
2478struct template_parm_data
2479{
6c30752f
MM
2480 /* The level of the template parameters we are currently
2481 processing. */
050367a3 2482 int level;
6c30752f
MM
2483
2484 /* The index of the specialization argument we are currently
2485 processing. */
2486 int current_arg;
2487
2488 /* An array whose size is the number of template parameters. The
838dfd8a 2489 elements are nonzero if the parameter has been used in any one
6c30752f 2490 of the arguments processed so far. */
050367a3 2491 int* parms;
6c30752f
MM
2492
2493 /* An array whose size is the number of template arguments. The
838dfd8a 2494 elements are nonzero if the argument makes use of template
6c30752f
MM
2495 parameters of this level. */
2496 int* arg_uses_template_parms;
050367a3
MM
2497};
2498
2499/* Subroutine of push_template_decl used to see if each template
2500 parameter in a partial specialization is used in the explicit
2501 argument list. If T is of the LEVEL given in DATA (which is
2502 treated as a template_parm_data*), then DATA->PARMS is marked
2503 appropriately. */
2504
2505static int
3a978d72 2506mark_template_parm (tree t, void* data)
050367a3
MM
2507{
2508 int level;
2509 int idx;
2510 struct template_parm_data* tpd = (struct template_parm_data*) data;
2511
2512 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2513 {
2514 level = TEMPLATE_PARM_LEVEL (t);
2515 idx = TEMPLATE_PARM_IDX (t);
2516 }
2517 else
2518 {
2519 level = TEMPLATE_TYPE_LEVEL (t);
2520 idx = TEMPLATE_TYPE_IDX (t);
2521 }
2522
2523 if (level == tpd->level)
6c30752f
MM
2524 {
2525 tpd->parms[idx] = 1;
2526 tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2527 }
050367a3
MM
2528
2529 /* Return zero so that for_each_template_parm will continue the
2530 traversal of the tree; we want to mark *every* template parm. */
2531 return 0;
2532}
2533
6c30752f
MM
2534/* Process the partial specialization DECL. */
2535
e9659ab0 2536static tree
3a978d72 2537process_partial_specialization (tree decl)
6c30752f
MM
2538{
2539 tree type = TREE_TYPE (decl);
2540 tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2541 tree specargs = CLASSTYPE_TI_ARGS (type);
f9a7ae04 2542 tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
6c30752f
MM
2543 tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2544 tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2545 int nargs = TREE_VEC_LENGTH (inner_args);
2546 int ntparms = TREE_VEC_LENGTH (inner_parms);
2547 int i;
2548 int did_error_intro = 0;
6c30752f
MM
2549 struct template_parm_data tpd;
2550 struct template_parm_data tpd2;
2551
6c30752f
MM
2552 /* We check that each of the template parameters given in the
2553 partial specialization is used in the argument list to the
2554 specialization. For example:
2555
2556 template <class T> struct S;
2557 template <class T> struct S<T*>;
2558
2559 The second declaration is OK because `T*' uses the template
2560 parameter T, whereas
2561
2562 template <class T> struct S<int>;
2563
2564 is no good. Even trickier is:
2565
2566 template <class T>
2567 struct S1
2568 {
2569 template <class U>
2570 struct S2;
2571 template <class U>
2572 struct S2<T>;
2573 };
2574
0e339752 2575 The S2<T> declaration is actually invalid; it is a
c8094d83 2576 full-specialization. Of course,
6c30752f
MM
2577
2578 template <class U>
2579 struct S2<T (*)(U)>;
2580
2581 or some such would have been OK. */
2582 tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2583 tpd.parms = alloca (sizeof (int) * ntparms);
fad205ff 2584 memset (tpd.parms, 0, sizeof (int) * ntparms);
6c30752f
MM
2585
2586 tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
fad205ff 2587 memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
6c30752f
MM
2588 for (i = 0; i < nargs; ++i)
2589 {
2590 tpd.current_arg = i;
2591 for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2592 &mark_template_parm,
4f2c9d7e
MM
2593 &tpd,
2594 NULL);
6c30752f
MM
2595 }
2596 for (i = 0; i < ntparms; ++i)
2597 if (tpd.parms[i] == 0)
2598 {
2599 /* One of the template parms was not used in the
f9a7ae04 2600 specialization. */
6c30752f
MM
2601 if (!did_error_intro)
2602 {
33bd39a2 2603 error ("template parameters not used in partial specialization:");
6c30752f
MM
2604 did_error_intro = 1;
2605 }
2606
0f51ccfc 2607 error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
6c30752f
MM
2608 }
2609
2610 /* [temp.class.spec]
2611
2612 The argument list of the specialization shall not be identical to
2613 the implicit argument list of the primary template. */
c8094d83
MS
2614 if (comp_template_args
2615 (inner_args,
f9a7ae04
MM
2616 INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2617 (maintmpl)))))
0f51ccfc 2618 error ("partial specialization %qT does not specialize any template arguments", type);
6c30752f
MM
2619
2620 /* [temp.class.spec]
2621
2622 A partially specialized non-type argument expression shall not
2623 involve template parameters of the partial specialization except
2624 when the argument expression is a simple identifier.
2625
2626 The type of a template parameter corresponding to a specialized
2627 non-type argument shall not be dependent on a parameter of the
2628 specialization. */
50bc768d 2629 gcc_assert (nargs == DECL_NTPARMS (maintmpl));
6c30752f
MM
2630 tpd2.parms = 0;
2631 for (i = 0; i < nargs; ++i)
2632 {
2633 tree arg = TREE_VEC_ELT (inner_args, i);
2634 if (/* These first two lines are the `non-type' bit. */
2f939d94 2635 !TYPE_P (arg)
6c30752f
MM
2636 && TREE_CODE (arg) != TEMPLATE_DECL
2637 /* This next line is the `argument expression is not just a
2638 simple identifier' condition and also the `specialized
2639 non-type argument' bit. */
2640 && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2641 {
2642 if (tpd.arg_uses_template_parms[i])
0f51ccfc 2643 error ("template argument %qE involves template parameter(s)", arg);
c8094d83 2644 else
6c30752f
MM
2645 {
2646 /* Look at the corresponding template parameter,
2647 marking which template parameters its type depends
2648 upon. */
c8094d83
MS
2649 tree type =
2650 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms,
6c30752f
MM
2651 i)));
2652
2653 if (!tpd2.parms)
2654 {
2655 /* We haven't yet initialized TPD2. Do so now. */
c8094d83 2656 tpd2.arg_uses_template_parms
c68b0a84 2657 = alloca (sizeof (int) * nargs);
104bf76a 2658 /* The number of parameters here is the number in the
76a83782
RH
2659 main template, which, as checked in the assertion
2660 above, is NARGS. */
c68b0a84 2661 tpd2.parms = alloca (sizeof (int) * nargs);
c8094d83 2662 tpd2.level =
6c30752f
MM
2663 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2664 }
2665
104bf76a 2666 /* Mark the template parameters. But this time, we're
6c30752f
MM
2667 looking for the template parameters of the main
2668 template, not in the specialization. */
2669 tpd2.current_arg = i;
2670 tpd2.arg_uses_template_parms[i] = 0;
fad205ff 2671 memset (tpd2.parms, 0, sizeof (int) * nargs);
6c30752f
MM
2672 for_each_template_parm (type,
2673 &mark_template_parm,
4f2c9d7e
MM
2674 &tpd2,
2675 NULL);
c8094d83 2676
6c30752f
MM
2677 if (tpd2.arg_uses_template_parms [i])
2678 {
2679 /* The type depended on some template parameters.
2680 If they are fully specialized in the
2681 specialization, that's OK. */
2682 int j;
2683 for (j = 0; j < nargs; ++j)
2684 if (tpd2.parms[j] != 0
2685 && tpd.arg_uses_template_parms [j])
2686 {
0f51ccfc 2687 error ("type %qT of template argument %qE depends "
0cbd7506
MS
2688 "on template parameter(s)",
2689 type,
2690 arg);
6c30752f
MM
2691 break;
2692 }
2693 }
2694 }
2695 }
2696 }
2697
c8094d83 2698 if (retrieve_specialization (maintmpl, specargs,
c7222c02 2699 /*class_specializations_p=*/true))
6c30752f
MM
2700 /* We've already got this specialization. */
2701 return decl;
2702
d8b64f80 2703 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
e1b3e07d
MM
2704 = tree_cons (inner_args, inner_parms,
2705 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
6c30752f
MM
2706 TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2707 return decl;
2708}
2709
6ba89f8e
MM
2710/* Check that a template declaration's use of default arguments is not
2711 invalid. Here, PARMS are the template parameters. IS_PRIMARY is
838dfd8a
KH
2712 nonzero if DECL is the thing declared by a primary template.
2713 IS_PARTIAL is nonzero if DECL is a partial specialization. */
6ba89f8e
MM
2714
2715static void
3a978d72 2716check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
6ba89f8e 2717{
d8e178a0 2718 const char *msg;
66191c20
MM
2719 int last_level_to_check;
2720 tree parm_level;
6ba89f8e 2721
c8094d83 2722 /* [temp.param]
6ba89f8e
MM
2723
2724 A default template-argument shall not be specified in a
2725 function template declaration or a function template definition, nor
2726 in the template-parameter-list of the definition of a member of a
2727 class template. */
2728
4f1c5b7d 2729 if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
e0942dcd
MM
2730 /* You can't have a function template declaration in a local
2731 scope, nor you can you define a member of a class template in a
2732 local scope. */
2733 return;
2734
6ba89f8e
MM
2735 if (current_class_type
2736 && !TYPE_BEING_DEFINED (current_class_type)
3d7de1fa 2737 && DECL_LANG_SPECIFIC (decl)
5937a6f9
MM
2738 /* If this is either a friend defined in the scope of the class
2739 or a member function. */
6df5158a
NS
2740 && (DECL_FUNCTION_MEMBER_P (decl)
2741 ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2742 : DECL_FRIEND_CONTEXT (decl)
2743 ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2744 : false)
5937a6f9
MM
2745 /* And, if it was a member function, it really was defined in
2746 the scope of the class. */
6df5158a
NS
2747 && (!DECL_FUNCTION_MEMBER_P (decl)
2748 || DECL_INITIALIZED_IN_CLASS_P (decl)))
6ba89f8e 2749 /* We already checked these parameters when the template was
5937a6f9
MM
2750 declared, so there's no need to do it again now. This function
2751 was defined in class scope, but we're processing it's body now
2752 that the class is complete. */
6ba89f8e
MM
2753 return;
2754
66191c20 2755 /* [temp.param]
c8094d83 2756
66191c20
MM
2757 If a template-parameter has a default template-argument, all
2758 subsequent template-parameters shall have a default
2759 template-argument supplied. */
2760 for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2761 {
2762 tree inner_parms = TREE_VALUE (parm_level);
2763 int ntparms = TREE_VEC_LENGTH (inner_parms);
c8094d83 2764 int seen_def_arg_p = 0;
66191c20
MM
2765 int i;
2766
c8094d83 2767 for (i = 0; i < ntparms; ++i)
66191c20
MM
2768 {
2769 tree parm = TREE_VEC_ELT (inner_parms, i);
2770 if (TREE_PURPOSE (parm))
2771 seen_def_arg_p = 1;
2772 else if (seen_def_arg_p)
2773 {
0f51ccfc 2774 error ("no default argument for %qD", TREE_VALUE (parm));
66191c20
MM
2775 /* For better subsequent error-recovery, we indicate that
2776 there should have been a default argument. */
2777 TREE_PURPOSE (parm) = error_mark_node;
2778 }
2779 }
2780 }
2781
6ba89f8e
MM
2782 if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2783 /* For an ordinary class template, default template arguments are
2784 allowed at the innermost level, e.g.:
0cbd7506 2785 template <class T = int>
6ba89f8e
MM
2786 struct S {};
2787 but, in a partial specialization, they're not allowed even
2788 there, as we have in [temp.class.spec]:
c8094d83 2789
6ba89f8e 2790 The template parameter list of a specialization shall not
c8094d83 2791 contain default template argument values.
6ba89f8e
MM
2792
2793 So, for a partial specialization, or for a function template,
2794 we look at all of them. */
2795 ;
2796 else
2797 /* But, for a primary class template that is not a partial
2798 specialization we look at all template parameters except the
2799 innermost ones. */
2800 parms = TREE_CHAIN (parms);
2801
2802 /* Figure out what error message to issue. */
2803 if (TREE_CODE (decl) == FUNCTION_DECL)
8653a2c3 2804 msg = "default template arguments may not be used in function templates";
6ba89f8e 2805 else if (is_partial)
8653a2c3 2806 msg = "default template arguments may not be used in partial specializations";
6ba89f8e 2807 else
0f51ccfc 2808 msg = "default argument for template parameter for class enclosing %qD";
6ba89f8e
MM
2809
2810 if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2811 /* If we're inside a class definition, there's no need to
104bf76a 2812 examine the parameters to the class itself. On the one
6ba89f8e 2813 hand, they will be checked when the class is defined, and,
0e339752 2814 on the other, default arguments are valid in things like:
0cbd7506
MS
2815 template <class T = double>
2816 struct S { template <class U> void f(U); };
6ba89f8e
MM
2817 Here the default argument for `S' has no bearing on the
2818 declaration of `f'. */
2819 last_level_to_check = template_class_depth (current_class_type) + 1;
2820 else
2821 /* Check everything. */
2822 last_level_to_check = 0;
2823
c8094d83
MS
2824 for (parm_level = parms;
2825 parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
66191c20 2826 parm_level = TREE_CHAIN (parm_level))
6ba89f8e 2827 {
66191c20
MM
2828 tree inner_parms = TREE_VALUE (parm_level);
2829 int i;
2830 int ntparms;
6ba89f8e
MM
2831
2832 ntparms = TREE_VEC_LENGTH (inner_parms);
c8094d83 2833 for (i = 0; i < ntparms; ++i)
6ba89f8e
MM
2834 if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2835 {
2836 if (msg)
2837 {
33bd39a2 2838 error (msg, decl);
6ba89f8e
MM
2839 msg = 0;
2840 }
2841
2842 /* Clear out the default argument so that we are not
2843 confused later. */
2844 TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2845 }
2846
2847 /* At this point, if we're still interested in issuing messages,
2848 they must apply to classes surrounding the object declared. */
2849 if (msg)
c8094d83 2850 msg = "default argument for template parameter for class enclosing %qD";
6ba89f8e
MM
2851 }
2852}
2853
5dd236e2
NS
2854/* Worker for push_template_decl_real, called via
2855 for_each_template_parm. DATA is really an int, indicating the
2856 level of the parameters we are interested in. If T is a template
838dfd8a 2857 parameter of that level, return nonzero. */
5dd236e2
NS
2858
2859static int
3a978d72 2860template_parm_this_level_p (tree t, void* data)
5dd236e2 2861{
6e04241f 2862 int this_level = *(int *)data;
5dd236e2
NS
2863 int level;
2864
2865 if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2866 level = TEMPLATE_PARM_LEVEL (t);
2867 else
2868 level = TEMPLATE_TYPE_LEVEL (t);
2869 return level == this_level;
2870}
2871
3ac3d9ea 2872/* Creates a TEMPLATE_DECL for the indicated DECL using the template
f84b4be9
JM
2873 parameters given by current_template_args, or reuses a
2874 previously existing one, if appropriate. Returns the DECL, or an
c8094d83 2875 equivalent one, if it is replaced via a call to duplicate_decls.
6757edfe 2876
838dfd8a 2877 If IS_FRIEND is nonzero, DECL is a friend declaration. */
3ac3d9ea
MM
2878
2879tree
3a978d72 2880push_template_decl_real (tree decl, int is_friend)
9a3b49ac
MS
2881{
2882 tree tmpl;
f84b4be9 2883 tree args;
9a3b49ac 2884 tree info;
f84b4be9
JM
2885 tree ctx;
2886 int primary;
6ba89f8e 2887 int is_partial;
cfe507be 2888 int new_template_p = 0;
c7222c02
MM
2889 /* True if the template is a member template, in the sense of
2890 [temp.mem]. */
2891 bool member_template_p = false;
6ba89f8e 2892
c0694c4b
MM
2893 if (decl == error_mark_node)
2894 return decl;
2895
6ba89f8e 2896 /* See if this is a partial specialization. */
9188c363 2897 is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
6ba89f8e 2898 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
370af2d5 2899 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
6757edfe
MM
2900
2901 is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
f84b4be9
JM
2902
2903 if (is_friend)
2904 /* For a friend, we want the context of the friend function, not
2905 the type of which it is a friend. */
2906 ctx = DECL_CONTEXT (decl);
4f1c5b7d
MM
2907 else if (CP_DECL_CONTEXT (decl)
2908 && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
f84b4be9
JM
2909 /* In the case of a virtual function, we want the class in which
2910 it is defined. */
4f1c5b7d 2911 ctx = CP_DECL_CONTEXT (decl);
f84b4be9 2912 else
dc957d14 2913 /* Otherwise, if we're currently defining some class, the DECL
f84b4be9 2914 is assumed to be a member of the class. */
9188c363 2915 ctx = current_scope ();
f84b4be9 2916
2c73f9f5
ML
2917 if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2918 ctx = NULL_TREE;
2919
2920 if (!DECL_CONTEXT (decl))
cb0dbb9a 2921 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2c73f9f5 2922
6ba89f8e 2923 /* See if this is a primary template. */
74b846e0 2924 primary = template_parm_scope_p ();
9a3b49ac 2925
83566abf
JM
2926 if (primary)
2927 {
c7222c02
MM
2928 if (DECL_CLASS_SCOPE_P (decl))
2929 member_template_p = true;
83566abf 2930 if (current_lang_name == lang_name_c)
33bd39a2 2931 error ("template with C linkage");
c8094d83
MS
2932 else if (TREE_CODE (decl) == TYPE_DECL
2933 && ANON_AGGRNAME_P (DECL_NAME (decl)))
33bd39a2 2934 error ("template class without a name");
717a7d5d 2935 else if (TREE_CODE (decl) == FUNCTION_DECL)
4b0d3cbe 2936 {
717a7d5d
MM
2937 if (DECL_DESTRUCTOR_P (decl))
2938 {
2939 /* [temp.mem]
c8094d83 2940
0cbd7506 2941 A destructor shall not be a member template. */
0f51ccfc 2942 error ("destructor %qD declared as member template", decl);
717a7d5d
MM
2943 return error_mark_node;
2944 }
2945 if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
2946 && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
2947 || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
2948 || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
2949 || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
2950 == void_list_node)))
2951 {
c8094d83 2952 /* [basic.stc.dynamic.allocation]
717a7d5d 2953
0cbd7506 2954 An allocation function can be a function
717a7d5d
MM
2955 template. ... Template allocation functions shall
2956 have two or more parameters. */
0f51ccfc 2957 error ("invalid template declaration of %qD", decl);
717a7d5d
MM
2958 return decl;
2959 }
4b0d3cbe 2960 }
2aaf816d
JM
2961 else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2962 && CLASS_TYPE_P (TREE_TYPE (decl)))
717a7d5d 2963 || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx)))
2aaf816d
JM
2964 /* OK */;
2965 else
11325dcd 2966 {
0f51ccfc 2967 error ("template declaration of %q#D", decl);
11325dcd
KL
2968 return error_mark_node;
2969 }
83566abf
JM
2970 }
2971
6ba89f8e
MM
2972 /* Check to see that the rules regarding the use of default
2973 arguments are not being violated. */
c8094d83 2974 check_default_tmpl_args (decl, current_template_parms,
6ba89f8e 2975 primary, is_partial);
73aad9b9 2976
6ba89f8e
MM
2977 if (is_partial)
2978 return process_partial_specialization (decl);
d32789d8 2979
9a3b49ac
MS
2980 args = current_template_args ();
2981
c8094d83 2982 if (!ctx
f84b4be9 2983 || TREE_CODE (ctx) == FUNCTION_DECL
a723baf1 2984 || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
f84b4be9 2985 || (is_friend && !DECL_TEMPLATE_INFO (decl)))
8d08fdba 2986 {
75650646 2987 if (DECL_LANG_SPECIFIC (decl)
f84b4be9
JM
2988 && DECL_TEMPLATE_INFO (decl)
2989 && DECL_TI_TEMPLATE (decl))
2990 tmpl = DECL_TI_TEMPLATE (decl);
1c10870d
AS
2991 /* If DECL is a TYPE_DECL for a class-template, then there won't
2992 be DECL_LANG_SPECIFIC. The information equivalent to
2993 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead. */
c8094d83 2994 else if (DECL_IMPLICIT_TYPEDEF_P (decl)
1c10870d
AS
2995 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2996 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2997 {
2998 /* Since a template declaration already existed for this
2999 class-type, we must be redeclaring it here. Make sure
0e339752 3000 that the redeclaration is valid. */
1c10870d
AS
3001 redeclare_class_template (TREE_TYPE (decl),
3002 current_template_parms);
3003 /* We don't need to create a new TEMPLATE_DECL; just use the
3004 one we already had. */
3005 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3006 }
f84b4be9 3007 else
786b5245 3008 {
c7222c02
MM
3009 tmpl = build_template_decl (decl, current_template_parms,
3010 member_template_p);
cfe507be
MM
3011 new_template_p = 1;
3012
f84b4be9
JM
3013 if (DECL_LANG_SPECIFIC (decl)
3014 && DECL_TEMPLATE_SPECIALIZATION (decl))
3015 {
3016 /* A specialization of a member template of a template
c6002625 3017 class. */
f84b4be9
JM
3018 SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3019 DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3020 DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3021 }
786b5245 3022 }
8d08fdba
MS
3023 }
3024 else
3025 {
e1a5ccf7 3026 tree a, t, current, parms;
ba4f4e5d 3027 int i;
6633d636 3028
6b9ab5cc
MM
3029 if (TREE_CODE (decl) == TYPE_DECL)
3030 {
ed44da02
MM
3031 if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3032 || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3033 && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3034 && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3035 tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
6b9ab5cc
MM
3036 else
3037 {
0f51ccfc 3038 error ("%qD does not declare a template type", decl);
6b9ab5cc
MM
3039 return decl;
3040 }
3041 }
f3368a90 3042 else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
c91a56d2 3043 {
0f51ccfc 3044 error ("template definition of non-template %q#D", decl);
3ac3d9ea 3045 return decl;
c91a56d2 3046 }
8d08fdba 3047 else
5566b478 3048 tmpl = DECL_TI_TEMPLATE (decl);
c8094d83 3049
c353b8e3 3050 if (DECL_FUNCTION_TEMPLATE_P (tmpl)
c8094d83 3051 && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
c353b8e3 3052 && DECL_TEMPLATE_SPECIALIZATION (decl)
c7222c02 3053 && DECL_MEMBER_TEMPLATE_P (tmpl))
98c1c668 3054 {
e1a5ccf7
JM
3055 tree new_tmpl;
3056
3057 /* The declaration is a specialization of a member
3058 template, declared outside the class. Therefore, the
3059 innermost template arguments will be NULL, so we
3060 replace them with the arguments determined by the
3061 earlier call to check_explicit_specialization. */
3062 args = DECL_TI_ARGS (decl);
3063
c8094d83 3064 new_tmpl
c7222c02
MM
3065 = build_template_decl (decl, current_template_parms,
3066 member_template_p);
e1a5ccf7
JM
3067 DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3068 TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3069 DECL_TI_TEMPLATE (decl) = new_tmpl;
3070 SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
c8094d83 3071 DECL_TEMPLATE_INFO (new_tmpl)
e1b3e07d 3072 = tree_cons (tmpl, args, NULL_TREE);
e1a5ccf7 3073
c8094d83
MS
3074 register_specialization (new_tmpl,
3075 most_general_template (tmpl),
f9a7ae04 3076 args);
e1a5ccf7 3077 return decl;
98c1c668 3078 }
98c1c668 3079
e1a5ccf7 3080 /* Make sure the template headers we got make sense. */
6633d636 3081
e1a5ccf7
JM
3082 parms = DECL_TEMPLATE_PARMS (tmpl);
3083 i = TMPL_PARMS_DEPTH (parms);
3084 if (TMPL_ARGS_DEPTH (args) != i)
98c1c668 3085 {
0f51ccfc 3086 error ("expected %d levels of template parms for %q#D, got %d",
0cbd7506 3087 i, decl, TMPL_ARGS_DEPTH (args));
98c1c668 3088 }
e1a5ccf7
JM
3089 else
3090 for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3091 {
3092 a = TMPL_ARGS_LEVEL (args, i);
3093 t = INNERMOST_TEMPLATE_PARMS (parms);
3094
3095 if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3096 {
3097 if (current == decl)
0f51ccfc 3098 error ("got %d template parameters for %q#D",
0cbd7506 3099 TREE_VEC_LENGTH (a), decl);
e1a5ccf7 3100 else
0f51ccfc 3101 error ("got %d template parameters for %q#T",
0cbd7506 3102 TREE_VEC_LENGTH (a), current);
33bd39a2 3103 error (" but %d required", TREE_VEC_LENGTH (t));
e1a5ccf7 3104 }
98c1c668 3105
e1a5ccf7 3106 /* Perhaps we should also check that the parms are used in the
0cbd7506 3107 appropriate qualifying scopes in the declarator? */
6633d636 3108
e1a5ccf7
JM
3109 if (current == decl)
3110 current = ctx;
3111 else
3112 current = TYPE_CONTEXT (current);
3113 }
5566b478 3114 }
8d08fdba 3115
5566b478
MS
3116 DECL_TEMPLATE_RESULT (tmpl) = decl;
3117 TREE_TYPE (tmpl) = TREE_TYPE (decl);
8d08fdba 3118
36a117a5
MM
3119 /* Push template declarations for global functions and types. Note
3120 that we do not try to push a global template friend declared in a
3121 template class; such a thing may well depend on the template
39c01e4c 3122 parameters of the class. */
c8094d83 3123 if (new_template_p && !ctx
36a117a5 3124 && !(is_friend && template_class_depth (current_class_type) > 0))
c6f9f83b
KL
3125 {
3126 tmpl = pushdecl_namespace_level (tmpl);
3127 if (tmpl == error_mark_node)
3128 return error_mark_node;
bd3d082e
KL
3129
3130 /* Hide template friend classes that haven't been declared yet. */
3131 if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3132 {
3133 DECL_ANTICIPATED (tmpl) = 1;
3134 DECL_FRIEND_P (tmpl) = 1;
3135 }
c6f9f83b 3136 }
8d08fdba 3137
5566b478 3138 if (primary)
5dd236e2
NS
3139 {
3140 DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3141 if (DECL_CONV_FN_P (tmpl))
3142 {
6e04241f
GS
3143 int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3144
5dd236e2
NS
3145 /* It is a conversion operator. See if the type converted to
3146 depends on innermost template operands. */
c8094d83 3147
d43f603d
KL
3148 if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3149 depth))
5dd236e2
NS
3150 DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3151 }
3152 }
5566b478 3153
a692ad2e 3154 /* The DECL_TI_ARGS of DECL contains full set of arguments referring
28ba38e3
KL
3155 back to its most general template. If TMPL is a specialization,
3156 ARGS may only have the innermost set of arguments. Add the missing
3157 argument levels if necessary. */
3158 if (DECL_TEMPLATE_INFO (tmpl))
3159 args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3160
e1b3e07d 3161 info = tree_cons (tmpl, args, NULL_TREE);
5566b478 3162
9188c363 3163 if (DECL_IMPLICIT_TYPEDEF_P (decl))
8d08fdba 3164 {
ed44da02
MM
3165 SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3166 if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
b60ecc04
MM
3167 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3168 /* Don't change the name if we've already set it up. */
3169 && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
75650646 3170 DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
51c184be 3171 }
2aaf816d 3172 else if (DECL_LANG_SPECIFIC (decl))
5566b478 3173 DECL_TEMPLATE_INFO (decl) = info;
3ac3d9ea
MM
3174
3175 return DECL_TEMPLATE_RESULT (tmpl);
8d08fdba
MS
3176}
3177
6757edfe 3178tree
3a978d72 3179push_template_decl (tree decl)
6757edfe
MM
3180{
3181 return push_template_decl_real (decl, 0);
3182}
3183
3184/* Called when a class template TYPE is redeclared with the indicated
3185 template PARMS, e.g.:
7fe6899f
MM
3186
3187 template <class T> struct S;
3188 template <class T> struct S {}; */
3189
c8094d83 3190void
3a978d72 3191redeclare_class_template (tree type, tree parms)
7fe6899f 3192{
3d7de1fa 3193 tree tmpl;
6757edfe 3194 tree tmpl_parms;
7fe6899f
MM
3195 int i;
3196
3d7de1fa
MM
3197 if (!TYPE_TEMPLATE_INFO (type))
3198 {
0f51ccfc 3199 error ("%qT is not a template type", type);
3d7de1fa
MM
3200 return;
3201 }
3202
3203 tmpl = TYPE_TI_TEMPLATE (type);
7fe6899f
MM
3204 if (!PRIMARY_TEMPLATE_P (tmpl))
3205 /* The type is nested in some template class. Nothing to worry
3206 about here; there are no new template parameters for the nested
3207 type. */
3208 return;
3209
ee921ddf
MM
3210 if (!parms)
3211 {
3212 error ("template specifiers not specified in declaration of %qD",
3213 tmpl);
3214 return;
3215 }
3216
6757edfe
MM
3217 parms = INNERMOST_TEMPLATE_PARMS (parms);
3218 tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3219
7fe6899f
MM
3220 if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3221 {
dee15844 3222 error ("previous declaration %q+D", tmpl);
f49d8c52 3223 error ("used %d template parameter(s) instead of %d",
c8094d83 3224 TREE_VEC_LENGTH (tmpl_parms),
f49d8c52 3225 TREE_VEC_LENGTH (parms));
7fe6899f
MM
3226 return;
3227 }
3228
3229 for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3230 {
3231 tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3232 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3233 tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3234 tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3235
2649701f
KL
3236 /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3237 TEMPLATE_DECL. */
3238 if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3239 || (TREE_CODE (tmpl_parm) != TYPE_DECL
3240 && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
7fe6899f 3241 {
dee15844 3242 error ("template parameter %q+#D", tmpl_parm);
0f51ccfc 3243 error ("redeclared here as %q#D", parm);
7fe6899f
MM
3244 return;
3245 }
3246
3247 if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3248 {
3249 /* We have in [temp.param]:
3250
3251 A template-parameter may not be given default arguments
3252 by two different declarations in the same scope. */
0f51ccfc 3253 error ("redefinition of default argument for %q#D", parm);
ddd2d57e 3254 error ("%J original definition appeared here", tmpl_parm);
7fe6899f
MM
3255 return;
3256 }
3257
3258 if (parm_default != NULL_TREE)
3259 /* Update the previous template parameters (which are the ones
3260 that will really count) with the new default value. */
3261 TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
7ce74c5e
MM
3262 else if (tmpl_default != NULL_TREE)
3263 /* Update the new parameters, too; they'll be used as the
3264 parameters for any members. */
3265 TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
7fe6899f
MM
3266 }
3267}
75650646 3268
9baa27a9
MM
3269/* Simplify EXPR if it is a non-dependent expression. Returns the
3270 (possibly simplified) expression. */
3271
3272tree
3273fold_non_dependent_expr (tree expr)
3274{
3275 /* If we're in a template, but EXPR isn't value dependent, simplify
3276 it. We're supposed to treat:
c8094d83 3277
9baa27a9
MM
3278 template <typename T> void f(T[1 + 1]);
3279 template <typename T> void f(T[2]);
c8094d83 3280
9baa27a9
MM
3281 as two declarations of the same function, for example. */
3282 if (processing_template_decl
3283 && !type_dependent_expression_p (expr)
7416ab02 3284 && !value_dependent_expression_p (expr))
9baa27a9
MM
3285 {
3286 HOST_WIDE_INT saved_processing_template_decl;
3287
3288 saved_processing_template_decl = processing_template_decl;
3289 processing_template_decl = 0;
3290 expr = tsubst_copy_and_build (expr,
3291 /*args=*/NULL_TREE,
3292 tf_error,
3293 /*in_decl=*/NULL_TREE,
3294 /*function_p=*/false);
3295 processing_template_decl = saved_processing_template_decl;
3296 }
3297 return expr;
3298}
3299
b6ab6892
GB
3300/* EXPR is an expression which is used in a constant-expression context.
3301 For instance, it could be a VAR_DECL with a constant initializer.
3302 Extract the innest constant expression.
c8094d83 3303
8a784e4a
NS
3304 This is basically a more powerful version of
3305 integral_constant_value, which can be used also in templates where
3306 initializers can maintain a syntactic rather than semantic form
3307 (even if they are non-dependent, for access-checking purposes). */
b6ab6892
GB
3308
3309tree
3310fold_decl_constant_value (tree expr)
3311{
4ef69b83
GB
3312 tree const_expr = expr;
3313 do
b6ab6892 3314 {
b6ab6892 3315 expr = fold_non_dependent_expr (const_expr);
4ef69b83 3316 const_expr = integral_constant_value (expr);
b6ab6892 3317 }
4ef69b83 3318 while (expr != const_expr);
b6ab6892 3319
8a784e4a 3320 return expr;
b6ab6892
GB
3321}
3322
3323/* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3324 must be a function or a pointer-to-function type, as specified
3325 in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3326 and check that the resulting function has external linkage. */
3327
3328static tree
3329convert_nontype_argument_function (tree type, tree expr)
3330{
3331 tree fns = expr;
3332 tree fn, fn_no_ptr;
3333
3334 fn = instantiate_type (type, fns, tf_none);
3335 if (fn == error_mark_node)
3336 return error_mark_node;
3337
3338 fn_no_ptr = fn;
3339 if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3340 fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3341
3342 /* [temp.arg.nontype]/1
3343
3344 A template-argument for a non-type, non-template template-parameter
3345 shall be one of:
3346 [...]
3347 -- the address of an object or function with external linkage. */
3348 if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3349 {
3350 error ("%qE is not a valid template argument for type %qT "
3351 "because function %qD has not external linkage",
3352 expr, type, fn_no_ptr);
3353 return NULL_TREE;
3354 }
3355
3356 return fn;
3357}
3358
75650646
MM
3359/* Attempt to convert the non-type template parameter EXPR to the
3360 indicated TYPE. If the conversion is successful, return the
dc957d14 3361 converted value. If the conversion is unsuccessful, return
75650646
MM
3362 NULL_TREE if we issued an error message, or error_mark_node if we
3363 did not. We issue error messages for out-and-out bad template
3364 parameters, but not simply because the conversion failed, since we
9baa27a9 3365 might be just trying to do argument deduction. Both TYPE and EXPR
b6ab6892
GB
3366 must be non-dependent.
3367
3368 The conversion follows the special rules described in
3369 [temp.arg.nontype], and it is much more strict than an implicit
3370 conversion.
3371
3372 This function is called twice for each template argument (see
3373 lookup_template_class for a more accurate description of this
3374 problem). This means that we need to handle expressions which
3375 are not valid in a C++ source, but can be created from the
3376 first call (for instance, casts to perform conversions). These
3377 hacks can go away after we fix the double coercion problem. */
75650646
MM
3378
3379static tree
3a978d72 3380convert_nontype_argument (tree type, tree expr)
75650646 3381{
9baa27a9
MM
3382 tree expr_type;
3383
b6ab6892
GB
3384 /* Detect immediately string literals as invalid non-type argument.
3385 This special-case is not needed for correctness (we would easily
3386 catch this later), but only to provide better diagnostic for this
3387 common user mistake. As suggested by DR 100, we do not mention
3388 linkage issues in the diagnostic as this is not the point. */
3389 if (TREE_CODE (expr) == STRING_CST)
3390 {
3391 error ("%qE is not a valid template argument for type %qT "
3392 "because string literals can never be used in this context",
3393 expr, type);
3394 return NULL_TREE;
3395 }
3396
9baa27a9
MM
3397 /* If we are in a template, EXPR may be non-dependent, but still
3398 have a syntactic, rather than semantic, form. For example, EXPR
3399 might be a SCOPE_REF, rather than the VAR_DECL to which the
3400 SCOPE_REF refers. Preserving the qualifying scope is necessary
3401 so that access checking can be performed when the template is
3402 instantiated -- but here we need the resolved form so that we can
3403 convert the argument. */
3404 expr = fold_non_dependent_expr (expr);
3405 expr_type = TREE_TYPE (expr);
75650646 3406
b6ab6892
GB
3407 /* HACK: Due to double coercion, we can get a
3408 NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3409 which is the tree that we built on the first call (see
3410 below when coercing to reference to object or to reference to
3411 function). We just strip everything and get to the arg.
3412 See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3413 for examples. */
3414 if (TREE_CODE (expr) == NOP_EXPR)
75650646 3415 {
b6ab6892 3416 if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
75650646 3417 {
b6ab6892
GB
3418 /* ??? Maybe we could use convert_from_reference here, but we
3419 would need to relax its constraints because the NOP_EXPR
3420 could actually change the type to something more cv-qualified,
3421 and this is not folded by convert_from_reference. */
3422 tree addr = TREE_OPERAND (expr, 0);
3423 gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3424 gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3425 gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3426 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3427 (TREE_TYPE (expr_type),
3428 TREE_TYPE (TREE_TYPE (addr))));
3429
3430 expr = TREE_OPERAND (addr, 0);
3431 expr_type = TREE_TYPE (expr);
75650646
MM
3432 }
3433
b6ab6892
GB
3434 /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3435 parameter is a pointer to object, through decay and
3436 qualification conversion. Let's strip everything. */
3437 else if (TYPE_PTROBV_P (type))
75650646 3438 {
b6ab6892
GB
3439 STRIP_NOPS (expr);
3440 gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3441 gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3442 /* Skip the ADDR_EXPR only if it is part of the decay for
3443 an array. Otherwise, it is part of the original argument
3444 in the source code. */
3445 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3446 expr = TREE_OPERAND (expr, 0);
3447 expr_type = TREE_TYPE (expr);
f3400fe2 3448 }
75650646 3449 }
c61dce3a 3450
b6ab6892 3451 /* [temp.arg.nontype]/5, bullet 1
75650646 3452
b6ab6892
GB
3453 For a non-type template-parameter of integral or enumeration type,
3454 integral promotions (_conv.prom_) and integral conversions
3455 (_conv.integral_) are applied. */
3456 if (INTEGRAL_TYPE_P (type))
75650646 3457 {
75650646
MM
3458 if (!INTEGRAL_TYPE_P (expr_type))
3459 return error_mark_node;
fddabb2c 3460
b6ab6892
GB
3461 expr = fold_decl_constant_value (expr);
3462 /* Notice that there are constant expressions like '4 % 0' which
3463 do not fold into integer constants. */
db02b6b9 3464 if (TREE_CODE (expr) != INTEGER_CST)
b6ab6892
GB
3465 {
3466 error ("%qE is not a valid template argument for type %qT "
3467 "because it is a non-constant expression", expr, type);
3468 return NULL_TREE;
3469 }
75650646 3470
b6ab6892
GB
3471 /* At this point, an implicit conversion does what we want,
3472 because we already know that the expression is of integral
3473 type. */
3474 expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3475 if (expr == error_mark_node)
3476 return error_mark_node;
75650646 3477
b6ab6892
GB
3478 /* Conversion was allowed: fold it to a bare integer constant. */
3479 expr = fold (expr);
3480 }
3481 /* [temp.arg.nontype]/5, bullet 2
75650646 3482
b6ab6892
GB
3483 For a non-type template-parameter of type pointer to object,
3484 qualification conversions (_conv.qual_) and the array-to-pointer
3485 conversion (_conv.array_) are applied. */
3486 else if (TYPE_PTROBV_P (type))
3487 {
3488 /* [temp.arg.nontype]/1 (TC1 version, DR 49):
75650646 3489
b6ab6892
GB
3490 A template-argument for a non-type, non-template template-parameter
3491 shall be one of: [...]
75650646 3492
b6ab6892
GB
3493 -- the name of a non-type template-parameter;
3494 -- the address of an object or function with external linkage, [...]
3495 expressed as "& id-expression" where the & is optional if the name
3496 refers to a function or array, or if the corresponding
3497 template-parameter is a reference.
c8094d83 3498
b6ab6892
GB
3499 Here, we do not care about functions, as they are invalid anyway
3500 for a parameter of type pointer-to-object. */
3501 bool constant_address_p =
3502 (TREE_CODE (expr) == ADDR_EXPR
3503 || TREE_CODE (expr_type) == ARRAY_TYPE
3504 || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3505
3506 expr = decay_conversion (expr);
3507 if (expr == error_mark_node)
3508 return error_mark_node;
75650646 3509
b6ab6892
GB
3510 expr = perform_qualification_conversions (type, expr);
3511 if (expr == error_mark_node)
3512 return error_mark_node;
0dc09a61 3513
b6ab6892
GB
3514 if (!constant_address_p)
3515 {
3516 error ("%qE is not a valid template argument for type %qT "
3517 "because it is not a constant pointer", expr, type);
3518 return NULL_TREE;
3519 }
3520 }
3521 /* [temp.arg.nontype]/5, bullet 3
3522
3523 For a non-type template-parameter of type reference to object, no
3524 conversions apply. The type referred to by the reference may be more
3525 cv-qualified than the (otherwise identical) type of the
3526 template-argument. The template-parameter is bound directly to the
3527 template-argument, which must be an lvalue. */
3528 else if (TYPE_REF_OBJ_P (type))
3529 {
3530 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3531 expr_type))
3532 return error_mark_node;
75650646 3533
b6ab6892
GB
3534 if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3535 {
3536 error ("%qE is not a valid template argument for type %qT "
3537 "because of conflicts in cv-qualification", expr, type);
3538 return NULL_TREE;
3539 }
c8094d83 3540
b6ab6892
GB
3541 if (!real_lvalue_p (expr))
3542 {
3543 error ("%qE is not a valid template argument for type %qT "
0cbd7506 3544 "because it is not a lvalue", expr, type);
b6ab6892
GB
3545 return NULL_TREE;
3546 }
e6e174e5 3547
b6ab6892 3548 /* [temp.arg.nontype]/1
75650646 3549
b6ab6892
GB
3550 A template-argument for a non-type, non-template template-parameter
3551 shall be one of: [...]
75650646 3552
03fd3f84 3553 -- the address of an object or function with external linkage. */
b6ab6892
GB
3554 if (!DECL_EXTERNAL_LINKAGE_P (expr))
3555 {
3556 error ("%qE is not a valid template argument for type %qT "
3557 "because object %qD has not external linkage",
3558 expr, type, expr);
3559 return NULL_TREE;
3560 }
0dc09a61 3561
b6ab6892
GB
3562 expr = build_nop (type, build_address (expr));
3563 }
3564 /* [temp.arg.nontype]/5, bullet 4
3565
3566 For a non-type template-parameter of type pointer to function, only
3567 the function-to-pointer conversion (_conv.func_) is applied. If the
3568 template-argument represents a set of overloaded functions (or a
3569 pointer to such), the matching function is selected from the set
3570 (_over.over_). */
3571 else if (TYPE_PTRFN_P (type))
3572 {
3573 /* If the argument is a template-id, we might not have enough
0cbd7506 3574 context information to decay the pointer.
b6ab6892
GB
3575 ??? Why static5.C requires decay and subst1.C works fine
3576 even without it? */
3577 if (!type_unknown_p (expr_type))
3578 {
3579 expr = decay_conversion (expr);
3580 if (expr == error_mark_node)
3581 return error_mark_node;
3582 }
75650646 3583
b6ab6892
GB
3584 expr = convert_nontype_argument_function (type, expr);
3585 if (!expr || expr == error_mark_node)
3586 return expr;
3587 }
3588 /* [temp.arg.nontype]/5, bullet 5
75650646 3589
b6ab6892
GB
3590 For a non-type template-parameter of type reference to function, no
3591 conversions apply. If the template-argument represents a set of
3592 overloaded functions, the matching function is selected from the set
3593 (_over.over_). */
3594 else if (TYPE_REFFN_P (type))
3595 {
3596 if (TREE_CODE (expr) == ADDR_EXPR)
3597 {
3598 error ("%qE is not a valid template argument for type %qT "
3599 "because it is a pointer", expr, type);
3600 inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3601 return NULL_TREE;
3602 }
75650646 3603
b6ab6892
GB
3604 expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3605 if (!expr || expr == error_mark_node)
3606 return expr;
75650646 3607
7866705a 3608 expr = build_nop (type, build_address (expr));
b6ab6892
GB
3609 }
3610 /* [temp.arg.nontype]/5, bullet 6
75650646 3611
b6ab6892
GB
3612 For a non-type template-parameter of type pointer to member function,
3613 no conversions apply. If the template-argument represents a set of
3614 overloaded member functions, the matching member function is selected
3615 from the set (_over.over_). */
3616 else if (TYPE_PTRMEMFUNC_P (type))
3617 {
3618 expr = instantiate_type (type, expr, tf_none);
3619 if (expr == error_mark_node)
3620 return error_mark_node;
75650646 3621
b6ab6892
GB
3622 /* There is no way to disable standard conversions in
3623 resolve_address_of_overloaded_function (called by
3624 instantiate_type). It is possible that the call succeeded by
3625 converting &B::I to &D::I (where B is a base of D), so we need
3626 to reject this conversion here.
75650646 3627
b6ab6892
GB
3628 Actually, even if there was a way to disable standard conversions,
3629 it would still be better to reject them here so that we can
3630 provide a superior diagnostic. */
3631 if (!same_type_p (TREE_TYPE (expr), type))
3632 {
3633 /* Make sure we are just one standard conversion off. */
3634 gcc_assert (can_convert (type, TREE_TYPE (expr)));
3635 error ("%qE is not a valid template argument for type %qT "
3636 "because it is of type %qT", expr, type,
3637 TREE_TYPE (expr));
3638 inform ("standard conversions are not allowed in this context");
3639 return NULL_TREE;
3640 }
3641 }
3642 /* [temp.arg.nontype]/5, bullet 7
59e7a901 3643
b6ab6892
GB
3644 For a non-type template-parameter of type pointer to data member,
3645 qualification conversions (_conv.qual_) are applied. */
3646 else if (TYPE_PTRMEM_P (type))
3647 {
3648 expr = perform_qualification_conversions (type, expr);
3649 if (expr == error_mark_node)
75650646 3650 return expr;
75650646 3651 }
b6ab6892
GB
3652 /* A template non-type parameter must be one of the above. */
3653 else
3654 gcc_unreachable ();
75650646 3655
b6ab6892
GB
3656 /* Sanity check: did we actually convert the argument to the
3657 right type? */
3658 gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3659 return expr;
75650646
MM
3660}
3661
b6ab6892 3662
c8094d83
MS
3663/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
3664 template template parameters. Both PARM_PARMS and ARG_PARMS are
3665 vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
744fac59 3666 or PARM_DECL.
c8094d83
MS
3667
3668 ARG_PARMS may contain more parameters than PARM_PARMS. If this is
744fac59
KL
3669 the case, then extra parameters must have default arguments.
3670
3671 Consider the example:
3672 template <class T, class Allocator = allocator> class vector;
3673 template<template <class U> class TT> class C;
3674
c8094d83
MS
3675 C<vector> is a valid instantiation. PARM_PARMS for the above code
3676 contains a TYPE_DECL (for U), ARG_PARMS contains two TYPE_DECLs (for
3677 T and Allocator) and OUTER_ARGS contains the argument that is used to
744fac59
KL
3678 substitute the TT parameter. */
3679
3680static int
c8094d83 3681coerce_template_template_parms (tree parm_parms,
0cbd7506
MS
3682 tree arg_parms,
3683 tsubst_flags_t complain,
3a978d72 3684 tree in_decl,
0cbd7506 3685 tree outer_args)
744fac59
KL
3686{
3687 int nparms, nargs, i;
3688 tree parm, arg;
3689
50bc768d
NS
3690 gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3691 gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
744fac59
KL
3692
3693 nparms = TREE_VEC_LENGTH (parm_parms);
3694 nargs = TREE_VEC_LENGTH (arg_parms);
3695
3696 /* The rule here is opposite of coerce_template_parms. */
3697 if (nargs < nparms
3698 || (nargs > nparms
3699 && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3700 return 0;
3701
3702 for (i = 0; i < nparms; ++i)
3703 {
3704 parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3705 arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3706
3707 if (arg == NULL_TREE || arg == error_mark_node
0cbd7506 3708 || parm == NULL_TREE || parm == error_mark_node)
744fac59
KL
3709 return 0;
3710
3711 if (TREE_CODE (arg) != TREE_CODE (parm))
0cbd7506 3712 return 0;
744fac59
KL
3713
3714 switch (TREE_CODE (parm))
3715 {
3716 case TYPE_DECL:
3717 break;
3718
3719 case TEMPLATE_DECL:
3720 /* We encounter instantiations of templates like
3721 template <template <template <class> class> class TT>
3722 class C; */
700466c2
JM
3723 {
3724 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3725 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3726
8c6ab2db
NS
3727 if (!coerce_template_template_parms
3728 (parmparm, argparm, complain, in_decl, outer_args))
700466c2
JM
3729 return 0;
3730 }
3731 break;
744fac59
KL
3732
3733 case PARM_DECL:
3734 /* The tsubst call is used to handle cases such as
00bdb87f
KL
3735
3736 template <int> class C {};
3737 template <class T, template <T> class TT> class D {};
3738 D<int, C> d;
3739
744fac59 3740 i.e. the parameter list of TT depends on earlier parameters. */
00bdb87f
KL
3741 if (!dependent_type_p (TREE_TYPE (arg))
3742 && !same_type_p
3743 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3744 TREE_TYPE (arg)))
744fac59
KL
3745 return 0;
3746 break;
c8094d83 3747
744fac59 3748 default:
315fb5db 3749 gcc_unreachable ();
744fac59
KL
3750 }
3751 }
3752 return 1;
3753}
3754
8b5b8b7c
MM
3755/* Convert the indicated template ARG as necessary to match the
3756 indicated template PARM. Returns the converted ARG, or
c2ea3a40
NS
3757 error_mark_node if the conversion was unsuccessful. Error and
3758 warning messages are issued under control of COMPLAIN. This
3759 conversion is for the Ith parameter in the parameter list. ARGS is
3760 the full set of template arguments deduced so far. */
8b5b8b7c
MM
3761
3762static tree
c8094d83 3763convert_template_argument (tree parm,
0cbd7506
MS
3764 tree arg,
3765 tree args,
3766 tsubst_flags_t complain,
3767 int i,
3768 tree in_decl)
8b5b8b7c
MM
3769{
3770 tree val;
3771 tree inner_args;
3772 int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
c8094d83 3773
f9a7ae04 3774 inner_args = INNERMOST_TEMPLATE_ARGS (args);
8b5b8b7c 3775
c8094d83 3776 if (TREE_CODE (arg) == TREE_LIST
a5ac359a 3777 && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
c8094d83 3778 {
8b5b8b7c
MM
3779 /* The template argument was the name of some
3780 member function. That's usually
0e339752 3781 invalid, but static members are OK. In any
8b5b8b7c
MM
3782 case, grab the underlying fields/functions
3783 and issue an error later if required. */
3784 arg = TREE_VALUE (arg);
3785 TREE_TYPE (arg) = unknown_type_node;
3786 }
3787
3788 requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3789 requires_type = (TREE_CODE (parm) == TYPE_DECL
3790 || requires_tmpl_type);
3791
cbd63935
KL
3792 is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3793 && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3794 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3795 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
c8094d83 3796
b8c6534b
KL
3797 if (is_tmpl_type
3798 && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3799 || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
8b5b8b7c 3800 arg = TYPE_STUB_DECL (arg);
8b5b8b7c 3801
2f939d94 3802 is_type = TYPE_P (arg) || is_tmpl_type;
8b5b8b7c
MM
3803
3804 if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3805 && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3806 {
0f51ccfc 3807 pedwarn ("to refer to a type member of a template parameter, "
0cbd7506 3808 "use %<typename %E%>", arg);
c8094d83 3809
8b5b8b7c 3810 arg = make_typename_type (TREE_OPERAND (arg, 0),
3baa501d 3811 TREE_OPERAND (arg, 1),
fc6a28d7 3812 typename_type,
c2ea3a40 3813 complain & tf_error);
8b5b8b7c
MM
3814 is_type = 1;
3815 }
3816 if (is_type != requires_type)
3817 {
3818 if (in_decl)
3819 {
c2ea3a40 3820 if (complain & tf_error)
8b5b8b7c 3821 {
0f51ccfc 3822 error ("type/value mismatch at argument %d in template "
0cbd7506
MS
3823 "parameter list for %qD",
3824 i + 1, in_decl);
8b5b8b7c 3825 if (is_type)
0f51ccfc 3826 error (" expected a constant of type %qT, got %qT",
0cbd7506
MS
3827 TREE_TYPE (parm),
3828 (is_tmpl_type ? DECL_NAME (arg) : arg));
d12a7283 3829 else if (requires_tmpl_type)
0f51ccfc 3830 error (" expected a class template, got %qE", arg);
8b5b8b7c 3831 else
0f51ccfc 3832 error (" expected a type, got %qE", arg);
8b5b8b7c
MM
3833 }
3834 }
3835 return error_mark_node;
3836 }
3837 if (is_tmpl_type ^ requires_tmpl_type)
3838 {
c2ea3a40 3839 if (in_decl && (complain & tf_error))
8b5b8b7c 3840 {
0f51ccfc 3841 error ("type/value mismatch at argument %d in template "
0cbd7506
MS
3842 "parameter list for %qD",
3843 i + 1, in_decl);
8b5b8b7c 3844 if (is_tmpl_type)
0f51ccfc 3845 error (" expected a type, got %qT", DECL_NAME (arg));
8b5b8b7c 3846 else
0f51ccfc 3847 error (" expected a class template, got %qT", arg);
8b5b8b7c
MM
3848 }
3849 return error_mark_node;
3850 }
c8094d83 3851
8b5b8b7c
MM
3852 if (is_type)
3853 {
3854 if (requires_tmpl_type)
3855 {
b8c6534b
KL
3856 if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3857 /* The number of argument required is not known yet.
3858 Just accept it for now. */
3859 val = TREE_TYPE (arg);
8b5b8b7c
MM
3860 else
3861 {
b8c6534b
KL
3862 tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3863 tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3864
3865 if (coerce_template_template_parms (parmparm, argparm,
3866 complain, in_decl,
3867 inner_args))
8b5b8b7c 3868 {
b8c6534b 3869 val = arg;
c8094d83
MS
3870
3871 /* TEMPLATE_TEMPLATE_PARM node is preferred over
b8c6534b 3872 TEMPLATE_DECL. */
c8094d83 3873 if (val != error_mark_node
b8c6534b
KL
3874 && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3875 val = TREE_TYPE (val);
8b5b8b7c 3876 }
b8c6534b
KL
3877 else
3878 {
c2ea3a40 3879 if (in_decl && (complain & tf_error))
b8c6534b 3880 {
0f51ccfc 3881 error ("type/value mismatch at argument %d in "
0cbd7506
MS
3882 "template parameter list for %qD",
3883 i + 1, in_decl);
0f51ccfc 3884 error (" expected a template of type %qD, got %qD",
0cbd7506 3885 parm, arg);
b8c6534b 3886 }
c8094d83 3887
b8c6534b
KL
3888 val = error_mark_node;
3889 }
8b5b8b7c
MM
3890 }
3891 }
3892 else
058b15c1 3893 val = arg;
8b5b8b7c
MM
3894 }
3895 else
3896 {
4393e105 3897 tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
8b5b8b7c 3898
11b810f1 3899 if (invalid_nontype_parm_type_p (t, complain))
0cbd7506 3900 return error_mark_node;
c8094d83 3901
d768a589 3902 if (!uses_template_parms (arg) && !uses_template_parms (t))
8b5b8b7c
MM
3903 /* We used to call digest_init here. However, digest_init
3904 will report errors, which we don't want when complain
3905 is zero. More importantly, digest_init will try too
3906 hard to convert things: for example, `0' should not be
3907 converted to pointer type at this point according to
3908 the standard. Accepting this is not merely an
3909 extension, since deciding whether or not these
3910 conversions can occur is part of determining which
dc957d14 3911 function template to call, or whether a given explicit
0e339752 3912 argument specification is valid. */
8b5b8b7c
MM
3913 val = convert_nontype_argument (t, arg);
3914 else
3915 val = arg;
3916
3917 if (val == NULL_TREE)
3918 val = error_mark_node;
c2ea3a40 3919 else if (val == error_mark_node && (complain & tf_error))
0f51ccfc 3920 error ("could not convert template argument %qE to %qT", arg, t);
8b5b8b7c
MM
3921 }
3922
3923 return val;
3924}
3925
3926/* Convert all template arguments to their appropriate types, and
3927 return a vector containing the innermost resulting template
c2ea3a40 3928 arguments. If any error occurs, return error_mark_node. Error and
3e4a3562 3929 warning messages are issued under control of COMPLAIN.
75650646 3930
838dfd8a 3931 If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
75650646
MM
3932 provided in ARGLIST, or else trailing parameters must have default
3933 values. If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
6dfbb909 3934 deduction for any unspecified trailing arguments. */
c8094d83 3935
8d08fdba 3936static tree
c8094d83 3937coerce_template_parms (tree parms,
0cbd7506
MS
3938 tree args,
3939 tree in_decl,
3a978d72
NN
3940 tsubst_flags_t complain,
3941 int require_all_arguments)
8d08fdba 3942{
a292b002 3943 int nparms, nargs, i, lost = 0;
e4a84209 3944 tree inner_args;
8b5b8b7c
MM
3945 tree new_args;
3946 tree new_inner_args;
a292b002 3947
f9a7ae04 3948 inner_args = INNERMOST_TEMPLATE_ARGS (args);
bf12d54d 3949 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
a292b002
MS
3950 nparms = TREE_VEC_LENGTH (parms);
3951
3952 if (nargs > nparms
3953 || (nargs < nparms
75650646 3954 && require_all_arguments
a292b002 3955 && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
8d08fdba 3956 {
c8094d83 3957 if (complain & tf_error)
75650646 3958 {
33bd39a2 3959 error ("wrong number of template arguments (%d, should be %d)",
0cbd7506 3960 nargs, nparms);
c8094d83 3961
75650646 3962 if (in_decl)
dee15844 3963 error ("provided for %q+D", in_decl);
75650646
MM
3964 }
3965
8d08fdba
MS
3966 return error_mark_node;
3967 }
3968
f31c0a32 3969 new_inner_args = make_tree_vec (nparms);
8b5b8b7c
MM
3970 new_args = add_outermost_template_args (args, new_inner_args);
3971 for (i = 0; i < nparms; i++)
8d08fdba 3972 {
8b5b8b7c
MM
3973 tree arg;
3974 tree parm;
e4a84209 3975
8b5b8b7c
MM
3976 /* Get the Ith template parameter. */
3977 parm = TREE_VEC_ELT (parms, i);
75650646 3978
8b5b8b7c 3979 /* Calculate the Ith argument. */
bf12d54d 3980 if (i < nargs)
8b5b8b7c 3981 arg = TREE_VEC_ELT (inner_args, i);
ffd49b19 3982 else if (require_all_arguments)
04c06002 3983 /* There must be a default arg in this case. */
a91db711
NS
3984 arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3985 complain, in_decl);
ffd49b19
NS
3986 else
3987 break;
c8094d83 3988
50bc768d 3989 gcc_assert (arg);
ffd49b19 3990 if (arg == error_mark_node)
e34b0922
KL
3991 {
3992 if (complain & tf_error)
3993 error ("template argument %d is invalid", i + 1);
3994 }
c8094d83
MS
3995 else
3996 arg = convert_template_argument (TREE_VALUE (parm),
8b5b8b7c 3997 arg, new_args, complain, i,
c8094d83
MS
3998 in_decl);
3999
8b5b8b7c 4000 if (arg == error_mark_node)
8d08fdba 4001 lost++;
8b5b8b7c 4002 TREE_VEC_ELT (new_inner_args, i) = arg;
8d08fdba 4003 }
8b5b8b7c 4004
8d08fdba
MS
4005 if (lost)
4006 return error_mark_node;
8b5b8b7c
MM
4007
4008 return new_inner_args;
8d08fdba
MS
4009}
4010
34016c81
JM
4011/* Returns 1 if template args OT and NT are equivalent. */
4012
d8e178a0 4013static int
3a978d72 4014template_args_equal (tree ot, tree nt)
34016c81
JM
4015{
4016 if (nt == ot)
4017 return 1;
74601d7c 4018
34016c81
JM
4019 if (TREE_CODE (nt) == TREE_VEC)
4020 /* For member templates */
74601d7c
KL
4021 return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4022 else if (TYPE_P (nt))
660845bf 4023 return TYPE_P (ot) && same_type_p (ot, nt);
74601d7c
KL
4024 else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4025 return 0;
34016c81 4026 else
c8a209ca 4027 return cp_tree_equal (ot, nt);
34016c81
JM
4028}
4029
4030/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
f84b4be9
JM
4031 of template arguments. Returns 0 otherwise. */
4032
6757edfe 4033int
3a978d72 4034comp_template_args (tree oldargs, tree newargs)
5566b478
MS
4035{
4036 int i;
4037
386b8a85
JM
4038 if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4039 return 0;
4040
5566b478
MS
4041 for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4042 {
4043 tree nt = TREE_VEC_ELT (newargs, i);
4044 tree ot = TREE_VEC_ELT (oldargs, i);
4045
34016c81 4046 if (! template_args_equal (ot, nt))
61a127b3 4047 return 0;
5566b478
MS
4048 }
4049 return 1;
4050}
4051
8d08fdba
MS
4052/* Given class template name and parameter list, produce a user-friendly name
4053 for the instantiation. */
e92cc029 4054
8d08fdba 4055static char *
3a978d72 4056mangle_class_name_for_template (const char* name, tree parms, tree arglist)
8d08fdba
MS
4057{
4058 static struct obstack scratch_obstack;
4059 static char *scratch_firstobj;
4060 int i, nparms;
8d08fdba
MS
4061
4062 if (!scratch_firstobj)
fc378698 4063 gcc_obstack_init (&scratch_obstack);
8d08fdba
MS
4064 else
4065 obstack_free (&scratch_obstack, scratch_firstobj);
fc378698 4066 scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
8d08fdba 4067
18e314ad
GS
4068#define ccat(C) obstack_1grow (&scratch_obstack, (C));
4069#define cat(S) obstack_grow (&scratch_obstack, (S), strlen (S))
8d08fdba
MS
4070
4071 cat (name);
4072 ccat ('<');
4073 nparms = TREE_VEC_LENGTH (parms);
f9a7ae04 4074 arglist = INNERMOST_TEMPLATE_ARGS (arglist);
50bc768d 4075 gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
8d08fdba
MS
4076 for (i = 0; i < nparms; i++)
4077 {
a292b002
MS
4078 tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4079 tree arg = TREE_VEC_ELT (arglist, i);
8d08fdba
MS
4080
4081 if (i)
4082 ccat (',');
4083
a292b002 4084 if (TREE_CODE (parm) == TYPE_DECL)
8d08fdba 4085 {
761f0855 4086 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
8d08fdba
MS
4087 continue;
4088 }
73b0fce8
KL
4089 else if (TREE_CODE (parm) == TEMPLATE_DECL)
4090 {
4091 if (TREE_CODE (arg) == TEMPLATE_DECL)
2c73f9f5 4092 {
c8094d83 4093 /* Already substituted with real template. Just output
2c73f9f5 4094 the template name here */
0cbd7506
MS
4095 tree context = DECL_CONTEXT (arg);
4096 if (context)
4097 {
4098 /* The template may be defined in a namespace, or
4099 may be a member template. */
4100 gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
50bc768d
NS
4101 || CLASS_TYPE_P (context));
4102 cat (decl_as_string (DECL_CONTEXT (arg),
4103 TFF_PLAIN_IDENTIFIER));
4104 cat ("::");
2c73f9f5
ML
4105 }
4106 cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4107 }
73b0fce8 4108 else
f4f206f4 4109 /* Output the parameter declaration. */
761f0855 4110 cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
73b0fce8
KL
4111 continue;
4112 }
8d08fdba 4113 else
50bc768d 4114 gcc_assert (TREE_CODE (parm) == PARM_DECL);
8d08fdba 4115
8d08fdba
MS
4116 /* No need to check arglist against parmlist here; we did that
4117 in coerce_template_parms, called from lookup_template_class. */
761f0855 4118 cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
8d08fdba
MS
4119 }
4120 {
4121 char *bufp = obstack_next_free (&scratch_obstack);
4122 int offset = 0;
4123 while (bufp[offset - 1] == ' ')
4124 offset--;
4125 obstack_blank_fast (&scratch_obstack, offset);
4126
4127 /* B<C<char> >, not B<C<char>> */
4128 if (bufp[offset - 1] == '>')
4129 ccat (' ');
4130 }
4131 ccat ('>');
4132 ccat ('\0');
4133 return (char *) obstack_base (&scratch_obstack);
8d08fdba
MS
4134}
4135
bd6dd845 4136static tree
3a978d72 4137classtype_mangled_name (tree t)
5566b478
MS
4138{
4139 if (CLASSTYPE_TEMPLATE_INFO (t)
36a117a5
MM
4140 /* Specializations have already had their names set up in
4141 lookup_template_class. */
370af2d5 4142 && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9fbf56f7
MM
4143 {
4144 tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4145
36a117a5
MM
4146 /* For non-primary templates, the template parameters are
4147 implicit from their surrounding context. */
9fbf56f7
MM
4148 if (PRIMARY_TEMPLATE_P (tmpl))
4149 {
4150 tree name = DECL_NAME (tmpl);
4151 char *mangled_name = mangle_class_name_for_template
c8094d83 4152 (IDENTIFIER_POINTER (name),
9fbf56f7
MM
4153 DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4154 CLASSTYPE_TI_ARGS (t));
4155 tree id = get_identifier (mangled_name);
4156 IDENTIFIER_TEMPLATE (id) = name;
4157 return id;
4158 }
5566b478 4159 }
9fbf56f7
MM
4160
4161 return TYPE_IDENTIFIER (t);
5566b478
MS
4162}
4163
4164static void
3a978d72 4165add_pending_template (tree d)
5566b478 4166{
3ae18eaf
JM
4167 tree ti = (TYPE_P (d)
4168 ? CLASSTYPE_TEMPLATE_INFO (d)
4169 : DECL_TEMPLATE_INFO (d));
46ccf50a 4170 tree pt;
3ae18eaf 4171 int level;
e92cc029 4172
824b9a4c 4173 if (TI_PENDING_TEMPLATE_FLAG (ti))
5566b478
MS
4174 return;
4175
3ae18eaf
JM
4176 /* We are called both from instantiate_decl, where we've already had a
4177 tinst_level pushed, and instantiate_template, where we haven't.
4178 Compensate. */
4179 level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4180
4181 if (level)
4182 push_tinst_level (d);
4183
46ccf50a
JM
4184 pt = tree_cons (current_tinst_level, d, NULL_TREE);
4185 if (last_pending_template)
4186 TREE_CHAIN (last_pending_template) = pt;
4187 else
4188 pending_templates = pt;
4189
4190 last_pending_template = pt;
4191
824b9a4c 4192 TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3ae18eaf
JM
4193
4194 if (level)
4195 pop_tinst_level ();
5566b478
MS
4196}
4197
386b8a85 4198
4ba126e4
MM
4199/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4200 ARGLIST. Valid choices for FNS are given in the cp-tree.def
4201 documentation for TEMPLATE_ID_EXPR. */
386b8a85
JM
4202
4203tree
3a978d72 4204lookup_template_function (tree fns, tree arglist)
386b8a85 4205{
2c73f9f5 4206 tree type;
050367a3 4207
4ba126e4
MM
4208 if (fns == error_mark_node || arglist == error_mark_node)
4209 return error_mark_node;
4210
50bc768d 4211 gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4230cec2
NS
4212 gcc_assert (fns && (is_overloaded_fn (fns)
4213 || TREE_CODE (fns) == IDENTIFIER_NODE));
4ba126e4 4214
50ad9642
MM
4215 if (BASELINK_P (fns))
4216 {
f293ce4b
RS
4217 BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4218 unknown_type_node,
4219 BASELINK_FUNCTIONS (fns),
4220 arglist);
50ad9642
MM
4221 return fns;
4222 }
4223
2c73f9f5
ML
4224 type = TREE_TYPE (fns);
4225 if (TREE_CODE (fns) == OVERLOAD || !type)
4226 type = unknown_type_node;
c8094d83 4227
f293ce4b 4228 return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
386b8a85
JM
4229}
4230
a2b60a0e
MM
4231/* Within the scope of a template class S<T>, the name S gets bound
4232 (in build_self_reference) to a TYPE_DECL for the class, not a
4233 TEMPLATE_DECL. If DECL is a TYPE_DECL for current_class_type,
4234 or one of its enclosing classes, and that type is a template,
4235 return the associated TEMPLATE_DECL. Otherwise, the original
4236 DECL is returned. */
4237
a723baf1 4238tree
3a978d72 4239maybe_get_template_decl_from_type_decl (tree decl)
a2b60a0e
MM
4240{
4241 return (decl != NULL_TREE
c8094d83 4242 && TREE_CODE (decl) == TYPE_DECL
a2b60a0e 4243 && DECL_ARTIFICIAL (decl)
511b60ff 4244 && CLASS_TYPE_P (TREE_TYPE (decl))
c8094d83 4245 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
a2b60a0e
MM
4246 ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4247}
386b8a85 4248
8d08fdba
MS
4249/* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4250 parameters, find the desired type.
4251
4252 D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
8d08fdba
MS
4253
4254 IN_DECL, if non-NULL, is the template declaration we are trying to
c8094d83 4255 instantiate.
75650646 4256
838dfd8a 4257 If ENTERING_SCOPE is nonzero, we are about to enter the scope of
36a117a5 4258 the class we are looking up.
c8094d83 4259
c2ea3a40 4260 Issue error and warning messages under control of COMPLAIN.
36a117a5 4261
75650646
MM
4262 If the template class is really a local class in a template
4263 function, then the FUNCTION_CONTEXT is the function in which it is
c8094d83 4264 being instantiated.
b6ab6892
GB
4265
4266 ??? Note that this function is currently called *twice* for each
4267 template-id: the first time from the parser, while creating the
4268 incomplete type (finish_template_type), and the second type during the
4269 real instantiation (instantiate_template_class). This is surely something
4270 that we want to avoid. It also causes some problems with argument
4271 coercion (see convert_nontype_argument for more information on this). */
e92cc029 4272
8d08fdba 4273tree
c8094d83 4274lookup_template_class (tree d1,
0cbd7506
MS
4275 tree arglist,
4276 tree in_decl,
4277 tree context,
4278 int entering_scope,
4279 tsubst_flags_t complain)
8d08fdba 4280{
a703fb38 4281 tree template = NULL_TREE, parmlist;
dbfe2124 4282 tree t;
c8094d83 4283
fd295cb2 4284 timevar_push (TV_NAME_LOOKUP);
c8094d83 4285
5566b478
MS
4286 if (TREE_CODE (d1) == IDENTIFIER_NODE)
4287 {
90ea9897
MM
4288 tree value = innermost_non_namespace_value (d1);
4289 if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4290 template = value;
73b0fce8
KL
4291 else
4292 {
2c73f9f5
ML
4293 if (context)
4294 push_decl_namespace (context);
3ebc5c52
MM
4295 template = lookup_name (d1, /*prefer_type=*/0);
4296 template = maybe_get_template_decl_from_type_decl (template);
2c73f9f5
ML
4297 if (context)
4298 pop_decl_namespace ();
73b0fce8 4299 }
8d019cef
JM
4300 if (template)
4301 context = DECL_CONTEXT (template);
5566b478 4302 }
c91a56d2
MS
4303 else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4304 {
802dbc34
JM
4305 tree type = TREE_TYPE (d1);
4306
4307 /* If we are declaring a constructor, say A<T>::A<T>, we will get
4308 an implicit typename for the second A. Deal with it. */
4309 if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4310 type = TREE_TYPE (type);
c8094d83 4311
802dbc34 4312 if (CLASSTYPE_TEMPLATE_INFO (type))
f3400fe2 4313 {
802dbc34 4314 template = CLASSTYPE_TI_TEMPLATE (type);
f3400fe2
JM
4315 d1 = DECL_NAME (template);
4316 }
c91a56d2 4317 }
c8094d83 4318 else if (TREE_CODE (d1) == ENUMERAL_TYPE
2f939d94 4319 || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5566b478 4320 {
ed44da02 4321 template = TYPE_TI_TEMPLATE (d1);
5566b478
MS
4322 d1 = DECL_NAME (template);
4323 }
93cdc044 4324 else if (TREE_CODE (d1) == TEMPLATE_DECL
17aec3eb 4325 && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
93cdc044
JM
4326 {
4327 template = d1;
4328 d1 = DECL_NAME (template);
4329 context = DECL_CONTEXT (template);
4330 }
8d08fdba 4331
90ea9897 4332 /* Issue an error message if we didn't find a template. */
8d08fdba 4333 if (! template)
f3400fe2 4334 {
c2ea3a40 4335 if (complain & tf_error)
0cbd7506 4336 error ("%qT is not a template", d1);
fd295cb2 4337 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
f3400fe2 4338 }
2c73f9f5 4339
a87b4257 4340 if (TREE_CODE (template) != TEMPLATE_DECL
0cbd7506 4341 /* Make sure it's a user visible template, if it was named by
42eaed49
NS
4342 the user. */
4343 || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4344 && !PRIMARY_TEMPLATE_P (template)))
8d08fdba 4345 {
c2ea3a40 4346 if (complain & tf_error)
0cbd7506
MS
4347 {
4348 error ("non-template type %qT used as a template", d1);
4349 if (in_decl)
dee15844 4350 error ("for template declaration %q+D", in_decl);
f9c244b8 4351 }
fd295cb2 4352 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
8d08fdba 4353 }
8d08fdba 4354
42eaed49 4355 complain &= ~tf_user;
c8094d83 4356
73b0fce8
KL
4357 if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4358 {
4359 /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
0cbd7506 4360 template arguments */
73b0fce8 4361
1899c3a4 4362 tree parm;
73b0fce8
KL
4363 tree arglist2;
4364
73b0fce8
KL
4365 parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4366
4f96ff63
KL
4367 /* Consider an example where a template template parameter declared as
4368
4369 template <class T, class U = std::allocator<T> > class TT
4370
c8094d83
MS
4371 The template parameter level of T and U are one level larger than
4372 of TT. To proper process the default argument of U, say when an
4f96ff63 4373 instantiation `TT<int>' is seen, we need to build the full
342cea95
KL
4374 arguments containing {int} as the innermost level. Outer levels,
4375 available when not appearing as default template argument, can be
4376 obtained from `current_template_args ()'.
4f96ff63 4377
342cea95
KL
4378 Suppose that TT is later substituted with std::vector. The above
4379 instantiation is `TT<int, std::allocator<T> >' with TT at
4380 level 1, and T at level 2, while the template arguments at level 1
4381 becomes {std::vector} and the inner level 2 is {int}. */
4382
4383 if (current_template_parms)
4f96ff63
KL
4384 arglist = add_to_template_args (current_template_args (), arglist);
4385
f9c244b8 4386 arglist2 = coerce_template_parms (parmlist, arglist, template,
0cbd7506 4387 complain, /*require_all_args=*/1);
3e4a3562 4388 if (arglist2 == error_mark_node
544aef8c 4389 || (!uses_template_parms (arglist2)
3e4a3562 4390 && check_instantiated_args (template, arglist2, complain)))
0cbd7506 4391 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
73b0fce8 4392
dac65501 4393 parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
fd295cb2 4394 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
73b0fce8 4395 }
c8094d83 4396 else
8d08fdba 4397 {
36a117a5 4398 tree template_type = TREE_TYPE (template);
7ac7b28f 4399 tree gen_tmpl;
36a117a5
MM
4400 tree type_decl;
4401 tree found = NULL_TREE;
4402 int arg_depth;
4403 int parm_depth;
dbfe2124 4404 int is_partial_instantiation;
830bfa74 4405
7ac7b28f
MM
4406 gen_tmpl = most_general_template (template);
4407 parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
36a117a5
MM
4408 parm_depth = TMPL_PARMS_DEPTH (parmlist);
4409 arg_depth = TMPL_ARGS_DEPTH (arglist);
4410
4411 if (arg_depth == 1 && parm_depth > 1)
4412 {
39c01e4c 4413 /* We've been given an incomplete set of template arguments.
36a117a5
MM
4414 For example, given:
4415
4416 template <class T> struct S1 {
0cbd7506 4417 template <class U> struct S2 {};
36a117a5 4418 template <class U> struct S2<U*> {};
0cbd7506 4419 };
c8094d83 4420
36a117a5
MM
4421 we will be called with an ARGLIST of `U*', but the
4422 TEMPLATE will be `template <class T> template
4423 <class U> struct S1<T>::S2'. We must fill in the missing
4424 arguments. */
c8094d83 4425 arglist
7ac7b28f
MM
4426 = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4427 arglist);
36a117a5
MM
4428 arg_depth = TMPL_ARGS_DEPTH (arglist);
4429 }
5566b478 4430
41f5d4b1 4431 /* Now we should have enough arguments. */
50bc768d 4432 gcc_assert (parm_depth == arg_depth);
c8094d83 4433
7ac7b28f
MM
4434 /* From here on, we're only interested in the most general
4435 template. */
4436 template = gen_tmpl;
4437
36a117a5
MM
4438 /* Calculate the BOUND_ARGS. These will be the args that are
4439 actually tsubst'd into the definition to create the
4440 instantiation. */
4441 if (parm_depth > 1)
830bfa74
MM
4442 {
4443 /* We have multiple levels of arguments to coerce, at once. */
830bfa74 4444 int i;
e4a84209 4445 int saved_depth = TMPL_ARGS_DEPTH (arglist);
36a117a5 4446
f31c0a32 4447 tree bound_args = make_tree_vec (parm_depth);
c8094d83 4448
e4a84209 4449 for (i = saved_depth,
c8094d83 4450 t = DECL_TEMPLATE_PARMS (template);
e4a84209 4451 i > 0 && t != NULL_TREE;
830bfa74 4452 --i, t = TREE_CHAIN (t))
e4a84209 4453 {
ee3071ef
NS
4454 tree a = coerce_template_parms (TREE_VALUE (t),
4455 arglist, template,
0cbd7506 4456 complain, /*require_all_args=*/1);
88e98cfe
KL
4457
4458 /* Don't process further if one of the levels fails. */
4459 if (a == error_mark_node)
4460 {
4461 /* Restore the ARGLIST to its full size. */
4462 TREE_VEC_LENGTH (arglist) = saved_depth;
4463 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4464 }
c8094d83 4465
e4a84209
MM
4466 SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4467
4468 /* We temporarily reduce the length of the ARGLIST so
4469 that coerce_template_parms will see only the arguments
4470 corresponding to the template parameters it is
4471 examining. */
4472 TREE_VEC_LENGTH (arglist)--;
4473 }
4474
4475 /* Restore the ARGLIST to its full size. */
4476 TREE_VEC_LENGTH (arglist) = saved_depth;
4477
36a117a5 4478 arglist = bound_args;
830bfa74
MM
4479 }
4480 else
36a117a5
MM
4481 arglist
4482 = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
f9a7ae04 4483 INNERMOST_TEMPLATE_ARGS (arglist),
f9c244b8 4484 template,
0cbd7506 4485 complain, /*require_all_args=*/1);
36a117a5 4486
c353b8e3 4487 if (arglist == error_mark_node)
36a117a5 4488 /* We were unable to bind the arguments. */
fd295cb2 4489 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5566b478 4490
36a117a5
MM
4491 /* In the scope of a template class, explicit references to the
4492 template class refer to the type of the template, not any
4493 instantiation of it. For example, in:
c8094d83 4494
36a117a5
MM
4495 template <class T> class C { void f(C<T>); }
4496
4497 the `C<T>' is just the same as `C'. Outside of the
4498 class, however, such a reference is an instantiation. */
ed44da02 4499 if (comp_template_args (TYPE_TI_ARGS (template_type),
36a117a5
MM
4500 arglist))
4501 {
4502 found = template_type;
c8094d83 4503
36a117a5 4504 if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5566b478 4505 {
36a117a5 4506 tree ctx;
c8094d83
MS
4507
4508 for (ctx = current_class_type;
5f04800c
KL
4509 ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4510 ctx = (TYPE_P (ctx)
4511 ? TYPE_CONTEXT (ctx)
4512 : DECL_CONTEXT (ctx)))
4513 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4514 goto found_ctx;
c8094d83 4515
6df5158a
NS
4516 /* We're not in the scope of the class, so the
4517 TEMPLATE_TYPE is not the type we want after all. */
4518 found = NULL_TREE;
4519 found_ctx:;
5566b478
MS
4520 }
4521 }
36a117a5 4522 if (found)
0cbd7506 4523 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
414ea4aa 4524
c7222c02
MM
4525 /* If we already have this specialization, return it. */
4526 found = retrieve_specialization (template, arglist,
4527 /*class_specializations_p=*/false);
4528 if (found)
4529 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5566b478 4530
dbfe2124 4531 /* This type is a "partial instantiation" if any of the template
ab097535 4532 arguments still involve template parameters. Note that we set
486e4077
MM
4533 IS_PARTIAL_INSTANTIATION for partial specializations as
4534 well. */
dbfe2124
MM
4535 is_partial_instantiation = uses_template_parms (arglist);
4536
c353b8e3
MM
4537 /* If the deduced arguments are invalid, then the binding
4538 failed. */
4539 if (!is_partial_instantiation
4540 && check_instantiated_args (template,
4541 INNERMOST_TEMPLATE_ARGS (arglist),
4542 complain))
4543 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
c8094d83
MS
4544
4545 if (!is_partial_instantiation
3ebc5c52
MM
4546 && !PRIMARY_TEMPLATE_P (template)
4547 && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4548 {
3ebc5c52
MM
4549 found = xref_tag_from_type (TREE_TYPE (template),
4550 DECL_NAME (template),
29ef83de 4551 /*tag_scope=*/ts_global);
fd295cb2 4552 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
3ebc5c52 4553 }
c8094d83 4554
95ee998c 4555 context = tsubst (DECL_CONTEXT (template), arglist,
c2ea3a40 4556 complain, in_decl);
95ee998c
MM
4557 if (!context)
4558 context = global_namespace;
4559
36a117a5 4560 /* Create the type. */
ed44da02
MM
4561 if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4562 {
dbfe2124 4563 if (!is_partial_instantiation)
92777ce4
NS
4564 {
4565 set_current_access_from_decl (TYPE_NAME (template_type));
4566 t = start_enum (TYPE_IDENTIFIER (template_type));
4567 }
ed44da02 4568 else
dbfe2124 4569 /* We don't want to call start_enum for this type, since
ed44da02
MM
4570 the values for the enumeration constants may involve
4571 template parameters. And, no one should be interested
4572 in the enumeration constants for such a type. */
4573 t = make_node (ENUMERAL_TYPE);
4574 }
4575 else
4576 {
33848bb0 4577 t = make_aggr_type (TREE_CODE (template_type));
c8094d83 4578 CLASSTYPE_DECLARED_CLASS (t)
ed44da02 4579 = CLASSTYPE_DECLARED_CLASS (template_type);
ed44da02 4580 SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
f668f160 4581 TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
ae673f14
JM
4582
4583 /* A local class. Make sure the decl gets registered properly. */
4584 if (context == current_function_decl)
bd3d082e 4585 pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
ed44da02
MM
4586 }
4587
ae673f14
JM
4588 /* If we called start_enum or pushtag above, this information
4589 will already be set up. */
ed44da02
MM
4590 if (!TYPE_NAME (t))
4591 {
4592 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
c8094d83 4593
9188c363 4594 type_decl = create_implicit_typedef (DECL_NAME (template), t);
ed44da02 4595 DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9188c363 4596 TYPE_STUB_DECL (t) = type_decl;
c8094d83 4597 DECL_SOURCE_LOCATION (type_decl)
f31686a3 4598 = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
ed44da02
MM
4599 }
4600 else
4601 type_decl = TYPE_NAME (t);
36a117a5 4602
cab7a9a3
KL
4603 TREE_PRIVATE (type_decl)
4604 = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4605 TREE_PROTECTED (type_decl)
4606 = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
12af7ba3
MM
4607 DECL_IN_SYSTEM_HEADER (type_decl)
4608 = DECL_IN_SYSTEM_HEADER (template);
cab7a9a3 4609
9fbf56f7
MM
4610 /* Set up the template information. We have to figure out which
4611 template is the immediate parent if this is a full
4612 instantiation. */
4613 if (parm_depth == 1 || is_partial_instantiation
4614 || !PRIMARY_TEMPLATE_P (template))
4615 /* This case is easy; there are no member templates involved. */
4616 found = template;
4617 else
4618 {
ab097535
NS
4619 /* This is a full instantiation of a member template. Look
4620 for a partial instantiation of which this is an instance. */
9fbf56f7
MM
4621
4622 for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4623 found; found = TREE_CHAIN (found))
4624 {
4625 int success;
4626 tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4627
4628 /* We only want partial instantiations, here, not
4629 specializations or full instantiations. */
370af2d5 4630 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
9fbf56f7
MM
4631 || !uses_template_parms (TREE_VALUE (found)))
4632 continue;
4633
4634 /* Temporarily reduce by one the number of levels in the
4635 ARGLIST and in FOUND so as to avoid comparing the
4636 last set of arguments. */
4637 TREE_VEC_LENGTH (arglist)--;
4638 TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4639
4640 /* See if the arguments match. If they do, then TMPL is
4641 the partial instantiation we want. */
4642 success = comp_template_args (TREE_PURPOSE (found), arglist);
4643
4644 /* Restore the argument vectors to their full size. */
4645 TREE_VEC_LENGTH (arglist)++;
4646 TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4647
4648 if (success)
4649 {
4650 found = tmpl;
4651 break;
4652 }
4653 }
4654
4655 if (!found)
ab097535
NS
4656 {
4657 /* There was no partial instantiation. This happens
0cbd7506
MS
4658 where C<T> is a member template of A<T> and it's used
4659 in something like
c8094d83 4660
0cbd7506
MS
4661 template <typename T> struct B { A<T>::C<int> m; };
4662 B<float>;
c8094d83 4663
0cbd7506
MS
4664 Create the partial instantiation.
4665 */
4666 TREE_VEC_LENGTH (arglist)--;
4667 found = tsubst (template, arglist, complain, NULL_TREE);
4668 TREE_VEC_LENGTH (arglist)++;
4669 }
9fbf56f7
MM
4670 }
4671
c8094d83
MS
4672 SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
4673 DECL_TEMPLATE_INSTANTIATIONS (template)
4674 = tree_cons (arglist, t,
dbfe2124
MM
4675 DECL_TEMPLATE_INSTANTIATIONS (template));
4676
c8094d83 4677 if (TREE_CODE (t) == ENUMERAL_TYPE
dbfe2124 4678 && !is_partial_instantiation)
61a127b3
MM
4679 /* Now that the type has been registered on the instantiations
4680 list, we set up the enumerators. Because the enumeration
4681 constants may involve the enumeration type itself, we make
4682 sure to register the type first, and then create the
4683 constants. That way, doing tsubst_expr for the enumeration
4684 constants won't result in recursive calls here; we'll find
4685 the instantiation and exit above. */
4686 tsubst_enum (template_type, t, arglist);
dbfe2124 4687
36a117a5
MM
4688 /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4689 is set up. */
ed44da02
MM
4690 if (TREE_CODE (t) != ENUMERAL_TYPE)
4691 DECL_NAME (type_decl) = classtype_mangled_name (t);
7813d14c 4692 if (is_partial_instantiation)
077e7015
MM
4693 /* If the type makes use of template parameters, the
4694 code that generates debugging information will crash. */
4695 DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
8d08fdba 4696
fd295cb2 4697 POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
36a117a5 4698 }
fd295cb2 4699 timevar_pop (TV_NAME_LOOKUP);
8d08fdba
MS
4700}
4701\f
c8094d83 4702struct pair_fn_data
8d08fdba 4703{
8dfaeb63
MM
4704 tree_fn_t fn;
4705 void *data;
0c58f841 4706 struct pointer_set_t *visited;
8dfaeb63
MM
4707};
4708
4709/* Called from for_each_template_parm via walk_tree. */
581d38d0 4710
8dfaeb63 4711static tree
350fae66 4712for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8dfaeb63
MM
4713{
4714 tree t = *tp;
4715 struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4716 tree_fn_t fn = pfd->fn;
4717 void *data = pfd->data;
4f2c9d7e 4718
2f939d94 4719 if (TYPE_P (t)
4f2c9d7e 4720 && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
8dfaeb63 4721 return error_mark_node;
581d38d0 4722
8d08fdba
MS
4723 switch (TREE_CODE (t))
4724 {
8d08fdba 4725 case RECORD_TYPE:
9076e292 4726 if (TYPE_PTRMEMFUNC_P (t))
8dfaeb63 4727 break;
ed44da02
MM
4728 /* Fall through. */
4729
8d08fdba 4730 case UNION_TYPE:
ed44da02 4731 case ENUMERAL_TYPE:
8dfaeb63
MM
4732 if (!TYPE_TEMPLATE_INFO (t))
4733 *walk_subtrees = 0;
4734 else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4f2c9d7e 4735 fn, data, pfd->visited))
8dfaeb63
MM
4736 return error_mark_node;
4737 break;
4738
588c2d1c 4739 case METHOD_TYPE:
8dfaeb63
MM
4740 /* Since we're not going to walk subtrees, we have to do this
4741 explicitly here. */
4f2c9d7e
MM
4742 if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4743 pfd->visited))
8dfaeb63 4744 return error_mark_node;
4890c2f4 4745 /* Fall through. */
588c2d1c
MM
4746
4747 case FUNCTION_TYPE:
8dfaeb63 4748 /* Check the return type. */
4f2c9d7e 4749 if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63
MM
4750 return error_mark_node;
4751
588c2d1c
MM
4752 /* Check the parameter types. Since default arguments are not
4753 instantiated until they are needed, the TYPE_ARG_TYPES may
4754 contain expressions that involve template parameters. But,
4755 no-one should be looking at them yet. And, once they're
4756 instantiated, they don't contain template parameters, so
4757 there's no point in looking at them then, either. */
4758 {
4759 tree parm;
4760
4761 for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4f2c9d7e
MM
4762 if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4763 pfd->visited))
8dfaeb63 4764 return error_mark_node;
5566b478 4765
8dfaeb63
MM
4766 /* Since we've already handled the TYPE_ARG_TYPES, we don't
4767 want walk_tree walking into them itself. */
4768 *walk_subtrees = 0;
4769 }
4770 break;
3ac3d9ea 4771
a723baf1 4772 case TYPEOF_TYPE:
c8094d83 4773 if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
a723baf1
MM
4774 pfd->visited))
4775 return error_mark_node;
4776 break;
4777
8d08fdba 4778 case FUNCTION_DECL:
5566b478 4779 case VAR_DECL:
5566b478 4780 if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4f2c9d7e
MM
4781 && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4782 pfd->visited))
8dfaeb63
MM
4783 return error_mark_node;
4784 /* Fall through. */
4785
8d08fdba 4786 case PARM_DECL:
a723baf1
MM
4787 case CONST_DECL:
4788 if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4789 && for_each_template_parm (DECL_INITIAL (t), fn, data,
4790 pfd->visited))
4791 return error_mark_node;
c8094d83 4792 if (DECL_CONTEXT (t)
4f2c9d7e
MM
4793 && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4794 pfd->visited))
8dfaeb63
MM
4795 return error_mark_node;
4796 break;
8d08fdba 4797
a1281f45 4798 case BOUND_TEMPLATE_TEMPLATE_PARM:
744fac59 4799 /* Record template parameters such as `T' inside `TT<T>'. */
4f2c9d7e 4800 if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
8dfaeb63
MM
4801 return error_mark_node;
4802 /* Fall through. */
4803
a1281f45 4804 case TEMPLATE_TEMPLATE_PARM:
744fac59 4805 case TEMPLATE_TYPE_PARM:
f84b4be9 4806 case TEMPLATE_PARM_INDEX:
8dfaeb63
MM
4807 if (fn && (*fn)(t, data))
4808 return error_mark_node;
4809 else if (!fn)
4810 return error_mark_node;
4811 break;
5156628f 4812
8dfaeb63 4813 case TEMPLATE_DECL:
f4f206f4 4814 /* A template template parameter is encountered. */
8dfaeb63 4815 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4f2c9d7e 4816 && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
8dfaeb63 4817 return error_mark_node;
db5ae43f 4818
8dfaeb63
MM
4819 /* Already substituted template template parameter */
4820 *walk_subtrees = 0;
4821 break;
b8865407 4822
4699c561 4823 case TYPENAME_TYPE:
c8094d83 4824 if (!fn
4f2c9d7e
MM
4825 || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4826 data, pfd->visited))
8dfaeb63
MM
4827 return error_mark_node;
4828 break;
4699c561 4829
8dfaeb63
MM
4830 case CONSTRUCTOR:
4831 if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4832 && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4f2c9d7e
MM
4833 (TREE_TYPE (t)), fn, data,
4834 pfd->visited))
8dfaeb63
MM
4835 return error_mark_node;
4836 break;
c8094d83 4837
b8865407
MM
4838 case INDIRECT_REF:
4839 case COMPONENT_REF:
4699c561 4840 /* If there's no type, then this thing must be some expression
b8865407 4841 involving template parameters. */
4699c561 4842 if (!fn && !TREE_TYPE (t))
8dfaeb63
MM
4843 return error_mark_node;
4844 break;
b8865407 4845
42976354
BK
4846 case MODOP_EXPR:
4847 case CAST_EXPR:
4848 case REINTERPRET_CAST_EXPR:
4849 case CONST_CAST_EXPR:
4850 case STATIC_CAST_EXPR:
4851 case DYNAMIC_CAST_EXPR:
42976354
BK
4852 case ARROW_EXPR:
4853 case DOTSTAR_EXPR:
4854 case TYPEID_EXPR:
40242ccf 4855 case PSEUDO_DTOR_EXPR:
b8865407 4856 if (!fn)
8dfaeb63
MM
4857 return error_mark_node;
4858 break;
abff8e06 4859
bd9bb3d2
MM
4860 case BASELINK:
4861 /* If we do not handle this case specially, we end up walking
4862 the BINFO hierarchy, which is circular, and therefore
4863 confuses walk_tree. */
4864 *walk_subtrees = 0;
4f2c9d7e
MM
4865 if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4866 pfd->visited))
bd9bb3d2
MM
4867 return error_mark_node;
4868 break;
4869
8d08fdba 4870 default:
8dfaeb63 4871 break;
8d08fdba 4872 }
8dfaeb63
MM
4873
4874 /* We didn't find any template parameters we liked. */
4875 return NULL_TREE;
4876}
4877
c8094d83
MS
4878/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
4879 BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
a1281f45 4880 call FN with the parameter and the DATA.
838dfd8a 4881 If FN returns nonzero, the iteration is terminated, and
8dfaeb63 4882 for_each_template_parm returns 1. Otherwise, the iteration
838dfd8a 4883 continues. If FN never returns a nonzero value, the value
8dfaeb63
MM
4884 returned by for_each_template_parm is 0. If FN is NULL, it is
4885 considered to be the function which always returns 1. */
4886
4887static int
0c58f841
MA
4888for_each_template_parm (tree t, tree_fn_t fn, void* data,
4889 struct pointer_set_t *visited)
8dfaeb63
MM
4890{
4891 struct pair_fn_data pfd;
ad2ae3b2 4892 int result;
8dfaeb63
MM
4893
4894 /* Set up. */
4895 pfd.fn = fn;
4896 pfd.data = data;
4897
4890c2f4
MM
4898 /* Walk the tree. (Conceptually, we would like to walk without
4899 duplicates, but for_each_template_parm_r recursively calls
4900 for_each_template_parm, so we would need to reorganize a fair
4f2c9d7e
MM
4901 bit to use walk_tree_without_duplicates, so we keep our own
4902 visited list.) */
4903 if (visited)
4904 pfd.visited = visited;
4905 else
0c58f841 4906 pfd.visited = pointer_set_create ();
c8094d83
MS
4907 result = walk_tree (&t,
4908 for_each_template_parm_r,
ad2ae3b2 4909 &pfd,
c1e39976 4910 pfd.visited) != NULL_TREE;
ad2ae3b2
MM
4911
4912 /* Clean up. */
4913 if (!visited)
0c58f841
MA
4914 {
4915 pointer_set_destroy (pfd.visited);
4916 pfd.visited = 0;
4917 }
ad2ae3b2
MM
4918
4919 return result;
8d08fdba
MS
4920}
4921
d43f603d
KL
4922/* Returns true if T depends on any template parameter. */
4923
050367a3 4924int
3a978d72 4925uses_template_parms (tree t)
050367a3 4926{
c353b8e3
MM
4927 bool dependent_p;
4928 int saved_processing_template_decl;
4929
4930 saved_processing_template_decl = processing_template_decl;
4931 if (!saved_processing_template_decl)
4932 processing_template_decl = 1;
4933 if (TYPE_P (t))
4934 dependent_p = dependent_type_p (t);
4935 else if (TREE_CODE (t) == TREE_VEC)
4936 dependent_p = any_dependent_template_arguments_p (t);
4937 else if (TREE_CODE (t) == TREE_LIST)
4938 dependent_p = (uses_template_parms (TREE_VALUE (t))
4939 || uses_template_parms (TREE_CHAIN (t)));
c8094d83
MS
4940 else if (DECL_P (t)
4941 || EXPR_P (t)
c353b8e3
MM
4942 || TREE_CODE (t) == TEMPLATE_PARM_INDEX
4943 || TREE_CODE (t) == OVERLOAD
4944 || TREE_CODE (t) == BASELINK
6615c446 4945 || CONSTANT_CLASS_P (t))
c353b8e3
MM
4946 dependent_p = (type_dependent_expression_p (t)
4947 || value_dependent_expression_p (t));
315fb5db
NS
4948 else
4949 {
4950 gcc_assert (t == error_mark_node);
4951 dependent_p = false;
4952 }
c8094d83 4953
c353b8e3
MM
4954 processing_template_decl = saved_processing_template_decl;
4955
4956 return dependent_p;
050367a3
MM
4957}
4958
d43f603d
KL
4959/* Returns true if T depends on any template parameter with level LEVEL. */
4960
4961int
4962uses_template_parms_level (tree t, int level)
4963{
4964 return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4965}
4966
27fafc8d 4967static int tinst_depth;
e9f32eb5 4968extern int max_tinst_depth;
5566b478 4969#ifdef GATHER_STATISTICS
27fafc8d 4970int depth_reached;
5566b478 4971#endif
8dfaeb63
MM
4972static int tinst_level_tick;
4973static int last_template_error_tick;
8d08fdba 4974
3ae18eaf
JM
4975/* We're starting to instantiate D; record the template instantiation context
4976 for diagnostics and to restore it later. */
4977
742a37d5 4978int
3a978d72 4979push_tinst_level (tree d)
8d08fdba 4980{
3ae18eaf 4981 tree new;
8d08fdba 4982
7215f9a0
MS
4983 if (tinst_depth >= max_tinst_depth)
4984 {
8adf5b5e
JM
4985 /* If the instantiation in question still has unbound template parms,
4986 we don't really care if we can't instantiate it, so just return.
0cbd7506 4987 This happens with base instantiation for implicit `typename'. */
8adf5b5e
JM
4988 if (uses_template_parms (d))
4989 return 0;
4990
1139b3d8 4991 last_template_error_tick = tinst_level_tick;
0f51ccfc 4992 error ("template instantiation depth exceeds maximum of %d (use "
0cbd7506 4993 "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
b4f4233d 4994 max_tinst_depth, d);
5566b478 4995
cb753e49 4996 print_instantiation_context ();
5566b478 4997
7215f9a0
MS
4998 return 0;
4999 }
5000
12af7ba3
MM
5001 new = make_node (TINST_LEVEL);
5002 TINST_DECL (new) = d;
5003 TINST_LOCATION (new) = input_location;
5004 TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
3ae18eaf 5005 TREE_CHAIN (new) = current_tinst_level;
8d08fdba 5006 current_tinst_level = new;
5566b478 5007
7215f9a0 5008 ++tinst_depth;
5566b478
MS
5009#ifdef GATHER_STATISTICS
5010 if (tinst_depth > depth_reached)
5011 depth_reached = tinst_depth;
5012#endif
5013
27fafc8d 5014 ++tinst_level_tick;
7215f9a0 5015 return 1;
8d08fdba
MS
5016}
5017
3ae18eaf
JM
5018/* We're done instantiating this template; return to the instantiation
5019 context. */
5020
8d08fdba 5021void
3a978d72 5022pop_tinst_level (void)
8d08fdba 5023{
3ae18eaf 5024 tree old = current_tinst_level;
8d08fdba 5025
ae58fa02
MM
5026 /* Restore the filename and line number stashed away when we started
5027 this instantiation. */
406d77a4 5028 input_location = TINST_LOCATION (old);
12af7ba3 5029 in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
3ae18eaf 5030 current_tinst_level = TREE_CHAIN (old);
7215f9a0 5031 --tinst_depth;
27fafc8d 5032 ++tinst_level_tick;
8d08fdba
MS
5033}
5034
3ae18eaf
JM
5035/* We're instantiating a deferred template; restore the template
5036 instantiation context in which the instantiation was requested, which
5037 is one step out from LEVEL. */
5038
5039static void
3a978d72 5040reopen_tinst_level (tree level)
3ae18eaf
JM
5041{
5042 tree t;
5043
5044 tinst_depth = 0;
5045 for (t = level; t; t = TREE_CHAIN (t))
5046 ++tinst_depth;
5047
5048 current_tinst_level = level;
5049 pop_tinst_level ();
5050}
5051
f84b4be9
JM
5052/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL. ARGS is the
5053 vector of template arguments, as for tsubst.
5054
dc957d14 5055 Returns an appropriate tsubst'd friend declaration. */
f84b4be9
JM
5056
5057static tree
3a978d72 5058tsubst_friend_function (tree decl, tree args)
f84b4be9
JM
5059{
5060 tree new_friend;
27fafc8d 5061
c8094d83 5062 if (TREE_CODE (decl) == FUNCTION_DECL
f84b4be9
JM
5063 && DECL_TEMPLATE_INSTANTIATION (decl)
5064 && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5065 /* This was a friend declared with an explicit template
5066 argument list, e.g.:
c8094d83 5067
f84b4be9 5068 friend void f<>(T);
c8094d83 5069
f84b4be9
JM
5070 to indicate that f was a template instantiation, not a new
5071 function declaration. Now, we have to figure out what
5072 instantiation of what template. */
5073 {
76e57b45 5074 tree template_id, arglist, fns;
f84b4be9
JM
5075 tree new_args;
5076 tree tmpl;
ed2fa432 5077 tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
c8094d83 5078
76e57b45 5079 /* Friend functions are looked up in the containing namespace scope.
0cbd7506
MS
5080 We must enter that scope, to avoid finding member functions of the
5081 current cless with same name. */
76e57b45
NS
5082 push_nested_namespace (ns);
5083 fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
0cbd7506 5084 tf_error | tf_warning, NULL_TREE);
76e57b45
NS
5085 pop_nested_namespace (ns);
5086 arglist = tsubst (DECL_TI_ARGS (decl), args,
0cbd7506 5087 tf_error | tf_warning, NULL_TREE);
76e57b45 5088 template_id = lookup_template_function (fns, arglist);
c8094d83 5089
c2ea3a40 5090 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
36a117a5 5091 tmpl = determine_specialization (template_id, new_friend,
c8094d83 5092 &new_args,
5fe7b654
GB
5093 /*need_member_template=*/0,
5094 TREE_VEC_LENGTH (args));
6e432b31 5095 return instantiate_template (tmpl, new_args, tf_error);
f84b4be9 5096 }
36a117a5 5097
c2ea3a40 5098 new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
c8094d83 5099
36a117a5 5100 /* The NEW_FRIEND will look like an instantiation, to the
f84b4be9
JM
5101 compiler, but is not an instantiation from the point of view of
5102 the language. For example, we might have had:
c8094d83 5103
f84b4be9
JM
5104 template <class T> struct S {
5105 template <class U> friend void f(T, U);
5106 };
c8094d83 5107
f84b4be9
JM
5108 Then, in S<int>, template <class U> void f(int, U) is not an
5109 instantiation of anything. */
ac2b3222
AP
5110 if (new_friend == error_mark_node)
5111 return error_mark_node;
c8094d83 5112
f84b4be9
JM
5113 DECL_USE_TEMPLATE (new_friend) = 0;
5114 if (TREE_CODE (decl) == TEMPLATE_DECL)
655dc6ee
JM
5115 {
5116 DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5117 DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5118 = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5119 }
36a117a5 5120
92643fea
MM
5121 /* The mangled name for the NEW_FRIEND is incorrect. The function
5122 is not a template instantiation and should not be mangled like
5123 one. Therefore, we forget the mangling here; we'll recompute it
5124 later if we need it. */
36a117a5
MM
5125 if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5126 {
19e7881c 5127 SET_DECL_RTL (new_friend, NULL_RTX);
92643fea 5128 SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
36a117a5 5129 }
c8094d83 5130
6eb3bb27 5131 if (DECL_NAMESPACE_SCOPE_P (new_friend))
f84b4be9 5132 {
36a117a5 5133 tree old_decl;
fbf1c34b
MM
5134 tree new_friend_template_info;
5135 tree new_friend_result_template_info;
92da7074 5136 tree ns;
fbf1c34b
MM
5137 int new_friend_is_defn;
5138
5139 /* We must save some information from NEW_FRIEND before calling
5140 duplicate decls since that function will free NEW_FRIEND if
5141 possible. */
5142 new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5bd61841 5143 new_friend_is_defn =
c8094d83 5144 (DECL_INITIAL (DECL_TEMPLATE_RESULT
5bd61841
MM
5145 (template_for_substitution (new_friend)))
5146 != NULL_TREE);
f84b4be9 5147 if (TREE_CODE (new_friend) == TEMPLATE_DECL)
fbf1c34b
MM
5148 {
5149 /* This declaration is a `primary' template. */
5150 DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
c8094d83 5151
fbf1c34b 5152 new_friend_result_template_info
17aec3eb 5153 = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
fbf1c34b
MM
5154 }
5155 else
5bd61841 5156 new_friend_result_template_info = NULL_TREE;
36a117a5 5157
1c227897
MM
5158 /* Inside pushdecl_namespace_level, we will push into the
5159 current namespace. However, the friend function should go
c6002625 5160 into the namespace of the template. */
92da7074
ML
5161 ns = decl_namespace_context (new_friend);
5162 push_nested_namespace (ns);
36a117a5 5163 old_decl = pushdecl_namespace_level (new_friend);
92da7074 5164 pop_nested_namespace (ns);
36a117a5
MM
5165
5166 if (old_decl != new_friend)
5167 {
5168 /* This new friend declaration matched an existing
5169 declaration. For example, given:
5170
5171 template <class T> void f(T);
c8094d83
MS
5172 template <class U> class C {
5173 template <class T> friend void f(T) {}
36a117a5
MM
5174 };
5175
5176 the friend declaration actually provides the definition
5177 of `f', once C has been instantiated for some type. So,
5178 old_decl will be the out-of-class template declaration,
5179 while new_friend is the in-class definition.
5180
5181 But, if `f' was called before this point, the
5182 instantiation of `f' will have DECL_TI_ARGS corresponding
5183 to `T' but not to `U', references to which might appear
5184 in the definition of `f'. Previously, the most general
5185 template for an instantiation of `f' was the out-of-class
5186 version; now it is the in-class version. Therefore, we
5187 run through all specialization of `f', adding to their
5188 DECL_TI_ARGS appropriately. In particular, they need a
5189 new set of outer arguments, corresponding to the
c8094d83 5190 arguments for this class instantiation.
36a117a5
MM
5191
5192 The same situation can arise with something like this:
5193
5194 friend void f(int);
c8094d83 5195 template <class T> class C {
0cbd7506
MS
5196 friend void f(T) {}
5197 };
36a117a5
MM
5198
5199 when `C<int>' is instantiated. Now, `f(int)' is defined
5200 in the class. */
5201
fbf1c34b
MM
5202 if (!new_friend_is_defn)
5203 /* On the other hand, if the in-class declaration does
5204 *not* provide a definition, then we don't want to alter
5205 existing definitions. We can just leave everything
5206 alone. */
36a117a5 5207 ;
fbf1c34b 5208 else
36a117a5 5209 {
fbf1c34b
MM
5210 /* Overwrite whatever template info was there before, if
5211 any, with the new template information pertaining to
5212 the declaration. */
5213 DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5214
5215 if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8d83f792
MM
5216 reregister_specialization (new_friend,
5217 most_general_template (old_decl),
5218 old_decl);
c8094d83 5219 else
36a117a5 5220 {
fbf1c34b
MM
5221 tree t;
5222 tree new_friend_args;
5223
c8094d83 5224 DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
fbf1c34b 5225 = new_friend_result_template_info;
c8094d83 5226
fbf1c34b 5227 new_friend_args = TI_ARGS (new_friend_template_info);
c8094d83 5228 for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
fbf1c34b
MM
5229 t != NULL_TREE;
5230 t = TREE_CHAIN (t))
5231 {
5232 tree spec = TREE_VALUE (t);
c8094d83
MS
5233
5234 DECL_TI_ARGS (spec)
fbf1c34b
MM
5235 = add_outermost_template_args (new_friend_args,
5236 DECL_TI_ARGS (spec));
fbf1c34b
MM
5237 }
5238
5239 /* Now, since specializations are always supposed to
5240 hang off of the most general template, we must move
5241 them. */
5242 t = most_general_template (old_decl);
5243 if (t != old_decl)
5244 {
5245 DECL_TEMPLATE_SPECIALIZATIONS (t)
5246 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5247 DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5248 DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5249 }
36a117a5
MM
5250 }
5251 }
5252
5253 /* The information from NEW_FRIEND has been merged into OLD_DECL
5254 by duplicate_decls. */
5255 new_friend = old_decl;
5256 }
f84b4be9 5257 }
6e432b31 5258 else
f84b4be9 5259 {
6e432b31
KL
5260 tree context = DECL_CONTEXT (new_friend);
5261 bool dependent_p;
5262
5263 /* In the code
5264 template <class T> class C {
5265 template <class U> friend void C1<U>::f (); // case 1
5266 friend void C2<T>::f (); // case 2
5267 };
5268 we only need to make sure CONTEXT is a complete type for
5269 case 2. To distinguish between the two cases, we note that
5270 CONTEXT of case 1 remains dependent type after tsubst while
5271 this isn't true for case 2. */
5272 ++processing_template_decl;
5273 dependent_p = dependent_type_p (context);
5274 --processing_template_decl;
5275
5276 if (!dependent_p
5277 && !complete_type_or_else (context, NULL_TREE))
5278 return error_mark_node;
5279
5280 if (COMPLETE_TYPE_P (context))
5281 {
5282 /* Check to see that the declaration is really present, and,
5283 possibly obtain an improved declaration. */
5284 tree fn = check_classfn (context,
5285 new_friend, NULL_TREE);
5286
5287 if (fn)
5288 new_friend = fn;
5289 }
f84b4be9
JM
5290 }
5291
5292 return new_friend;
5293}
5294
1aed5355
MM
5295/* FRIEND_TMPL is a friend TEMPLATE_DECL. ARGS is the vector of
5296 template arguments, as for tsubst.
6757edfe 5297
dc957d14 5298 Returns an appropriate tsubst'd friend type or error_mark_node on
4b054b80 5299 failure. */
6757edfe
MM
5300
5301static tree
3a978d72 5302tsubst_friend_class (tree friend_tmpl, tree args)
6757edfe 5303{
1aed5355 5304 tree friend_type;
25aab5d0 5305 tree tmpl;
3e0ec82f 5306 tree context;
6757edfe 5307
3e0ec82f
MM
5308 context = DECL_CONTEXT (friend_tmpl);
5309
5310 if (context)
77adef84 5311 {
3e0ec82f
MM
5312 if (TREE_CODE (context) == NAMESPACE_DECL)
5313 push_nested_namespace (context);
5314 else
c8094d83 5315 push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
3e0ec82f 5316 }
25aab5d0 5317
3e0ec82f 5318 /* First, we look for a class template. */
c8094d83 5319 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0);
25aab5d0 5320
3e0ec82f
MM
5321 /* But, if we don't find one, it might be because we're in a
5322 situation like this:
77adef84 5323
3e0ec82f
MM
5324 template <class T>
5325 struct S {
5326 template <class U>
5327 friend struct S;
5328 };
5329
5330 Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5331 for `S<int>', not the TEMPLATE_DECL. */
5332 if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5333 {
5334 tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5335 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
25aab5d0 5336 }
6757edfe 5337
25aab5d0 5338 if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6757edfe
MM
5339 {
5340 /* The friend template has already been declared. Just
36a117a5
MM
5341 check to see that the declarations match, and install any new
5342 default parameters. We must tsubst the default parameters,
5343 of course. We only need the innermost template parameters
5344 because that is all that redeclare_class_template will look
5345 at. */
3e0ec82f
MM
5346 if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5347 > TMPL_ARGS_DEPTH (args))
5348 {
5349 tree parms;
5350 parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5351 args, tf_error | tf_warning);
5352 redeclare_class_template (TREE_TYPE (tmpl), parms);
5353 }
5354
6757edfe
MM
5355 friend_type = TREE_TYPE (tmpl);
5356 }
5357 else
5358 {
5359 /* The friend template has not already been declared. In this
5360 case, the instantiation of the template class will cause the
5361 injection of this template into the global scope. */
c2ea3a40 5362 tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
6757edfe
MM
5363
5364 /* The new TMPL is not an instantiation of anything, so we
0cbd7506 5365 forget its origins. We don't reset CLASSTYPE_TI_TEMPLATE for
6757edfe
MM
5366 the new type because that is supposed to be the corresponding
5367 template decl, i.e., TMPL. */
5368 DECL_USE_TEMPLATE (tmpl) = 0;
5369 DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5370 CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
68c78847
KL
5371 CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5372 = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6757edfe
MM
5373
5374 /* Inject this template into the global scope. */
5375 friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5376 }
5377
c8094d83 5378 if (context)
3e0ec82f
MM
5379 {
5380 if (TREE_CODE (context) == NAMESPACE_DECL)
5381 pop_nested_namespace (context);
5382 else
5383 pop_nested_class ();
5384 }
5385
6757edfe
MM
5386 return friend_type;
5387}
f84b4be9 5388
17f29637
KL
5389/* Returns zero if TYPE cannot be completed later due to circularity.
5390 Otherwise returns one. */
5391
d5372501 5392static int
3a978d72 5393can_complete_type_without_circularity (tree type)
17f29637
KL
5394{
5395 if (type == NULL_TREE || type == error_mark_node)
5396 return 0;
5397 else if (COMPLETE_TYPE_P (type))
5398 return 1;
5399 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5400 return can_complete_type_without_circularity (TREE_TYPE (type));
8c6ab2db
NS
5401 else if (CLASS_TYPE_P (type)
5402 && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
17f29637
KL
5403 return 0;
5404 else
5405 return 1;
5406}
5407
8d08fdba 5408tree
3a978d72 5409instantiate_class_template (tree type)
8d08fdba 5410{
7088fca9 5411 tree template, args, pattern, t, member;
36a117a5 5412 tree typedecl;
dbbf88d1 5413 tree pbinfo;
cad7e87b 5414 tree base_list;
c8094d83 5415
5566b478 5416 if (type == error_mark_node)
8d08fdba
MS
5417 return error_mark_node;
5418
c8094d83 5419 if (TYPE_BEING_DEFINED (type)
ca099ac8
MM
5420 || COMPLETE_TYPE_P (type)
5421 || dependent_type_p (type))
5566b478
MS
5422 return type;
5423
6bdb985f 5424 /* Figure out which template is being instantiated. */
36a117a5 5425 template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
50bc768d 5426 gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
73aad9b9 5427
6bdb985f
MM
5428 /* Figure out which arguments are being used to do the
5429 instantiation. */
5430 args = CLASSTYPE_TI_ARGS (type);
4c571114
MM
5431
5432 /* Determine what specialization of the original template to
5433 instantiate. */
8fbc5ae7
MM
5434 t = most_specialized_class (template, args);
5435 if (t == error_mark_node)
73aad9b9 5436 {
8fbc5ae7 5437 const char *str = "candidates are:";
0f51ccfc 5438 error ("ambiguous class template instantiation for %q#T", type);
c8094d83 5439 for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t;
8fbc5ae7 5440 t = TREE_CHAIN (t))
73aad9b9 5441 {
8c6ab2db 5442 if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
73aad9b9 5443 {
dee15844 5444 error ("%s %+#T", str, TREE_TYPE (t));
8fbc5ae7 5445 str = " ";
73aad9b9
JM
5446 }
5447 }
8fbc5ae7
MM
5448 TYPE_BEING_DEFINED (type) = 1;
5449 return error_mark_node;
73aad9b9 5450 }
6bdb985f
MM
5451
5452 if (t)
73aad9b9
JM
5453 pattern = TREE_TYPE (t);
5454 else
5455 pattern = TREE_TYPE (template);
5566b478 5456
4c571114
MM
5457 /* If the template we're instantiating is incomplete, then clearly
5458 there's nothing we can do. */
d0f062fb 5459 if (!COMPLETE_TYPE_P (pattern))
f31c0a32 5460 return type;
5566b478 5461
4c571114
MM
5462 /* If we've recursively instantiated too many templates, stop. */
5463 if (! push_tinst_level (type))
f31c0a32 5464 return type;
4c571114
MM
5465
5466 /* Now we're really doing the instantiation. Mark the type as in
5467 the process of being defined. */
5468 TYPE_BEING_DEFINED (type) = 1;
5469
78757caa
KL
5470 /* We may be in the middle of deferred access check. Disable
5471 it now. */
5472 push_deferring_access_checks (dk_no_deferred);
5473
c353b8e3 5474 push_to_top_level ();
4c571114 5475
73aad9b9 5476 if (t)
36a117a5 5477 {
27631dae 5478 /* This TYPE is actually an instantiation of a partial
36a117a5
MM
5479 specialization. We replace the innermost set of ARGS with
5480 the arguments appropriate for substitution. For example,
5481 given:
5482
5483 template <class T> struct S {};
5484 template <class T> struct S<T*> {};
c8094d83 5485
36a117a5
MM
5486 and supposing that we are instantiating S<int*>, ARGS will
5487 present be {int*} but we need {int}. */
c8094d83 5488 tree inner_args
36a117a5
MM
5489 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5490 args);
5491
5492 /* If there were multiple levels in ARGS, replacing the
5493 innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5494 want, so we make a copy first. */
5495 if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5496 {
5497 args = copy_node (args);
5498 SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5499 }
5500 else
5501 args = inner_args;
5502 }
8d019cef 5503
7813d14c 5504 SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8d08fdba 5505
68ea098a
NS
5506 /* Set the input location to the template definition. This is needed
5507 if tsubsting causes an error. */
12af7ba3
MM
5508 typedecl = TYPE_MAIN_DECL (type);
5509 input_location = DECL_SOURCE_LOCATION (typedecl);
5510 in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
68ea098a 5511
f7da6097 5512 TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
834c6dff
MM
5513 TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5514 TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
f7da6097 5515 TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
f7da6097
MS
5516 TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5517 TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
f7da6097
MS
5518 TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5519 TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
f7da6097
MS
5520 TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5521 TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
f7da6097
MS
5522 TYPE_PACKED (type) = TYPE_PACKED (pattern);
5523 TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
11cf4d18 5524 TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
eff71ab0 5525 TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6bdb8141
JM
5526 if (ANON_AGGR_TYPE_P (pattern))
5527 SET_ANON_AGGR_TYPE_P (type);
f7da6097 5528
dbbf88d1 5529 pbinfo = TYPE_BINFO (pattern);
1456deaf 5530
315fb5db
NS
5531 /* We should never instantiate a nested class before its enclosing
5532 class; we need to look up the nested class by name before we can
5533 instantiate it, and that lookup should instantiate the enclosing
5534 class. */
5535 gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5536 || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5537 || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
1456deaf 5538
cad7e87b 5539 base_list = NULL_TREE;
fa743e8c 5540 if (BINFO_N_BASE_BINFOS (pbinfo))
3fd71a52 5541 {
fa743e8c 5542 tree pbase_binfo;
a2507277 5543 tree context = TYPE_CONTEXT (type);
4514aa8c 5544 tree pushed_scope;
3fd71a52 5545 int i;
5566b478 5546
a2507277
NS
5547 /* We must enter the scope containing the type, as that is where
5548 the accessibility of types named in dependent bases are
5549 looked up from. */
4514aa8c 5550 pushed_scope = push_scope (context ? context : global_namespace);
c8094d83 5551
3fd71a52
MM
5552 /* Substitute into each of the bases to determine the actual
5553 basetypes. */
fa743e8c 5554 for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
3fd71a52
MM
5555 {
5556 tree base;
fa743e8c 5557 tree access = BINFO_BASE_ACCESS (pbinfo, i);
711734a9 5558
dc957d14 5559 /* Substitute to figure out the base class. */
fa743e8c 5560 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
3fd71a52
MM
5561 if (base == error_mark_node)
5562 continue;
c8094d83 5563
3fd71a52 5564 base_list = tree_cons (access, base, base_list);
fa743e8c 5565 if (BINFO_VIRTUAL_P (pbase_binfo))
809e3e7f 5566 TREE_TYPE (base_list) = integer_type_node;
3fd71a52 5567 }
dfbcd65a 5568
3fd71a52
MM
5569 /* The list is now in reverse order; correct that. */
5570 base_list = nreverse (base_list);
5571
4514aa8c
NS
5572 if (pushed_scope)
5573 pop_scope (pushed_scope);
3fd71a52 5574 }
cad7e87b
NS
5575 /* Now call xref_basetypes to set up all the base-class
5576 information. */
5577 xref_basetypes (type, base_list);
5578
5566b478 5579
b74a0560
MM
5580 /* Now that our base classes are set up, enter the scope of the
5581 class, so that name lookups into base classes, etc. will work
dc957d14 5582 correctly. This is precisely analogous to what we do in
b74a0560
MM
5583 begin_class_definition when defining an ordinary non-template
5584 class. */
29370796 5585 pushclass (type);
b74a0560 5586
7088fca9 5587 /* Now members are processed in the order of declaration. */
8c6ab2db
NS
5588 for (member = CLASSTYPE_DECL_LIST (pattern);
5589 member; member = TREE_CHAIN (member))
8d08fdba 5590 {
7088fca9 5591 tree t = TREE_VALUE (member);
5566b478 5592
7088fca9 5593 if (TREE_PURPOSE (member))
ed44da02 5594 {
7088fca9
KL
5595 if (TYPE_P (t))
5596 {
5e0c54e5 5597 /* Build new CLASSTYPE_NESTED_UTDS. */
8d08fdba 5598
7088fca9
KL
5599 tree tag = t;
5600 tree name = TYPE_IDENTIFIER (tag);
5601 tree newtag;
883a2bff
MM
5602 bool class_template_p;
5603
5604 class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5605 && TYPE_LANG_SPECIFIC (tag)
5606 && CLASSTYPE_IS_TEMPLATE (tag));
5607 /* If the member is a class template, then -- even after
6c745393 5608 substitution -- there may be dependent types in the
883a2bff
MM
5609 template argument list for the class. We increment
5610 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5611 that function will assume that no types are dependent
5612 when outside of a template. */
5613 if (class_template_p)
5614 ++processing_template_decl;
7088fca9 5615 newtag = tsubst (tag, args, tf_error, NULL_TREE);
883a2bff
MM
5616 if (class_template_p)
5617 --processing_template_decl;
2620d095
KL
5618 if (newtag == error_mark_node)
5619 continue;
5620
7088fca9
KL
5621 if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5622 {
883a2bff 5623 if (class_template_p)
7088fca9
KL
5624 /* Unfortunately, lookup_template_class sets
5625 CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
3afd2e20
NS
5626 instantiation (i.e., for the type of a member
5627 template class nested within a template class.)
5628 This behavior is required for
5629 maybe_process_partial_specialization to work
5630 correctly, but is not accurate in this case;
5631 the TAG is not an instantiation of anything.
5632 (The corresponding TEMPLATE_DECL is an
5633 instantiation, but the TYPE is not.) */
7088fca9
KL
5634 CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5635
5636 /* Now, we call pushtag to put this NEWTAG into the scope of
5637 TYPE. We first set up the IDENTIFIER_TYPE_VALUE to avoid
5638 pushtag calling push_template_decl. We don't have to do
5639 this for enums because it will already have been done in
5640 tsubst_enum. */
5641 if (name)
5642 SET_IDENTIFIER_TYPE_VALUE (name, newtag);
bd3d082e 5643 pushtag (name, newtag, /*tag_scope=*/ts_current);
7088fca9
KL
5644 }
5645 }
c8094d83 5646 else if (TREE_CODE (t) == FUNCTION_DECL
7088fca9
KL
5647 || DECL_FUNCTION_TEMPLATE_P (t))
5648 {
5649 /* Build new TYPE_METHODS. */
fecafe5e 5650 tree r;
c8094d83 5651
fecafe5e 5652 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5653 ++processing_template_decl;
fecafe5e
NS
5654 r = tsubst (t, args, tf_error, NULL_TREE);
5655 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5656 --processing_template_decl;
7088fca9
KL
5657 set_current_access_from_decl (r);
5658 grok_special_member_properties (r);
5659 finish_member_declaration (r);
5660 }
5661 else
5662 {
5663 /* Build new TYPE_FIELDS. */
fa8d6e85 5664
7088fca9
KL
5665 if (TREE_CODE (t) != CONST_DECL)
5666 {
5667 tree r;
fa8d6e85 5668
d479d37f
NS
5669 /* The the file and line for this declaration, to
5670 assist in error message reporting. Since we
5671 called push_tinst_level above, we don't need to
5672 restore these. */
f31686a3 5673 input_location = DECL_SOURCE_LOCATION (t);
fa8d6e85 5674
fb5ce3c9 5675 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5676 ++processing_template_decl;
7088fca9 5677 r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
fb5ce3c9 5678 if (TREE_CODE (t) == TEMPLATE_DECL)
9579624e 5679 --processing_template_decl;
7088fca9
KL
5680 if (TREE_CODE (r) == VAR_DECL)
5681 {
5682 tree init;
17f29637 5683
7088fca9
KL
5684 if (DECL_INITIALIZED_IN_CLASS_P (r))
5685 init = tsubst_expr (DECL_INITIAL (t), args,
5686 tf_error | tf_warning, NULL_TREE);
5687 else
5688 init = NULL_TREE;
8d08fdba 5689
8c6ab2db
NS
5690 finish_static_data_member_decl
5691 (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
8d08fdba 5692
7088fca9
KL
5693 if (DECL_INITIALIZED_IN_CLASS_P (r))
5694 check_static_variable_definition (r, TREE_TYPE (r));
5695 }
5696 else if (TREE_CODE (r) == FIELD_DECL)
5697 {
5698 /* Determine whether R has a valid type and can be
5699 completed later. If R is invalid, then it is
5700 replaced by error_mark_node so that it will not be
5701 added to TYPE_FIELDS. */
5702 tree rtype = TREE_TYPE (r);
5703 if (can_complete_type_without_circularity (rtype))
5704 complete_type (rtype);
5705
5706 if (!COMPLETE_TYPE_P (rtype))
5707 {
5708 cxx_incomplete_type_error (r, rtype);
0cbd7506 5709 r = error_mark_node;
7088fca9
KL
5710 }
5711 }
5566b478 5712
7088fca9
KL
5713 /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5714 such a thing will already have been added to the field
5715 list by tsubst_enum in finish_member_declaration in the
5e0c54e5 5716 CLASSTYPE_NESTED_UTDS case above. */
7088fca9
KL
5717 if (!(TREE_CODE (r) == TYPE_DECL
5718 && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
43b26a01 5719 && DECL_ARTIFICIAL (r)))
7088fca9
KL
5720 {
5721 set_current_access_from_decl (r);
5722 finish_member_declaration (r);
5723 }
0cbd7506 5724 }
7088fca9 5725 }
61fc8c9e 5726 }
7088fca9
KL
5727 else
5728 {
5729 if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5730 {
5731 /* Build new CLASSTYPE_FRIEND_CLASSES. */
5732
5733 tree friend_type = t;
b939a023 5734 bool adjust_processing_template_decl = false;
1aed5355 5735
7088fca9 5736 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
b939a023 5737 {
5a24482e 5738 /* template <class T> friend class C; */
b939a023 5739 friend_type = tsubst_friend_class (friend_type, args);
0cbd7506 5740 adjust_processing_template_decl = true;
b939a023
KL
5741 }
5742 else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5743 {
5a24482e 5744 /* template <class T> friend class C::D; */
b939a023
KL
5745 friend_type = tsubst (friend_type, args,
5746 tf_error | tf_warning, NULL_TREE);
5747 if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5748 friend_type = TREE_TYPE (friend_type);
0cbd7506 5749 adjust_processing_template_decl = true;
b939a023
KL
5750 }
5751 else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5752 {
5a24482e
KL
5753 /* This could be either
5754
5755 friend class T::C;
5756
5757 when dependent_type_p is false or
5758
5759 template <class U> friend class T::C;
5760
5761 otherwise. */
b939a023
KL
5762 friend_type = tsubst (friend_type, args,
5763 tf_error | tf_warning, NULL_TREE);
5764 /* Bump processing_template_decl for correct
5765 dependent_type_p calculation. */
5766 ++processing_template_decl;
5767 if (dependent_type_p (friend_type))
5768 adjust_processing_template_decl = true;
5769 --processing_template_decl;
5770 }
5a24482e
KL
5771 else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
5772 && hidden_name_p (TYPE_NAME (friend_type)))
7088fca9 5773 {
5a24482e
KL
5774 /* friend class C;
5775
5776 where C hasn't been declared yet. Let's lookup name
5777 from namespace scope directly, bypassing any name that
5778 come from dependent base class. */
7088fca9
KL
5779 tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5780
5781 /* The call to xref_tag_from_type does injection for friend
5782 classes. */
5783 push_nested_namespace (ns);
c8094d83
MS
5784 friend_type =
5785 xref_tag_from_type (friend_type, NULL_TREE,
5a24482e 5786 /*tag_scope=*/ts_current);
7088fca9
KL
5787 pop_nested_namespace (ns);
5788 }
5a24482e
KL
5789 else if (uses_template_parms (friend_type))
5790 /* friend class C<T>; */
5791 friend_type = tsubst (friend_type, args,
5792 tf_error | tf_warning, NULL_TREE);
5793 /* Otherwise it's
5794
5795 friend class C;
5796
5797 where C is already declared or
5798
5799 friend class C<int>;
5800
0cbd7506 5801 We don't have to do anything in these cases. */
1aed5355 5802
b939a023 5803 if (adjust_processing_template_decl)
7088fca9
KL
5804 /* Trick make_friend_class into realizing that the friend
5805 we're adding is a template, not an ordinary class. It's
5806 important that we use make_friend_class since it will
5807 perform some error-checking and output cross-reference
5808 information. */
5809 ++processing_template_decl;
fc378698 5810
b939a023 5811 if (friend_type != error_mark_node)
0cbd7506 5812 make_friend_class (type, friend_type, /*complain=*/false);
fc378698 5813
b939a023 5814 if (adjust_processing_template_decl)
7088fca9
KL
5815 --processing_template_decl;
5816 }
5817 else
9579624e
KL
5818 {
5819 /* Build new DECL_FRIENDLIST. */
5820 tree r;
5821
6e432b31
KL
5822 /* The the file and line for this declaration, to
5823 assist in error message reporting. Since we
5824 called push_tinst_level above, we don't need to
5825 restore these. */
5826 input_location = DECL_SOURCE_LOCATION (t);
5827
9579624e 5828 if (TREE_CODE (t) == TEMPLATE_DECL)
cad7e87b
NS
5829 {
5830 ++processing_template_decl;
5831 push_deferring_access_checks (dk_no_check);
5832 }
c8094d83 5833
9579624e 5834 r = tsubst_friend_function (t, args);
9579624e 5835 add_friend (type, r, /*complain=*/false);
cad7e87b
NS
5836 if (TREE_CODE (t) == TEMPLATE_DECL)
5837 {
5838 pop_deferring_access_checks ();
5839 --processing_template_decl;
5840 }
9579624e 5841 }
7088fca9
KL
5842 }
5843 }
5566b478 5844
61a127b3
MM
5845 /* Set the file and line number information to whatever is given for
5846 the class itself. This puts error messages involving generated
5847 implicit functions at a predictable point, and the same point
5848 that would be used for non-template classes. */
f31686a3 5849 input_location = DECL_SOURCE_LOCATION (typedecl);
6de9cd9a 5850
61a127b3 5851 unreverse_member_declarations (type);
9f33663b 5852 finish_struct_1 (type);
5524676d 5853 TYPE_BEING_DEFINED (type) = 0;
8d08fdba 5854
9188c363
MM
5855 /* Now that the class is complete, instantiate default arguments for
5856 any member functions. We don't do this earlier because the
5857 default arguments may reference members of the class. */
5858 if (!PRIMARY_TEMPLATE_P (template))
5859 for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
c8094d83 5860 if (TREE_CODE (t) == FUNCTION_DECL
dc957d14 5861 /* Implicitly generated member functions will not have template
9188c363
MM
5862 information; they are not instantiations, but instead are
5863 created "fresh" for each instantiation. */
5864 && DECL_TEMPLATE_INFO (t))
5865 tsubst_default_arguments (t);
5866
b74a0560 5867 popclass ();
5566b478 5868 pop_from_top_level ();
78757caa 5869 pop_deferring_access_checks ();
5566b478
MS
5870 pop_tinst_level ();
5871
4684cd27
MM
5872 /* The vtable for a template class can be emitted in any translation
5873 unit in which the class is instantiated. When there is no key
5874 method, however, finish_struct_1 will already have added TYPE to
5875 the keyed_classes list. */
5876 if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9aad8f83
MA
5877 keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5878
5566b478 5879 return type;
8d08fdba
MS
5880}
5881
00d3396f 5882static tree
a91db711 5883tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
00d3396f 5884{
a91db711 5885 tree r;
c8094d83 5886
a91db711
NS
5887 if (!t)
5888 r = t;
5889 else if (TYPE_P (t))
5890 r = tsubst (t, args, complain, in_decl);
5891 else
00d3396f 5892 {
a91db711
NS
5893 r = tsubst_expr (t, args, complain, in_decl);
5894
5895 if (!uses_template_parms (r))
4d5f3fbd 5896 {
a91db711
NS
5897 /* Sometimes, one of the args was an expression involving a
5898 template constant parameter, like N - 1. Now that we've
5899 tsubst'd, we might have something like 2 - 1. This will
5900 confuse lookup_template_class, so we do constant folding
5901 here. We have to unset processing_template_decl, to fool
5902 tsubst_copy_and_build() into building an actual tree. */
5903
5904 /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5905 as simple as it's going to get, and trying to reprocess
5906 the trees will break. Once tsubst_expr et al DTRT for
5907 non-dependent exprs, this code can go away, as the type
5908 will always be set. */
5909 if (!TREE_TYPE (r))
5910 {
c8094d83 5911 int saved_processing_template_decl = processing_template_decl;
a91db711
NS
5912 processing_template_decl = 0;
5913 r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5914 tf_error, /*in_decl=*/NULL_TREE,
5915 /*function_p=*/false);
c8094d83 5916 processing_template_decl = saved_processing_template_decl;
a91db711
NS
5917 }
5918 r = fold (r);
4d5f3fbd 5919 }
bd83b409 5920 }
a91db711 5921 return r;
bd83b409
NS
5922}
5923
a91db711 5924/* Substitute ARGS into the vector or list of template arguments T. */
830bfa74 5925
e9659ab0 5926static tree
a91db711 5927tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
830bfa74 5928{
bf12d54d 5929 int len = TREE_VEC_LENGTH (t);
a91db711 5930 int need_new = 0, i;
c68b0a84 5931 tree *elts = alloca (len * sizeof (tree));
c8094d83 5932
830bfa74
MM
5933 for (i = 0; i < len; i++)
5934 {
bf12d54d
NS
5935 tree orig_arg = TREE_VEC_ELT (t, i);
5936 tree new_arg;
a91db711 5937
bf12d54d
NS
5938 if (TREE_CODE (orig_arg) == TREE_VEC)
5939 new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
830bfa74 5940 else
a91db711 5941 new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
c8094d83 5942
a91db711 5943 if (new_arg == error_mark_node)
08e72a19
JM
5944 return error_mark_node;
5945
a91db711
NS
5946 elts[i] = new_arg;
5947 if (new_arg != orig_arg)
830bfa74
MM
5948 need_new = 1;
5949 }
c8094d83 5950
830bfa74
MM
5951 if (!need_new)
5952 return t;
a91db711 5953
bf12d54d
NS
5954 t = make_tree_vec (len);
5955 for (i = 0; i < len; i++)
5956 TREE_VEC_ELT (t, i) = elts[i];
c8094d83 5957
830bfa74
MM
5958 return t;
5959}
5960
36a117a5
MM
5961/* Return the result of substituting ARGS into the template parameters
5962 given by PARMS. If there are m levels of ARGS and m + n levels of
5963 PARMS, then the result will contain n levels of PARMS. For
5964 example, if PARMS is `template <class T> template <class U>
5965 template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5966 result will be `template <int*, double, class V>'. */
5967
e9659ab0 5968static tree
3a978d72 5969tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
36a117a5 5970{
f71f87f9
MM
5971 tree r = NULL_TREE;
5972 tree* new_parms;
36a117a5
MM
5973
5974 for (new_parms = &r;
5975 TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5976 new_parms = &(TREE_CHAIN (*new_parms)),
5977 parms = TREE_CHAIN (parms))
5978 {
c8094d83 5979 tree new_vec =
36a117a5
MM
5980 make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5981 int i;
c8094d83 5982
36a117a5
MM
5983 for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5984 {
833aa4c4
NS
5985 tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5986 tree default_value = TREE_PURPOSE (tuple);
5987 tree parm_decl = TREE_VALUE (tuple);
5988
5989 parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
a91db711
NS
5990 default_value = tsubst_template_arg (default_value, args,
5991 complain, NULL_TREE);
c8094d83 5992
a91db711 5993 tuple = build_tree_list (default_value, parm_decl);
833aa4c4 5994 TREE_VEC_ELT (new_vec, i) = tuple;
36a117a5 5995 }
c8094d83
MS
5996
5997 *new_parms =
5998 tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
4890c2f4 5999 - TMPL_ARGS_DEPTH (args)),
36a117a5
MM
6000 new_vec, NULL_TREE);
6001 }
6002
6003 return r;
6004}
6005
ed44da02
MM
6006/* Substitute the ARGS into the indicated aggregate (or enumeration)
6007 type T. If T is not an aggregate or enumeration type, it is
6008 handled as if by tsubst. IN_DECL is as for tsubst. If
838dfd8a 6009 ENTERING_SCOPE is nonzero, T is the context for a template which
dc957d14 6010 we are presently tsubst'ing. Return the substituted value. */
36a117a5 6011
e9659ab0 6012static tree
c8094d83 6013tsubst_aggr_type (tree t,
0cbd7506
MS
6014 tree args,
6015 tsubst_flags_t complain,
6016 tree in_decl,
6017 int entering_scope)
36a117a5
MM
6018{
6019 if (t == NULL_TREE)
6020 return NULL_TREE;
6021
6022 switch (TREE_CODE (t))
6023 {
6024 case RECORD_TYPE:
6025 if (TYPE_PTRMEMFUNC_P (t))
46c895ac 6026 return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
36a117a5 6027
f4f206f4 6028 /* Else fall through. */
ed44da02 6029 case ENUMERAL_TYPE:
36a117a5 6030 case UNION_TYPE:
5db698f6 6031 if (TYPE_TEMPLATE_INFO (t))
36a117a5
MM
6032 {
6033 tree argvec;
6034 tree context;
6035 tree r;
6036
6037 /* First, determine the context for the type we are looking
6038 up. */
4f7847ca
NS
6039 context = TYPE_CONTEXT (t);
6040 if (context)
6041 context = tsubst_aggr_type (context, args, complain,
36a117a5 6042 in_decl, /*entering_scope=*/1);
36a117a5
MM
6043
6044 /* Then, figure out what arguments are appropriate for the
6045 type we are trying to find. For example, given:
6046
6047 template <class T> struct S;
6048 template <class T, class U> void f(T, U) { S<U> su; }
6049
6050 and supposing that we are instantiating f<int, double>,
6051 then our ARGS will be {int, double}, but, when looking up
6052 S we only want {double}. */
a91db711
NS
6053 argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6054 complain, in_decl);
08e72a19
JM
6055 if (argvec == error_mark_node)
6056 return error_mark_node;
36a117a5 6057
0cbd7506 6058 r = lookup_template_class (t, argvec, in_decl, context,
f9c244b8 6059 entering_scope, complain);
36a117a5 6060
c2ea3a40 6061 return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
36a117a5 6062 }
c8094d83 6063 else
36a117a5
MM
6064 /* This is not a template type, so there's nothing to do. */
6065 return t;
6066
6067 default:
4393e105 6068 return tsubst (t, args, complain, in_decl);
36a117a5
MM
6069 }
6070}
6071
9188c363
MM
6072/* Substitute into the default argument ARG (a default argument for
6073 FN), which has the indicated TYPE. */
6074
6075tree
3a978d72 6076tsubst_default_argument (tree fn, tree type, tree arg)
9188c363 6077{
2436b51f
MM
6078 tree saved_class_ptr = NULL_TREE;
6079 tree saved_class_ref = NULL_TREE;
6080
9188c363
MM
6081 /* This default argument came from a template. Instantiate the
6082 default argument here, not in tsubst. In the case of
c8094d83
MS
6083 something like:
6084
9188c363
MM
6085 template <class T>
6086 struct S {
6087 static T t();
6088 void f(T = t());
6089 };
c8094d83 6090
9188c363 6091 we must be careful to do name lookup in the scope of S<T>,
d5a10cf0 6092 rather than in the current class. */
2b59fc25 6093 push_access_scope (fn);
c6671cbb
MM
6094 /* The default argument expression should not be considered to be
6095 within the scope of FN. Since push_access_scope sets
6096 current_function_decl, we must explicitly clear it here. */
6097 current_function_decl = NULL_TREE;
2436b51f
MM
6098 /* The "this" pointer is not valid in a default argument. */
6099 if (cfun)
6100 {
6101 saved_class_ptr = current_class_ptr;
6102 cp_function_chain->x_current_class_ptr = NULL_TREE;
6103 saved_class_ref = current_class_ref;
6104 cp_function_chain->x_current_class_ref = NULL_TREE;
6105 }
9188c363 6106
d5a10cf0 6107 push_deferring_access_checks(dk_no_deferred);
c2ea3a40
NS
6108 arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6109 tf_error | tf_warning, NULL_TREE);
d5a10cf0
MM
6110 pop_deferring_access_checks();
6111
2436b51f
MM
6112 /* Restore the "this" pointer. */
6113 if (cfun)
6114 {
6115 cp_function_chain->x_current_class_ptr = saved_class_ptr;
6116 cp_function_chain->x_current_class_ref = saved_class_ref;
6117 }
6118
2b59fc25 6119 pop_access_scope (fn);
9188c363
MM
6120
6121 /* Make sure the default argument is reasonable. */
6122 arg = check_default_argument (type, arg);
6123
6124 return arg;
6125}
6126
6127/* Substitute into all the default arguments for FN. */
6128
6129static void
3a978d72 6130tsubst_default_arguments (tree fn)
9188c363
MM
6131{
6132 tree arg;
6133 tree tmpl_args;
6134
6135 tmpl_args = DECL_TI_ARGS (fn);
6136
6137 /* If this function is not yet instantiated, we certainly don't need
6138 its default arguments. */
6139 if (uses_template_parms (tmpl_args))
6140 return;
6141
c8094d83
MS
6142 for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
6143 arg;
9188c363
MM
6144 arg = TREE_CHAIN (arg))
6145 if (TREE_PURPOSE (arg))
c8094d83 6146 TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9188c363
MM
6147 TREE_VALUE (arg),
6148 TREE_PURPOSE (arg));
6149}
6150
fc6a28d7
MM
6151/* Substitute the ARGS into the T, which is a _DECL. Return the
6152 result of the substitution. Issue error and warning messages under
6153 control of COMPLAIN. */
00d3396f 6154
e9659ab0 6155static tree
fc6a28d7 6156tsubst_decl (tree t, tree args, tsubst_flags_t complain)
8d08fdba 6157{
82a98427 6158 location_t saved_loc;
b370501f 6159 tree r = NULL_TREE;
4b2811e9 6160 tree in_decl = t;
830bfa74 6161
ae58fa02 6162 /* Set the filename and linenumber to improve error-reporting. */
82a98427 6163 saved_loc = input_location;
f31686a3 6164 input_location = DECL_SOURCE_LOCATION (t);
b7484fbe 6165
8d08fdba
MS
6166 switch (TREE_CODE (t))
6167 {
98c1c668
JM
6168 case TEMPLATE_DECL:
6169 {
28e42b7e
KL
6170 /* We can get here when processing a member function template,
6171 member class template, and template template parameter of
6172 a template class. */
98c1c668 6173 tree decl = DECL_TEMPLATE_RESULT (t);
386b8a85 6174 tree spec;
28e42b7e
KL
6175 tree tmpl_args;
6176 tree full_args;
98c1c668 6177
28e42b7e 6178 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
db2767b6 6179 {
28e42b7e
KL
6180 /* Template template parameter is treated here. */
6181 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6182 if (new_type == error_mark_node)
6183 return error_mark_node;
36a117a5 6184
28e42b7e
KL
6185 r = copy_decl (t);
6186 TREE_CHAIN (r) = NULL_TREE;
6187 TREE_TYPE (r) = new_type;
6188 DECL_TEMPLATE_RESULT (r)
6189 = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
c8094d83 6190 DECL_TEMPLATE_PARMS (r)
28e42b7e
KL
6191 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6192 complain);
6193 TYPE_NAME (new_type) = r;
6194 break;
6195 }
36a117a5 6196
28e42b7e
KL
6197 /* We might already have an instance of this template.
6198 The ARGS are for the surrounding class type, so the
6199 full args contain the tsubst'd args for the context,
6200 plus the innermost args from the template decl. */
c8094d83 6201 tmpl_args = DECL_CLASS_TEMPLATE_P (t)
28e42b7e
KL
6202 ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6203 : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6204 full_args = tsubst_template_args (tmpl_args, args,
6205 complain, in_decl);
6206
6207 /* tsubst_template_args doesn't copy the vector if
6208 nothing changed. But, *something* should have
6209 changed. */
6210 gcc_assert (full_args != tmpl_args);
6211
6212 spec = retrieve_specialization (t, full_args,
6213 /*class_specializations_p=*/true);
6214 if (spec != NULL_TREE)
6215 {
6216 r = spec;
6217 break;
db2767b6 6218 }
98c1c668
JM
6219
6220 /* Make a new template decl. It will be similar to the
c8094d83 6221 original, but will record the current template arguments.
98c1c668
JM
6222 We also create a new function declaration, which is just
6223 like the old one, but points to this new template, rather
6224 than the old one. */
0acf7199 6225 r = copy_decl (t);
50bc768d 6226 gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
ae58fa02 6227 TREE_CHAIN (r) = NULL_TREE;
db2767b6 6228
c8094d83
MS
6229 DECL_CONTEXT (r)
6230 = tsubst_aggr_type (DECL_CONTEXT (t), args,
6231 complain, in_decl,
6232 /*entering_scope=*/1);
ae58fa02 6233 DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
93cdc044
JM
6234
6235 if (TREE_CODE (decl) == TYPE_DECL)
6236 {
c2ea3a40 6237 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
2620d095
KL
6238 if (new_type == error_mark_node)
6239 return error_mark_node;
6240
ae58fa02
MM
6241 TREE_TYPE (r) = new_type;
6242 CLASSTYPE_TI_TEMPLATE (new_type) = r;
17aec3eb 6243 DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
ae58fa02 6244 DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
93cdc044
JM
6245 }
6246 else
6247 {
c2ea3a40 6248 tree new_decl = tsubst (decl, args, complain, in_decl);
caec1dc0
KL
6249 if (new_decl == error_mark_node)
6250 return error_mark_node;
17aec3eb
RK
6251
6252 DECL_TEMPLATE_RESULT (r) = new_decl;
ae58fa02
MM
6253 DECL_TI_TEMPLATE (new_decl) = r;
6254 TREE_TYPE (r) = TREE_TYPE (new_decl);
6255 DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
93cdc044
JM
6256 }
6257
ae58fa02
MM
6258 SET_DECL_IMPLICIT_INSTANTIATION (r);
6259 DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6260 DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
98c1c668
JM
6261
6262 /* The template parameters for this new template are all the
6263 template parameters for the old template, except the
c6002625 6264 outermost level of parameters. */
c8094d83 6265 DECL_TEMPLATE_PARMS (r)
4393e105 6266 = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
c2ea3a40 6267 complain);
98c1c668 6268
93cdc044 6269 if (PRIMARY_TEMPLATE_P (t))
ae58fa02 6270 DECL_PRIMARY_TEMPLATE (r) = r;
93cdc044 6271
8c6ab2db
NS
6272 if (TREE_CODE (decl) != TYPE_DECL)
6273 /* Record this non-type partial instantiation. */
c8094d83 6274 register_specialization (r, t,
8c6ab2db 6275 DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
98c1c668 6276 }
ae58fa02 6277 break;
8d08fdba
MS
6278
6279 case FUNCTION_DECL:
6280 {
386b8a85 6281 tree ctx;
87603ed0 6282 tree argvec = NULL_TREE;
cf38f48a 6283 tree *friends;
36a117a5 6284 tree gen_tmpl;
fc6a28d7 6285 tree type;
5566b478 6286 int member;
d8c4447d
MM
6287 int args_depth;
6288 int parms_depth;
5566b478 6289
36a117a5 6290 /* Nobody should be tsubst'ing into non-template functions. */
50bc768d 6291 gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
36a117a5
MM
6292
6293 if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6294 {
6295 tree spec;
00cf3e31
MM
6296 bool dependent_p;
6297
6298 /* If T is not dependent, just return it. We have to
6299 increment PROCESSING_TEMPLATE_DECL because
6300 value_dependent_expression_p assumes that nothing is
6301 dependent when PROCESSING_TEMPLATE_DECL is zero. */
6302 ++processing_template_decl;
6303 dependent_p = value_dependent_expression_p (t);
6304 --processing_template_decl;
6305 if (!dependent_p)
6306 return t;
36a117a5
MM
6307
6308 /* Calculate the most general template of which R is a
6309 specialization, and the complete set of arguments used to
6310 specialize R. */
6311 gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
c8094d83 6312 argvec = tsubst_template_args (DECL_TI_ARGS
a91db711 6313 (DECL_TEMPLATE_RESULT (gen_tmpl)),
c8094d83 6314 args, complain, in_decl);
36a117a5
MM
6315
6316 /* Check to see if we already have this specialization. */
c7222c02
MM
6317 spec = retrieve_specialization (gen_tmpl, argvec,
6318 /*class_specializations_p=*/false);
7ddedda4 6319
36a117a5 6320 if (spec)
ae58fa02
MM
6321 {
6322 r = spec;
6323 break;
6324 }
d8c4447d 6325
f9a7ae04
MM
6326 /* We can see more levels of arguments than parameters if
6327 there was a specialization of a member template, like
6328 this:
6329
0cbd7506 6330 template <class T> struct S { template <class U> void f(); }
c8094d83 6331 template <> template <class U> void S<int>::f(U);
f9a7ae04 6332
dc957d14 6333 Here, we'll be substituting into the specialization,
f9a7ae04
MM
6334 because that's where we can find the code we actually
6335 want to generate, but we'll have enough arguments for
c8094d83 6336 the most general template.
f9a7ae04
MM
6337
6338 We also deal with the peculiar case:
d8c4447d 6339
c8094d83 6340 template <class T> struct S {
d8c4447d
MM
6341 template <class U> friend void f();
6342 };
74b846e0 6343 template <class U> void f() {}
d8c4447d
MM
6344 template S<int>;
6345 template void f<double>();
6346
6347 Here, the ARGS for the instantiation of will be {int,
6348 double}. But, we only need as many ARGS as there are
6349 levels of template parameters in CODE_PATTERN. We are
6350 careful not to get fooled into reducing the ARGS in
6351 situations like:
6352
6353 template <class T> struct S { template <class U> void f(U); }
6354 template <class T> template <> void S<T>::f(int) {}
6355
6356 which we can spot because the pattern will be a
6357 specialization in this case. */
6358 args_depth = TMPL_ARGS_DEPTH (args);
c8094d83
MS
6359 parms_depth =
6360 TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
d8c4447d
MM
6361 if (args_depth > parms_depth
6362 && !DECL_TEMPLATE_SPECIALIZATION (t))
f9a7ae04 6363 args = get_innermost_template_args (args, parms_depth);
36a117a5
MM
6364 }
6365 else
6366 {
6367 /* This special case arises when we have something like this:
6368
0cbd7506 6369 template <class T> struct S {
c8094d83 6370 friend void f<int>(int, double);
36a117a5
MM
6371 };
6372
6373 Here, the DECL_TI_TEMPLATE for the friend declaration
10b1d5e7
MM
6374 will be an IDENTIFIER_NODE. We are being called from
6375 tsubst_friend_function, and we want only to create a
6376 new decl (R) with appropriate types so that we can call
6377 determine_specialization. */
36a117a5
MM
6378 gen_tmpl = NULL_TREE;
6379 }
6380
6eb3bb27 6381 if (DECL_CLASS_SCOPE_P (t))
8d08fdba 6382 {
5566b478
MS
6383 if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6384 member = 2;
6385 else
6386 member = 1;
c8094d83 6387 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
8c6ab2db 6388 complain, t, /*entering_scope=*/1);
5566b478
MS
6389 }
6390 else
6391 {
6392 member = 0;
4f1c5b7d 6393 ctx = DECL_CONTEXT (t);
5566b478 6394 }
fc6a28d7 6395 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
b3da7bb1
MM
6396 if (type == error_mark_node)
6397 return error_mark_node;
8d08fdba 6398
5566b478 6399 /* We do NOT check for matching decls pushed separately at this
0cbd7506
MS
6400 point, as they may not represent instantiations of this
6401 template, and in any case are considered separate under the
6402 discrete model. */
0acf7199 6403 r = copy_decl (t);
e1467ff2 6404 DECL_USE_TEMPLATE (r) = 0;
5566b478 6405 TREE_TYPE (r) = type;
92643fea
MM
6406 /* Clear out the mangled name and RTL for the instantiation. */
6407 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6408 SET_DECL_RTL (r, NULL_RTX);
5bd61841 6409 DECL_INITIAL (r) = NULL_TREE;
4f1c5b7d 6410 DECL_CONTEXT (r) = ctx;
5566b478 6411
c8094d83 6412 if (member && DECL_CONV_FN_P (r))
1f84ec23
MM
6413 /* Type-conversion operator. Reconstruct the name, in
6414 case it's the name of one of the template's parameters. */
6415 DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
5566b478 6416
4393e105 6417 DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
c2ea3a40 6418 complain, t);
477f6664 6419 DECL_RESULT (r) = NULL_TREE;
711734a9
JM
6420
6421 TREE_STATIC (r) = 0;
6422 TREE_PUBLIC (r) = TREE_PUBLIC (t);
6423 DECL_EXTERNAL (r) = 1;
4684cd27
MM
6424 /* If this is an instantiation of a function with internal
6425 linkage, we already know what object file linkage will be
6426 assigned to the instantiation. */
6427 DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
711734a9
JM
6428 DECL_DEFER_OUTPUT (r) = 0;
6429 TREE_CHAIN (r) = NULL_TREE;
6430 DECL_PENDING_INLINE_INFO (r) = 0;
59026e79 6431 DECL_PENDING_INLINE_P (r) = 0;
655dc6ee 6432 DECL_SAVED_TREE (r) = NULL_TREE;
711734a9 6433 TREE_USED (r) = 0;
db9b2174
MM
6434 if (DECL_CLONED_FUNCTION (r))
6435 {
6436 DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
c2ea3a40 6437 args, complain, t);
db9b2174
MM
6438 TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6439 TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6440 }
711734a9 6441
92643fea
MM
6442 /* Set up the DECL_TEMPLATE_INFO for R. There's no need to do
6443 this in the special friend case mentioned above where
6444 GEN_TMPL is NULL. */
36a117a5 6445 if (gen_tmpl)
386b8a85 6446 {
c8094d83 6447 DECL_TEMPLATE_INFO (r)
e1b3e07d 6448 = tree_cons (gen_tmpl, argvec, NULL_TREE);
36a117a5
MM
6449 SET_DECL_IMPLICIT_INSTANTIATION (r);
6450 register_specialization (r, gen_tmpl, argvec);
6451
9188c363
MM
6452 /* We're not supposed to instantiate default arguments
6453 until they are called, for a template. But, for a
6454 declaration like:
6455
0cbd7506
MS
6456 template <class T> void f ()
6457 { extern void g(int i = T()); }
c8094d83 6458
9188c363
MM
6459 we should do the substitution when the template is
6460 instantiated. We handle the member function case in
6461 instantiate_class_template since the default arguments
6462 might refer to other members of the class. */
6463 if (!member
6464 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6465 && !uses_template_parms (argvec))
6466 tsubst_default_arguments (r);
386b8a85 6467 }
f181d4ae 6468
cf38f48a
MM
6469 /* Copy the list of befriending classes. */
6470 for (friends = &DECL_BEFRIENDING_CLASSES (r);
6471 *friends;
c8094d83 6472 friends = &TREE_CHAIN (*friends))
cf38f48a
MM
6473 {
6474 *friends = copy_node (*friends);
6475 TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
c2ea3a40 6476 args, complain,
cf38f48a
MM
6477 in_decl);
6478 }
6479
212e7048 6480 if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
f181d4ae
MM
6481 {
6482 maybe_retrofit_in_chrg (r);
212e7048
MM
6483 if (DECL_CONSTRUCTOR_P (r))
6484 grok_ctor_properties (ctx, r);
2be678ff
JM
6485 /* If this is an instantiation of a member template, clone it.
6486 If it isn't, that'll be handled by
6487 clone_constructors_and_destructors. */
5e818b93 6488 if (PRIMARY_TEMPLATE_P (gen_tmpl))
271e6f02 6489 clone_function_decl (r, /*update_method_vec_p=*/0);
f181d4ae 6490 }
596ea4e5 6491 else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
7e45bd18 6492 grok_op_properties (r, (complain & tf_error) != 0);
c8b2e872
MM
6493
6494 if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6495 SET_DECL_FRIEND_CONTEXT (r,
6496 tsubst (DECL_FRIEND_CONTEXT (t),
6497 args, complain, in_decl));
8d08fdba 6498 }
ae58fa02 6499 break;
8d08fdba
MS
6500
6501 case PARM_DECL:
6502 {
fc6a28d7
MM
6503 tree type;
6504
ae58fa02 6505 r = copy_node (t);
833aa4c4
NS
6506 if (DECL_TEMPLATE_PARM_P (t))
6507 SET_DECL_TEMPLATE_PARM_P (r);
8e51619a 6508
fc6a28d7 6509 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
02bab9db 6510 type = type_decays_to (type);
5566b478 6511 TREE_TYPE (r) = type;
9804209d 6512 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1 6513
560ad596
MM
6514 if (DECL_INITIAL (r))
6515 {
6516 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6517 DECL_INITIAL (r) = TREE_TYPE (r);
6518 else
6519 DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6520 complain, in_decl);
6521 }
db2767b6 6522
5566b478 6523 DECL_CONTEXT (r) = NULL_TREE;
8e51619a
JM
6524
6525 if (!DECL_TEMPLATE_PARM_P (r))
6526 DECL_ARG_TYPE (r) = type_passed_as (type);
8d08fdba 6527 if (TREE_CHAIN (t))
4393e105 6528 TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
c2ea3a40 6529 complain, TREE_CHAIN (t));
8d08fdba 6530 }
ae58fa02 6531 break;
8d08fdba 6532
5566b478
MS
6533 case FIELD_DECL:
6534 {
fc6a28d7
MM
6535 tree type;
6536
0acf7199 6537 r = copy_decl (t);
fc6a28d7
MM
6538 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6539 if (type == error_mark_node)
6540 return error_mark_node;
1b8899d1 6541 TREE_TYPE (r) = type;
9804209d 6542 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
1b8899d1
MM
6543
6544 /* We don't have to set DECL_CONTEXT here; it is set by
6545 finish_member_declaration. */
4393e105 6546 DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
c2ea3a40 6547 complain, in_decl);
5566b478 6548 TREE_CHAIN (r) = NULL_TREE;
c8094d83 6549 if (VOID_TYPE_P (type))
dee15844 6550 error ("instantiation of %q+D as type %qT", r, type);
5566b478 6551 }
ae58fa02 6552 break;
5566b478
MS
6553
6554 case USING_DECL:
98ed9dae
NS
6555 /* We reach here only for member using decls. */
6556 if (DECL_DEPENDENT_P (t))
6557 {
6558 r = do_class_using_decl
6559 (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
6560 tsubst_copy (DECL_NAME (t), args, complain, in_decl));
6561 if (!r)
6562 r = error_mark_node;
6563 }
6564 else
6565 {
6566 r = copy_node (t);
6567 TREE_CHAIN (r) = NULL_TREE;
6568 }
ae58fa02 6569 break;
5566b478 6570
9188c363 6571 case TYPE_DECL:
5566b478
MS
6572 case VAR_DECL:
6573 {
1cea0434
KG
6574 tree argvec = NULL_TREE;
6575 tree gen_tmpl = NULL_TREE;
36a117a5 6576 tree spec;
1cea0434 6577 tree tmpl = NULL_TREE;
9188c363 6578 tree ctx;
fc6a28d7 6579 tree type = NULL_TREE;
6dfbb909 6580 int local_p;
9188c363 6581
fc6a28d7
MM
6582 if (TREE_CODE (t) == TYPE_DECL)
6583 {
6584 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6585 if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6586 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6587 {
6588 /* If this is the canonical decl, we don't have to
6589 mess with instantiations, and often we can't (for
6590 typename, template type parms and such). Note that
6591 TYPE_NAME is not correct for the above test if
6592 we've copied the type for a typedef. */
6593 r = TYPE_NAME (type);
6594 break;
6595 }
6596 }
c8094d83 6597
6dfbb909
MM
6598 /* Assume this is a non-local variable. */
6599 local_p = 0;
5566b478 6600
de96bf57 6601 if (TYPE_P (CP_DECL_CONTEXT (t)))
c8094d83 6602 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
c2ea3a40 6603 complain,
9188c363 6604 in_decl, /*entering_scope=*/1);
2ba9c47e
MM
6605 else if (DECL_NAMESPACE_SCOPE_P (t))
6606 ctx = DECL_CONTEXT (t);
9188c363 6607 else
6dfbb909
MM
6608 {
6609 /* Subsequent calls to pushdecl will fill this in. */
6610 ctx = NULL_TREE;
2ba9c47e 6611 local_p = 1;
6dfbb909 6612 }
9188c363 6613
36a117a5 6614 /* Check to see if we already have this specialization. */
6dfbb909
MM
6615 if (!local_p)
6616 {
6617 tmpl = DECL_TI_TEMPLATE (t);
6618 gen_tmpl = most_general_template (tmpl);
c2ea3a40 6619 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
c7222c02
MM
6620 spec = retrieve_specialization (gen_tmpl, argvec,
6621 /*class_specializations_p=*/false);
6dfbb909 6622 }
9188c363 6623 else
6dfbb909 6624 spec = retrieve_local_specialization (t);
9188c363 6625
36a117a5 6626 if (spec)
ae58fa02
MM
6627 {
6628 r = spec;
6629 break;
6630 }
5566b478 6631
0acf7199 6632 r = copy_decl (t);
edebf865 6633 if (TREE_CODE (r) == VAR_DECL)
39703eb9 6634 {
fc6a28d7
MM
6635 type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6636 if (type == error_mark_node)
6637 return error_mark_node;
39703eb9
MM
6638 type = complete_type (type);
6639 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6640 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
62e19030 6641 type = check_var_type (DECL_NAME (r), type);
39703eb9 6642 }
a3d87771
MM
6643 else if (DECL_SELF_REFERENCE_P (t))
6644 SET_DECL_SELF_REFERENCE_P (r);
01f4137f 6645 TREE_TYPE (r) = type;
9804209d 6646 cp_apply_type_quals_to_decl (cp_type_quals (type), r);
5566b478 6647 DECL_CONTEXT (r) = ctx;
92643fea
MM
6648 /* Clear out the mangled name and RTL for the instantiation. */
6649 SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
820cc88f
DB
6650 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6651 SET_DECL_RTL (r, NULL_RTX);
d11ad92e
MS
6652
6653 /* Don't try to expand the initializer until someone tries to use
6654 this variable; otherwise we run into circular dependencies. */
6655 DECL_INITIAL (r) = NULL_TREE;
820cc88f
DB
6656 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
6657 SET_DECL_RTL (r, NULL_RTX);
06ceef4e 6658 DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
5566b478 6659
e0942dcd
MM
6660 /* Even if the original location is out of scope, the newly
6661 substituted one is not. */
6662 if (TREE_CODE (r) == VAR_DECL)
17bbb839
MM
6663 {
6664 DECL_DEAD_FOR_LOCAL (r) = 0;
6665 DECL_INITIALIZED_P (r) = 0;
6666 }
e0942dcd 6667
6dfbb909
MM
6668 if (!local_p)
6669 {
6670 /* A static data member declaration is always marked
6671 external when it is declared in-class, even if an
6672 initializer is present. We mimic the non-template
6673 processing here. */
6674 DECL_EXTERNAL (r) = 1;
fa8d6e85 6675
6dfbb909
MM
6676 register_specialization (r, gen_tmpl, argvec);
6677 DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6678 SET_DECL_IMPLICIT_INSTANTIATION (r);
6679 }
9188c363 6680 else
6dfbb909 6681 register_local_specialization (r, t);
5566b478 6682
5566b478 6683 TREE_CHAIN (r) = NULL_TREE;
edebf865 6684 layout_decl (r, 0);
5566b478 6685 }
ae58fa02 6686 break;
5566b478 6687
ae58fa02 6688 default:
315fb5db 6689 gcc_unreachable ();
c8094d83 6690 }
ae58fa02
MM
6691
6692 /* Restore the file and line information. */
82a98427 6693 input_location = saved_loc;
ae58fa02
MM
6694
6695 return r;
6696}
6697
34cd5ae7 6698/* Substitute into the ARG_TYPES of a function type. */
cabc336a 6699
e9659ab0 6700static tree
c8094d83 6701tsubst_arg_types (tree arg_types,
0cbd7506
MS
6702 tree args,
6703 tsubst_flags_t complain,
6704 tree in_decl)
cabc336a
MM
6705{
6706 tree remaining_arg_types;
cabc336a 6707 tree type;
5e97d404
NS
6708 tree default_arg;
6709 tree result = NULL_TREE;
cabc336a
MM
6710
6711 if (!arg_types || arg_types == void_list_node)
6712 return arg_types;
c8094d83 6713
cabc336a 6714 remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
4393e105
MM
6715 args, complain, in_decl);
6716 if (remaining_arg_types == error_mark_node)
6717 return error_mark_node;
6718
6719 type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6720 if (type == error_mark_node)
6721 return error_mark_node;
4b2811e9
NS
6722 if (VOID_TYPE_P (type))
6723 {
c2ea3a40 6724 if (complain & tf_error)
0cbd7506
MS
6725 {
6726 error ("invalid parameter type %qT", type);
6727 if (in_decl)
dee15844 6728 error ("in declaration %q+D", in_decl);
0cbd7506 6729 }
4b2811e9
NS
6730 return error_mark_node;
6731 }
cabc336a 6732
4393e105
MM
6733 /* Do array-to-pointer, function-to-pointer conversion, and ignore
6734 top-level qualifiers as required. */
6735 type = TYPE_MAIN_VARIANT (type_decays_to (type));
cabc336a 6736
5e97d404
NS
6737 /* We do not substitute into default arguments here. The standard
6738 mandates that they be instantiated only when needed, which is
6739 done in build_over_call. */
6740 default_arg = TREE_PURPOSE (arg_types);
c8094d83 6741
5e97d404
NS
6742 if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
6743 {
6744 /* We've instantiated a template before its default arguments
0cbd7506
MS
6745 have been parsed. This can happen for a nested template
6746 class, and is not an error unless we require the default
6747 argument in a call of this function. */
5e97d404 6748 result = tree_cons (default_arg, type, remaining_arg_types);
01ea1ea8 6749 VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), result);
5e97d404
NS
6750 }
6751 else
6752 result = hash_tree_cons (default_arg, type, remaining_arg_types);
c8094d83 6753
5e97d404 6754 return result;
cabc336a
MM
6755}
6756
4393e105
MM
6757/* Substitute into a FUNCTION_TYPE or METHOD_TYPE. This routine does
6758 *not* handle the exception-specification for FNTYPE, because the
6759 initial substitution of explicitly provided template parameters
6760 during argument deduction forbids substitution into the
6761 exception-specification:
6762
6763 [temp.deduct]
6764
6765 All references in the function type of the function template to the
6766 corresponding template parameters are replaced by the specified tem-
6767 plate argument values. If a substitution in a template parameter or
6768 in the function type of the function template results in an invalid
6769 type, type deduction fails. [Note: The equivalent substitution in
6770 exception specifications is done only when the function is instanti-
6771 ated, at which point a program is ill-formed if the substitution
6772 results in an invalid type.] */
6773
6774static tree
c8094d83 6775tsubst_function_type (tree t,
0cbd7506
MS
6776 tree args,
6777 tsubst_flags_t complain,
6778 tree in_decl)
4393e105
MM
6779{
6780 tree return_type;
6781 tree arg_types;
6782 tree fntype;
6783
8dd3f57a 6784 /* The TYPE_CONTEXT is not used for function/method types. */
50bc768d 6785 gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
4393e105 6786
46c895ac 6787 /* Substitute the return type. */
4393e105
MM
6788 return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6789 if (return_type == error_mark_node)
6790 return error_mark_node;
6e2993bf
MM
6791 /* The standard does not presently indicate that creation of a
6792 function type with an invalid return type is a deduction failure.
270af55d 6793 However, that is clearly analogous to creating an array of "void"
c8094d83 6794 or a reference to a reference. This is core issue #486. */
6e2993bf
MM
6795 if (TREE_CODE (return_type) == ARRAY_TYPE
6796 || TREE_CODE (return_type) == FUNCTION_TYPE)
6797 {
6798 if (complain & tf_error)
6799 {
6800 if (TREE_CODE (return_type) == ARRAY_TYPE)
6801 error ("function returning an array");
6802 else
6803 error ("function returning a function");
6804 }
6805 return error_mark_node;
6806 }
4393e105 6807
34cd5ae7 6808 /* Substitute the argument types. */
4393e105 6809 arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
c8094d83 6810 complain, in_decl);
4393e105
MM
6811 if (arg_types == error_mark_node)
6812 return error_mark_node;
c8094d83 6813
4393e105
MM
6814 /* Construct a new type node and return it. */
6815 if (TREE_CODE (t) == FUNCTION_TYPE)
6816 fntype = build_function_type (return_type, arg_types);
6817 else
6818 {
6819 tree r = TREE_TYPE (TREE_VALUE (arg_types));
6820 if (! IS_AGGR_TYPE (r))
6821 {
6822 /* [temp.deduct]
c8094d83 6823
4393e105
MM
6824 Type deduction may fail for any of the following
6825 reasons:
c8094d83 6826
4393e105
MM
6827 -- Attempting to create "pointer to member of T" when T
6828 is not a class type. */
c2ea3a40 6829 if (complain & tf_error)
0f51ccfc 6830 error ("creating pointer to member function of non-class type %qT",
4393e105
MM
6831 r);
6832 return error_mark_node;
6833 }
c8094d83
MS
6834
6835 fntype = build_method_type_directly (r, return_type,
43dc123f 6836 TREE_CHAIN (arg_types));
4393e105 6837 }
c2ea3a40 6838 fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
e9525111 6839 fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
c8094d83
MS
6840
6841 return fntype;
4393e105
MM
6842}
6843
c7222c02
MM
6844/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE. Substitute the template
6845 ARGS into that specification, and return the substituted
6846 specification. If there is no specification, return NULL_TREE. */
6847
6848static tree
c8094d83
MS
6849tsubst_exception_specification (tree fntype,
6850 tree args,
c7222c02
MM
6851 tsubst_flags_t complain,
6852 tree in_decl)
6853{
6854 tree specs;
6855 tree new_specs;
6856
6857 specs = TYPE_RAISES_EXCEPTIONS (fntype);
6858 new_specs = NULL_TREE;
6859 if (specs)
6860 {
6861 if (! TREE_VALUE (specs))
6862 new_specs = specs;
6863 else
6864 while (specs)
6865 {
6866 tree spec;
6867 spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6868 if (spec == error_mark_node)
6869 return spec;
6870 new_specs = add_exception_specifier (new_specs, spec, complain);
6871 specs = TREE_CHAIN (specs);
6872 }
6873 }
6874 return new_specs;
6875}
6876
297e73d8
MM
6877/* Substitute into the PARMS of a call-declarator. */
6878
e9659ab0 6879static tree
c8094d83 6880tsubst_call_declarator_parms (tree parms,
0cbd7506
MS
6881 tree args,
6882 tsubst_flags_t complain,
6883 tree in_decl)
297e73d8
MM
6884{
6885 tree new_parms;
6886 tree type;
6887 tree defarg;
6888
6889 if (!parms || parms == void_list_node)
6890 return parms;
c8094d83 6891
297e73d8 6892 new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
4393e105 6893 args, complain, in_decl);
297e73d8
MM
6894
6895 /* Figure out the type of this parameter. */
4393e105 6896 type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
c8094d83 6897
297e73d8 6898 /* Figure out the default argument as well. Note that we use
4393e105
MM
6899 tsubst_expr since the default argument is really an expression. */
6900 defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
297e73d8
MM
6901
6902 /* Chain this parameter on to the front of those we have already
6903 processed. We don't use hash_tree_cons because that function
6904 doesn't check TREE_PARMLIST. */
6905 new_parms = tree_cons (defarg, type, new_parms);
6906
297e73d8
MM
6907 return new_parms;
6908}
6909
4393e105
MM
6910/* Take the tree structure T and replace template parameters used
6911 therein with the argument vector ARGS. IN_DECL is an associated
6912 decl for diagnostics. If an error occurs, returns ERROR_MARK_NODE.
c2ea3a40
NS
6913 Issue error and warning messages under control of COMPLAIN. Note
6914 that we must be relatively non-tolerant of extensions here, in
6915 order to preserve conformance; if we allow substitutions that
6916 should not be allowed, we may allow argument deductions that should
6917 not succeed, and therefore report ambiguous overload situations
6918 where there are none. In theory, we could allow the substitution,
6919 but indicate that it should have failed, and allow our caller to
6920 make sure that the right thing happens, but we don't try to do this
6921 yet.
4393e105
MM
6922
6923 This function is used for dealing with types, decls and the like;
6924 for expressions, use tsubst_expr or tsubst_copy. */
ae58fa02 6925
14d22dd6 6926static tree
3a978d72 6927tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
ae58fa02 6928{
0ecfe0b4 6929 tree type, r;
ae58fa02
MM
6930
6931 if (t == NULL_TREE || t == error_mark_node
6932 || t == integer_type_node
6933 || t == void_type_node
6934 || t == char_type_node
539599c1 6935 || t == unknown_type_node
ae58fa02
MM
6936 || TREE_CODE (t) == NAMESPACE_DECL)
6937 return t;
6938
fc6a28d7
MM
6939 if (DECL_P (t))
6940 return tsubst_decl (t, args, complain);
6941
ae58fa02
MM
6942 if (TREE_CODE (t) == IDENTIFIER_NODE)
6943 type = IDENTIFIER_TYPE_VALUE (t);
6944 else
6945 type = TREE_TYPE (t);
399dedb9 6946
50bc768d 6947 gcc_assert (type != unknown_type_node);
ae58fa02 6948
fc6a28d7 6949 if (type
ae58fa02 6950 && TREE_CODE (t) != TYPENAME_TYPE
4393e105
MM
6951 && TREE_CODE (t) != IDENTIFIER_NODE
6952 && TREE_CODE (t) != FUNCTION_TYPE
6953 && TREE_CODE (t) != METHOD_TYPE)
6954 type = tsubst (type, args, complain, in_decl);
6955 if (type == error_mark_node)
6956 return error_mark_node;
ae58fa02 6957
ae58fa02
MM
6958 switch (TREE_CODE (t))
6959 {
6960 case RECORD_TYPE:
6961 case UNION_TYPE:
6962 case ENUMERAL_TYPE:
4393e105
MM
6963 return tsubst_aggr_type (t, args, complain, in_decl,
6964 /*entering_scope=*/0);
ae58fa02
MM
6965
6966 case ERROR_MARK:
6967 case IDENTIFIER_NODE:
ae58fa02
MM
6968 case VOID_TYPE:
6969 case REAL_TYPE:
6970 case COMPLEX_TYPE:
c00996a3 6971 case VECTOR_TYPE:
ae58fa02
MM
6972 case BOOLEAN_TYPE:
6973 case INTEGER_CST:
6974 case REAL_CST:
6975 case STRING_CST:
6976 return t;
6977
6978 case INTEGER_TYPE:
6979 if (t == integer_type_node)
6980 return t;
6981
6982 if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6983 && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6984 return t;
d2e5ee5c 6985
5566b478 6986 {
ddce3528 6987 tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
7ddedda4 6988
a91db711
NS
6989 /* The array dimension behaves like a non-type template arg,
6990 in that we want to fold it as much as possible. */
6991 max = tsubst_template_arg (omax, args, complain, in_decl);
4ef69b83 6992 max = fold_decl_constant_value (max);
8dd3f57a 6993
ddce3528
JM
6994 if (integer_zerop (omax))
6995 {
6996 /* Still allow an explicit array of size zero. */
6997 if (pedantic)
6998 pedwarn ("creating array with size zero");
6999 }
c8094d83
MS
7000 else if (integer_zerop (max)
7001 || (TREE_CODE (max) == INTEGER_CST
07c88314 7002 && INT_CST_LT (max, integer_zero_node)))
0ecfe0b4 7003 {
4393e105
MM
7004 /* [temp.deduct]
7005
7006 Type deduction may fail for any of the following
c8094d83 7007 reasons:
4393e105 7008
bf8f3f93
MM
7009 Attempting to create an array with a size that is
7010 zero or negative. */
c2ea3a40 7011 if (complain & tf_error)
0f51ccfc 7012 error ("creating array with size zero (%qE)", max);
4393e105
MM
7013
7014 return error_mark_node;
0ecfe0b4
JM
7015 }
7016
c95cd22e 7017 return compute_array_index_type (NULL_TREE, max);
ae58fa02
MM
7018 }
7019
7020 case TEMPLATE_TYPE_PARM:
7021 case TEMPLATE_TEMPLATE_PARM:
a1281f45 7022 case BOUND_TEMPLATE_TEMPLATE_PARM:
ae58fa02
MM
7023 case TEMPLATE_PARM_INDEX:
7024 {
7025 int idx;
7026 int level;
7027 int levels;
315fb5db 7028 tree arg = NULL_TREE;
0ecfe0b4
JM
7029
7030 r = NULL_TREE;
ae58fa02 7031
315fb5db 7032 gcc_assert (TREE_VEC_LENGTH (args) > 0);
ae58fa02 7033 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
a1281f45
KL
7034 || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
7035 || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
ae58fa02
MM
7036 {
7037 idx = TEMPLATE_TYPE_IDX (t);
7038 level = TEMPLATE_TYPE_LEVEL (t);
7039 }
7040 else
7041 {
7042 idx = TEMPLATE_PARM_IDX (t);
7043 level = TEMPLATE_PARM_LEVEL (t);
7044 }
7045
315fb5db
NS
7046 levels = TMPL_ARGS_DEPTH (args);
7047 if (level <= levels)
7048 arg = TMPL_ARG (args, level, idx);
ae58fa02 7049
315fb5db
NS
7050 if (arg == error_mark_node)
7051 return error_mark_node;
7052 else if (arg != NULL_TREE)
7053 {
7054 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
ae58fa02 7055 {
315fb5db
NS
7056 gcc_assert (TYPE_P (arg));
7057 return cp_build_qualified_type_real
7058 (arg, cp_type_quals (arg) | cp_type_quals (t),
7059 complain | tf_ignore_bad_quals);
7060 }
7061 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7062 {
7063 /* We are processing a type constructed from a
7064 template template parameter. */
7065 tree argvec = tsubst (TYPE_TI_ARGS (t),
7066 args, complain, in_decl);
7067 if (argvec == error_mark_node)
7068 return error_mark_node;
c8094d83 7069
315fb5db
NS
7070 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
7071 are resolving nested-types in the signature of a
7072 member function templates. Otherwise ARG is a
7073 TEMPLATE_DECL and is the real template to be
7074 instantiated. */
7075 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7076 arg = TYPE_NAME (arg);
c8094d83
MS
7077
7078 r = lookup_template_class (arg,
7079 argvec, in_decl,
315fb5db
NS
7080 DECL_CONTEXT (arg),
7081 /*entering_scope=*/0,
7082 complain);
7083 return cp_build_qualified_type_real
7084 (r, TYPE_QUALS (t), complain);
ae58fa02 7085 }
315fb5db
NS
7086 else
7087 /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX. */
7088 return arg;
ae58fa02
MM
7089 }
7090
7091 if (level == 1)
7092 /* This can happen during the attempted tsubst'ing in
7093 unify. This means that we don't yet have any information
7094 about the template parameter in question. */
7095 return t;
7096
7097 /* If we get here, we must have been looking at a parm for a
7098 more deeply nested template. Make a new version of this
7099 template parameter, but with a lower level. */
7100 switch (TREE_CODE (t))
7101 {
7102 case TEMPLATE_TYPE_PARM:
7103 case TEMPLATE_TEMPLATE_PARM:
a1281f45 7104 case BOUND_TEMPLATE_TEMPLATE_PARM:
89d684bb 7105 if (cp_type_quals (t))
ae58fa02 7106 {
9ccf6541 7107 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
0cbd7506
MS
7108 r = cp_build_qualified_type_real
7109 (r, cp_type_quals (t),
4f2b0fb2
NS
7110 complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7111 ? tf_ignore_bad_quals : 0));
9ccf6541
MM
7112 }
7113 else
7114 {
11e74ea6 7115 r = copy_type (t);
9ccf6541
MM
7116 TEMPLATE_TYPE_PARM_INDEX (r)
7117 = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7118 r, levels);
7119 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7120 TYPE_MAIN_VARIANT (r) = r;
7121 TYPE_POINTER_TO (r) = NULL_TREE;
7122 TYPE_REFERENCE_TO (r) = NULL_TREE;
7123
a1281f45 7124 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
9ccf6541
MM
7125 {
7126 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
c8094d83 7127 complain, in_decl);
9ccf6541
MM
7128 if (argvec == error_mark_node)
7129 return error_mark_node;
4393e105 7130
9ccf6541
MM
7131 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7132 = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7133 }
ae58fa02
MM
7134 }
7135 break;
7136
7137 case TEMPLATE_PARM_INDEX:
7138 r = reduce_template_parm_level (t, type, levels);
7139 break;
c8094d83 7140
ae58fa02 7141 default:
315fb5db 7142 gcc_unreachable ();
ae58fa02
MM
7143 }
7144
5566b478 7145 return r;
ae58fa02 7146 }
5566b478 7147
8d08fdba
MS
7148 case TREE_LIST:
7149 {
058b15c1 7150 tree purpose, value, chain;
8d08fdba
MS
7151
7152 if (t == void_list_node)
7153 return t;
7154
8d08fdba
MS
7155 purpose = TREE_PURPOSE (t);
7156 if (purpose)
4393e105
MM
7157 {
7158 purpose = tsubst (purpose, args, complain, in_decl);
7159 if (purpose == error_mark_node)
7160 return error_mark_node;
7161 }
8d08fdba
MS
7162 value = TREE_VALUE (t);
7163 if (value)
4393e105
MM
7164 {
7165 value = tsubst (value, args, complain, in_decl);
7166 if (value == error_mark_node)
7167 return error_mark_node;
7168 }
8d08fdba
MS
7169 chain = TREE_CHAIN (t);
7170 if (chain && chain != void_type_node)
4393e105
MM
7171 {
7172 chain = tsubst (chain, args, complain, in_decl);
7173 if (chain == error_mark_node)
7174 return error_mark_node;
7175 }
8d08fdba
MS
7176 if (purpose == TREE_PURPOSE (t)
7177 && value == TREE_VALUE (t)
7178 && chain == TREE_CHAIN (t))
7179 return t;
058b15c1 7180 return hash_tree_cons (purpose, value, chain);
8d08fdba 7181 }
c8094d83 7182
95b4aca6 7183 case TREE_BINFO:
bd7eccc4 7184 /* We should never be tsubsting a binfo. */
315fb5db 7185 gcc_unreachable ();
85b71cf2 7186
95b4aca6
NS
7187 case TREE_VEC:
7188 /* A vector of template arguments. */
50bc768d 7189 gcc_assert (!type);
a91db711 7190 return tsubst_template_args (t, args, complain, in_decl);
8d08fdba 7191
8d08fdba
MS
7192 case POINTER_TYPE:
7193 case REFERENCE_TYPE:
7194 {
8d08fdba 7195 enum tree_code code;
79a7c7fa 7196
46c895ac 7197 if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8d08fdba
MS
7198 return t;
7199
7200 code = TREE_CODE (t);
4393e105
MM
7201
7202
7203 /* [temp.deduct]
c8094d83 7204
4393e105 7205 Type deduction may fail for any of the following
c8094d83 7206 reasons:
4393e105
MM
7207
7208 -- Attempting to create a pointer to reference type.
7209 -- Attempting to create a reference to a reference type or
7210 a reference to void. */
0ecfe0b4
JM
7211 if (TREE_CODE (type) == REFERENCE_TYPE
7212 || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
79a7c7fa 7213 {
82a98427 7214 static location_t last_loc;
79a7c7fa
JM
7215
7216 /* We keep track of the last time we issued this error
7217 message to avoid spewing a ton of messages during a
7218 single bad template instantiation. */
c2ea3a40 7219 if (complain & tf_error
93409b8c 7220#ifdef USE_MAPPED_LOCATION
9b60dfd7 7221 && last_loc != input_location
93409b8c 7222#else
82a98427 7223 && (last_loc.line != input_line
9b60dfd7 7224 || last_loc.file != input_filename)
93409b8c 7225#endif
9b60dfd7 7226 )
79a7c7fa 7227 {
0ecfe0b4 7228 if (TREE_CODE (type) == VOID_TYPE)
33bd39a2 7229 error ("forming reference to void");
0ecfe0b4 7230 else
0f51ccfc 7231 error ("forming %s to reference type %qT",
0cbd7506
MS
7232 (code == POINTER_TYPE) ? "pointer" : "reference",
7233 type);
82a98427 7234 last_loc = input_location;
79a7c7fa
JM
7235 }
7236
4393e105 7237 return error_mark_node;
79a7c7fa
JM
7238 }
7239 else if (code == POINTER_TYPE)
46c895ac
NS
7240 {
7241 r = build_pointer_type (type);
7242 if (TREE_CODE (type) == METHOD_TYPE)
7243 r = build_ptrmemfunc_type (r);
7244 }
8d08fdba
MS
7245 else
7246 r = build_reference_type (type);
adecb3f4 7247 r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
79a7c7fa 7248
a5f1c5f8
NS
7249 if (r != error_mark_node)
7250 /* Will this ever be needed for TYPE_..._TO values? */
7251 layout_type (r);
c8094d83 7252
8d08fdba
MS
7253 return r;
7254 }
a4443a08 7255 case OFFSET_TYPE:
0ecfe0b4 7256 {
4393e105
MM
7257 r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7258 if (r == error_mark_node || !IS_AGGR_TYPE (r))
7259 {
7260 /* [temp.deduct]
7261
7262 Type deduction may fail for any of the following
7263 reasons:
c8094d83 7264
4393e105 7265 -- Attempting to create "pointer to member of T" when T
0cbd7506 7266 is not a class type. */
c2ea3a40 7267 if (complain & tf_error)
0f51ccfc 7268 error ("creating pointer to member of non-class type %qT", r);
4393e105
MM
7269 return error_mark_node;
7270 }
46c895ac
NS
7271 if (TREE_CODE (type) == REFERENCE_TYPE)
7272 {
4f09be91 7273 if (complain & tf_error)
0f51ccfc 7274 error ("creating pointer to member reference type %qT", type);
cb6d4a9f
VR
7275 return error_mark_node;
7276 }
7277 if (TREE_CODE (type) == VOID_TYPE)
7278 {
7279 if (complain & tf_error)
7280 error ("creating pointer to member of type void");
46c895ac
NS
7281 return error_mark_node;
7282 }
50bc768d 7283 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
46c895ac 7284 if (TREE_CODE (type) == FUNCTION_TYPE)
a5ac359a 7285 {
0cbd7506
MS
7286 /* The type of the implicit object parameter gets its
7287 cv-qualifiers from the FUNCTION_TYPE. */
a5ac359a 7288 tree method_type;
0cbd7506
MS
7289 tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
7290 cp_type_quals (type));
7291 tree memptr;
7292 method_type = build_method_type_directly (this_type,
43dc123f
MM
7293 TREE_TYPE (type),
7294 TYPE_ARG_TYPES (type));
0cbd7506
MS
7295 memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
7296 return cp_build_qualified_type_real (memptr, cp_type_quals (t),
7297 complain);
a5ac359a 7298 }
46c895ac 7299 else
b7a78333
MM
7300 return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7301 TYPE_QUALS (t),
7302 complain);
0ecfe0b4 7303 }
8d08fdba
MS
7304 case FUNCTION_TYPE:
7305 case METHOD_TYPE:
7306 {
c11b6f21 7307 tree fntype;
c7222c02 7308 tree specs;
4393e105
MM
7309 fntype = tsubst_function_type (t, args, complain, in_decl);
7310 if (fntype == error_mark_node)
7311 return error_mark_node;
cabc336a 7312
34cd5ae7 7313 /* Substitute the exception specification. */
c8094d83 7314 specs = tsubst_exception_specification (t, args, complain,
c7222c02
MM
7315 in_decl);
7316 if (specs)
7317 fntype = build_exception_variant (fntype, specs);
c11b6f21 7318 return fntype;
8d08fdba
MS
7319 }
7320 case ARRAY_TYPE:
7321 {
4393e105
MM
7322 tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7323 if (domain == error_mark_node)
7324 return error_mark_node;
7325
7326 /* As an optimization, we avoid regenerating the array type if
7327 it will obviously be the same as T. */
8d08fdba
MS
7328 if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7329 return t;
0ecfe0b4 7330
c8094d83 7331 /* These checks should match the ones in grokdeclarator.
4393e105 7332
c8094d83
MS
7333 [temp.deduct]
7334
7335 The deduction may fail for any of the following reasons:
4393e105
MM
7336
7337 -- Attempting to create an array with an element type that
c8094d83 7338 is void, a function type, or a reference type, or [DR337]
cfb91b67 7339 an abstract class type. */
c8094d83 7340 if (TREE_CODE (type) == VOID_TYPE
4393e105
MM
7341 || TREE_CODE (type) == FUNCTION_TYPE
7342 || TREE_CODE (type) == REFERENCE_TYPE)
0ecfe0b4 7343 {
c2ea3a40 7344 if (complain & tf_error)
0f51ccfc 7345 error ("creating array of %qT", type);
4393e105 7346 return error_mark_node;
0ecfe0b4 7347 }
cfb91b67
GB
7348 if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7349 {
7350 if (complain & tf_error)
c8094d83 7351 error ("creating array of %qT, which is an abstract class type",
cfb91b67 7352 type);
c8094d83 7353 return error_mark_node;
cfb91b67 7354 }
0ecfe0b4 7355
8d08fdba
MS
7356 r = build_cplus_array_type (type, domain);
7357 return r;
7358 }
7359
8d08fdba 7360 case PLUS_EXPR:
5566b478 7361 case MINUS_EXPR:
4393e105 7362 {
c2ea3a40
NS
7363 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7364 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
7365
7366 if (e1 == error_mark_node || e2 == error_mark_node)
7367 return error_mark_node;
7368
7866705a 7369 return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
4393e105 7370 }
8d08fdba
MS
7371
7372 case NEGATE_EXPR:
7373 case NOP_EXPR:
4393e105 7374 {
c2ea3a40 7375 tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
7376 if (e == error_mark_node)
7377 return error_mark_node;
7378
7866705a 7379 return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
4393e105 7380 }
8d08fdba 7381
5566b478
MS
7382 case TYPENAME_TYPE:
7383 {
4393e105
MM
7384 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7385 in_decl, /*entering_scope=*/1);
7386 tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
c8094d83 7387 complain, in_decl);
4393e105
MM
7388
7389 if (ctx == error_mark_node || f == error_mark_node)
7390 return error_mark_node;
ae58fa02 7391
bf8f3f93
MM
7392 if (!IS_AGGR_TYPE (ctx))
7393 {
c2ea3a40 7394 if (complain & tf_error)
0f51ccfc 7395 error ("%qT is not a class, struct, or union type", ctx);
bf8f3f93
MM
7396 return error_mark_node;
7397 }
7398 else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7399 {
7400 /* Normally, make_typename_type does not require that the CTX
7401 have complete type in order to allow things like:
c8094d83 7402
0cbd7506 7403 template <class T> struct S { typename S<T>::X Y; };
ae58fa02 7404
bf8f3f93
MM
7405 But, such constructs have already been resolved by this
7406 point, so here CTX really should have complete type, unless
7407 it's a partial instantiation. */
4393e105 7408 ctx = complete_type (ctx);
d0f062fb 7409 if (!COMPLETE_TYPE_P (ctx))
4393e105 7410 {
c2ea3a40 7411 if (complain & tf_error)
7a228918 7412 cxx_incomplete_type_error (NULL_TREE, ctx);
4393e105
MM
7413 return error_mark_node;
7414 }
7415 }
ae58fa02 7416
fc6a28d7 7417 f = make_typename_type (ctx, f, typename_type,
4f2b0fb2 7418 (complain & tf_error) | tf_keep_type_decl);
f0bcd168
MM
7419 if (f == error_mark_node)
7420 return f;
0cbd7506
MS
7421 if (TREE_CODE (f) == TYPE_DECL)
7422 {
4f2b0fb2 7423 complain |= tf_ignore_bad_quals;
0cbd7506
MS
7424 f = TREE_TYPE (f);
7425 }
c8094d83 7426
fc6a28d7
MM
7427 if (TREE_CODE (f) != TYPENAME_TYPE)
7428 {
7429 if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
c8094d83 7430 error ("%qT resolves to %qT, which is not an enumeration type",
fc6a28d7
MM
7431 t, f);
7432 else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
c8094d83 7433 error ("%qT resolves to %qT, which is is not a class type",
fc6a28d7
MM
7434 t, f);
7435 }
7436
0cbd7506
MS
7437 return cp_build_qualified_type_real
7438 (f, cp_type_quals (f) | cp_type_quals (t), complain);
5566b478 7439 }
c8094d83 7440
b8c6534b
KL
7441 case UNBOUND_CLASS_TEMPLATE:
7442 {
7443 tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7444 in_decl, /*entering_scope=*/1);
7445 tree name = TYPE_IDENTIFIER (t);
b939a023 7446 tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
b8c6534b
KL
7447
7448 if (ctx == error_mark_node || name == error_mark_node)
7449 return error_mark_node;
7450
b939a023
KL
7451 if (parm_list)
7452 parm_list = tsubst_template_parms (parm_list, args, complain);
7453 return make_unbound_class_template (ctx, name, parm_list, complain);
b8c6534b
KL
7454 }
7455
5566b478 7456 case INDIRECT_REF:
5566b478 7457 case ADDR_EXPR:
058b15c1 7458 case CALL_EXPR:
315fb5db 7459 gcc_unreachable ();
5566b478
MS
7460
7461 case ARRAY_REF:
4393e105 7462 {
c2ea3a40
NS
7463 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7464 tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
4393e105
MM
7465 if (e1 == error_mark_node || e2 == error_mark_node)
7466 return error_mark_node;
7467
44de5aeb 7468 return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
4393e105 7469 }
5566b478 7470
fc378698 7471 case SCOPE_REF:
4393e105 7472 {
c2ea3a40 7473 tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
4393e105
MM
7474 tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7475 if (e1 == error_mark_node || e2 == error_mark_node)
7476 return error_mark_node;
7477
718b8ea5 7478 return build_nt (TREE_CODE (t), e1, e2);
4393e105 7479 }
fc378698 7480
b894fc05 7481 case TYPEOF_TYPE:
4393e105 7482 {
b830b74c 7483 tree type;
4393e105 7484
eb34af89
RK
7485 type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7486 complain, in_decl));
b830b74c 7487 return cp_build_qualified_type_real (type,
dce50630 7488 cp_type_quals (t)
b830b74c 7489 | cp_type_quals (type),
dce50630 7490 complain);
4393e105 7491 }
b894fc05 7492
8d08fdba 7493 default:
9e637a26 7494 sorry ("use of %qs in template",
8d08fdba
MS
7495 tree_code_name [(int) TREE_CODE (t)]);
7496 return error_mark_node;
7497 }
7498}
7499
ee76b931
MM
7500/* Like tsubst_expr for a BASELINK. OBJECT_TYPE, if non-NULL, is the
7501 type of the expression on the left-hand side of the "." or "->"
7502 operator. */
7503
7504static tree
7505tsubst_baselink (tree baselink, tree object_type,
7506 tree args, tsubst_flags_t complain, tree in_decl)
7507{
7508 tree name;
7509 tree qualifying_scope;
7510 tree fns;
7511 tree template_args = 0;
7512 bool template_id_p = false;
7513
7514 /* A baselink indicates a function from a base class. The
7515 BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7516 non-dependent types; otherwise, the lookup could not have
7517 succeeded. However, they may indicate bases of the template
c8094d83 7518 class, rather than the instantiated class.
ee76b931
MM
7519
7520 In addition, lookups that were not ambiguous before may be
04c06002 7521 ambiguous now. Therefore, we perform the lookup again. */
ee76b931
MM
7522 qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7523 fns = BASELINK_FUNCTIONS (baselink);
7524 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7525 {
7526 template_id_p = true;
7527 template_args = TREE_OPERAND (fns, 1);
7528 fns = TREE_OPERAND (fns, 0);
bf12d54d
NS
7529 if (template_args)
7530 template_args = tsubst_template_args (template_args, args,
7531 complain, in_decl);
ee76b931
MM
7532 }
7533 name = DECL_NAME (get_first_fn (fns));
7534 baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
c8094d83 7535
9b60dfd7
MM
7536 /* If lookup found a single function, mark it as used at this
7537 point. (If it lookup found multiple functions the one selected
7538 later by overload resolution will be marked as used at that
7539 point.) */
7540 if (BASELINK_P (baselink))
7541 fns = BASELINK_FUNCTIONS (baselink);
7542 if (!template_id_p && !really_overloaded_fn (fns))
7543 mark_used (OVL_CURRENT (fns));
7544
7545 /* Add back the template arguments, if present. */
ee76b931 7546 if (BASELINK_P (baselink) && template_id_p)
c8094d83 7547 BASELINK_FUNCTIONS (baselink)
ee76b931
MM
7548 = build_nt (TEMPLATE_ID_EXPR,
7549 BASELINK_FUNCTIONS (baselink),
7550 template_args);
9b60dfd7 7551
ee76b931
MM
7552 if (!object_type)
7553 object_type = current_class_type;
c8094d83 7554 return adjust_result_of_qualified_name_lookup (baselink,
ee76b931
MM
7555 qualifying_scope,
7556 object_type);
7557}
7558
7559/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID. DONE is
7560 true if the qualified-id will be a postfix-expression in-and-of
7561 itself; false if more of the postfix-expression follows the
7562 QUALIFIED_ID. ADDRESS_P is true if the qualified-id is the operand
7563 of "&". */
7564
7565static tree
c8094d83 7566tsubst_qualified_id (tree qualified_id, tree args,
ee76b931
MM
7567 tsubst_flags_t complain, tree in_decl,
7568 bool done, bool address_p)
7569{
7570 tree expr;
7571 tree scope;
7572 tree name;
7573 bool is_template;
7574 tree template_args;
7575
50bc768d 7576 gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
ee76b931 7577
ee76b931
MM
7578 /* Figure out what name to look up. */
7579 name = TREE_OPERAND (qualified_id, 1);
7580 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7581 {
7582 is_template = true;
bf12d54d
NS
7583 template_args = TREE_OPERAND (name, 1);
7584 if (template_args)
7585 template_args = tsubst_template_args (template_args, args,
7586 complain, in_decl);
ee76b931
MM
7587 name = TREE_OPERAND (name, 0);
7588 }
7589 else
7590 {
7591 is_template = false;
7592 template_args = NULL_TREE;
7593 }
7594
6eeba0cc
MM
7595 /* Substitute into the qualifying scope. When there are no ARGS, we
7596 are just trying to simplify a non-dependent expression. In that
7597 case the qualifying scope may be dependent, and, in any case,
7598 substituting will not help. */
7599 scope = TREE_OPERAND (qualified_id, 0);
7600 if (args)
7601 {
7602 scope = tsubst (scope, args, complain, in_decl);
7603 expr = tsubst_copy (name, args, complain, in_decl);
7604 }
7605 else
7606 expr = name;
10b1d5e7 7607
ab73670a
MM
7608 if (dependent_type_p (scope))
7609 return build_nt (SCOPE_REF, scope, expr);
c8094d83 7610
5e08432e 7611 if (!BASELINK_P (name) && !DECL_P (expr))
12483c9f
NS
7612 {
7613 expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7614 if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7615 ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7616 {
7617 if (complain & tf_error)
b2693faf 7618 {
0f51ccfc 7619 error ("dependent-name %qE is parsed as a non-type, but "
b2693faf 7620 "instantiation yields a type", qualified_id);
0f51ccfc 7621 inform ("say %<typename %E%> if a type is meant", qualified_id);
b2693faf 7622 }
12483c9f
NS
7623 return error_mark_node;
7624 }
7625 }
c8094d83 7626
279b8466 7627 if (DECL_P (expr))
8f78f01f
MM
7628 {
7629 check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7630 scope);
7631 /* Remember that there was a reference to this entity. */
7632 mark_used (expr);
7633 }
7634
7635 if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7636 {
7637 if (complain & tf_error)
c8094d83 7638 qualified_name_lookup_error (scope,
8f78f01f
MM
7639 TREE_OPERAND (qualified_id, 1),
7640 expr);
7641 return error_mark_node;
7642 }
ee76b931
MM
7643
7644 if (is_template)
10b1d5e7 7645 expr = lookup_template_function (expr, template_args);
ee76b931 7646
22038b2c 7647 if (expr == error_mark_node && complain & tf_error)
8f78f01f
MM
7648 qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7649 expr);
22038b2c 7650 else if (TYPE_P (scope))
ee76b931 7651 {
c8094d83 7652 expr = (adjust_result_of_qualified_name_lookup
ee76b931
MM
7653 (expr, scope, current_class_type));
7654 expr = finish_qualified_id_expr (scope, expr, done, address_p);
7655 }
c8094d83 7656
5aa56f9d 7657 expr = convert_from_reference (expr);
ee76b931
MM
7658
7659 return expr;
7660}
7661
00d3396f
JM
7662/* Like tsubst, but deals with expressions. This function just replaces
7663 template parms; to finish processing the resultant expression, use
7664 tsubst_expr. */
7665
14d22dd6 7666static tree
3a978d72 7667tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478
MS
7668{
7669 enum tree_code code;
8452b1d3 7670 tree r;
8d08fdba 7671
5566b478
MS
7672 if (t == NULL_TREE || t == error_mark_node)
7673 return t;
7674
7675 code = TREE_CODE (t);
b7484fbe 7676
5566b478
MS
7677 switch (code)
7678 {
7679 case PARM_DECL:
a723baf1 7680 r = retrieve_local_specialization (t);
50bc768d 7681 gcc_assert (r != NULL);
c0694c4b 7682 mark_used (r);
a723baf1 7683 return r;
5566b478
MS
7684
7685 case CONST_DECL:
ed44da02
MM
7686 {
7687 tree enum_type;
7688 tree v;
7689
a723baf1
MM
7690 if (DECL_TEMPLATE_PARM_P (t))
7691 return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7b6d72fc
MM
7692 /* There is no need to substitute into namespace-scope
7693 enumerators. */
7694 if (DECL_NAMESPACE_SCOPE_P (t))
ed44da02 7695 return t;
d5a10cf0
MM
7696 /* If ARGS is NULL, then T is known to be non-dependent. */
7697 if (args == NULL_TREE)
8a784e4a 7698 return integral_constant_value (t);
ed44da02
MM
7699
7700 /* Unfortunately, we cannot just call lookup_name here.
9188c363 7701 Consider:
c8094d83 7702
9188c363
MM
7703 template <int I> int f() {
7704 enum E { a = I };
7705 struct S { void g() { E e = a; } };
7706 };
c8094d83 7707
9188c363
MM
7708 When we instantiate f<7>::S::g(), say, lookup_name is not
7709 clever enough to find f<7>::a. */
c8094d83
MS
7710 enum_type
7711 = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
ed44da02
MM
7712 /*entering_scope=*/0);
7713
c8094d83
MS
7714 for (v = TYPE_VALUES (enum_type);
7715 v != NULL_TREE;
ed44da02
MM
7716 v = TREE_CHAIN (v))
7717 if (TREE_PURPOSE (v) == DECL_NAME (t))
7718 return TREE_VALUE (v);
7719
7720 /* We didn't find the name. That should never happen; if
7721 name-lookup found it during preliminary parsing, we
7722 should find it again here during instantiation. */
315fb5db 7723 gcc_unreachable ();
ed44da02 7724 }
db04386f 7725 return t;
ed44da02 7726
5566b478
MS
7727 case FIELD_DECL:
7728 if (DECL_CONTEXT (t))
7729 {
0978790f 7730 tree ctx;
0978790f 7731
4393e105 7732 ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
36a117a5 7733 /*entering_scope=*/1);
0978790f 7734 if (ctx != DECL_CONTEXT (t))
bad1f462
KL
7735 {
7736 tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
7737 if (!r)
7738 {
7739 if (complain & tf_error)
7740 error ("using invalid field %qD", t);
7741 return error_mark_node;
7742 }
7743 return r;
7744 }
5566b478 7745 }
c8094d83 7746
5566b478
MS
7747 return t;
7748
7749 case VAR_DECL:
7750 case FUNCTION_DECL:
a723baf1
MM
7751 if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7752 || local_variable_p (t))
4393e105 7753 t = tsubst (t, args, complain, in_decl);
5566b478
MS
7754 mark_used (t);
7755 return t;
7756
a723baf1 7757 case BASELINK:
ee76b931 7758 return tsubst_baselink (t, current_class_type, args, complain, in_decl);
a723baf1 7759
98c1c668 7760 case TEMPLATE_DECL:
a723baf1 7761 if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
c8094d83 7762 return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
a723baf1 7763 args, complain, in_decl);
c7222c02 7764 else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
4393e105 7765 return tsubst (t, args, complain, in_decl);
fcea7401
KL
7766 else if (DECL_CLASS_SCOPE_P (t)
7767 && uses_template_parms (DECL_CONTEXT (t)))
7768 {
7769 /* Template template argument like the following example need
7770 special treatment:
7771
7772 template <template <class> class TT> struct C {};
7773 template <class T> struct D {
7774 template <class U> struct E {};
0cbd7506 7775 C<E> c; // #1
fcea7401
KL
7776 };
7777 D<int> d; // #2
7778
7779 We are processing the template argument `E' in #1 for
7780 the template instantiation #2. Originally, `E' is a
7781 TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT. Now we
7782 have to substitute this with one having context `D<int>'. */
7783
7784 tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7785 return lookup_field (context, DECL_NAME(t), 0, false);
7786 }
98c1c668 7787 else
fcea7401 7788 /* Ordinary template template argument. */
98c1c668
JM
7789 return t;
7790
5566b478
MS
7791 case CAST_EXPR:
7792 case REINTERPRET_CAST_EXPR:
e92cc029
MS
7793 case CONST_CAST_EXPR:
7794 case STATIC_CAST_EXPR:
7795 case DYNAMIC_CAST_EXPR:
51924768 7796 case NOP_EXPR:
5566b478 7797 return build1
4393e105
MM
7798 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7799 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478
MS
7800
7801 case INDIRECT_REF:
5566b478
MS
7802 case NEGATE_EXPR:
7803 case TRUTH_NOT_EXPR:
b87692e5 7804 case BIT_NOT_EXPR:
5566b478 7805 case ADDR_EXPR:
392e3d51 7806 case UNARY_PLUS_EXPR: /* Unary + */
5566b478 7807 case SIZEOF_EXPR:
abff8e06 7808 case ALIGNOF_EXPR:
5566b478 7809 case ARROW_EXPR:
fc378698 7810 case THROW_EXPR:
5156628f 7811 case TYPEID_EXPR:
f5733617
SS
7812 case REALPART_EXPR:
7813 case IMAGPART_EXPR:
5566b478 7814 return build1
6a629cac 7815 (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
4393e105 7816 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
5566b478 7817
a723baf1
MM
7818 case COMPONENT_REF:
7819 {
7820 tree object;
7821 tree name;
7822
7823 object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7824 name = TREE_OPERAND (t, 1);
c8094d83 7825 if (TREE_CODE (name) == BIT_NOT_EXPR)
a723baf1
MM
7826 {
7827 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7828 complain, in_decl);
7829 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7830 }
7831 else if (TREE_CODE (name) == SCOPE_REF
7832 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7833 {
7834 tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7835 complain, in_decl);
7836 name = TREE_OPERAND (name, 1);
7837 name = tsubst_copy (TREE_OPERAND (name, 0), args,
7838 complain, in_decl);
7839 name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7840 name = build_nt (SCOPE_REF, base, name);
7841 }
ee76b931 7842 else if (TREE_CODE (name) == BASELINK)
c8094d83
MS
7843 name = tsubst_baselink (name,
7844 non_reference (TREE_TYPE (object)),
7845 args, complain,
ee76b931 7846 in_decl);
a723baf1 7847 else
ee76b931 7848 name = tsubst_copy (name, args, complain, in_decl);
44de5aeb 7849 return build_nt (COMPONENT_REF, object, name, NULL_TREE);
a723baf1
MM
7850 }
7851
5566b478
MS
7852 case PLUS_EXPR:
7853 case MINUS_EXPR:
7854 case MULT_EXPR:
7855 case TRUNC_DIV_EXPR:
7856 case CEIL_DIV_EXPR:
7857 case FLOOR_DIV_EXPR:
7858 case ROUND_DIV_EXPR:
7859 case EXACT_DIV_EXPR:
7860 case BIT_AND_EXPR:
5566b478
MS
7861 case BIT_IOR_EXPR:
7862 case BIT_XOR_EXPR:
7863 case TRUNC_MOD_EXPR:
7864 case FLOOR_MOD_EXPR:
7865 case TRUTH_ANDIF_EXPR:
7866 case TRUTH_ORIF_EXPR:
7867 case TRUTH_AND_EXPR:
7868 case TRUTH_OR_EXPR:
7869 case RSHIFT_EXPR:
7870 case LSHIFT_EXPR:
7871 case RROTATE_EXPR:
7872 case LROTATE_EXPR:
7873 case EQ_EXPR:
7874 case NE_EXPR:
7875 case MAX_EXPR:
7876 case MIN_EXPR:
7877 case LE_EXPR:
7878 case GE_EXPR:
7879 case LT_EXPR:
7880 case GT_EXPR:
5566b478
MS
7881 case COMPOUND_EXPR:
7882 case SCOPE_REF:
7883 case DOTSTAR_EXPR:
7884 case MEMBER_REF:
519c9806
MM
7885 case PREDECREMENT_EXPR:
7886 case PREINCREMENT_EXPR:
7887 case POSTDECREMENT_EXPR:
7888 case POSTINCREMENT_EXPR:
5566b478 7889 return build_nt
4393e105
MM
7890 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7891 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478 7892
d8987adb
NS
7893 case ARRAY_REF:
7894 return build_nt
7895 (ARRAY_REF,
7896 tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7897 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7898 NULL_TREE, NULL_TREE);
7899
5566b478 7900 case CALL_EXPR:
c8094d83 7901 return build_nt (code,
a723baf1
MM
7902 tsubst_copy (TREE_OPERAND (t, 0), args,
7903 complain, in_decl),
7904 tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7905 in_decl),
7906 NULL_TREE);
5566b478 7907
5566b478
MS
7908 case COND_EXPR:
7909 case MODOP_EXPR:
40242ccf 7910 case PSEUDO_DTOR_EXPR:
67da3287 7911 {
8452b1d3 7912 r = build_nt
4393e105
MM
7913 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7914 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7915 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
e4c2c34b 7916 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
67da3287
MM
7917 return r;
7918 }
5566b478
MS
7919
7920 case NEW_EXPR:
7921 {
8452b1d3 7922 r = build_nt
4393e105
MM
7923 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7924 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7925 tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
5566b478
MS
7926 NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7927 return r;
7928 }
7929
7930 case DELETE_EXPR:
7931 {
8452b1d3 7932 r = build_nt
4393e105
MM
7933 (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7934 tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
5566b478
MS
7935 DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7936 DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7937 return r;
7938 }
7939
386b8a85
JM
7940 case TEMPLATE_ID_EXPR:
7941 {
0cbd7506 7942 /* Substituted template arguments */
a91db711
NS
7943 tree fn = TREE_OPERAND (t, 0);
7944 tree targs = TREE_OPERAND (t, 1);
856216bb 7945
a91db711 7946 fn = tsubst_copy (fn, args, complain, in_decl);
bf12d54d
NS
7947 if (targs)
7948 targs = tsubst_template_args (targs, args, complain, in_decl);
c8094d83 7949
a91db711 7950 return lookup_template_function (fn, targs);
386b8a85
JM
7951 }
7952
5566b478
MS
7953 case TREE_LIST:
7954 {
7955 tree purpose, value, chain;
7956
7957 if (t == void_list_node)
7958 return t;
7959
7960 purpose = TREE_PURPOSE (t);
7961 if (purpose)
4393e105 7962 purpose = tsubst_copy (purpose, args, complain, in_decl);
5566b478
MS
7963 value = TREE_VALUE (t);
7964 if (value)
4393e105 7965 value = tsubst_copy (value, args, complain, in_decl);
5566b478
MS
7966 chain = TREE_CHAIN (t);
7967 if (chain && chain != void_type_node)
4393e105 7968 chain = tsubst_copy (chain, args, complain, in_decl);
5566b478
MS
7969 if (purpose == TREE_PURPOSE (t)
7970 && value == TREE_VALUE (t)
7971 && chain == TREE_CHAIN (t))
7972 return t;
7973 return tree_cons (purpose, value, chain);
7974 }
7975
7976 case RECORD_TYPE:
7977 case UNION_TYPE:
7978 case ENUMERAL_TYPE:
7979 case INTEGER_TYPE:
7980 case TEMPLATE_TYPE_PARM:
73b0fce8 7981 case TEMPLATE_TEMPLATE_PARM:
a1281f45 7982 case BOUND_TEMPLATE_TEMPLATE_PARM:
f84b4be9 7983 case TEMPLATE_PARM_INDEX:
5566b478
MS
7984 case POINTER_TYPE:
7985 case REFERENCE_TYPE:
7986 case OFFSET_TYPE:
7987 case FUNCTION_TYPE:
7988 case METHOD_TYPE:
7989 case ARRAY_TYPE:
7990 case TYPENAME_TYPE:
b8c6534b 7991 case UNBOUND_CLASS_TEMPLATE:
2a2b1d56 7992 case TYPEOF_TYPE:
f84b4be9 7993 case TYPE_DECL:
4393e105 7994 return tsubst (t, args, complain, in_decl);
5566b478 7995
e92cc029 7996 case IDENTIFIER_NODE:
421844e7 7997 if (IDENTIFIER_TYPENAME_P (t))
1f6e1acc
AS
7998 {
7999 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
1f84ec23 8000 return mangle_conv_op_name_for_type (new_type);
1f6e1acc 8001 }
e92cc029
MS
8002 else
8003 return t;
8004
5156628f 8005 case CONSTRUCTOR:
8452b1d3 8006 {
dcf92453 8007 r = build_constructor
c8094d83 8008 (tsubst (TREE_TYPE (t), args, complain, in_decl),
dcf92453 8009 tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
8452b1d3
JM
8010 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8011 return r;
8012 }
5156628f 8013
371534a9 8014 case VA_ARG_EXPR:
ea333e1c 8015 return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
c2ea3a40
NS
8016 in_decl),
8017 tsubst (TREE_TYPE (t), args, complain, in_decl));
f9817201 8018
543a0daa
RH
8019 case CLEANUP_POINT_EXPR:
8020 /* We shouldn't have built any of these during initial template
8021 generation. Instead, they should be built during instantiation
8022 in response to the saved STMT_IS_FULL_EXPR_P setting. */
315fb5db 8023 gcc_unreachable ();
543a0daa 8024
5566b478
MS
8025 default:
8026 return t;
8027 }
8028}
8029
cc23546e
JO
8030/* Like tsubst_copy for expressions, etc. but also does semantic
8031 processing. */
00d3396f 8032
14d22dd6 8033static tree
3a978d72 8034tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5566b478 8035{
fd10dd09 8036 tree stmt, tmp;
558475f0 8037
5566b478
MS
8038 if (t == NULL_TREE || t == error_mark_node)
8039 return t;
8040
93409b8c
PB
8041 if (EXPR_HAS_LOCATION (t))
8042 input_location = EXPR_LOCATION (t);
7c34ced1
RH
8043 if (STATEMENT_CODE_P (TREE_CODE (t)))
8044 current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
8045
5566b478 8046 switch (TREE_CODE (t))
8d08fdba 8047 {
325c3691
RH
8048 case STATEMENT_LIST:
8049 {
8050 tree_stmt_iterator i;
8051 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
8052 tsubst_expr (tsi_stmt (i), args, complain, in_decl);
8053 break;
8054 }
8055
558475f0 8056 case CTOR_INITIALIZER:
c8094d83 8057 finish_mem_initializers (tsubst_initializer_list
2282d28d
MM
8058 (TREE_OPERAND (t, 0), args));
8059 break;
558475f0 8060
5088b058
RH
8061 case RETURN_EXPR:
8062 finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
4393e105 8063 args, complain, in_decl));
5566b478
MS
8064 break;
8065
8066 case EXPR_STMT:
7c34ced1
RH
8067 tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
8068 if (EXPR_STMT_STMT_EXPR_RESULT (t))
8069 finish_stmt_expr_expr (tmp, cur_stmt_expr);
8070 else
8071 finish_expr_stmt (tmp);
8072 break;
5566b478 8073
9da99f7d 8074 case USING_STMT:
9da99f7d
NS
8075 do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
8076 args, complain, in_decl));
8077 break;
c8094d83 8078
350fae66 8079 case DECL_EXPR:
5566b478 8080 {
e0942dcd
MM
8081 tree decl;
8082 tree init;
5566b478 8083
350fae66 8084 decl = DECL_EXPR_DECL (t);
acef433b
MM
8085 if (TREE_CODE (decl) == LABEL_DECL)
8086 finish_label_decl (DECL_NAME (decl));
fbfe8c9e
NS
8087 else if (TREE_CODE (decl) == USING_DECL)
8088 {
98ed9dae 8089 tree scope = USING_DECL_SCOPE (decl);
fbfe8c9e 8090 tree name = DECL_NAME (decl);
22038b2c 8091 tree decl;
c8094d83 8092
fbfe8c9e 8093 scope = tsubst_expr (scope, args, complain, in_decl);
22038b2c 8094 decl = lookup_qualified_name (scope, name,
12483c9f
NS
8095 /*is_type_p=*/false,
8096 /*complain=*/false);
8f78f01f
MM
8097 if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
8098 qualified_name_lookup_error (scope, name, decl);
22038b2c 8099 else
ed5f054f 8100 do_local_using_decl (decl, scope, name);
fbfe8c9e 8101 }
acef433b
MM
8102 else
8103 {
8104 init = DECL_INITIAL (decl);
8105 decl = tsubst (decl, args, complain, in_decl);
ce2e5191
NS
8106 if (decl != error_mark_node)
8107 {
0cbd7506
MS
8108 if (init)
8109 DECL_INITIAL (decl) = error_mark_node;
8110 /* By marking the declaration as instantiated, we avoid
8111 trying to instantiate it. Since instantiate_decl can't
8112 handle local variables, and since we've already done
8113 all that needs to be done, that's the right thing to
8114 do. */
8115 if (TREE_CODE (decl) == VAR_DECL)
8116 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
edebf865
MM
8117 if (TREE_CODE (decl) == VAR_DECL
8118 && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8119 /* Anonymous aggregates are a special case. */
8120 finish_anon_union (decl);
c8094d83 8121 else
ed2fa432 8122 {
edebf865 8123 maybe_push_decl (decl);
39703eb9
MM
8124 if (TREE_CODE (decl) == VAR_DECL
8125 && DECL_PRETTY_FUNCTION_P (decl))
edebf865
MM
8126 {
8127 /* For __PRETTY_FUNCTION__ we have to adjust the
8128 initializer. */
8129 const char *const name
8130 = cxx_printable_name (current_function_decl, 2);
bb885938 8131 init = cp_fname_init (name, &TREE_TYPE (decl));
edebf865
MM
8132 }
8133 else
8134 init = tsubst_expr (init, args, complain, in_decl);
8135 cp_finish_decl (decl, init, NULL_TREE, 0);
ed2fa432 8136 }
ce2e5191 8137 }
acef433b 8138 }
fd10dd09 8139
350fae66 8140 /* A DECL_EXPR can also be used as an expression, in the condition
325c3691
RH
8141 clause of an if/for/while construct. */
8142 return decl;
5566b478 8143 }
8d08fdba 8144
5566b478 8145 case FOR_STMT:
7c34ced1
RH
8146 stmt = begin_for_stmt ();
8147 tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8148 finish_for_init_stmt (stmt);
8149 tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8150 finish_for_cond (tmp, stmt);
8151 tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8152 finish_for_expr (tmp, stmt);
8153 tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8154 finish_for_stmt (stmt);
5566b478 8155 break;
8d08fdba 8156
5566b478 8157 case WHILE_STMT:
7c34ced1
RH
8158 stmt = begin_while_stmt ();
8159 tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8160 finish_while_stmt_cond (tmp, stmt);
8161 tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8162 finish_while_stmt (stmt);
5566b478 8163 break;
8d08fdba 8164
5566b478 8165 case DO_STMT:
7c34ced1
RH
8166 stmt = begin_do_stmt ();
8167 tsubst_expr (DO_BODY (t), args, complain, in_decl);
8168 finish_do_body (stmt);
8169 tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8170 finish_do_stmt (tmp, stmt);
5566b478 8171 break;
a0a33927 8172
5566b478 8173 case IF_STMT:
7c34ced1
RH
8174 stmt = begin_if_stmt ();
8175 tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8176 finish_if_stmt_cond (tmp, stmt);
8177 tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8178 finish_then_clause (stmt);
8d08fdba 8179
7c34ced1
RH
8180 if (ELSE_CLAUSE (t))
8181 {
8182 begin_else_clause (stmt);
8183 tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8184 finish_else_clause (stmt);
8185 }
8186
8187 finish_if_stmt (stmt);
5566b478 8188 break;
8d08fdba 8189
5882f0f3 8190 case BIND_EXPR:
7c34ced1
RH
8191 if (BIND_EXPR_BODY_BLOCK (t))
8192 stmt = begin_function_body ();
8193 else
8194 stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8195 ? BCS_TRY_BLOCK : 0);
ade3dc07 8196
7c34ced1 8197 tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
ade3dc07 8198
7c34ced1
RH
8199 if (BIND_EXPR_BODY_BLOCK (t))
8200 finish_function_body (stmt);
8201 else
8202 finish_compound_stmt (stmt);
5566b478 8203 break;
8d08fdba 8204
5566b478 8205 case BREAK_STMT:
ad321293 8206 finish_break_stmt ();
5566b478 8207 break;
8d08fdba 8208
6467930b 8209 case CONTINUE_STMT:
ad321293 8210 finish_continue_stmt ();
6467930b
MS
8211 break;
8212
5566b478 8213 case SWITCH_STMT:
7c34ced1 8214 stmt = begin_switch_stmt ();
ebaae582 8215 tmp = tsubst_expr (SWITCH_STMT_COND (t), args, complain, in_decl);
7c34ced1 8216 finish_switch_cond (tmp, stmt);
ebaae582 8217 tsubst_expr (SWITCH_STMT_BODY (t), args, complain, in_decl);
7c34ced1 8218 finish_switch_stmt (stmt);
5566b478
MS
8219 break;
8220
8c161995 8221 case CASE_LABEL_EXPR:
4393e105 8222 finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
56cb9733
MM
8223 tsubst_expr (CASE_HIGH (t), args, complain,
8224 in_decl));
5566b478
MS
8225 break;
8226
9e14e18f 8227 case LABEL_EXPR:
9e14e18f 8228 finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
5566b478
MS
8229 break;
8230
9e14e18f 8231 case GOTO_EXPR:
fd10dd09
JM
8232 tmp = GOTO_DESTINATION (t);
8233 if (TREE_CODE (tmp) != LABEL_DECL)
aa09da44
MM
8234 /* Computed goto's must be tsubst'd into. On the other hand,
8235 non-computed gotos must not be; the identifier in question
8236 will have no binding. */
fd10dd09 8237 tmp = tsubst_expr (tmp, args, complain, in_decl);
3fa56191 8238 else
fd10dd09
JM
8239 tmp = DECL_NAME (tmp);
8240 finish_goto_stmt (tmp);
ad321293
MM
8241 break;
8242
e130a54b 8243 case ASM_EXPR:
c87978aa 8244 tmp = finish_asm_stmt
6de9cd9a 8245 (ASM_VOLATILE_P (t),
c87978aa
JM
8246 tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8247 tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
c8094d83 8248 tsubst_expr (ASM_INPUTS (t), args, complain, in_decl),
c87978aa 8249 tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
131263fa
AP
8250 {
8251 tree asm_expr = tmp;
8252 if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8253 asm_expr = TREE_OPERAND (asm_expr, 0);
8254 ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8255 }
5566b478 8256 break;
faf5394a
MS
8257
8258 case TRY_BLOCK:
f1dedc31 8259 if (CLEANUP_P (t))
62409b39 8260 {
57b52417 8261 stmt = begin_try_block ();
62409b39
MM
8262 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8263 finish_cleanup_try_block (stmt);
8264 finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8265 complain, in_decl),
8266 stmt);
8267 }
f1dedc31
MM
8268 else
8269 {
62409b39
MM
8270 if (FN_TRY_BLOCK_P (t))
8271 stmt = begin_function_try_block ();
8272 else
8273 stmt = begin_try_block ();
8274
8275 tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8276
8277 if (FN_TRY_BLOCK_P (t))
8278 finish_function_try_block (stmt);
8279 else
8280 finish_try_block (stmt);
8281
fd10dd09 8282 tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
84df082b
MM
8283 if (FN_TRY_BLOCK_P (t))
8284 finish_function_handler_sequence (stmt);
8285 else
8286 finish_handler_sequence (stmt);
f1dedc31 8287 }
faf5394a 8288 break;
c8094d83 8289
faf5394a 8290 case HANDLER:
b35d4555
MM
8291 {
8292 tree decl;
b35d4555 8293
b35d4555
MM
8294 stmt = begin_handler ();
8295 if (HANDLER_PARMS (t))
8296 {
325c3691 8297 decl = HANDLER_PARMS (t);
b35d4555 8298 decl = tsubst (decl, args, complain, in_decl);
f8191e64
MM
8299 /* Prevent instantiate_decl from trying to instantiate
8300 this variable. We've already done all that needs to be
8301 done. */
8302 DECL_TEMPLATE_INSTANTIATED (decl) = 1;
b35d4555
MM
8303 }
8304 else
8305 decl = NULL_TREE;
1a6025b4 8306 finish_handler_parms (decl, stmt);
b35d4555 8307 tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
1a6025b4 8308 finish_handler (stmt);
b35d4555 8309 }
faf5394a
MS
8310 break;
8311
b87692e5 8312 case TAG_DEFN:
fd10dd09 8313 tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
b87692e5
MS
8314 break;
8315
5566b478 8316 default:
315fb5db 8317 gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
c8094d83 8318
315fb5db
NS
8319 return tsubst_copy_and_build (t, args, complain, in_decl,
8320 /*function_p=*/false);
5566b478 8321 }
fd10dd09 8322
325c3691 8323 return NULL_TREE;
8d08fdba
MS
8324}
8325
b3445994
MM
8326/* T is a postfix-expression that is not being used in a function
8327 call. Return the substituted version of T. */
8328
8329static tree
c8094d83 8330tsubst_non_call_postfix_expression (tree t, tree args,
b3445994
MM
8331 tsubst_flags_t complain,
8332 tree in_decl)
8333{
8334 if (TREE_CODE (t) == SCOPE_REF)
8335 t = tsubst_qualified_id (t, args, complain, in_decl,
8336 /*done=*/false, /*address_p=*/false);
8337 else
8338 t = tsubst_copy_and_build (t, args, complain, in_decl,
8339 /*function_p=*/false);
8340
8341 return t;
8342}
8343
cc23546e 8344/* Like tsubst but deals with expressions and performs semantic
b3445994 8345 analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
cc23546e 8346
ee76b931 8347tree
c8094d83 8348tsubst_copy_and_build (tree t,
0cbd7506
MS
8349 tree args,
8350 tsubst_flags_t complain,
8351 tree in_decl,
b3445994 8352 bool function_p)
cc23546e 8353{
b3445994
MM
8354#define RECUR(NODE) \
8355 tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8356
ee76b931
MM
8357 tree op1;
8358
cc23546e
JO
8359 if (t == NULL_TREE || t == error_mark_node)
8360 return t;
8361
8362 switch (TREE_CODE (t))
8363 {
399dedb9
NS
8364 case USING_DECL:
8365 t = DECL_NAME (t);
852dcbdd 8366 /* Fall through. */
b3445994 8367 case IDENTIFIER_NODE:
cc23546e 8368 {
b3445994 8369 tree decl;
b3445994
MM
8370 cp_id_kind idk;
8371 tree qualifying_class;
67c03833 8372 bool non_integral_constant_expression_p;
b3445994
MM
8373 const char *error_msg;
8374
b3445994 8375 if (IDENTIFIER_TYPENAME_P (t))
cc23546e 8376 {
b3445994
MM
8377 tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8378 t = mangle_conv_op_name_for_type (new_type);
cc23546e 8379 }
b3445994
MM
8380
8381 /* Look up the name. */
10b1d5e7 8382 decl = lookup_name (t, 0);
b3445994
MM
8383
8384 /* By convention, expressions use ERROR_MARK_NODE to indicate
8385 failure, not NULL_TREE. */
8386 if (decl == NULL_TREE)
8387 decl = error_mark_node;
8388
10b1d5e7 8389 decl = finish_id_expression (t, decl, NULL_TREE,
b3445994
MM
8390 &idk,
8391 &qualifying_class,
67c03833
JM
8392 /*integral_constant_expression_p=*/false,
8393 /*allow_non_integral_constant_expression_p=*/false,
8394 &non_integral_constant_expression_p,
b3445994
MM
8395 &error_msg);
8396 if (error_msg)
8397 error (error_msg);
8398 if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8399 decl = unqualified_name_lookup_error (decl);
8400 return decl;
cc23546e
JO
8401 }
8402
8403 case TEMPLATE_ID_EXPR:
8404 {
8405 tree object;
b3445994 8406 tree template = RECUR (TREE_OPERAND (t, 0));
bf12d54d
NS
8407 tree targs = TREE_OPERAND (t, 1);
8408
8409 if (targs)
8410 targs = tsubst_template_args (targs, args, complain, in_decl);
c8094d83 8411
cc23546e
JO
8412 if (TREE_CODE (template) == COMPONENT_REF)
8413 {
8414 object = TREE_OPERAND (template, 0);
8415 template = TREE_OPERAND (template, 1);
8416 }
8417 else
8418 object = NULL_TREE;
bd83b409 8419 template = lookup_template_function (template, targs);
c8094d83 8420
cc23546e 8421 if (object)
c8094d83 8422 return build3 (COMPONENT_REF, TREE_TYPE (template),
f293ce4b 8423 object, template, NULL_TREE);
cc23546e
JO
8424 else
8425 return template;
8426 }
8427
8428 case INDIRECT_REF:
db24eb1f
NS
8429 {
8430 tree r = RECUR (TREE_OPERAND (t, 0));
8431
8432 if (REFERENCE_REF_P (t))
8433 {
e8c66fe0
NS
8434 /* A type conversion to reference type will be enclosed in
8435 such an indirect ref, but the substitution of the cast
8436 will have also added such an indirect ref. */
8437 if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
8438 r = convert_from_reference (r);
db24eb1f
NS
8439 }
8440 else
8441 r = build_x_indirect_ref (r, "unary *");
8442 return r;
8443 }
cc23546e 8444
0da99d4e
GB
8445 case NOP_EXPR:
8446 return build_nop
8447 (tsubst (TREE_TYPE (t), args, complain, in_decl),
8448 RECUR (TREE_OPERAND (t, 0)));
8449
cc23546e
JO
8450 case CAST_EXPR:
8451 return build_functional_cast
8452 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8453 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8454
8455 case REINTERPRET_CAST_EXPR:
8456 return build_reinterpret_cast
8457 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8458 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8459
8460 case CONST_CAST_EXPR:
8461 return build_const_cast
8462 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8463 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8464
8465 case DYNAMIC_CAST_EXPR:
8466 return build_dynamic_cast
8467 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8468 RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8469
8470 case STATIC_CAST_EXPR:
8471 return build_static_cast
8472 (tsubst (TREE_TYPE (t), args, complain, in_decl),
b3445994 8473 RECUR (TREE_OPERAND (t, 0)));
cc23546e 8474
cc23546e
JO
8475 case POSTDECREMENT_EXPR:
8476 case POSTINCREMENT_EXPR:
b3445994
MM
8477 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8478 args, complain, in_decl);
ee76b931
MM
8479 return build_x_unary_op (TREE_CODE (t), op1);
8480
8481 case PREDECREMENT_EXPR:
8482 case PREINCREMENT_EXPR:
cc23546e
JO
8483 case NEGATE_EXPR:
8484 case BIT_NOT_EXPR:
cc23546e 8485 case ABS_EXPR:
d17811fd 8486 case TRUTH_NOT_EXPR:
392e3d51 8487 case UNARY_PLUS_EXPR: /* Unary + */
d17811fd
MM
8488 case REALPART_EXPR:
8489 case IMAGPART_EXPR:
b3445994 8490 return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
cc23546e 8491
cc23546e 8492 case ADDR_EXPR:
ee76b931
MM
8493 op1 = TREE_OPERAND (t, 0);
8494 if (TREE_CODE (op1) == SCOPE_REF)
c8094d83 8495 op1 = tsubst_qualified_id (op1, args, complain, in_decl,
ee76b931
MM
8496 /*done=*/true, /*address_p=*/true);
8497 else
c8094d83 8498 op1 = tsubst_non_call_postfix_expression (op1, args, complain,
b3445994 8499 in_decl);
fc2b8477
MM
8500 if (TREE_CODE (op1) == LABEL_DECL)
8501 return finish_label_address_expr (DECL_NAME (op1));
ee76b931
MM
8502 return build_x_unary_op (ADDR_EXPR, op1);
8503
cc23546e
JO
8504 case PLUS_EXPR:
8505 case MINUS_EXPR:
8506 case MULT_EXPR:
8507 case TRUNC_DIV_EXPR:
8508 case CEIL_DIV_EXPR:
8509 case FLOOR_DIV_EXPR:
8510 case ROUND_DIV_EXPR:
8511 case EXACT_DIV_EXPR:
8512 case BIT_AND_EXPR:
cc23546e
JO
8513 case BIT_IOR_EXPR:
8514 case BIT_XOR_EXPR:
8515 case TRUNC_MOD_EXPR:
8516 case FLOOR_MOD_EXPR:
8517 case TRUTH_ANDIF_EXPR:
8518 case TRUTH_ORIF_EXPR:
8519 case TRUTH_AND_EXPR:
8520 case TRUTH_OR_EXPR:
8521 case RSHIFT_EXPR:
8522 case LSHIFT_EXPR:
8523 case RROTATE_EXPR:
8524 case LROTATE_EXPR:
8525 case EQ_EXPR:
8526 case NE_EXPR:
8527 case MAX_EXPR:
8528 case MIN_EXPR:
8529 case LE_EXPR:
8530 case GE_EXPR:
8531 case LT_EXPR:
8532 case GT_EXPR:
8533 case MEMBER_REF:
b3445994 8534 case DOTSTAR_EXPR:
cc23546e 8535 return build_x_binary_op
c8094d83 8536 (TREE_CODE (t),
b3445994 8537 RECUR (TREE_OPERAND (t, 0)),
ec835fb2
MM
8538 RECUR (TREE_OPERAND (t, 1)),
8539 /*overloaded_p=*/NULL);
cc23546e
JO
8540
8541 case SCOPE_REF:
ee76b931
MM
8542 return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8543 /*address_p=*/false);
cc23546e 8544 case ARRAY_REF:
b3445994
MM
8545 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8546 args, complain, in_decl);
d8987adb
NS
8547 return build_x_binary_op (ARRAY_REF, op1, RECUR (TREE_OPERAND (t, 1)),
8548 /*overloaded_p=*/NULL);
c8094d83 8549
cc23546e
JO
8550 case SIZEOF_EXPR:
8551 case ALIGNOF_EXPR:
d17811fd
MM
8552 op1 = TREE_OPERAND (t, 0);
8553 if (!args)
8554 {
8555 /* When there are no ARGS, we are trying to evaluate a
8556 non-dependent expression from the parser. Trying to do
8557 the substitutions may not work. */
8558 if (!TYPE_P (op1))
8559 op1 = TREE_TYPE (op1);
8560 }
8561 else
8562 {
8563 ++skip_evaluation;
b3445994 8564 op1 = RECUR (op1);
d17811fd
MM
8565 --skip_evaluation;
8566 }
7a18b933
NS
8567 if (TYPE_P (op1))
8568 return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
d17811fd 8569 else
7a18b933 8570 return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
cc23546e
JO
8571
8572 case MODOP_EXPR:
e4c2c34b
JM
8573 {
8574 tree r = build_x_modify_expr
8575 (RECUR (TREE_OPERAND (t, 0)),
8576 TREE_CODE (TREE_OPERAND (t, 1)),
8577 RECUR (TREE_OPERAND (t, 2)));
bcf9a914
JM
8578 /* TREE_NO_WARNING must be set if either the expression was
8579 parenthesized or it uses an operator such as >>= rather
8580 than plain assignment. In the former case, it was already
8581 set and must be copied. In the latter case,
8582 build_x_modify_expr sets it and it must not be reset
8583 here. */
8584 if (TREE_NO_WARNING (t))
8585 TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
e4c2c34b
JM
8586 return r;
8587 }
cc23546e
JO
8588
8589 case ARROW_EXPR:
b3445994
MM
8590 op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8591 args, complain, in_decl);
ee76b931
MM
8592 /* Remember that there was a reference to this entity. */
8593 if (DECL_P (op1))
8594 mark_used (op1);
8595 return build_x_arrow (op1);
cc23546e
JO
8596
8597 case NEW_EXPR:
8598 return build_new
b3445994
MM
8599 (RECUR (TREE_OPERAND (t, 0)),
8600 RECUR (TREE_OPERAND (t, 1)),
8601 RECUR (TREE_OPERAND (t, 2)),
058b15c1 8602 RECUR (TREE_OPERAND (t, 3)),
cc23546e
JO
8603 NEW_EXPR_USE_GLOBAL (t));
8604
8605 case DELETE_EXPR:
8606 return delete_sanity
b3445994
MM
8607 (RECUR (TREE_OPERAND (t, 0)),
8608 RECUR (TREE_OPERAND (t, 1)),
cc23546e
JO
8609 DELETE_EXPR_USE_VEC (t),
8610 DELETE_EXPR_USE_GLOBAL (t));
8611
8612 case COMPOUND_EXPR:
b3445994
MM
8613 return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8614 RECUR (TREE_OPERAND (t, 1)));
cc23546e 8615
ee76b931 8616 case CALL_EXPR:
cc23546e 8617 {
ee76b931
MM
8618 tree function;
8619 tree call_args;
ee76b931 8620 bool qualified_p;
ee935db4 8621 bool koenig_p;
ee76b931
MM
8622
8623 function = TREE_OPERAND (t, 0);
6d80c4b9
MM
8624 /* When we parsed the expression, we determined whether or
8625 not Koenig lookup should be performed. */
8626 koenig_p = KOENIG_LOOKUP_P (t);
ee76b931 8627 if (TREE_CODE (function) == SCOPE_REF)
cc23546e 8628 {
ee76b931
MM
8629 qualified_p = true;
8630 function = tsubst_qualified_id (function, args, complain, in_decl,
c8094d83 8631 /*done=*/false,
ee76b931 8632 /*address_p=*/false);
cc23546e 8633 }
ee76b931 8634 else
cc23546e 8635 {
ee76b931
MM
8636 qualified_p = (TREE_CODE (function) == COMPONENT_REF
8637 && (TREE_CODE (TREE_OPERAND (function, 1))
8638 == SCOPE_REF));
c8094d83 8639 function = tsubst_copy_and_build (function, args, complain,
b3445994
MM
8640 in_decl,
8641 !qualified_p);
6d80c4b9
MM
8642 if (BASELINK_P (function))
8643 qualified_p = true;
cc23546e 8644 }
cc23546e 8645
b3445994 8646 call_args = RECUR (TREE_OPERAND (t, 1));
676e33ca
MM
8647
8648 /* We do not perform argument-dependent lookup if normal
8649 lookup finds a non-function, in accordance with the
8650 expected resolution of DR 218. */
ee935db4 8651 if (koenig_p
44370687
MM
8652 && ((is_overloaded_fn (function)
8653 /* If lookup found a member function, the Koenig lookup is
8654 not appropriate, even if an unqualified-name was used
8655 to denote the function. */
8656 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
b3445994 8657 || TREE_CODE (function) == IDENTIFIER_NODE))
6d80c4b9
MM
8658 function = perform_koenig_lookup (function, call_args);
8659
8660 if (TREE_CODE (function) == IDENTIFIER_NODE)
b3445994 8661 {
6d80c4b9
MM
8662 unqualified_name_lookup_error (function);
8663 return error_mark_node;
b3445994
MM
8664 }
8665
8666 /* Remember that there was a reference to this entity. */
8667 if (DECL_P (function))
8668 mark_used (function);
8669
d17811fd
MM
8670 if (TREE_CODE (function) == OFFSET_REF)
8671 return build_offset_ref_call_from_tree (function, call_args);
8672 if (TREE_CODE (function) == COMPONENT_REF)
9f880ef9
MM
8673 {
8674 if (!BASELINK_P (TREE_OPERAND (function, 1)))
8675 return finish_call_expr (function, call_args,
8676 /*disallow_virtual=*/false,
8677 /*koenig_p=*/false);
8678 else
c8094d83 8679 return (build_new_method_call
9f880ef9
MM
8680 (TREE_OPERAND (function, 0),
8681 TREE_OPERAND (function, 1),
c8094d83 8682 call_args, NULL_TREE,
9f880ef9
MM
8683 qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8684 }
c8094d83 8685 return finish_call_expr (function, call_args,
6d80c4b9
MM
8686 /*disallow_virtual=*/qualified_p,
8687 koenig_p);
cc23546e
JO
8688 }
8689
8690 case COND_EXPR:
8691 return build_x_conditional_expr
b3445994
MM
8692 (RECUR (TREE_OPERAND (t, 0)),
8693 RECUR (TREE_OPERAND (t, 1)),
8694 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8695
8696 case PSEUDO_DTOR_EXPR:
c8094d83 8697 return finish_pseudo_destructor_expr
b3445994
MM
8698 (RECUR (TREE_OPERAND (t, 0)),
8699 RECUR (TREE_OPERAND (t, 1)),
8700 RECUR (TREE_OPERAND (t, 2)));
cc23546e
JO
8701
8702 case TREE_LIST:
8703 {
8704 tree purpose, value, chain;
8705
8706 if (t == void_list_node)
8707 return t;
8708
8709 purpose = TREE_PURPOSE (t);
8710 if (purpose)
b3445994 8711 purpose = RECUR (purpose);
cc23546e
JO
8712 value = TREE_VALUE (t);
8713 if (value)
b3445994 8714 value = RECUR (value);
cc23546e
JO
8715 chain = TREE_CHAIN (t);
8716 if (chain && chain != void_type_node)
b3445994 8717 chain = RECUR (chain);
cc23546e
JO
8718 if (purpose == TREE_PURPOSE (t)
8719 && value == TREE_VALUE (t)
8720 && chain == TREE_CHAIN (t))
8721 return t;
8722 return tree_cons (purpose, value, chain);
8723 }
8724
8725 case COMPONENT_REF:
8726 {
ee76b931
MM
8727 tree object;
8728 tree member;
8729
b3445994
MM
8730 object = 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 (object))
8734 mark_used (object);
8735
8736 member = TREE_OPERAND (t, 1);
8737 if (BASELINK_P (member))
c8094d83 8738 member = tsubst_baselink (member,
ee76b931
MM
8739 non_reference (TREE_TYPE (object)),
8740 args, complain, in_decl);
8741 else
8742 member = tsubst_copy (member, args, complain, in_decl);
cc23546e 8743
bad1f462
KL
8744 if (member == error_mark_node)
8745 return error_mark_node;
8746 else if (!CLASS_TYPE_P (TREE_TYPE (object)))
cc23546e
JO
8747 {
8748 if (TREE_CODE (member) == BIT_NOT_EXPR)
c8094d83 8749 return finish_pseudo_destructor_expr (object,
cc23546e
JO
8750 NULL_TREE,
8751 TREE_TYPE (object));
8752 else if (TREE_CODE (member) == SCOPE_REF
8753 && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
c8094d83 8754 return finish_pseudo_destructor_expr (object,
cc23546e
JO
8755 object,
8756 TREE_TYPE (object));
8757 }
8758 else if (TREE_CODE (member) == SCOPE_REF
8759 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8760 {
8761 tree tmpl;
8762 tree args;
c8094d83 8763
cc23546e
JO
8764 /* Lookup the template functions now that we know what the
8765 scope is. */
8766 tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8767 args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
c8094d83 8768 member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
12483c9f
NS
8769 /*is_type_p=*/false,
8770 /*complain=*/false);
cc23546e 8771 if (BASELINK_P (member))
44370687 8772 {
c8094d83 8773 BASELINK_FUNCTIONS (member)
44370687
MM
8774 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8775 args);
c8094d83
MS
8776 member = (adjust_result_of_qualified_name_lookup
8777 (member, BINFO_TYPE (BASELINK_BINFO (member)),
44370687
MM
8778 TREE_TYPE (object)));
8779 }
cc23546e
JO
8780 else
8781 {
8f78f01f
MM
8782 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8783 member);
cc23546e
JO
8784 return error_mark_node;
8785 }
8786 }
2436b51f
MM
8787 else if (TREE_CODE (member) == SCOPE_REF
8788 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8789 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8790 {
8791 if (complain & tf_error)
8792 {
8793 if (TYPE_P (TREE_OPERAND (member, 0)))
c8094d83 8794 error ("%qT is not a class or namespace",
2436b51f
MM
8795 TREE_OPERAND (member, 0));
8796 else
c8094d83 8797 error ("%qD is not a class or namespace",
2436b51f
MM
8798 TREE_OPERAND (member, 0));
8799 }
8800 return error_mark_node;
8801 }
a3f10e50
NS
8802 else if (TREE_CODE (member) == FIELD_DECL)
8803 return finish_non_static_data_member (member, object, NULL_TREE);
cc23546e
JO
8804
8805 return finish_class_member_access_expr (object, member);
8806 }
8807
8808 case THROW_EXPR:
8809 return build_throw
b3445994 8810 (RECUR (TREE_OPERAND (t, 0)));
cc23546e
JO
8811
8812 case CONSTRUCTOR:
8813 {
8814 tree r;
8815 tree elts;
8816 tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8817 bool purpose_p;
8818
8819 /* digest_init will do the wrong thing if we let it. */
8820 if (type && TYPE_PTRMEMFUNC_P (type))
8821 return t;
8822
8823 r = NULL_TREE;
8824 /* We do not want to process the purpose of aggregate
8825 initializers as they are identifier nodes which will be
8826 looked up by digest_init. */
8827 purpose_p = !(type && IS_AGGR_TYPE (type));
db77ef4c 8828 for (elts = CONSTRUCTOR_ELTS (t);
cc23546e
JO
8829 elts;
8830 elts = TREE_CHAIN (elts))
8831 {
8832 tree purpose = TREE_PURPOSE (elts);
8833 tree value = TREE_VALUE (elts);
c8094d83 8834
cc23546e 8835 if (purpose && purpose_p)
b3445994
MM
8836 purpose = RECUR (purpose);
8837 value = RECUR (value);
cc23546e
JO
8838 r = tree_cons (purpose, value, r);
8839 }
c8094d83 8840
dcf92453 8841 r = build_constructor (NULL_TREE, nreverse (r));
cc23546e
JO
8842 TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8843
8844 if (type)
8845 return digest_init (type, r, 0);
8846 return r;
8847 }
8848
8849 case TYPEID_EXPR:
8850 {
b3445994 8851 tree operand_0 = RECUR (TREE_OPERAND (t, 0));
cc23546e
JO
8852 if (TYPE_P (operand_0))
8853 return get_typeid (operand_0);
8854 return build_typeid (operand_0);
8855 }
8856
cc23546e 8857 case VAR_DECL:
db24eb1f
NS
8858 if (!args)
8859 return t;
8860 /* Fall through */
c8094d83 8861
db24eb1f
NS
8862 case PARM_DECL:
8863 {
8864 tree r = tsubst_copy (t, args, complain, in_decl);
c8094d83 8865
db24eb1f
NS
8866 if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
8867 /* If the original type was a reference, we'll be wrapped in
8868 the appropriate INDIRECT_REF. */
8869 r = convert_from_reference (r);
8870 return r;
8871 }
cc23546e
JO
8872
8873 case VA_ARG_EXPR:
b3445994 8874 return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
c8094d83 8875 tsubst_copy (TREE_TYPE (t), args, complain,
b3445994 8876 in_decl));
cc23546e 8877
4bceb077
RH
8878 case OFFSETOF_EXPR:
8879 return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8880
0fe0caa6
RH
8881 case STMT_EXPR:
8882 {
8883 tree old_stmt_expr = cur_stmt_expr;
8884 tree stmt_expr = begin_stmt_expr ();
8885
8886 cur_stmt_expr = stmt_expr;
8887 tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8888 stmt_expr = finish_stmt_expr (stmt_expr, false);
8889 cur_stmt_expr = old_stmt_expr;
8890
8891 return stmt_expr;
8892 }
8893
a5201a91
MM
8894 case CONST_DECL:
8895 t = tsubst_copy (t, args, complain, in_decl);
8896 /* As in finish_id_expression, we resolve enumeration constants
8897 to their underlying values. */
8898 if (TREE_CODE (t) == CONST_DECL)
8899 return DECL_INITIAL (t);
8900 return t;
8901
cc23546e 8902 default:
e58a9aa1
ZL
8903 /* Handle Objective-C++ constructs, if appropriate. */
8904 {
8905 tree subst
8906 = objcp_tsubst_copy_and_build (t, args, complain,
8907 in_decl, /*function_p=*/false);
8908 if (subst)
8909 return subst;
8910 }
cc23546e
JO
8911 return tsubst_copy (t, args, complain, in_decl);
8912 }
b3445994
MM
8913
8914#undef RECUR
cc23546e
JO
8915}
8916
3e4a3562
NS
8917/* Verify that the instantiated ARGS are valid. For type arguments,
8918 make sure that the type's linkage is ok. For non-type arguments,
34cd5ae7 8919 make sure they are constants if they are integral or enumerations.
9bcb9aae 8920 Emit an error under control of COMPLAIN, and return TRUE on error. */
3e4a3562
NS
8921
8922static bool
3a978d72 8923check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
3e4a3562
NS
8924{
8925 int ix, len = DECL_NTPARMS (tmpl);
8926 bool result = false;
6c02751b 8927 bool error_p = complain & tf_error;
3e4a3562
NS
8928
8929 for (ix = 0; ix != len; ix++)
8930 {
8931 tree t = TREE_VEC_ELT (args, ix);
c8094d83 8932
3e4a3562
NS
8933 if (TYPE_P (t))
8934 {
8935 /* [basic.link]: A name with no linkage (notably, the name
8936 of a class or enumeration declared in a local scope)
8937 shall not be used to declare an entity with linkage.
8938 This implies that names with no linkage cannot be used as
8939 template arguments. */
4684cd27 8940 tree nt = no_linkage_check (t, /*relaxed_p=*/false);
3e4a3562
NS
8941
8942 if (nt)
8943 {
aae4a277 8944 if (TYPE_ANONYMOUS_P (nt))
6c02751b 8945 error ("%qT is/uses anonymous type", t);
3e4a3562 8946 else
0f51ccfc 8947 error ("%qT uses local type %qT", t, nt);
3e4a3562 8948 result = true;
6c02751b 8949 error_p = true;
3e4a3562
NS
8950 }
8951 /* In order to avoid all sorts of complications, we do not
8952 allow variably-modified types as template arguments. */
5377d5ba 8953 else if (variably_modified_type_p (t, NULL_TREE))
3e4a3562
NS
8954 {
8955 if (complain & tf_error)
0f51ccfc 8956 error ("%qT is a variably modified type", t);
3e4a3562
NS
8957 result = true;
8958 }
8959 }
8960 /* A non-type argument of integral or enumerated type must be a
8961 constant. */
8962 else if (TREE_TYPE (t)
8963 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8964 && !TREE_CONSTANT (t))
8965 {
8966 if (complain & tf_error)
0f51ccfc 8967 error ("integral expression %qE is not constant", t);
3e4a3562
NS
8968 result = true;
8969 }
8970 }
6c02751b 8971 if (result && error_p)
0f51ccfc 8972 error (" trying to instantiate %qD", tmpl);
3e4a3562
NS
8973 return result;
8974}
8975
6ba89f8e 8976/* Instantiate the indicated variable or function template TMPL with
36a117a5
MM
8977 the template arguments in TARG_PTR. */
8978
5566b478 8979tree
3a978d72 8980instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8d08fdba 8981{
5566b478 8982 tree fndecl;
36a117a5
MM
8983 tree gen_tmpl;
8984 tree spec;
5566b478 8985
27fafc8d
JM
8986 if (tmpl == error_mark_node)
8987 return error_mark_node;
8988
50bc768d 8989 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
386b8a85 8990
db9b2174
MM
8991 /* If this function is a clone, handle it specially. */
8992 if (DECL_CLONED_FUNCTION_P (tmpl))
3ad97789 8993 {
a30f62e0 8994 tree spec;
3ad97789 8995 tree clone;
c8094d83 8996
a30f62e0
MM
8997 spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8998 complain);
8999 if (spec == error_mark_node)
9000 return error_mark_node;
9001
c6002625 9002 /* Look for the clone. */
4684cd27 9003 FOR_EACH_CLONE (clone, spec)
3ad97789
NS
9004 if (DECL_NAME (clone) == DECL_NAME (tmpl))
9005 return clone;
9006 /* We should always have found the clone by now. */
315fb5db 9007 gcc_unreachable ();
3ad97789
NS
9008 return NULL_TREE;
9009 }
c8094d83 9010
36a117a5 9011 /* Check to see if we already have this specialization. */
c8094d83 9012 spec = retrieve_specialization (tmpl, targ_ptr,
c7222c02 9013 /*class_specializations_p=*/false);
36a117a5
MM
9014 if (spec != NULL_TREE)
9015 return spec;
9016
f9a7ae04
MM
9017 gen_tmpl = most_general_template (tmpl);
9018 if (tmpl != gen_tmpl)
386b8a85 9019 {
36a117a5
MM
9020 /* The TMPL is a partial instantiation. To get a full set of
9021 arguments we must add the arguments used to perform the
9022 partial instantiation. */
9023 targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
9024 targ_ptr);
36a117a5
MM
9025
9026 /* Check to see if we already have this specialization. */
c7222c02
MM
9027 spec = retrieve_specialization (gen_tmpl, targ_ptr,
9028 /*class_specializations_p=*/false);
75650646
MM
9029 if (spec != NULL_TREE)
9030 return spec;
386b8a85
JM
9031 }
9032
3e4a3562
NS
9033 if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
9034 complain))
9035 return error_mark_node;
c8094d83 9036
2b907f5c
KL
9037 /* We are building a FUNCTION_DECL, during which the access of its
9038 parameters and return types have to be checked. However this
9039 FUNCTION_DECL which is the desired context for access checking
9040 is not built yet. We solve this chicken-and-egg problem by
9041 deferring all checks until we have the FUNCTION_DECL. */
9042 push_deferring_access_checks (dk_deferred);
5c74d5b0 9043
f4f206f4 9044 /* Substitute template parameters. */
17aec3eb 9045 fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
3e4a3562 9046 targ_ptr, complain, gen_tmpl);
5c74d5b0 9047
2b907f5c
KL
9048 /* Now we know the specialization, compute access previously
9049 deferred. */
9050 push_access_scope (fndecl);
9051 perform_deferred_access_checks ();
9052 pop_access_scope (fndecl);
9053 pop_deferring_access_checks ();
5c74d5b0 9054
36a117a5
MM
9055 /* The DECL_TI_TEMPLATE should always be the immediate parent
9056 template, not the most general template. */
9057 DECL_TI_TEMPLATE (fndecl) = tmpl;
8d08fdba 9058
94350948 9059 /* If we've just instantiated the main entry point for a function,
3ad97789
NS
9060 instantiate all the alternate entry points as well. We do this
9061 by cloning the instantiation of the main entry point, not by
9062 instantiating the template clones. */
9063 if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
9064 clone_function_decl (fndecl, /*update_method_vec_p=*/0);
94350948 9065
5566b478 9066 return fndecl;
8d08fdba 9067}
5566b478 9068
4393e105
MM
9069/* The FN is a TEMPLATE_DECL for a function. The ARGS are the
9070 arguments that are being used when calling it. TARGS is a vector
c8094d83 9071 into which the deduced template arguments are placed.
8d08fdba
MS
9072
9073 Return zero for success, 2 for an incomplete match that doesn't resolve
9074 all the types, and 1 for complete failure. An error message will be
9075 printed only for an incomplete match.
9076
e5214479
JM
9077 If FN is a conversion operator, or we are trying to produce a specific
9078 specialization, RETURN_TYPE is the return type desired.
9f54c803
MM
9079
9080 The EXPLICIT_TARGS are explicit template arguments provided via a
9081 template-id.
6467930b 9082
830bfa74
MM
9083 The parameter STRICT is one of:
9084
c8094d83 9085 DEDUCE_CALL:
830bfa74
MM
9086 We are deducing arguments for a function call, as in
9087 [temp.deduct.call].
9088
9089 DEDUCE_CONV:
c8094d83 9090 We are deducing arguments for a conversion function, as in
830bfa74
MM
9091 [temp.deduct.conv].
9092
9093 DEDUCE_EXACT:
62e4a758
NS
9094 We are deducing arguments when doing an explicit instantiation
9095 as in [temp.explicit], when determining an explicit specialization
9096 as in [temp.expl.spec], or when taking the address of a function
a34d3336 9097 template, as in [temp.deduct.funcaddr]. */
8d08fdba
MS
9098
9099int
c8094d83 9100fn_type_unification (tree fn,
0cbd7506
MS
9101 tree explicit_targs,
9102 tree targs,
9103 tree args,
9104 tree return_type,
a34d3336 9105 unification_kind_t strict)
386b8a85 9106{
4393e105
MM
9107 tree parms;
9108 tree fntype;
adecb3f4 9109 int result;
386b8a85 9110
50bc768d 9111 gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
2b59fc25 9112
4393e105
MM
9113 fntype = TREE_TYPE (fn);
9114 if (explicit_targs)
75650646 9115 {
4393e105 9116 /* [temp.deduct]
c8094d83 9117
4393e105
MM
9118 The specified template arguments must match the template
9119 parameters in kind (i.e., type, nontype, template), and there
9120 must not be more arguments than there are parameters;
9121 otherwise type deduction fails.
9122
9123 Nontype arguments must match the types of the corresponding
9124 nontype template parameters, or must be convertible to the
9125 types of the corresponding nontype parameters as specified in
9126 _temp.arg.nontype_, otherwise type deduction fails.
9127
9128 All references in the function type of the function template
9129 to the corresponding template parameters are replaced by the
9130 specified template argument values. If a substitution in a
9131 template parameter or in the function type of the function
9132 template results in an invalid type, type deduction fails. */
9133 int i;
9134 tree converted_args;
ffd49b19 9135 bool incomplete;
75650646 9136
c8a7ed43
AO
9137 if (explicit_targs == error_mark_node)
9138 return 1;
9139
4393e105 9140 converted_args
c8094d83
MS
9141 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
9142 explicit_targs, NULL_TREE, tf_none,
4393e105
MM
9143 /*require_all_arguments=*/0));
9144 if (converted_args == error_mark_node)
75650646 9145 return 1;
386b8a85 9146
ffd49b19 9147 /* Substitute the explicit args into the function type. This is
0cbd7506
MS
9148 necessary so that, for instance, explicitly declared function
9149 arguments can match null pointed constants. If we were given
9150 an incomplete set of explicit args, we must not do semantic
9151 processing during substitution as we could create partial
9152 instantiations. */
ffd49b19
NS
9153 incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9154 processing_template_decl += incomplete;
c2ea3a40 9155 fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
ffd49b19 9156 processing_template_decl -= incomplete;
c8094d83 9157
4393e105
MM
9158 if (fntype == error_mark_node)
9159 return 1;
050367a3 9160
4393e105 9161 /* Place the explicitly specified arguments in TARGS. */
ffd49b19 9162 for (i = NUM_TMPL_ARGS (converted_args); i--;)
4393e105 9163 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
75650646 9164 }
c8094d83 9165
4393e105 9166 parms = TYPE_ARG_TYPES (fntype);
e5214479
JM
9167 /* Never do unification on the 'this' parameter. */
9168 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9169 parms = TREE_CHAIN (parms);
c8094d83 9170
8d3631f8
NS
9171 if (return_type)
9172 {
8d3631f8
NS
9173 parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9174 args = tree_cons (NULL_TREE, return_type, args);
4393e105
MM
9175 }
9176
4393e105
MM
9177 /* We allow incomplete unification without an error message here
9178 because the standard doesn't seem to explicitly prohibit it. Our
9179 callers must be ready to deal with unification failures in any
9180 event. */
c8094d83 9181 result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
adecb3f4 9182 targs, parms, args, /*subr=*/0,
c510f071 9183 strict, 0);
adecb3f4 9184
c8094d83 9185 if (result == 0)
adecb3f4 9186 /* All is well so far. Now, check:
c8094d83
MS
9187
9188 [temp.deduct]
9189
adecb3f4
MM
9190 When all template arguments have been deduced, all uses of
9191 template parameters in nondeduced contexts are replaced with
9192 the corresponding deduced argument values. If the
9193 substitution results in an invalid type, as described above,
9194 type deduction fails. */
c2ea3a40 9195 if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
adecb3f4
MM
9196 == error_mark_node)
9197 return 1;
9198
9199 return result;
830bfa74
MM
9200}
9201
9202/* Adjust types before performing type deduction, as described in
9203 [temp.deduct.call] and [temp.deduct.conv]. The rules in these two
4c7d0dff
MM
9204 sections are symmetric. PARM is the type of a function parameter
9205 or the return type of the conversion function. ARG is the type of
9206 the argument passed to the call, or the type of the value
dc957d14 9207 initialized with the result of the conversion function. */
386b8a85 9208
62e4a758 9209static int
c8094d83 9210maybe_adjust_types_for_deduction (unification_kind_t strict,
0cbd7506
MS
9211 tree* parm,
9212 tree* arg)
830bfa74 9213{
62e4a758 9214 int result = 0;
c8094d83 9215
830bfa74
MM
9216 switch (strict)
9217 {
9218 case DEDUCE_CALL:
9219 break;
9220
9221 case DEDUCE_CONV:
9222 {
4c7d0dff
MM
9223 /* Swap PARM and ARG throughout the remainder of this
9224 function; the handling is precisely symmetric since PARM
9225 will initialize ARG rather than vice versa. */
830bfa74
MM
9226 tree* temp = parm;
9227 parm = arg;
9228 arg = temp;
9229 break;
9230 }
9231
9232 case DEDUCE_EXACT:
9233 /* There is nothing to do in this case. */
62e4a758 9234 return 0;
830bfa74
MM
9235
9236 default:
315fb5db 9237 gcc_unreachable ();
830bfa74
MM
9238 }
9239
9240 if (TREE_CODE (*parm) != REFERENCE_TYPE)
9241 {
9242 /* [temp.deduct.call]
c8094d83 9243
830bfa74 9244 If P is not a reference type:
c8094d83 9245
830bfa74
MM
9246 --If A is an array type, the pointer type produced by the
9247 array-to-pointer standard conversion (_conv.array_) is
9248 used in place of A for type deduction; otherwise,
c8094d83 9249
830bfa74
MM
9250 --If A is a function type, the pointer type produced by
9251 the function-to-pointer standard conversion
9252 (_conv.func_) is used in place of A for type deduction;
9253 otherwise,
c8094d83 9254
830bfa74
MM
9255 --If A is a cv-qualified type, the top level
9256 cv-qualifiers of A's type are ignored for type
9257 deduction. */
9258 if (TREE_CODE (*arg) == ARRAY_TYPE)
9259 *arg = build_pointer_type (TREE_TYPE (*arg));
d8f8dca1 9260 else if (TREE_CODE (*arg) == FUNCTION_TYPE)
830bfa74
MM
9261 *arg = build_pointer_type (*arg);
9262 else
9263 *arg = TYPE_MAIN_VARIANT (*arg);
9264 }
c8094d83 9265
830bfa74 9266 /* [temp.deduct.call]
c8094d83 9267
830bfa74
MM
9268 If P is a cv-qualified type, the top level cv-qualifiers
9269 of P's type are ignored for type deduction. If P is a
9270 reference type, the type referred to by P is used for
9271 type deduction. */
9272 *parm = TYPE_MAIN_VARIANT (*parm);
9273 if (TREE_CODE (*parm) == REFERENCE_TYPE)
62e4a758
NS
9274 {
9275 *parm = TREE_TYPE (*parm);
9276 result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9277 }
1c82cc90
NS
9278
9279 /* DR 322. For conversion deduction, remove a reference type on parm
9280 too (which has been swapped into ARG). */
9281 if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9282 *arg = TREE_TYPE (*arg);
c8094d83 9283
62e4a758 9284 return result;
386b8a85
JM
9285}
9286
e5214479 9287/* Most parms like fn_type_unification.
9f54c803
MM
9288
9289 If SUBR is 1, we're being called recursively (to unify the
9290 arguments of a function or method parameter of a function
c510f071
NS
9291 template). If IS_METHOD is true, XPARMS are the parms of a
9292 member function, and special rules apply to cv qualification
9293 deduction on the this parameter. */
386b8a85 9294
4966381a 9295static int
c8094d83 9296type_unification_real (tree tparms,
0cbd7506
MS
9297 tree targs,
9298 tree xparms,
9299 tree xargs,
9300 int subr,
c510f071
NS
9301 unification_kind_t strict,
9302 int is_method)
8d08fdba
MS
9303{
9304 tree parm, arg;
9305 int i;
9306 int ntparms = TREE_VEC_LENGTH (tparms);
830bfa74 9307 int sub_strict;
bd0d5d4a
JM
9308 int saw_undeduced = 0;
9309 tree parms, args;
8d08fdba 9310
50bc768d
NS
9311 gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9312 gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9313 gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9314 gcc_assert (ntparms > 0);
8d08fdba 9315
830bfa74
MM
9316 switch (strict)
9317 {
9318 case DEDUCE_CALL:
028d1f20 9319 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
0cbd7506 9320 | UNIFY_ALLOW_DERIVED);
830bfa74 9321 break;
c8094d83 9322
830bfa74
MM
9323 case DEDUCE_CONV:
9324 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9325 break;
9326
9327 case DEDUCE_EXACT:
9328 sub_strict = UNIFY_ALLOW_NONE;
9329 break;
c8094d83 9330
830bfa74 9331 default:
315fb5db 9332 gcc_unreachable ();
830bfa74
MM
9333 }
9334
bd0d5d4a
JM
9335 again:
9336 parms = xparms;
9337 args = xargs;
bd0d5d4a 9338
a34d3336
NS
9339 while (parms && parms != void_list_node
9340 && args && args != void_list_node)
8d08fdba
MS
9341 {
9342 parm = TREE_VALUE (parms);
9343 parms = TREE_CHAIN (parms);
9344 arg = TREE_VALUE (args);
9345 args = TREE_CHAIN (args);
9346
9347 if (arg == error_mark_node)
9348 return 1;
9349 if (arg == unknown_type_node)
34016c81
JM
9350 /* We can't deduce anything from this, but we might get all the
9351 template args from other function args. */
9352 continue;
b7484fbe 9353
c510f071
NS
9354 if (is_method)
9355 {
9356 /* The cv qualifiers on the this pointer argument must match
9357 exactly. We cannot deduce a T as const X against a const
9358 member function for instance. */
9359 gcc_assert (TREE_CODE (parm) == POINTER_TYPE);
9360 gcc_assert (TREE_CODE (arg) == POINTER_TYPE);
9361 /* The restrict qualifier will be on the pointer. */
9362 if (cp_type_quals (parm) != cp_type_quals (arg))
9363 return 1;
9364 parm = TREE_TYPE (parm);
9365 arg = TREE_TYPE (arg);
9366 if (cp_type_quals (parm) != cp_type_quals (arg))
9367 return 1;
9368
9369 parm = TYPE_MAIN_VARIANT (parm);
9370 arg = TYPE_MAIN_VARIANT (arg);
9371 is_method = 0;
9372 }
9373
03e70705
JM
9374 /* Conversions will be performed on a function argument that
9375 corresponds with a function parameter that contains only
9376 non-deducible template parameters and explicitly specified
9377 template parameters. */
c353b8e3 9378 if (!uses_template_parms (parm))
b7484fbe 9379 {
03e70705
JM
9380 tree type;
9381
2f939d94 9382 if (!TYPE_P (arg))
03e70705
JM
9383 type = TREE_TYPE (arg);
9384 else
c353b8e3 9385 type = arg;
03e70705 9386
fad86f7a 9387 if (same_type_p (parm, type))
343c89cd 9388 continue;
fad86f7a
GK
9389 if (strict != DEDUCE_EXACT
9390 && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg))
9391 continue;
9392
b7484fbe
MS
9393 return 1;
9394 }
c8094d83 9395
2f939d94 9396 if (!TYPE_P (arg))
8d08fdba 9397 {
50bc768d 9398 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
34016c81 9399 if (type_unknown_p (arg))
28cbf42c 9400 {
34016c81
JM
9401 /* [temp.deduct.type] A template-argument can be deduced from
9402 a pointer to function or pointer to member function
9403 argument if the set of overloaded functions does not
9404 contain function templates and at most one of a set of
9405 overloaded functions provides a unique match. */
9406
9407 if (resolve_overloaded_unification
4393e105 9408 (tparms, targs, parm, arg, strict, sub_strict)
34016c81
JM
9409 != 0)
9410 return 1;
9411 continue;
28cbf42c 9412 }
8d08fdba 9413 arg = TREE_TYPE (arg);
08476342
NS
9414 if (arg == error_mark_node)
9415 return 1;
8d08fdba 9416 }
c8094d83 9417
62e4a758 9418 {
0cbd7506 9419 int arg_strict = sub_strict;
c8094d83 9420
0cbd7506 9421 if (!subr)
62e4a758 9422 arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
4393e105 9423
0cbd7506
MS
9424 if (unify (tparms, targs, parm, arg, arg_strict))
9425 return 1;
62e4a758 9426 }
8d08fdba 9427 }
c8094d83 9428
8d08fdba
MS
9429 /* Fail if we've reached the end of the parm list, and more args
9430 are present, and the parm list isn't variadic. */
9431 if (args && args != void_list_node && parms == void_list_node)
9432 return 1;
f4f206f4 9433 /* Fail if parms are left and they don't have default values. */
a34d3336 9434 if (parms && parms != void_list_node
8d08fdba
MS
9435 && TREE_PURPOSE (parms) == NULL_TREE)
9436 return 1;
bd0d5d4a 9437
8d08fdba
MS
9438 if (!subr)
9439 for (i = 0; i < ntparms; i++)
a34d3336 9440 if (!TREE_VEC_ELT (targs, i))
8d08fdba 9441 {
bd0d5d4a
JM
9442 tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9443
9444 /* If this is an undeduced nontype parameter that depends on
9445 a type parameter, try another pass; its type may have been
9446 deduced from a later argument than the one from which
9447 this parameter can be deduced. */
9448 if (TREE_CODE (tparm) == PARM_DECL
9449 && uses_template_parms (TREE_TYPE (tparm))
9450 && !saw_undeduced++)
9451 goto again;
9452
8d08fdba
MS
9453 return 2;
9454 }
c8094d83 9455
8d08fdba
MS
9456 return 0;
9457}
9458
34016c81
JM
9459/* Subroutine of type_unification_real. Args are like the variables at the
9460 call site. ARG is an overloaded function (or template-id); we try
9461 deducing template args from each of the overloads, and if only one
9462 succeeds, we go with that. Modifies TARGS and returns 0 on success. */
9463
9464static int
c8094d83 9465resolve_overloaded_unification (tree tparms,
0cbd7506
MS
9466 tree targs,
9467 tree parm,
9468 tree arg,
9469 unification_kind_t strict,
3a978d72 9470 int sub_strict)
34016c81
JM
9471{
9472 tree tempargs = copy_node (targs);
9473 int good = 0;
f23fb7f5 9474 bool addr_p;
34016c81
JM
9475
9476 if (TREE_CODE (arg) == ADDR_EXPR)
f23fb7f5
MM
9477 {
9478 arg = TREE_OPERAND (arg, 0);
9479 addr_p = true;
9480 }
9481 else
9482 addr_p = false;
9f3d9e46 9483
d8f8dca1
MM
9484 if (TREE_CODE (arg) == COMPONENT_REF)
9485 /* Handle `&x' where `x' is some static or non-static member
9486 function name. */
9487 arg = TREE_OPERAND (arg, 1);
9488
05e0b2f4
JM
9489 if (TREE_CODE (arg) == OFFSET_REF)
9490 arg = TREE_OPERAND (arg, 1);
9491
9f3d9e46 9492 /* Strip baselink information. */
50ad9642
MM
9493 if (BASELINK_P (arg))
9494 arg = BASELINK_FUNCTIONS (arg);
9f3d9e46 9495
34016c81
JM
9496 if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9497 {
9498 /* If we got some explicit template args, we need to plug them into
9499 the affected templates before we try to unify, in case the
9500 explicit args will completely resolve the templates in question. */
9501
9502 tree expl_subargs = TREE_OPERAND (arg, 1);
9503 arg = TREE_OPERAND (arg, 0);
9504
9505 for (; arg; arg = OVL_NEXT (arg))
9506 {
9507 tree fn = OVL_CURRENT (arg);
9508 tree subargs, elem;
9509
9510 if (TREE_CODE (fn) != TEMPLATE_DECL)
9511 continue;
9512
a34d3336
NS
9513 subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
9514 expl_subargs, /*check_ret=*/false);
34016c81
JM
9515 if (subargs)
9516 {
c2ea3a40 9517 elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
c8094d83 9518 good += try_one_overload (tparms, targs, tempargs, parm,
f23fb7f5 9519 elem, strict, sub_strict, addr_p);
34016c81
JM
9520 }
9521 }
9522 }
315fb5db 9523 else
34016c81 9524 {
315fb5db
NS
9525 gcc_assert (TREE_CODE (arg) == OVERLOAD
9526 || TREE_CODE (arg) == FUNCTION_DECL);
c8094d83 9527
34016c81 9528 for (; arg; arg = OVL_NEXT (arg))
f23fb7f5
MM
9529 good += try_one_overload (tparms, targs, tempargs, parm,
9530 TREE_TYPE (OVL_CURRENT (arg)),
9531 strict, sub_strict, addr_p);
34016c81 9532 }
34016c81
JM
9533
9534 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9535 to function or pointer to member function argument if the set of
9536 overloaded functions does not contain function templates and at most
9537 one of a set of overloaded functions provides a unique match.
9538
9539 So if we found multiple possibilities, we return success but don't
9540 deduce anything. */
9541
9542 if (good == 1)
9543 {
9544 int i = TREE_VEC_LENGTH (targs);
9545 for (; i--; )
9546 if (TREE_VEC_ELT (tempargs, i))
9547 TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9548 }
9549 if (good)
9550 return 0;
9551
9552 return 1;
9553}
9554
9555/* Subroutine of resolve_overloaded_unification; does deduction for a single
9556 overload. Fills TARGS with any deduced arguments, or error_mark_node if
9557 different overloads deduce different arguments for a given parm.
f23fb7f5
MM
9558 ADDR_P is true if the expression for which deduction is being
9559 performed was of the form "& fn" rather than simply "fn".
9560
34016c81
JM
9561 Returns 1 on success. */
9562
9563static int
3a978d72 9564try_one_overload (tree tparms,
0cbd7506
MS
9565 tree orig_targs,
9566 tree targs,
9567 tree parm,
9568 tree arg,
9569 unification_kind_t strict,
f23fb7f5
MM
9570 int sub_strict,
9571 bool addr_p)
34016c81
JM
9572{
9573 int nargs;
9574 tree tempargs;
9575 int i;
9576
9577 /* [temp.deduct.type] A template-argument can be deduced from a pointer
9578 to function or pointer to member function argument if the set of
9579 overloaded functions does not contain function templates and at most
9580 one of a set of overloaded functions provides a unique match.
9581
9582 So if this is a template, just return success. */
9583
9584 if (uses_template_parms (arg))
9585 return 1;
9586
f23fb7f5
MM
9587 if (TREE_CODE (arg) == METHOD_TYPE)
9588 arg = build_ptrmemfunc_type (build_pointer_type (arg));
9589 else if (addr_p)
9590 arg = build_pointer_type (arg);
9591
62e4a758 9592 sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
34016c81
JM
9593
9594 /* We don't copy orig_targs for this because if we have already deduced
9595 some template args from previous args, unify would complain when we
9596 try to deduce a template parameter for the same argument, even though
9597 there isn't really a conflict. */
9598 nargs = TREE_VEC_LENGTH (targs);
f31c0a32 9599 tempargs = make_tree_vec (nargs);
34016c81 9600
4393e105 9601 if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
34016c81
JM
9602 return 0;
9603
9604 /* First make sure we didn't deduce anything that conflicts with
e97e5263 9605 explicitly specified args. */
34016c81
JM
9606 for (i = nargs; i--; )
9607 {
9608 tree elt = TREE_VEC_ELT (tempargs, i);
e97e5263 9609 tree oldelt = TREE_VEC_ELT (orig_targs, i);
34016c81 9610
a34d3336
NS
9611 if (!elt)
9612 /*NOP*/;
34016c81 9613 else if (uses_template_parms (elt))
a34d3336
NS
9614 /* Since we're unifying against ourselves, we will fill in
9615 template args used in the function parm list with our own
9616 template parms. Discard them. */
9617 TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9618 else if (oldelt && !template_args_equal (oldelt, elt))
34016c81
JM
9619 return 0;
9620 }
9621
9622 for (i = nargs; i--; )
9623 {
9624 tree elt = TREE_VEC_ELT (tempargs, i);
9625
9626 if (elt)
9627 TREE_VEC_ELT (targs, i) = elt;
9628 }
9629
9630 return 1;
9631}
9632
74601d7c
KL
9633/* Verify that nondeduce template argument agrees with the type
9634 obtained from argument deduction. Return nonzero if the
9635 verification fails.
9636
9637 For example:
9638
9639 struct A { typedef int X; };
9640 template <class T, class U> struct C {};
9641 template <class T> struct C<T, typename T::X> {};
9642
9643 Then with the instantiation `C<A, int>', we can deduce that
9644 `T' is `A' but unify () does not check whether `typename T::X'
9645 is `int'. This function ensure that they agree.
9646
9647 TARGS, PARMS are the same as the arguments of unify.
9648 ARGS contains template arguments from all levels. */
9649
9650static int
3a978d72 9651verify_class_unification (tree targs, tree parms, tree args)
74601d7c 9652{
e2005c8d 9653 parms = tsubst (parms, add_outermost_template_args (args, targs),
0cbd7506 9654 tf_none, NULL_TREE);
e2005c8d 9655 if (parms == error_mark_node)
74601d7c
KL
9656 return 1;
9657
e2005c8d 9658 return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
74601d7c
KL
9659}
9660
4393e105
MM
9661/* PARM is a template class (perhaps with unbound template
9662 parameters). ARG is a fully instantiated type. If ARG can be
9663 bound to PARM, return ARG, otherwise return NULL_TREE. TPARMS and
9664 TARGS are as for unify. */
fcfb9f96
MM
9665
9666static tree
3a978d72 9667try_class_unification (tree tparms, tree targs, tree parm, tree arg)
4393e105 9668{
4393e105
MM
9669 tree copy_of_targs;
9670
9671 if (!CLASSTYPE_TEMPLATE_INFO (arg)
c8094d83 9672 || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
68361a03 9673 != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
4393e105
MM
9674 return NULL_TREE;
9675
9676 /* We need to make a new template argument vector for the call to
9677 unify. If we used TARGS, we'd clutter it up with the result of
9678 the attempted unification, even if this class didn't work out.
9679 We also don't want to commit ourselves to all the unifications
9680 we've already done, since unification is supposed to be done on
9681 an argument-by-argument basis. In other words, consider the
9682 following pathological case:
9683
9684 template <int I, int J, int K>
9685 struct S {};
c8094d83 9686
4393e105
MM
9687 template <int I, int J>
9688 struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
c8094d83 9689
4393e105
MM
9690 template <int I, int J, int K>
9691 void f(S<I, J, K>, S<I, I, I>);
c8094d83 9692
4393e105 9693 void g() {
0cbd7506
MS
9694 S<0, 0, 0> s0;
9695 S<0, 1, 2> s2;
c8094d83 9696
0cbd7506 9697 f(s0, s2);
4393e105
MM
9698 }
9699
9700 Now, by the time we consider the unification involving `s2', we
9701 already know that we must have `f<0, 0, 0>'. But, even though
0e339752 9702 `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
4393e105
MM
9703 because there are two ways to unify base classes of S<0, 1, 2>
9704 with S<I, I, I>. If we kept the already deduced knowledge, we
9705 would reject the possibility I=1. */
f31c0a32 9706 copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
c8094d83 9707
4393e105 9708 /* If unification failed, we're done. */
74601d7c
KL
9709 if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9710 CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
4393e105 9711 return NULL_TREE;
74601d7c
KL
9712
9713 return arg;
4393e105
MM
9714}
9715
a3a0fc7f
NS
9716/* Given a template type PARM and a class type ARG, find the unique
9717 base type in ARG that is an instance of PARM. We do not examine
9718 ARG itself; only its base-classes. If there is not exactly one
9719 appropriate base class, return NULL_TREE. PARM may be the type of
9720 a partial specialization, as well as a plain template type. Used
9721 by unify. */
4393e105
MM
9722
9723static tree
a3a0fc7f 9724get_template_base (tree tparms, tree targs, tree parm, tree arg)
fcfb9f96 9725{
a3a0fc7f
NS
9726 tree rval = NULL_TREE;
9727 tree binfo;
9728
9729 gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
c8094d83 9730
a3a0fc7f
NS
9731 binfo = TYPE_BINFO (complete_type (arg));
9732 if (!binfo)
9733 /* The type could not be completed. */
9734 return NULL_TREE;
fcfb9f96 9735
a3a0fc7f
NS
9736 /* Walk in inheritance graph order. The search order is not
9737 important, and this avoids multiple walks of virtual bases. */
9738 for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
fcfb9f96 9739 {
a3a0fc7f 9740 tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
fcfb9f96 9741
8d83768f
NS
9742 if (r)
9743 {
9744 /* If there is more than one satisfactory baseclass, then:
fcfb9f96 9745
8d83768f 9746 [temp.deduct.call]
fcfb9f96 9747
8d83768f
NS
9748 If they yield more than one possible deduced A, the type
9749 deduction fails.
4393e105 9750
8d83768f 9751 applies. */
a3a0fc7f
NS
9752 if (rval && !same_type_p (r, rval))
9753 return NULL_TREE;
c8094d83 9754
a3a0fc7f 9755 rval = r;
8d83768f 9756 }
fcfb9f96
MM
9757 }
9758
a3a0fc7f 9759 return rval;
fcfb9f96
MM
9760}
9761
db2767b6
MM
9762/* Returns the level of DECL, which declares a template parameter. */
9763
e9659ab0 9764static int
3a978d72 9765template_decl_level (tree decl)
db2767b6
MM
9766{
9767 switch (TREE_CODE (decl))
9768 {
9769 case TYPE_DECL:
9770 case TEMPLATE_DECL:
9771 return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9772
9773 case PARM_DECL:
9774 return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9775
9776 default:
315fb5db 9777 gcc_unreachable ();
db2767b6 9778 }
315fb5db 9779 return 0;
db2767b6
MM
9780}
9781
830bfa74
MM
9782/* Decide whether ARG can be unified with PARM, considering only the
9783 cv-qualifiers of each type, given STRICT as documented for unify.
324f9dfb 9784 Returns nonzero iff the unification is OK on that basis. */
e92cc029 9785
e9659ab0 9786static int
3a978d72 9787check_cv_quals_for_unify (int strict, tree arg, tree parm)
830bfa74 9788{
4f2b0fb2
NS
9789 int arg_quals = cp_type_quals (arg);
9790 int parm_quals = cp_type_quals (parm);
9791
355f774d
NS
9792 if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9793 && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 9794 {
2e9ceb77 9795 /* Although a CVR qualifier is ignored when being applied to a
0cbd7506
MS
9796 substituted template parameter ([8.3.2]/1 for example), that
9797 does not apply during deduction [14.8.2.4]/1, (even though
9798 that is not explicitly mentioned, [14.8.2.4]/9 indicates
9799 this). Except when we're allowing additional CV qualifiers
9800 at the outer level [14.8.2.1]/3,1st bullet. */
2e9ceb77
NS
9801 if ((TREE_CODE (arg) == REFERENCE_TYPE
9802 || TREE_CODE (arg) == FUNCTION_TYPE
9803 || TREE_CODE (arg) == METHOD_TYPE)
9804 && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9805 return 0;
9806
9807 if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9808 && (parm_quals & TYPE_QUAL_RESTRICT))
9809 return 0;
4f2b0fb2 9810 }
2e9ceb77 9811
62e4a758 9812 if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
4f2b0fb2 9813 && (arg_quals & parm_quals) != parm_quals)
ef637255
MM
9814 return 0;
9815
62e4a758 9816 if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
4f2b0fb2 9817 && (parm_quals & arg_quals) != arg_quals)
ef637255
MM
9818 return 0;
9819
ef637255 9820 return 1;
830bfa74
MM
9821}
9822
9823/* Takes parameters as for type_unification. Returns 0 if the
dc957d14 9824 type deduction succeeds, 1 otherwise. The parameter STRICT is a
830bfa74
MM
9825 bitwise or of the following flags:
9826
9827 UNIFY_ALLOW_NONE:
9828 Require an exact match between PARM and ARG.
9829 UNIFY_ALLOW_MORE_CV_QUAL:
028d1f20
NS
9830 Allow the deduced ARG to be more cv-qualified (by qualification
9831 conversion) than ARG.
830bfa74
MM
9832 UNIFY_ALLOW_LESS_CV_QUAL:
9833 Allow the deduced ARG to be less cv-qualified than ARG.
9834 UNIFY_ALLOW_DERIVED:
9835 Allow the deduced ARG to be a template base class of ARG,
9836 or a pointer to a template base class of the type pointed to by
161c12b0
JM
9837 ARG.
9838 UNIFY_ALLOW_INTEGER:
9839 Allow any integral type to be deduced. See the TEMPLATE_PARM_INDEX
c8094d83 9840 case for more information.
028d1f20
NS
9841 UNIFY_ALLOW_OUTER_LEVEL:
9842 This is the outermost level of a deduction. Used to determine validity
9843 of qualification conversions. A valid qualification conversion must
9844 have const qualified pointers leading up to the inner type which
9845 requires additional CV quals, except at the outer level, where const
9846 is not required [conv.qual]. It would be normal to set this flag in
62e4a758
NS
9847 addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9848 UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9849 This is the outermost level of a deduction, and PARM can be more CV
9850 qualified at this point.
9851 UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9852 This is the outermost level of a deduction, and PARM can be less CV
8baddbf1 9853 qualified at this point. */
830bfa74 9854
e9659ab0 9855static int
3a978d72 9856unify (tree tparms, tree targs, tree parm, tree arg, int strict)
8d08fdba
MS
9857{
9858 int idx;
050367a3 9859 tree targ;
db2767b6 9860 tree tparm;
028d1f20 9861 int strict_in = strict;
8d08fdba
MS
9862
9863 /* I don't think this will do the right thing with respect to types.
9864 But the only case I've seen it in so far has been array bounds, where
9865 signedness is the only information lost, and I think that will be
9866 okay. */
9867 while (TREE_CODE (parm) == NOP_EXPR)
9868 parm = TREE_OPERAND (parm, 0);
9869
9870 if (arg == error_mark_node)
9871 return 1;
9872 if (arg == unknown_type_node)
34016c81
JM
9873 /* We can't deduce anything from this, but we might get all the
9874 template args from other function args. */
9875 return 0;
9876
db2767b6 9877 /* If PARM uses template parameters, then we can't bail out here,
6bdb985f 9878 even if ARG == PARM, since we won't record unifications for the
db2767b6
MM
9879 template parameters. We might need them if we're trying to
9880 figure out which of two things is more specialized. */
9881 if (arg == parm && !uses_template_parms (parm))
8d08fdba
MS
9882 return 0;
9883
830bfa74
MM
9884 /* Immediately reject some pairs that won't unify because of
9885 cv-qualification mismatches. */
9886 if (TREE_CODE (arg) == TREE_CODE (parm)
2f939d94 9887 && TYPE_P (arg)
d0ab7624 9888 /* It is the elements of the array which hold the cv quals of an array
0cbd7506
MS
9889 type, and the elements might be template type parms. We'll check
9890 when we recurse. */
d0ab7624 9891 && TREE_CODE (arg) != ARRAY_TYPE
830bfa74
MM
9892 /* We check the cv-qualifiers when unifying with template type
9893 parameters below. We want to allow ARG `const T' to unify with
9894 PARM `T' for example, when computing which of two templates
9895 is more specialized, for example. */
9896 && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
028d1f20 9897 && !check_cv_quals_for_unify (strict_in, arg, parm))
49432171
JM
9898 return 1;
9899
028d1f20 9900 if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
3ea099f1 9901 && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
028d1f20
NS
9902 strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9903 strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9904 strict &= ~UNIFY_ALLOW_DERIVED;
62e4a758
NS
9905 strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9906 strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
c8094d83 9907
8d08fdba
MS
9908 switch (TREE_CODE (parm))
9909 {
2ca340ae 9910 case TYPENAME_TYPE:
fccef71e 9911 case SCOPE_REF:
b8c6534b 9912 case UNBOUND_CLASS_TEMPLATE:
2ca340ae
JM
9913 /* In a type which contains a nested-name-specifier, template
9914 argument values cannot be deduced for template parameters used
9915 within the nested-name-specifier. */
9916 return 0;
9917
8d08fdba 9918 case TEMPLATE_TYPE_PARM:
73b0fce8 9919 case TEMPLATE_TEMPLATE_PARM:
a1281f45 9920 case BOUND_TEMPLATE_TEMPLATE_PARM:
db2767b6
MM
9921 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9922
9923 if (TEMPLATE_TYPE_LEVEL (parm)
9924 != template_decl_level (tparm))
9925 /* The PARM is not one we're trying to unify. Just check
9926 to see if it matches ARG. */
9927 return (TREE_CODE (arg) == TREE_CODE (parm)
3bfdc719 9928 && same_type_p (parm, arg)) ? 0 : 1;
73b0fce8 9929 idx = TEMPLATE_TYPE_IDX (parm);
050367a3 9930 targ = TREE_VEC_ELT (targs, idx);
db2767b6 9931 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
050367a3 9932
73b0fce8 9933 /* Check for mixed types and values. */
db2767b6
MM
9934 if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9935 && TREE_CODE (tparm) != TYPE_DECL)
c8094d83 9936 || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
db2767b6 9937 && TREE_CODE (tparm) != TEMPLATE_DECL))
73b0fce8
KL
9938 return 1;
9939
a1281f45 9940 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
73b0fce8 9941 {
b429fdf0
KL
9942 /* ARG must be constructed from a template class or a template
9943 template parameter. */
9944 if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9945 && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
a1281f45 9946 return 1;
73b0fce8 9947
a1281f45
KL
9948 {
9949 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9950 tree parmvec = TYPE_TI_ARGS (parm);
6df91b00 9951 tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
a1281f45 9952 tree argtmplvec
b429fdf0 9953 = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
a1281f45 9954 int i;
73b0fce8 9955
c8094d83
MS
9956 /* The parameter and argument roles have to be switched here
9957 in order to handle default arguments properly. For example,
9958 template<template <class> class TT> void f(TT<int>)
9959 should be able to accept vector<int> which comes from
9960 template <class T, class Allocator = allocator>
a1281f45
KL
9961 class vector. */
9962
ee3071ef 9963 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
0cbd7506 9964 == error_mark_node)
a1281f45 9965 return 1;
c8094d83
MS
9966
9967 /* Deduce arguments T, i from TT<T> or TT<i>.
a1281f45
KL
9968 We check each element of PARMVEC and ARGVEC individually
9969 rather than the whole TREE_VEC since they can have
9970 different number of elements. */
6b9b6b15 9971
a1281f45
KL
9972 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9973 {
0cbd7506 9974 if (unify (tparms, targs,
c8094d83
MS
9975 TREE_VEC_ELT (parmvec, i),
9976 TREE_VEC_ELT (argvec, i),
a1281f45
KL
9977 UNIFY_ALLOW_NONE))
9978 return 1;
73b0fce8 9979 }
a1281f45 9980 }
b429fdf0 9981 arg = TYPE_TI_TEMPLATE (arg);
a1281f45
KL
9982
9983 /* Fall through to deduce template name. */
9984 }
9985
9986 if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9987 || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9988 {
9989 /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>. */
9990
9991 /* Simple cases: Value already set, does match or doesn't. */
9992 if (targ != NULL_TREE && template_args_equal (targ, arg))
9993 return 0;
9994 else if (targ)
9995 return 1;
db2767b6
MM
9996 }
9997 else
9998 {
830bfa74
MM
9999 /* If PARM is `const T' and ARG is only `int', we don't have
10000 a match unless we are allowing additional qualification.
10001 If ARG is `const int' and PARM is just `T' that's OK;
10002 that binds `const int' to `T'. */
c8094d83 10003 if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
830bfa74 10004 arg, parm))
db2767b6
MM
10005 return 1;
10006
830bfa74
MM
10007 /* Consider the case where ARG is `const volatile int' and
10008 PARM is `const T'. Then, T should be `volatile int'. */
c2ea3a40
NS
10009 arg = cp_build_qualified_type_real
10010 (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
adecb3f4
MM
10011 if (arg == error_mark_node)
10012 return 1;
73b0fce8 10013
a1281f45
KL
10014 /* Simple cases: Value already set, does match or doesn't. */
10015 if (targ != NULL_TREE && same_type_p (targ, arg))
10016 return 0;
10017 else if (targ)
10018 return 1;
61cd552e 10019
94fc547c
MM
10020 /* Make sure that ARG is not a variable-sized array. (Note
10021 that were talking about variable-sized arrays (like
10022 `int[n]'), rather than arrays of unknown size (like
10023 `int[]').) We'll get very confused by such a type since
10024 the bound of the array will not be computable in an
10025 instantiation. Besides, such types are not allowed in
10026 ISO C++, so we can do as we please here. */
5377d5ba 10027 if (variably_modified_type_p (arg, NULL_TREE))
94fc547c
MM
10028 return 1;
10029 }
61cd552e 10030
050367a3 10031 TREE_VEC_ELT (targs, idx) = arg;
73b0fce8
KL
10032 return 0;
10033
f84b4be9 10034 case TEMPLATE_PARM_INDEX:
db2767b6
MM
10035 tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
10036
c8094d83 10037 if (TEMPLATE_PARM_LEVEL (parm)
db2767b6
MM
10038 != template_decl_level (tparm))
10039 /* The PARM is not one we're trying to unify. Just check
10040 to see if it matches ARG. */
c8a209ca
NS
10041 return !(TREE_CODE (arg) == TREE_CODE (parm)
10042 && cp_tree_equal (parm, arg));
db2767b6 10043
f84b4be9 10044 idx = TEMPLATE_PARM_IDX (parm);
050367a3 10045 targ = TREE_VEC_ELT (targs, idx);
db2767b6 10046
050367a3 10047 if (targ)
c8a209ca 10048 return !cp_tree_equal (targ, arg);
8d08fdba 10049
161c12b0
JM
10050 /* [temp.deduct.type] If, in the declaration of a function template
10051 with a non-type template-parameter, the non-type
10052 template-parameter is used in an expression in the function
10053 parameter-list and, if the corresponding template-argument is
10054 deduced, the template-argument type shall match the type of the
10055 template-parameter exactly, except that a template-argument
c8094d83 10056 deduced from an array bound may be of any integral type.
d7c4edd0 10057 The non-type parameter might use already deduced type parameters. */
bd0d5d4a 10058 tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
e2005c8d
KL
10059 if (!TREE_TYPE (arg))
10060 /* Template-parameter dependent expression. Just accept it for now.
10061 It will later be processed in convert_template_argument. */
10062 ;
10063 else if (same_type_p (TREE_TYPE (arg), tparm))
10064 /* OK */;
161c12b0 10065 else if ((strict & UNIFY_ALLOW_INTEGER)
bd0d5d4a
JM
10066 && (TREE_CODE (tparm) == INTEGER_TYPE
10067 || TREE_CODE (tparm) == BOOLEAN_TYPE))
8baddbf1
MM
10068 /* Convert the ARG to the type of PARM; the deduced non-type
10069 template argument must exactly match the types of the
10070 corresponding parameter. */
10071 arg = fold (build_nop (TREE_TYPE (parm), arg));
bd0d5d4a
JM
10072 else if (uses_template_parms (tparm))
10073 /* We haven't deduced the type of this parameter yet. Try again
10074 later. */
10075 return 0;
161c12b0
JM
10076 else
10077 return 1;
10078
2a1e9fdd 10079 TREE_VEC_ELT (targs, idx) = arg;
8d08fdba
MS
10080 return 0;
10081
28e8f3a0
GB
10082 case PTRMEM_CST:
10083 {
0cbd7506
MS
10084 /* A pointer-to-member constant can be unified only with
10085 another constant. */
28e8f3a0 10086 if (TREE_CODE (arg) != PTRMEM_CST)
0cbd7506 10087 return 1;
28e8f3a0
GB
10088
10089 /* Just unify the class member. It would be useless (and possibly
0cbd7506
MS
10090 wrong, depending on the strict flags) to unify also
10091 PTRMEM_CST_CLASS, because we want to be sure that both parm and
10092 arg refer to the same variable, even if through different
10093 classes. For instance:
28e8f3a0 10094
0cbd7506
MS
10095 struct A { int x; };
10096 struct B : A { };
28e8f3a0 10097
0cbd7506 10098 Unification of &A::x and &B::x must succeed. */
28e8f3a0 10099 return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
0cbd7506 10100 PTRMEM_CST_MEMBER (arg), strict);
28e8f3a0
GB
10101 }
10102
8d08fdba 10103 case POINTER_TYPE:
830bfa74 10104 {
830bfa74
MM
10105 if (TREE_CODE (arg) != POINTER_TYPE)
10106 return 1;
c8094d83 10107
830bfa74
MM
10108 /* [temp.deduct.call]
10109
10110 A can be another pointer or pointer to member type that can
10111 be converted to the deduced A via a qualification
10112 conversion (_conv.qual_).
10113
10114 We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10115 This will allow for additional cv-qualification of the
028d1f20 10116 pointed-to types if appropriate. */
c8094d83 10117
028d1f20 10118 if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
830bfa74
MM
10119 /* The derived-to-base conversion only persists through one
10120 level of pointers. */
028d1f20 10121 strict |= (strict_in & UNIFY_ALLOW_DERIVED);
830bfa74 10122
c8094d83 10123 return unify (tparms, targs, TREE_TYPE (parm),
028d1f20 10124 TREE_TYPE (arg), strict);
830bfa74 10125 }
8d08fdba
MS
10126
10127 case REFERENCE_TYPE:
830bfa74
MM
10128 if (TREE_CODE (arg) != REFERENCE_TYPE)
10129 return 1;
10130 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
028d1f20 10131 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
10132
10133 case ARRAY_TYPE:
10134 if (TREE_CODE (arg) != ARRAY_TYPE)
10135 return 1;
3042d5be
MM
10136 if ((TYPE_DOMAIN (parm) == NULL_TREE)
10137 != (TYPE_DOMAIN (arg) == NULL_TREE))
10138 return 1;
8baddbf1
MM
10139 if (TYPE_DOMAIN (parm) != NULL_TREE)
10140 {
10141 tree parm_max;
10142 tree arg_max;
10143
10144 parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10145 arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10146
10147 /* Our representation of array types uses "N - 1" as the
10148 TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10149 not an integer constant. */
10150 if (TREE_CODE (parm_max) == MINUS_EXPR)
10151 {
c8094d83 10152 arg_max = fold_build2 (PLUS_EXPR,
7866705a
SB
10153 integer_type_node,
10154 arg_max,
10155 TREE_OPERAND (parm_max, 1));
8baddbf1
MM
10156 parm_max = TREE_OPERAND (parm_max, 0);
10157 }
10158
10159 if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10160 return 1;
10161 }
830bfa74 10162 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
712467a4 10163 strict & UNIFY_ALLOW_MORE_CV_QUAL);
8d08fdba
MS
10164
10165 case REAL_TYPE:
37c46b43 10166 case COMPLEX_TYPE:
c00996a3 10167 case VECTOR_TYPE:
8d08fdba 10168 case INTEGER_TYPE:
42976354 10169 case BOOLEAN_TYPE:
3590f0a6 10170 case ENUMERAL_TYPE:
5ad5a526 10171 case VOID_TYPE:
f376e137
MS
10172 if (TREE_CODE (arg) != TREE_CODE (parm))
10173 return 1;
c8094d83 10174
9edc3913 10175 /* We have already checked cv-qualification at the top of the
514a1f18 10176 function. */
8baddbf1 10177 if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
ca79f85d
JM
10178 return 1;
10179
8d08fdba
MS
10180 /* As far as unification is concerned, this wins. Later checks
10181 will invalidate it if necessary. */
10182 return 0;
10183
10184 /* Types INTEGER_CST and MINUS_EXPR can come from array bounds. */
bd6dd845 10185 /* Type INTEGER_CST can come from ordinary constant template args. */
8d08fdba 10186 case INTEGER_CST:
bd6dd845
MS
10187 while (TREE_CODE (arg) == NOP_EXPR)
10188 arg = TREE_OPERAND (arg, 0);
10189
8d08fdba
MS
10190 if (TREE_CODE (arg) != INTEGER_CST)
10191 return 1;
10192 return !tree_int_cst_equal (parm, arg);
10193
8d08fdba
MS
10194 case TREE_VEC:
10195 {
10196 int i;
10197 if (TREE_CODE (arg) != TREE_VEC)
10198 return 1;
10199 if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10200 return 1;
0dc09a61 10201 for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
830bfa74 10202 if (unify (tparms, targs,
8d08fdba 10203 TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
4393e105 10204 UNIFY_ALLOW_NONE))
8d08fdba
MS
10205 return 1;
10206 return 0;
10207 }
10208
8d08fdba 10209 case RECORD_TYPE:
f181d4ae 10210 case UNION_TYPE:
f181d4ae 10211 if (TREE_CODE (arg) != TREE_CODE (parm))
a4443a08 10212 return 1;
c8094d83 10213
a7a64a77
MM
10214 if (TYPE_PTRMEMFUNC_P (parm))
10215 {
10216 if (!TYPE_PTRMEMFUNC_P (arg))
10217 return 1;
10218
c8094d83 10219 return unify (tparms, targs,
a7a64a77
MM
10220 TYPE_PTRMEMFUNC_FN_TYPE (parm),
10221 TYPE_PTRMEMFUNC_FN_TYPE (arg),
10222 strict);
10223 }
10224
5db698f6 10225 if (CLASSTYPE_TEMPLATE_INFO (parm))
5566b478 10226 {
6467930b 10227 tree t = NULL_TREE;
4393e105 10228
028d1f20 10229 if (strict_in & UNIFY_ALLOW_DERIVED)
4393e105
MM
10230 {
10231 /* First, we try to unify the PARM and ARG directly. */
10232 t = try_class_unification (tparms, targs,
10233 parm, arg);
10234
10235 if (!t)
10236 {
10237 /* Fallback to the special case allowed in
10238 [temp.deduct.call]:
c8094d83 10239
4393e105
MM
10240 If P is a class, and P has the form
10241 template-id, then A can be a derived class of
10242 the deduced A. Likewise, if P is a pointer to
10243 a class of the form template-id, A can be a
10244 pointer to a derived class pointed to by the
10245 deduced A. */
8d83768f 10246 t = get_template_base (tparms, targs, parm, arg);
4393e105 10247
8d83768f 10248 if (!t)
4393e105
MM
10249 return 1;
10250 }
10251 }
c8094d83
MS
10252 else if (CLASSTYPE_TEMPLATE_INFO (arg)
10253 && (CLASSTYPE_TI_TEMPLATE (parm)
9fbf56f7 10254 == CLASSTYPE_TI_TEMPLATE (arg)))
6df47b06
MM
10255 /* Perhaps PARM is something like S<U> and ARG is S<int>.
10256 Then, we should unify `int' and `U'. */
6467930b 10257 t = arg;
4393e105 10258 else
dc957d14 10259 /* There's no chance of unification succeeding. */
5566b478 10260 return 1;
6467930b 10261
830bfa74 10262 return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
4393e105 10263 CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
5566b478 10264 }
9edc3913 10265 else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
5566b478 10266 return 1;
a4443a08 10267 return 0;
8d08fdba
MS
10268
10269 case METHOD_TYPE:
8d08fdba 10270 case FUNCTION_TYPE:
830bfa74 10271 if (TREE_CODE (arg) != TREE_CODE (parm))
8d08fdba 10272 return 1;
830bfa74
MM
10273
10274 if (unify (tparms, targs, TREE_TYPE (parm),
4393e105 10275 TREE_TYPE (arg), UNIFY_ALLOW_NONE))
28cbf42c 10276 return 1;
386b8a85 10277 return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
c510f071
NS
10278 TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
10279 TREE_CODE (parm) == METHOD_TYPE);
a4443a08
MS
10280
10281 case OFFSET_TYPE:
9804209d 10282 /* Unify a pointer to member with a pointer to member function, which
0cbd7506 10283 deduces the type of the member as a function type. */
9804209d 10284 if (TYPE_PTRMEMFUNC_P (arg))
0cbd7506
MS
10285 {
10286 tree method_type;
10287 tree fntype;
10288 cp_cv_quals cv_quals;
10289
10290 /* Check top-level cv qualifiers */
10291 if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
10292 return 1;
10293
10294 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10295 TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
10296 return 1;
10297
10298 /* Determine the type of the function we are unifying against. */
10299 method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
10300 fntype =
10301 build_function_type (TREE_TYPE (method_type),
10302 TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
10303
10304 /* Extract the cv-qualifiers of the member function from the
10305 implicit object parameter and place them on the function
10306 type to be restored later. */
10307 cv_quals =
10308 cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
10309 fntype = build_qualified_type (fntype, cv_quals);
10310 return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
10311 }
9804209d 10312
a4443a08
MS
10313 if (TREE_CODE (arg) != OFFSET_TYPE)
10314 return 1;
830bfa74 10315 if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
4393e105 10316 TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
a4443a08 10317 return 1;
830bfa74 10318 return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
4393e105 10319 strict);
a4443a08 10320
f62dbf03 10321 case CONST_DECL:
a723baf1
MM
10322 if (DECL_TEMPLATE_PARM_P (parm))
10323 return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
c8094d83 10324 if (arg != integral_constant_value (parm))
f62dbf03
JM
10325 return 1;
10326 return 0;
10327
28e8f3a0 10328 case FIELD_DECL:
027905b4
KL
10329 case TEMPLATE_DECL:
10330 /* Matched cases are handled by the ARG == PARM test above. */
10331 return 1;
10332
8d08fdba 10333 default:
6615c446 10334 gcc_assert (EXPR_P (parm));
c8094d83 10335
98ddffc1 10336 /* We must be looking at an expression. This can happen with
c8094d83
MS
10337 something like:
10338
98ddffc1
NS
10339 template <int I>
10340 void foo(S<I>, S<I + 2>);
050367a3 10341
98ddffc1 10342 This is a "nondeduced context":
050367a3 10343
98ddffc1 10344 [deduct.type]
c8094d83 10345
98ddffc1 10346 The nondeduced contexts are:
050367a3 10347
98ddffc1
NS
10348 --A type that is a template-id in which one or more of
10349 the template-arguments is an expression that references
c8094d83 10350 a template-parameter.
050367a3 10351
98ddffc1
NS
10352 In these cases, we assume deduction succeeded, but don't
10353 actually infer any unifications. */
74601d7c 10354
98ddffc1
NS
10355 if (!uses_template_parms (parm)
10356 && !template_args_equal (parm, arg))
10357 return 1;
10358 else
10359 return 0;
8d08fdba
MS
10360 }
10361}
8d08fdba 10362\f
4684cd27
MM
10363/* Note that DECL can be defined in this translation unit, if
10364 required. */
10365
10366static void
10367mark_definable (tree decl)
10368{
10369 tree clone;
10370 DECL_NOT_REALLY_EXTERN (decl) = 1;
10371 FOR_EACH_CLONE (clone, decl)
10372 DECL_NOT_REALLY_EXTERN (clone) = 1;
10373}
10374
03d0f4af 10375/* Called if RESULT is explicitly instantiated, or is a member of an
4684cd27 10376 explicitly instantiated class. */
03d0f4af 10377
faae18ab 10378void
3a978d72 10379mark_decl_instantiated (tree result, int extern_p)
faae18ab 10380{
415c974c 10381 SET_DECL_EXPLICIT_INSTANTIATION (result);
3ae18eaf 10382
1f6f0cb6
MM
10383 /* If this entity has already been written out, it's too late to
10384 make any modifications. */
10385 if (TREE_ASM_WRITTEN (result))
10386 return;
10387
10388 if (TREE_CODE (result) != FUNCTION_DECL)
10389 /* The TREE_PUBLIC flag for function declarations will have been
10390 set correctly by tsubst. */
10391 TREE_PUBLIC (result) = 1;
10392
346eeb15
JM
10393 /* This might have been set by an earlier implicit instantiation. */
10394 DECL_COMDAT (result) = 0;
10395
4684cd27
MM
10396 if (extern_p)
10397 DECL_NOT_REALLY_EXTERN (result) = 0;
10398 else
faae18ab 10399 {
4684cd27 10400 mark_definable (result);
1a408d07
JM
10401 /* Always make artificials weak. */
10402 if (DECL_ARTIFICIAL (result) && flag_weak)
10403 comdat_linkage (result);
a7d87521
JM
10404 /* For WIN32 we also want to put explicit instantiations in
10405 linkonce sections. */
1a408d07 10406 else if (TREE_PUBLIC (result))
b385c841 10407 maybe_make_one_only (result);
faae18ab 10408 }
c8094d83 10409
4684cd27
MM
10410 /* If EXTERN_P, then this function will not be emitted -- unless
10411 followed by an explicit instantiation, at which point its linkage
10412 will be adjusted. If !EXTERN_P, then this function will be
10413 emitted here. In neither circumstance do we want
10414 import_export_decl to adjust the linkage. */
c8094d83 10415 DECL_INTERFACE_KNOWN (result) = 1;
faae18ab
MS
10416}
10417
e5214479 10418/* Given two function templates PAT1 and PAT2, return:
6467930b
MS
10419
10420 1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10421 -1 if PAT2 is more specialized than PAT1.
e5214479
JM
10422 0 if neither is more specialized.
10423
dda04398
NS
10424 LEN indicates the number of parameters we should consider
10425 (defaulted parameters should not be considered).
10426
10427 The 1998 std underspecified function template partial ordering, and
10428 DR214 addresses the issue. We take pairs of arguments, one from
c51940a2 10429 each of the templates, and deduce them against each other. One of
dda04398
NS
10430 the templates will be more specialized if all the *other*
10431 template's arguments deduce against its arguments and at least one
10432 of its arguments *does* *not* deduce against the other template's
10433 corresponding argument. Deduction is done as for class templates.
10434 The arguments used in deduction have reference and top level cv
10435 qualifiers removed. Iff both arguments were originally reference
10436 types *and* deduction succeeds in both directions, the template
10437 with the more cv-qualified argument wins for that pairing (if
10438 neither is more cv-qualified, they both are equal). Unlike regular
10439 deduction, after all the arguments have been deduced in this way,
10440 we do *not* verify the deduced template argument values can be
10441 substituted into non-deduced contexts, nor do we have to verify
10442 that all template arguments have been deduced. */
c8094d83 10443
6467930b 10444int
dda04398
NS
10445more_specialized_fn (tree pat1, tree pat2, int len)
10446{
10447 tree decl1 = DECL_TEMPLATE_RESULT (pat1);
10448 tree decl2 = DECL_TEMPLATE_RESULT (pat2);
10449 tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
10450 tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
10451 tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
10452 tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
10453 tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
10454 tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
10455 int better1 = 0;
10456 int better2 = 0;
10457
ee307009
NS
10458 /* If only one is a member function, they are unordered. */
10459 if (DECL_FUNCTION_MEMBER_P (decl1) != DECL_FUNCTION_MEMBER_P (decl2))
10460 return 0;
c8094d83 10461
dda04398
NS
10462 /* Don't consider 'this' parameter. */
10463 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
10464 args1 = TREE_CHAIN (args1);
dda04398
NS
10465 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
10466 args2 = TREE_CHAIN (args2);
6467930b 10467
ee307009
NS
10468 /* If only one is a conversion operator, they are unordered. */
10469 if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
10470 return 0;
c8094d83 10471
dda04398
NS
10472 /* Consider the return type for a conversion function */
10473 if (DECL_CONV_FN_P (decl1))
10474 {
dda04398
NS
10475 args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
10476 args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
10477 len++;
10478 }
c8094d83 10479
dda04398 10480 processing_template_decl++;
c8094d83 10481
dda04398
NS
10482 while (len--)
10483 {
10484 tree arg1 = TREE_VALUE (args1);
10485 tree arg2 = TREE_VALUE (args2);
10486 int deduce1, deduce2;
10487 int quals1 = -1;
10488 int quals2 = -1;
6467930b 10489
dda04398
NS
10490 if (TREE_CODE (arg1) == REFERENCE_TYPE)
10491 {
10492 arg1 = TREE_TYPE (arg1);
10493 quals1 = cp_type_quals (arg1);
10494 }
c8094d83 10495
dda04398
NS
10496 if (TREE_CODE (arg2) == REFERENCE_TYPE)
10497 {
10498 arg2 = TREE_TYPE (arg2);
10499 quals2 = cp_type_quals (arg2);
10500 }
6467930b 10501
dda04398
NS
10502 if ((quals1 < 0) != (quals2 < 0))
10503 {
10504 /* Only of the args is a reference, see if we should apply
10505 array/function pointer decay to it. This is not part of
10506 DR214, but is, IMHO, consistent with the deduction rules
10507 for the function call itself, and with our earlier
10508 implementation of the underspecified partial ordering
10509 rules. (nathan). */
10510 if (quals1 >= 0)
10511 {
10512 switch (TREE_CODE (arg1))
10513 {
10514 case ARRAY_TYPE:
10515 arg1 = TREE_TYPE (arg1);
10516 /* FALLTHROUGH. */
10517 case FUNCTION_TYPE:
10518 arg1 = build_pointer_type (arg1);
10519 break;
c8094d83 10520
dda04398
NS
10521 default:
10522 break;
10523 }
10524 }
10525 else
10526 {
10527 switch (TREE_CODE (arg2))
10528 {
10529 case ARRAY_TYPE:
10530 arg2 = TREE_TYPE (arg2);
10531 /* FALLTHROUGH. */
10532 case FUNCTION_TYPE:
10533 arg2 = build_pointer_type (arg2);
10534 break;
c8094d83 10535
dda04398
NS
10536 default:
10537 break;
10538 }
10539 }
10540 }
c8094d83 10541
dda04398
NS
10542 arg1 = TYPE_MAIN_VARIANT (arg1);
10543 arg2 = TYPE_MAIN_VARIANT (arg2);
c8094d83 10544
dda04398
NS
10545 deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
10546 deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
10547
10548 if (!deduce1)
10549 better2 = -1;
10550 if (!deduce2)
10551 better1 = -1;
10552 if (better1 < 0 && better2 < 0)
10553 /* We've failed to deduce something in either direction.
10554 These must be unordered. */
10555 break;
c8094d83 10556
dda04398
NS
10557 if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
10558 {
10559 /* Deduces in both directions, see if quals can
10560 disambiguate. Pretend the worse one failed to deduce. */
10561 if ((quals1 & quals2) == quals2)
10562 deduce1 = 0;
10563 if ((quals1 & quals2) == quals1)
10564 deduce2 = 0;
10565 }
10566 if (deduce1 && !deduce2 && !better2)
10567 better2 = 1;
10568 if (deduce2 && !deduce1 && !better1)
10569 better1 = 1;
c8094d83 10570
dda04398
NS
10571 args1 = TREE_CHAIN (args1);
10572 args2 = TREE_CHAIN (args2);
10573 }
10574
10575 processing_template_decl--;
10576
10577 return (better1 > 0) - (better2 > 0);
73aad9b9 10578}
6467930b 10579
73aad9b9 10580/* Given two class template specialization list nodes PAT1 and PAT2, return:
6467930b 10581
73aad9b9
JM
10582 1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10583 -1 if PAT2 is more specialized than PAT1.
55ece1b3
KL
10584 0 if neither is more specialized.
10585
10586 FULL_ARGS is the full set of template arguments that triggers this
10587 partial ordering. */
c8094d83 10588
73aad9b9 10589int
55ece1b3 10590more_specialized_class (tree pat1, tree pat2, tree full_args)
73aad9b9
JM
10591{
10592 tree targs;
10593 int winner = 0;
10594
c8094d83 10595 /* Just like what happens for functions, if we are ordering between
baa49730
GB
10596 different class template specializations, we may encounter dependent
10597 types in the arguments, and we need our dependency check functions
10598 to behave correctly. */
10599 ++processing_template_decl;
36a117a5 10600 targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
55ece1b3 10601 add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
73aad9b9
JM
10602 if (targs)
10603 --winner;
10604
36a117a5 10605 targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
55ece1b3 10606 add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
73aad9b9 10607 if (targs)
6467930b 10608 ++winner;
baa49730 10609 --processing_template_decl;
6467930b
MS
10610
10611 return winner;
10612}
73aad9b9
JM
10613
10614/* Return the template arguments that will produce the function signature
e1467ff2 10615 DECL from the function template FN, with the explicit template
a34d3336 10616 arguments EXPLICIT_ARGS. If CHECK_RETTYPE is true, the return type must
4393e105 10617 also match. Return NULL_TREE if no satisfactory arguments could be
a34d3336 10618 found. */
c8094d83 10619
76b9a14d 10620static tree
a34d3336 10621get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
73aad9b9 10622{
98c1c668 10623 int ntparms = DECL_NTPARMS (fn);
f31c0a32 10624 tree targs = make_tree_vec (ntparms);
4393e105 10625 tree decl_type;
03017874 10626 tree decl_arg_types;
98c1c668 10627
4393e105
MM
10628 /* Substitute the explicit template arguments into the type of DECL.
10629 The call to fn_type_unification will handle substitution into the
10630 FN. */
10631 decl_type = TREE_TYPE (decl);
10632 if (explicit_args && uses_template_parms (decl_type))
10633 {
10634 tree tmpl;
10635 tree converted_args;
10636
10637 if (DECL_TEMPLATE_INFO (decl))
10638 tmpl = DECL_TI_TEMPLATE (decl);
10639 else
0e339752 10640 /* We can get here for some invalid specializations. */
4393e105
MM
10641 return NULL_TREE;
10642
10643 converted_args
10644 = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10645 explicit_args, NULL_TREE,
c2ea3a40 10646 tf_none, /*require_all_arguments=*/0));
4393e105
MM
10647 if (converted_args == error_mark_node)
10648 return NULL_TREE;
c8094d83
MS
10649
10650 decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
4393e105
MM
10651 if (decl_type == error_mark_node)
10652 return NULL_TREE;
10653 }
10654
10655 decl_arg_types = TYPE_ARG_TYPES (decl_type);
e5214479
JM
10656 /* Never do unification on the 'this' parameter. */
10657 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
03017874 10658 decl_arg_types = TREE_CHAIN (decl_arg_types);
d7684f2d 10659
c8094d83 10660 if (fn_type_unification (fn, explicit_args, targs,
03017874 10661 decl_arg_types,
8d3631f8 10662 (check_rettype || DECL_CONV_FN_P (fn)
0cbd7506 10663 ? TREE_TYPE (decl_type) : NULL_TREE),
a34d3336 10664 DEDUCE_EXACT))
76b9a14d
JM
10665 return NULL_TREE;
10666
76b9a14d
JM
10667 return targs;
10668}
10669
36a117a5
MM
10670/* Return the innermost template arguments that, when applied to a
10671 template specialization whose innermost template parameters are
9471d3e2 10672 TPARMS, and whose specialization arguments are PARMS, yield the
c8094d83 10673 ARGS.
36a117a5
MM
10674
10675 For example, suppose we have:
10676
10677 template <class T, class U> struct S {};
10678 template <class T> struct S<T*, int> {};
10679
10680 Then, suppose we want to get `S<double*, int>'. The TPARMS will be
10681 {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10682 int}. The resulting vector will be {double}, indicating that `T'
10683 is bound to `double'. */
10684
bd6dd845 10685static tree
3a978d72 10686get_class_bindings (tree tparms, tree parms, tree args)
73aad9b9 10687{
3b3ba9f0 10688 int i, ntparms = TREE_VEC_LENGTH (tparms);
f31c0a32 10689 tree vec = make_tree_vec (ntparms);
73aad9b9 10690
74601d7c 10691 if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
0cbd7506 10692 UNIFY_ALLOW_NONE))
fcfb9f96 10693 return NULL_TREE;
73aad9b9
JM
10694
10695 for (i = 0; i < ntparms; ++i)
10696 if (! TREE_VEC_ELT (vec, i))
10697 return NULL_TREE;
10698
74601d7c
KL
10699 if (verify_class_unification (vec, parms, args))
10700 return NULL_TREE;
10701
73aad9b9
JM
10702 return vec;
10703}
10704
104bf76a
MM
10705/* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10706 Pick the most specialized template, and return the corresponding
10707 instantiation, or if there is no corresponding instantiation, the
e5214479
JM
10708 template itself. If there is no most specialized template,
10709 error_mark_node is returned. If there are no templates at all,
10710 NULL_TREE is returned. */
73aad9b9
JM
10711
10712tree
3a978d72 10713most_specialized_instantiation (tree instantiations)
73aad9b9 10714{
104bf76a 10715 tree fn, champ;
73aad9b9 10716
104bf76a 10717 if (!instantiations)
73aad9b9 10718 return NULL_TREE;
c8094d83 10719
dda04398 10720 ++processing_template_decl;
c8094d83 10721
104bf76a
MM
10722 champ = instantiations;
10723 for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
73aad9b9 10724 {
dda04398 10725 int fate = 0;
c8094d83 10726
a34d3336
NS
10727 if (get_bindings (TREE_VALUE (champ),
10728 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10729 NULL_TREE, /*check_ret=*/false))
dda04398
NS
10730 fate--;
10731
a34d3336
NS
10732 if (get_bindings (TREE_VALUE (fn),
10733 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10734 NULL_TREE, /*check_ret=*/false))
dda04398 10735 fate++;
c8094d83 10736
dda04398 10737 if (fate != 1)
73aad9b9 10738 {
dda04398
NS
10739 if (!fate)
10740 /* Equally specialized, move to next function. If there
10741 is no next function, nothing's most specialized. */
10742 fn = TREE_CHAIN (fn);
104bf76a 10743 champ = fn;
73aad9b9
JM
10744 }
10745 }
c8094d83 10746
dda04398
NS
10747 if (champ)
10748 /* Now verify that champ is better than everything earlier in the
10749 instantiation list. */
10750 for (fn = instantiations; fn != champ; fn = TREE_CHAIN (fn))
a34d3336
NS
10751 if (get_bindings (TREE_VALUE (champ),
10752 DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
10753 NULL_TREE, /*check_ret=*/false)
10754 || !get_bindings (TREE_VALUE (fn),
10755 DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
10756 NULL_TREE, /*check_ret=*/false))
dda04398
NS
10757 {
10758 champ = NULL_TREE;
10759 break;
10760 }
c8094d83 10761
dda04398 10762 processing_template_decl--;
c8094d83 10763
dda04398
NS
10764 if (!champ)
10765 return error_mark_node;
73aad9b9 10766
104bf76a
MM
10767 return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10768}
10769
10770/* Return the most specialized of the list of templates in FNS that can
10771 produce an instantiation matching DECL, given the explicit template
10772 arguments EXPLICIT_ARGS. */
10773
e9659ab0 10774static tree
3a978d72 10775most_specialized (tree fns, tree decl, tree explicit_args)
104bf76a
MM
10776{
10777 tree candidates = NULL_TREE;
10778 tree fn, args;
10779
10780 for (fn = fns; fn; fn = TREE_CHAIN (fn))
10781 {
10782 tree candidate = TREE_VALUE (fn);
10783
a34d3336 10784 args = get_bindings (candidate, decl, explicit_args, /*check_ret=*/true);
104bf76a 10785 if (args)
e1b3e07d 10786 candidates = tree_cons (NULL_TREE, candidate, candidates);
104bf76a
MM
10787 }
10788
e5214479 10789 return most_specialized_instantiation (candidates);
73aad9b9
JM
10790}
10791
36a117a5 10792/* If DECL is a specialization of some template, return the most
f9a7ae04
MM
10793 general such template. Otherwise, returns NULL_TREE.
10794
10795 For example, given:
36a117a5
MM
10796
10797 template <class T> struct S { template <class U> void f(U); };
10798
10799 if TMPL is `template <class U> void S<int>::f(U)' this will return
10800 the full template. This function will not trace past partial
10801 specializations, however. For example, given in addition:
10802
10803 template <class T> struct S<T*> { template <class U> void f(U); };
10804
10805 if TMPL is `template <class U> void S<int*>::f(U)' this will return
10806 `template <class T> template <class U> S<T*>::f(U)'. */
73aad9b9 10807
612c671a 10808tree
3a978d72 10809most_general_template (tree decl)
73aad9b9 10810{
f9a7ae04
MM
10811 /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10812 an immediate specialization. */
10813 if (TREE_CODE (decl) == FUNCTION_DECL)
10814 {
10815 if (DECL_TEMPLATE_INFO (decl)) {
10816 decl = DECL_TI_TEMPLATE (decl);
10817
10818 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10819 template friend. */
10820 if (TREE_CODE (decl) != TEMPLATE_DECL)
10821 return NULL_TREE;
10822 } else
10823 return NULL_TREE;
10824 }
10825
10826 /* Look for more and more general templates. */
10827 while (DECL_TEMPLATE_INFO (decl))
10828 {
10b1d5e7
MM
10829 /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10830 (See cp-tree.h for details.) */
f9a7ae04
MM
10831 if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10832 break;
10833
6e049fcd
KL
10834 if (CLASS_TYPE_P (TREE_TYPE (decl))
10835 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10836 break;
10837
f9a7ae04
MM
10838 /* Stop if we run into an explicitly specialized class template. */
10839 if (!DECL_NAMESPACE_SCOPE_P (decl)
10840 && DECL_CONTEXT (decl)
10841 && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10842 break;
10843
10844 decl = DECL_TI_TEMPLATE (decl);
10845 }
36a117a5
MM
10846
10847 return decl;
10848}
10849
10850/* Return the most specialized of the class template specializations
10851 of TMPL which can produce an instantiation matching ARGS, or
10852 error_mark_node if the choice is ambiguous. */
10853
e9659ab0 10854static tree
3a978d72 10855most_specialized_class (tree tmpl, tree args)
36a117a5
MM
10856{
10857 tree list = NULL_TREE;
10858 tree t;
10859 tree champ;
73aad9b9
JM
10860 int fate;
10861
36a117a5
MM
10862 tmpl = most_general_template (tmpl);
10863 for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
73aad9b9 10864 {
c8094d83 10865 tree spec_args
36a117a5
MM
10866 = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10867 if (spec_args)
73aad9b9 10868 {
1f8f4a0b 10869 list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
73aad9b9
JM
10870 TREE_TYPE (list) = TREE_TYPE (t);
10871 }
10872 }
10873
10874 if (! list)
10875 return NULL_TREE;
10876
10877 t = list;
10878 champ = t;
10879 t = TREE_CHAIN (t);
10880 for (; t; t = TREE_CHAIN (t))
10881 {
55ece1b3 10882 fate = more_specialized_class (champ, t, args);
73aad9b9
JM
10883 if (fate == 1)
10884 ;
10885 else
10886 {
10887 if (fate == 0)
10888 {
10889 t = TREE_CHAIN (t);
10890 if (! t)
10891 return error_mark_node;
10892 }
10893 champ = t;
10894 }
10895 }
10896
10897 for (t = list; t && t != champ; t = TREE_CHAIN (t))
10898 {
55ece1b3 10899 fate = more_specialized_class (champ, t, args);
73aad9b9
JM
10900 if (fate != 1)
10901 return error_mark_node;
10902 }
10903
10904 return champ;
10905}
10906
eb8845be 10907/* Explicitly instantiate DECL. */
e92cc029 10908
8d08fdba 10909void
eb8845be 10910do_decl_instantiation (tree decl, tree storage)
8d08fdba 10911{
8d08fdba 10912 tree result = NULL_TREE;
faae18ab 10913 int extern_p = 0;
e8abc66f 10914
3fa56191 10915 if (!decl)
dc957d14 10916 /* An error occurred, for which grokdeclarator has already issued
3fa56191
MM
10917 an appropriate message. */
10918 return;
10919 else if (! DECL_LANG_SPECIFIC (decl))
ec255269 10920 {
0f51ccfc 10921 error ("explicit instantiation of non-template %q#D", decl);
ec255269
MS
10922 return;
10923 }
03d0f4af 10924 else if (TREE_CODE (decl) == VAR_DECL)
6633d636 10925 {
03d0f4af
MM
10926 /* There is an asymmetry here in the way VAR_DECLs and
10927 FUNCTION_DECLs are handled by grokdeclarator. In the case of
10928 the latter, the DECL we get back will be marked as a
10929 template instantiation, and the appropriate
10930 DECL_TEMPLATE_INFO will be set up. This does not happen for
10931 VAR_DECLs so we do the lookup here. Probably, grokdeclarator
10932 should handle VAR_DECLs as it currently handles
10933 FUNCTION_DECLs. */
86ac0575 10934 result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
e0860732 10935 if (!result || TREE_CODE (result) != VAR_DECL)
03d0f4af 10936 {
0f51ccfc 10937 error ("no matching template for %qD found", decl);
03d0f4af
MM
10938 return;
10939 }
6633d636
MS
10940 }
10941 else if (TREE_CODE (decl) != FUNCTION_DECL)
10942 {
0f51ccfc 10943 error ("explicit instantiation of %q#D", decl);
6633d636
MS
10944 return;
10945 }
03d0f4af
MM
10946 else
10947 result = decl;
672476cb 10948
03d0f4af 10949 /* Check for various error cases. Note that if the explicit
0e339752 10950 instantiation is valid the RESULT will currently be marked as an
03d0f4af
MM
10951 *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10952 until we get here. */
10953
10954 if (DECL_TEMPLATE_SPECIALIZATION (result))
672476cb 10955 {
07782718
KL
10956 /* DR 259 [temp.spec].
10957
10958 Both an explicit instantiation and a declaration of an explicit
10959 specialization shall not appear in a program unless the explicit
10960 instantiation follows a declaration of the explicit specialization.
03d0f4af 10961
07782718
KL
10962 For a given set of template parameters, if an explicit
10963 instantiation of a template appears after a declaration of an
10964 explicit specialization for that template, the explicit
10965 instantiation has no effect. */
672476cb
MM
10966 return;
10967 }
03d0f4af
MM
10968 else if (DECL_EXPLICIT_INSTANTIATION (result))
10969 {
10970 /* [temp.spec]
98c1c668 10971
03d0f4af 10972 No program shall explicitly instantiate any template more
c8094d83 10973 than once.
03d0f4af 10974
4684cd27
MM
10975 We check DECL_NOT_REALLY_EXTERN so as not to complain when
10976 the first instantiation was `extern' and the second is not,
10977 and EXTERN_P for the opposite case. */
10978 if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
0f51ccfc 10979 pedwarn ("duplicate explicit instantiation of %q#D", result);
4684cd27
MM
10980 /* If an "extern" explicit instantiation follows an ordinary
10981 explicit instantiation, the template is instantiated. */
10982 if (extern_p)
03d0f4af
MM
10983 return;
10984 }
10985 else if (!DECL_IMPLICIT_INSTANTIATION (result))
faae18ab 10986 {
0f51ccfc 10987 error ("no matching template for %qD found", result);
faae18ab
MS
10988 return;
10989 }
03d0f4af 10990 else if (!DECL_TEMPLATE_INFO (result))
6633d636 10991 {
0f51ccfc 10992 pedwarn ("explicit instantiation of non-template %q#D", result);
6633d636
MS
10993 return;
10994 }
10995
f0e01782 10996 if (storage == NULL_TREE)
00595019 10997 ;
faae18ab 10998 else if (storage == ridpointers[(int) RID_EXTERN])
03d0f4af 10999 {
c02f5e29 11000 if (pedantic && !in_system_header)
0f51ccfc 11001 pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
0cbd7506 11002 "instantiations");
03d0f4af
MM
11003 extern_p = 1;
11004 }
f0e01782 11005 else
0f51ccfc 11006 error ("storage class %qD applied to template instantiation", storage);
5566b478 11007
5566b478 11008 mark_decl_instantiated (result, extern_p);
c91a56d2 11009 if (! extern_p)
415c974c 11010 instantiate_decl (result, /*defer_ok=*/1, /*undefined_ok=*/0);
7177d104
MS
11011}
11012
faae18ab 11013void
3a978d72 11014mark_class_instantiated (tree t, int extern_p)
faae18ab
MS
11015{
11016 SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
eb773359
JM
11017 SET_CLASSTYPE_INTERFACE_KNOWN (t);
11018 CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
faae18ab
MS
11019 TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
11020 if (! extern_p)
11021 {
11022 CLASSTYPE_DEBUG_REQUESTED (t) = 1;
11023 rest_of_type_compilation (t, 1);
11024 }
c8094d83 11025}
e8abc66f 11026
5e0c54e5 11027/* Called from do_type_instantiation through binding_table_foreach to
9bcb9aae 11028 do recursive instantiation for the type bound in ENTRY. */
5e0c54e5
GDR
11029static void
11030bt_instantiate_type_proc (binding_entry entry, void *data)
11031{
11032 tree storage = *(tree *) data;
11033
11034 if (IS_AGGR_TYPE (entry->type)
11035 && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
11036 do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
11037}
11038
415c974c
MA
11039/* Called from do_type_instantiation to instantiate a member
11040 (a member function or a static member variable) of an
03fd3f84 11041 explicitly instantiated class template. */
415c974c
MA
11042static void
11043instantiate_class_member (tree decl, int extern_p)
11044{
11045 mark_decl_instantiated (decl, extern_p);
415c974c
MA
11046 if (! extern_p)
11047 instantiate_decl (decl, /*defer_ok=*/1, /* undefined_ok=*/1);
11048}
11049
a1bcc528
JM
11050/* Perform an explicit instantiation of template class T. STORAGE, if
11051 non-null, is the RID for extern, inline or static. COMPLAIN is
838dfd8a 11052 nonzero if this is called from the parser, zero if called recursively,
a1bcc528 11053 since the standard is unclear (as detailed below). */
c8094d83 11054
7177d104 11055void
3a978d72 11056do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
7177d104 11057{
e8abc66f
MS
11058 int extern_p = 0;
11059 int nomem_p = 0;
5566b478 11060 int static_p = 0;
4746cf84 11061 int previous_instantiation_extern_p = 0;
5566b478 11062
ca79f85d
JM
11063 if (TREE_CODE (t) == TYPE_DECL)
11064 t = TREE_TYPE (t);
11065
7ddedda4 11066 if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
ca79f85d 11067 {
0f51ccfc 11068 error ("explicit instantiation of non-template type %qT", t);
ca79f85d
JM
11069 return;
11070 }
11071
5566b478 11072 complete_type (t);
7177d104 11073
d0f062fb 11074 if (!COMPLETE_TYPE_P (t))
f0e01782 11075 {
c2ea3a40 11076 if (complain & tf_error)
0f51ccfc 11077 error ("explicit instantiation of %q#T before definition of template",
0cbd7506 11078 t);
f0e01782
MS
11079 return;
11080 }
11081
03d0f4af 11082 if (storage != NULL_TREE)
f0e01782 11083 {
c02f5e29 11084 if (pedantic && !in_system_header)
c8094d83 11085 pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
0cbd7506 11086 storage);
03d0f4af
MM
11087
11088 if (storage == ridpointers[(int) RID_INLINE])
11089 nomem_p = 1;
11090 else if (storage == ridpointers[(int) RID_EXTERN])
11091 extern_p = 1;
11092 else if (storage == ridpointers[(int) RID_STATIC])
11093 static_p = 1;
11094 else
11095 {
0f51ccfc 11096 error ("storage class %qD applied to template instantiation",
0cbd7506 11097 storage);
03d0f4af
MM
11098 extern_p = 0;
11099 }
f0e01782
MS
11100 }
11101
370af2d5 11102 if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
03d0f4af 11103 {
07782718 11104 /* DR 259 [temp.spec].
a292b002 11105
07782718
KL
11106 Both an explicit instantiation and a declaration of an explicit
11107 specialization shall not appear in a program unless the explicit
11108 instantiation follows a declaration of the explicit specialization.
11109
11110 For a given set of template parameters, if an explicit
11111 instantiation of a template appears after a declaration of an
11112 explicit specialization for that template, the explicit
11113 instantiation has no effect. */
03d0f4af
MM
11114 return;
11115 }
11116 else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
44a8d0b3 11117 {
03d0f4af
MM
11118 /* [temp.spec]
11119
11120 No program shall explicitly instantiate any template more
c8094d83 11121 than once.
03d0f4af 11122
0cbd7506 11123 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
4746cf84 11124 instantiation was `extern'. If EXTERN_P then the second is.
4684cd27 11125 These cases are OK. */
4746cf84
MA
11126 previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
11127
11128 if (!previous_instantiation_extern_p && !extern_p
c2ea3a40 11129 && (complain & tf_error))
0f51ccfc 11130 pedwarn ("duplicate explicit instantiation of %q#T", t);
c8094d83 11131
03d0f4af
MM
11132 /* If we've already instantiated the template, just return now. */
11133 if (!CLASSTYPE_INTERFACE_ONLY (t))
11134 return;
44a8d0b3 11135 }
e8abc66f 11136
03d0f4af 11137 mark_class_instantiated (t, extern_p);
03d0f4af 11138
e8abc66f
MS
11139 if (nomem_p)
11140 return;
11141
7177d104 11142 {
db5ae43f 11143 tree tmp;
5566b478 11144
03d0f4af
MM
11145 /* In contrast to implicit instantiation, where only the
11146 declarations, and not the definitions, of members are
11147 instantiated, we have here:
11148
0cbd7506 11149 [temp.explicit]
03d0f4af
MM
11150
11151 The explicit instantiation of a class template specialization
11152 implies the instantiation of all of its members not
11153 previously explicitly specialized in the translation unit
c8094d83 11154 containing the explicit instantiation.
03d0f4af
MM
11155
11156 Of course, we can't instantiate member template classes, since
11157 we don't have any arguments for them. Note that the standard
dc957d14 11158 is unclear on whether the instantiation of the members are
415c974c 11159 *explicit* instantiations or not. However, the most natural
03fd3f84 11160 interpretation is that it should be an explicit instantiation. */
03d0f4af 11161
5566b478
MS
11162 if (! static_p)
11163 for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
a7d87521 11164 if (TREE_CODE (tmp) == FUNCTION_DECL
1f109f0f 11165 && DECL_TEMPLATE_INSTANTIATION (tmp))
415c974c 11166 instantiate_class_member (tmp, extern_p);
5566b478
MS
11167
11168 for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
11169 if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
415c974c 11170 instantiate_class_member (tmp, extern_p);
7177d104 11171
5e0c54e5
GDR
11172 if (CLASSTYPE_NESTED_UTDS (t))
11173 binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
0cbd7506 11174 bt_instantiate_type_proc, &storage);
a292b002 11175 }
8d08fdba 11176}
a28e3c7f 11177
36a117a5
MM
11178/* Given a function DECL, which is a specialization of TMPL, modify
11179 DECL to be a re-instantiation of TMPL with the same template
11180 arguments. TMPL should be the template into which tsubst'ing
11181 should occur for DECL, not the most general template.
830bfa74
MM
11182
11183 One reason for doing this is a scenario like this:
11184
11185 template <class T>
11186 void f(const T&, int i);
11187
11188 void g() { f(3, 7); }
11189
11190 template <class T>
11191 void f(const T& t, const int i) { }
11192
11193 Note that when the template is first instantiated, with
11194 instantiate_template, the resulting DECL will have no name for the
11195 first parameter, and the wrong type for the second. So, when we go
11196 to instantiate the DECL, we regenerate it. */
11197
e9659ab0 11198static void
3a978d72 11199regenerate_decl_from_template (tree decl, tree tmpl)
830bfa74 11200{
f9a7ae04
MM
11201 /* The arguments used to instantiate DECL, from the most general
11202 template. */
830bfa74 11203 tree args;
830bfa74 11204 tree code_pattern;
830bfa74
MM
11205
11206 args = DECL_TI_ARGS (decl);
11207 code_pattern = DECL_TEMPLATE_RESULT (tmpl);
11208
2b907f5c
KL
11209 /* Make sure that we can see identifiers, and compute access
11210 correctly. */
11211 push_access_scope (decl);
11212
c7222c02
MM
11213 if (TREE_CODE (decl) == FUNCTION_DECL)
11214 {
11215 tree decl_parm;
11216 tree pattern_parm;
11217 tree specs;
11218 int args_depth;
11219 int parms_depth;
c8094d83 11220
c7222c02 11221 args_depth = TMPL_ARGS_DEPTH (args);
c8094d83 11222 parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
c7222c02
MM
11223 if (args_depth > parms_depth)
11224 args = get_innermost_template_args (args, parms_depth);
11225
11226 specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
11227 args, tf_error, NULL_TREE);
11228 if (specs)
11229 TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
11230 specs);
11231
11232 /* Merge parameter declarations. */
c8094d83 11233 decl_parm = skip_artificial_parms_for (decl,
c7222c02 11234 DECL_ARGUMENTS (decl));
c8094d83 11235 pattern_parm
c7222c02
MM
11236 = skip_artificial_parms_for (code_pattern,
11237 DECL_ARGUMENTS (code_pattern));
11238 while (decl_parm)
11239 {
11240 tree parm_type;
b17bba6d 11241 tree attributes;
c7222c02
MM
11242
11243 if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
11244 DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
11245 parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
11246 NULL_TREE);
02bab9db 11247 parm_type = type_decays_to (parm_type);
c7222c02
MM
11248 if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11249 TREE_TYPE (decl_parm) = parm_type;
b17bba6d
MM
11250 attributes = DECL_ATTRIBUTES (pattern_parm);
11251 if (DECL_ATTRIBUTES (decl_parm) != attributes)
11252 {
11253 DECL_ATTRIBUTES (decl_parm) = attributes;
11254 cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
11255 }
c7222c02
MM
11256 decl_parm = TREE_CHAIN (decl_parm);
11257 pattern_parm = TREE_CHAIN (pattern_parm);
11258 }
830bfa74 11259
c7222c02
MM
11260 /* Merge additional specifiers from the CODE_PATTERN. */
11261 if (DECL_DECLARED_INLINE_P (code_pattern)
11262 && !DECL_DECLARED_INLINE_P (decl))
11263 DECL_DECLARED_INLINE_P (decl) = 1;
11264 if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11265 DECL_INLINE (decl) = 1;
11266 }
11267 else if (TREE_CODE (decl) == VAR_DECL)
830bfa74 11268 {
c7222c02
MM
11269 if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11270 && DECL_INITIAL (code_pattern))
c8094d83
MS
11271 DECL_INITIAL (decl) =
11272 tsubst_expr (DECL_INITIAL (code_pattern), args,
17bbb839 11273 tf_error, DECL_TI_TEMPLATE (decl));
830bfa74 11274 }
c7222c02
MM
11275 else
11276 gcc_unreachable ();
36a117a5 11277
2b59fc25 11278 pop_access_scope (decl);
830bfa74
MM
11279}
11280
a723baf1
MM
11281/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11282 substituted to get DECL. */
11283
d58b7c2d 11284tree
a723baf1
MM
11285template_for_substitution (tree decl)
11286{
11287 tree tmpl = DECL_TI_TEMPLATE (decl);
11288
11289 /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11290 for the instantiation. This is not always the most general
11291 template. Consider, for example:
11292
0cbd7506 11293 template <class T>
a723baf1 11294 struct S { template <class U> void f();
0cbd7506 11295 template <> void f<int>(); };
a723baf1
MM
11296
11297 and an instantiation of S<double>::f<int>. We want TD to be the
11298 specialization S<T>::f<int>, not the more general S<T>::f<U>. */
11299 while (/* An instantiation cannot have a definition, so we need a
11300 more general template. */
11301 DECL_TEMPLATE_INSTANTIATION (tmpl)
11302 /* We must also deal with friend templates. Given:
11303
c8094d83 11304 template <class T> struct S {
a723baf1
MM
11305 template <class U> friend void f() {};
11306 };
11307
11308 S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11309 so far as the language is concerned, but that's still
11310 where we get the pattern for the instantiation from. On
11311 other hand, if the definition comes outside the class, say:
11312
c8094d83 11313 template <class T> struct S {
a723baf1
MM
11314 template <class U> friend void f();
11315 };
11316 template <class U> friend void f() {}
11317
11318 we don't need to look any further. That's what the check for
11319 DECL_INITIAL is for. */
11320 || (TREE_CODE (decl) == FUNCTION_DECL
11321 && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11322 && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11323 {
11324 /* The present template, TD, should not be a definition. If it
11325 were a definition, we should be using it! Note that we
11326 cannot restructure the loop to just keep going until we find
11327 a template with a definition, since that might go too far if
11328 a specialization was declared, but not defined. */
50bc768d
NS
11329 gcc_assert (TREE_CODE (decl) != VAR_DECL
11330 || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
c8094d83 11331
a723baf1
MM
11332 /* Fetch the more general template. */
11333 tmpl = DECL_TI_TEMPLATE (tmpl);
11334 }
11335
11336 return tmpl;
11337}
11338
16d53b64 11339/* Produce the definition of D, a _DECL generated from a template. If
838dfd8a 11340 DEFER_OK is nonzero, then we don't have to actually do the
415c974c
MA
11341 instantiation now; we just have to do it sometime. Normally it is
11342 an error if this is an explicit instantiation but D is undefined.
11343 If UNDEFINED_OK is nonzero, then instead we treat it as an implicit
11344 instantiation. UNDEFINED_OK is nonzero only if we are being used
11345 to instantiate the members of an explicitly instantiated class
03fd3f84 11346 template. */
415c974c 11347
f84b4be9 11348
a28e3c7f 11349tree
415c974c 11350instantiate_decl (tree d, int defer_ok, int undefined_ok)
a28e3c7f 11351{
36a117a5 11352 tree tmpl = DECL_TI_TEMPLATE (d);
65f8b0fb
MM
11353 tree gen_args;
11354 tree args;
830bfa74 11355 tree td;
36a117a5
MM
11356 tree code_pattern;
11357 tree spec;
11358 tree gen_tmpl;
5566b478 11359 int pattern_defined;
31a714f6 11360 int need_push;
82a98427 11361 location_t saved_loc = input_location;
c8094d83 11362
36a117a5
MM
11363 /* This function should only be used to instantiate templates for
11364 functions and static member variables. */
50bc768d
NS
11365 gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11366 || TREE_CODE (d) == VAR_DECL);
36a117a5 11367
cec24319
MM
11368 /* Variables are never deferred; if instantiation is required, they
11369 are instantiated right away. That allows for better code in the
11370 case that an expression refers to the value of the variable --
11371 if the variable has a constant value the referring expression can
11372 take advantage of that fact. */
11373 if (TREE_CODE (d) == VAR_DECL)
11374 defer_ok = 0;
11375
db9b2174
MM
11376 /* Don't instantiate cloned functions. Instead, instantiate the
11377 functions they cloned. */
11378 if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11379 d = DECL_CLONED_FUNCTION (d);
11380
fbf1c34b 11381 if (DECL_TEMPLATE_INSTANTIATED (d))
03d0f4af 11382 /* D has already been instantiated. It might seem reasonable to
dc957d14 11383 check whether or not D is an explicit instantiation, and, if so,
03d0f4af
MM
11384 stop here. But when an explicit instantiation is deferred
11385 until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11386 is set, even though we still need to do the instantiation. */
36a117a5
MM
11387 return d;
11388
11389 /* If we already have a specialization of this declaration, then
11390 there's no reason to instantiate it. Note that
11391 retrieve_specialization gives us both instantiations and
11392 specializations, so we must explicitly check
11393 DECL_TEMPLATE_SPECIALIZATION. */
11394 gen_tmpl = most_general_template (tmpl);
65f8b0fb 11395 gen_args = DECL_TI_ARGS (d);
c7222c02
MM
11396 spec = retrieve_specialization (gen_tmpl, gen_args,
11397 /*class_specializations_p=*/false);
36a117a5
MM
11398 if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11399 return spec;
11400
11401 /* This needs to happen before any tsubsting. */
11402 if (! push_tinst_level (d))
11403 return d;
11404
297a5329
JM
11405 timevar_push (TV_PARSE);
11406
c1f927e8 11407 /* We may be in the middle of deferred access check. Disable it now. */
7d021397
KL
11408 push_deferring_access_checks (dk_no_deferred);
11409
4d85e00e 11410 /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
a723baf1
MM
11411 for the instantiation. */
11412 td = template_for_substitution (d);
fee23f54 11413 code_pattern = DECL_TEMPLATE_RESULT (td);
27bb8339 11414
76d3baad
KL
11415 if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11416 || DECL_TEMPLATE_SPECIALIZATION (td))
649fc72d
NS
11417 /* In the case of a friend template whose definition is provided
11418 outside the class, we may have too many arguments. Drop the
76d3baad 11419 ones we don't need. The same is true for specializations. */
649fc72d
NS
11420 args = get_innermost_template_args
11421 (gen_args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
11422 else
11423 args = gen_args;
65f8b0fb 11424
5566b478 11425 if (TREE_CODE (d) == FUNCTION_DECL)
39c76b4f 11426 pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
5566b478 11427 else
36a117a5 11428 pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
4684cd27
MM
11429 /* Unless an explicit instantiation directive has already determined
11430 the linkage of D, remember that a definition is available for
11431 this entity. */
c8094d83 11432 if (pattern_defined
4684cd27
MM
11433 && !DECL_INTERFACE_KNOWN (d)
11434 && !DECL_NOT_REALLY_EXTERN (d))
11435 mark_definable (d);
de22184b 11436
f31686a3 11437 input_location = DECL_SOURCE_LOCATION (d);
de22184b 11438
4684cd27 11439 if (! pattern_defined && DECL_EXPLICIT_INSTANTIATION (d) && undefined_ok)
5566b478 11440 {
4684cd27
MM
11441 DECL_NOT_REALLY_EXTERN (d) = 0;
11442 SET_DECL_IMPLICIT_INSTANTIATION (d);
5566b478
MS
11443 }
11444
4f2b0fb2
NS
11445 if (!defer_ok)
11446 {
11447 /* Recheck the substitutions to obtain any warning messages
11448 about ignoring cv qualifiers. */
11449 tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11450 tree type = TREE_TYPE (gen);
11451
0e902d98 11452 /* Make sure that we can see identifiers, and compute access
2b59fc25
KL
11453 correctly. D is already the target FUNCTION_DECL with the
11454 right context. */
11455 push_access_scope (d);
0e902d98 11456
4f2b0fb2
NS
11457 if (TREE_CODE (gen) == FUNCTION_DECL)
11458 {
65f8b0fb
MM
11459 tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11460 tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
4f2b0fb2
NS
11461 tf_error | tf_warning, d);
11462 /* Don't simply tsubst the function type, as that will give
11463 duplicate warnings about poor parameter qualifications.
11464 The function arguments are the same as the decl_arguments
c6002625 11465 without the top level cv qualifiers. */
4f2b0fb2
NS
11466 type = TREE_TYPE (type);
11467 }
65f8b0fb 11468 tsubst (type, gen_args, tf_error | tf_warning, d);
0e902d98 11469
2b59fc25 11470 pop_access_scope (d);
4f2b0fb2 11471 }
c8094d83 11472
4684cd27
MM
11473 /* We should have set up DECL_INITIAL in instantiate_class_template
11474 for in-class definitions of static data members. */
c8094d83 11475 gcc_assert (!(TREE_CODE (d) == VAR_DECL
50bc768d
NS
11476 && DECL_INITIALIZED_IN_CLASS_P (d)
11477 && DECL_INITIAL (d) == NULL_TREE));
4684cd27
MM
11478
11479 /* Do not instantiate templates that we know will be defined
11480 elsewhere. */
11481 if (DECL_INTERFACE_KNOWN (d)
11482 && DECL_REALLY_EXTERN (d)
c8094d83 11483 && ! (TREE_CODE (d) == FUNCTION_DECL
4684cd27 11484 && DECL_INLINE (d)))
930cd796 11485 goto out;
16d53b64
MM
11486 /* Defer all other templates, unless we have been explicitly
11487 forbidden from doing so. We restore the source position here
11488 because it's used by add_pending_template. */
11489 else if (! pattern_defined || defer_ok)
11490 {
82a98427 11491 input_location = saved_loc;
c27be9b9 11492
c8094d83 11493 if (at_eof && !pattern_defined
03d0f4af
MM
11494 && DECL_EXPLICIT_INSTANTIATION (d))
11495 /* [temp.explicit]
11496
11497 The definition of a non-exported function template, a
11498 non-exported member function template, or a non-exported
11499 member function or static data member of a class template
11500 shall be present in every translation unit in which it is
11501 explicitly instantiated. */
33bd39a2 11502 pedwarn
0f51ccfc 11503 ("explicit instantiation of %qD but no definition available", d);
03d0f4af 11504
5566b478 11505 add_pending_template (d);
de22184b 11506 goto out;
5566b478 11507 }
4684cd27
MM
11508 /* Tell the repository that D is available in this translation unit
11509 -- and see if it is supposed to be instantiated here. */
11510 if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11511 {
11512 /* In a PCH file, despite the fact that the repository hasn't
11513 requested instantiation in the PCH it is still possible that
11514 an instantiation will be required in a file that includes the
11515 PCH. */
11516 if (pch_file)
11517 add_pending_template (d);
11518 /* Instantiate inline functions so that the inliner can do its
11519 job, even though we'll not be emitting a copy of this
11520 function. */
c2a124b2 11521 if (!(TREE_CODE (d) == FUNCTION_DECL
c8094d83 11522 && flag_inline_trees
c2a124b2 11523 && DECL_DECLARED_INLINE_P (d)))
4684cd27
MM
11524 goto out;
11525 }
5566b478 11526
6de9cd9a 11527 need_push = !cfun || !global_bindings_p ();
31a714f6
MM
11528 if (need_push)
11529 push_to_top_level ();
414ea4aa 11530
66e0c440
KL
11531 /* Mark D as instantiated so that recursive calls to
11532 instantiate_decl do not try to instantiate it again. */
11533 DECL_TEMPLATE_INSTANTIATED (d) = 1;
11534
2b0a63a3
MM
11535 /* Regenerate the declaration in case the template has been modified
11536 by a subsequent redeclaration. */
11537 regenerate_decl_from_template (d, td);
4684cd27 11538
120722ac 11539 /* We already set the file and line above. Reset them now in case
6de9cd9a 11540 they changed as a result of calling regenerate_decl_from_template. */
f31686a3 11541 input_location = DECL_SOURCE_LOCATION (d);
5156628f 11542
5566b478
MS
11543 if (TREE_CODE (d) == VAR_DECL)
11544 {
1d62c33e
MM
11545 /* Clear out DECL_RTL; whatever was there before may not be right
11546 since we've reset the type of the declaration. */
11547 SET_DECL_RTL (d, NULL_RTX);
5566b478 11548 DECL_IN_AGGR_P (d) = 0;
ea56c40c 11549
4684cd27
MM
11550 /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11551 initializer. That function will defer actual emission until
11552 we have a chance to determine linkage. */
11553 DECL_EXTERNAL (d) = 0;
11554
73a8adb6 11555 /* Enter the scope of D so that access-checking works correctly. */
4684cd27 11556 push_nested_class (DECL_CONTEXT (d));
c8094d83
MS
11557 cp_finish_decl (d,
11558 (!DECL_INITIALIZED_IN_CLASS_P (d)
4684cd27
MM
11559 ? DECL_INITIAL (d) : NULL_TREE),
11560 NULL_TREE, 0);
73a8adb6 11561 pop_nested_class ();
5566b478
MS
11562 }
11563 else if (TREE_CODE (d) == FUNCTION_DECL)
11564 {
6bbf1598 11565 htab_t saved_local_specializations;
a723baf1
MM
11566 tree subst_decl;
11567 tree tmpl_parm;
11568 tree spec_parm;
6bbf1598
MM
11569
11570 /* Save away the current list, in case we are instantiating one
11571 template from within the body of another. */
11572 saved_local_specializations = local_specializations;
11573
6dfbb909 11574 /* Set up the list of local specializations. */
c8094d83 11575 local_specializations = htab_create (37,
69f794a7 11576 hash_local_specialization,
a723baf1 11577 eq_local_specializations,
6dfbb909
MM
11578 NULL);
11579
558475f0 11580 /* Set up context. */
058b15c1 11581 start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
5566b478 11582
a723baf1
MM
11583 /* Create substitution entries for the parameters. */
11584 subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11585 tmpl_parm = DECL_ARGUMENTS (subst_decl);
11586 spec_parm = DECL_ARGUMENTS (d);
11587 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11588 {
11589 register_local_specialization (spec_parm, tmpl_parm);
11590 spec_parm = skip_artificial_parms_for (d, spec_parm);
11591 tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11592 }
11593 while (tmpl_parm)
11594 {
11595 register_local_specialization (spec_parm, tmpl_parm);
11596 tmpl_parm = TREE_CHAIN (tmpl_parm);
11597 spec_parm = TREE_CHAIN (spec_parm);
11598 }
50bc768d 11599 gcc_assert (!spec_parm);
a723baf1 11600
558475f0
MM
11601 /* Substitute into the body of the function. */
11602 tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
c2ea3a40 11603 tf_error | tf_warning, tmpl);
558475f0 11604
6dfbb909
MM
11605 /* We don't need the local specializations any more. */
11606 htab_delete (local_specializations);
6bbf1598 11607 local_specializations = saved_local_specializations;
6dfbb909 11608
4d6abc1c 11609 /* Finish the function. */
b2dd096b 11610 d = finish_function (0);
8cd2462c 11611 expand_or_defer_fn (d);
5566b478
MS
11612 }
11613
971cbc14
MM
11614 /* We're not deferring instantiation any more. */
11615 TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11616
31a714f6
MM
11617 if (need_push)
11618 pop_from_top_level ();
414ea4aa 11619
de22184b 11620out:
82a98427 11621 input_location = saved_loc;
7d021397 11622 pop_deferring_access_checks ();
5566b478 11623 pop_tinst_level ();
a28e3c7f 11624
297a5329
JM
11625 timevar_pop (TV_PARSE);
11626
a28e3c7f
MS
11627 return d;
11628}
5566b478 11629
0aafb128 11630/* Run through the list of templates that we wish we could
35046a54
KL
11631 instantiate, and instantiate any we can. RETRIES is the
11632 number of times we retry pending template instantiation. */
0aafb128 11633
35046a54
KL
11634void
11635instantiate_pending_templates (int retries)
0aafb128
MM
11636{
11637 tree *t;
46ccf50a 11638 tree last = NULL_TREE;
0aafb128 11639 int reconsider;
aad626f7 11640 location_t saved_loc = input_location;
12af7ba3 11641 int saved_in_system_header = in_system_header;
35046a54
KL
11642
11643 /* Instantiating templates may trigger vtable generation. This in turn
11644 may require further template instantiations. We place a limit here
11645 to avoid infinite loop. */
11646 if (pending_templates && retries >= max_tinst_depth)
11647 {
dee15844
JM
11648 error ("template instantiation depth exceeds maximum of %d"
11649 " instantiating %q+D, possibly from virtual table generation"
11650 " (use -ftemplate-depth-NN to increase the maximum)",
11651 max_tinst_depth, TREE_VALUE (pending_templates));
35046a54
KL
11652 return;
11653 }
11654
c8094d83 11655 do
0aafb128
MM
11656 {
11657 reconsider = 0;
11658
11659 t = &pending_templates;
11660 while (*t)
11661 {
0aafb128
MM
11662 tree instantiation = TREE_VALUE (*t);
11663
3ae18eaf 11664 reopen_tinst_level (TREE_PURPOSE (*t));
0aafb128 11665
2f939d94 11666 if (TYPE_P (instantiation))
0aafb128
MM
11667 {
11668 tree fn;
11669
d0f062fb 11670 if (!COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11671 {
11672 instantiate_class_template (instantiation);
11673 if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
c8094d83 11674 for (fn = TYPE_METHODS (instantiation);
0aafb128
MM
11675 fn;
11676 fn = TREE_CHAIN (fn))
11677 if (! DECL_ARTIFICIAL (fn))
061cae1f
NS
11678 instantiate_decl (fn, /*defer_ok=*/0,
11679 /*undefined_ok=*/0);
d0f062fb 11680 if (COMPLETE_TYPE_P (instantiation))
35046a54 11681 reconsider = 1;
0aafb128
MM
11682 }
11683
d0f062fb 11684 if (COMPLETE_TYPE_P (instantiation))
0aafb128
MM
11685 /* If INSTANTIATION has been instantiated, then we don't
11686 need to consider it again in the future. */
11687 *t = TREE_CHAIN (*t);
46ccf50a
JM
11688 else
11689 {
11690 last = *t;
11691 t = &TREE_CHAIN (*t);
11692 }
0aafb128
MM
11693 }
11694 else
11695 {
16d53b64 11696 if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
11697 && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11698 {
16d53b64 11699 instantiation = instantiate_decl (instantiation,
415c974c
MA
11700 /*defer_ok=*/0,
11701 /*undefined_ok=*/0);
0aafb128 11702 if (DECL_TEMPLATE_INSTANTIATED (instantiation))
35046a54 11703 reconsider = 1;
0aafb128
MM
11704 }
11705
16d53b64 11706 if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
0aafb128
MM
11707 || DECL_TEMPLATE_INSTANTIATED (instantiation))
11708 /* If INSTANTIATION has been instantiated, then we don't
11709 need to consider it again in the future. */
11710 *t = TREE_CHAIN (*t);
46ccf50a
JM
11711 else
11712 {
11713 last = *t;
11714 t = &TREE_CHAIN (*t);
11715 }
0aafb128 11716 }
84e5ca0f
NS
11717 tinst_depth = 0;
11718 current_tinst_level = NULL_TREE;
0aafb128 11719 }
46ccf50a 11720 last_pending_template = last;
c8094d83 11721 }
0aafb128
MM
11722 while (reconsider);
11723
aad626f7 11724 input_location = saved_loc;
12af7ba3 11725 in_system_header = saved_in_system_header;
0aafb128
MM
11726}
11727
fd74ca0b
MM
11728/* Substitute ARGVEC into T, which is a list of initializers for
11729 either base class or a non-static data member. The TREE_PURPOSEs
11730 are DECLs, and the TREE_VALUEs are the initializer values. Used by
11731 instantiate_decl. */
4393e105 11732
824b9a4c 11733static tree
3a978d72 11734tsubst_initializer_list (tree t, tree argvec)
5566b478 11735{
2282d28d 11736 tree inits = NULL_TREE;
5566b478
MS
11737
11738 for (; t; t = TREE_CHAIN (t))
11739 {
fd74ca0b
MM
11740 tree decl;
11741 tree init;
fd74ca0b 11742
c2ea3a40 11743 decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
fd74ca0b 11744 NULL_TREE);
1f5a253a
NS
11745 decl = expand_member_init (decl);
11746 if (decl && !DECL_P (decl))
11747 in_base_initializer = 1;
c8094d83 11748
c2ea3a40 11749 init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
fd74ca0b 11750 NULL_TREE);
1f5a253a
NS
11751 in_base_initializer = 0;
11752
11753 if (decl)
2282d28d 11754 {
1f5a253a 11755 init = build_tree_list (decl, init);
2282d28d
MM
11756 TREE_CHAIN (init) = inits;
11757 inits = init;
11758 }
5566b478 11759 }
2282d28d 11760 return inits;
5566b478
MS
11761}
11762
61a127b3
MM
11763/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL. */
11764
11765static void
3a978d72 11766set_current_access_from_decl (tree decl)
61a127b3
MM
11767{
11768 if (TREE_PRIVATE (decl))
11769 current_access_specifier = access_private_node;
11770 else if (TREE_PROTECTED (decl))
11771 current_access_specifier = access_protected_node;
11772 else
11773 current_access_specifier = access_public_node;
11774}
11775
dbfe2124
MM
11776/* Instantiate an enumerated type. TAG is the template type, NEWTAG
11777 is the instantiation (which should have been created with
11778 start_enum) and ARGS are the template arguments to use. */
b87692e5 11779
dbfe2124 11780static void
3a978d72 11781tsubst_enum (tree tag, tree newtag, tree args)
b87692e5 11782{
dbfe2124 11783 tree e;
b87692e5
MS
11784
11785 for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11786 {
61a127b3 11787 tree value;
7b6d72fc
MM
11788 tree decl;
11789
11790 decl = TREE_VALUE (e);
61a127b3
MM
11791 /* Note that in a template enum, the TREE_VALUE is the
11792 CONST_DECL, not the corresponding INTEGER_CST. */
c8094d83 11793 value = tsubst_expr (DECL_INITIAL (decl),
c2ea3a40 11794 args, tf_error | tf_warning,
4393e105 11795 NULL_TREE);
61a127b3
MM
11796
11797 /* Give this enumeration constant the correct access. */
7b6d72fc 11798 set_current_access_from_decl (decl);
61a127b3
MM
11799
11800 /* Actually build the enumerator itself. */
c8094d83 11801 build_enumerator (DECL_NAME (decl), value, newtag);
dbfe2124 11802 }
b3d5a58b 11803
219670f1 11804 finish_enum (newtag);
f31686a3
RH
11805 DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11806 = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
b87692e5 11807}
36a117a5 11808
1f6e1acc
AS
11809/* DECL is a FUNCTION_DECL that is a template specialization. Return
11810 its type -- but without substituting the innermost set of template
11811 arguments. So, innermost set of template parameters will appear in
5c74d5b0 11812 the type. */
1f6e1acc 11813
c8094d83 11814tree
3a978d72 11815get_mostly_instantiated_function_type (tree decl)
1f6e1acc 11816{
1f6e1acc
AS
11817 tree fn_type;
11818 tree tmpl;
11819 tree targs;
11820 tree tparms;
11821 int parm_depth;
11822
11823 tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11824 targs = DECL_TI_ARGS (decl);
11825 tparms = DECL_TEMPLATE_PARMS (tmpl);
11826 parm_depth = TMPL_PARMS_DEPTH (tparms);
11827
11828 /* There should be as many levels of arguments as there are levels
11829 of parameters. */
50bc768d 11830 gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
1f6e1acc
AS
11831
11832 fn_type = TREE_TYPE (tmpl);
1f6e1acc
AS
11833
11834 if (parm_depth == 1)
11835 /* No substitution is necessary. */
11836 ;
11837 else
11838 {
fae6e246 11839 int i, save_access_control;
1f6e1acc
AS
11840 tree partial_args;
11841
11842 /* Replace the innermost level of the TARGS with NULL_TREEs to
dc957d14 11843 let tsubst know not to substitute for those parameters. */
1f6e1acc
AS
11844 partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11845 for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11846 SET_TMPL_ARGS_LEVEL (partial_args, i,
11847 TMPL_ARGS_LEVEL (targs, i));
11848 SET_TMPL_ARGS_LEVEL (partial_args,
11849 TMPL_ARGS_DEPTH (targs),
11850 make_tree_vec (DECL_NTPARMS (tmpl)));
11851
fae6e246
RH
11852 /* Disable access control as this function is used only during
11853 name-mangling. */
11854 save_access_control = flag_access_control;
11855 flag_access_control = 0;
5c74d5b0 11856
9579624e 11857 ++processing_template_decl;
1f6e1acc
AS
11858 /* Now, do the (partial) substitution to figure out the
11859 appropriate function type. */
c2ea3a40 11860 fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
9579624e 11861 --processing_template_decl;
1f6e1acc
AS
11862
11863 /* Substitute into the template parameters to obtain the real
11864 innermost set of parameters. This step is important if the
11865 innermost set of template parameters contains value
11866 parameters whose types depend on outer template parameters. */
11867 TREE_VEC_LENGTH (partial_args)--;
c2ea3a40 11868 tparms = tsubst_template_parms (tparms, partial_args, tf_error);
1f6e1acc 11869
fae6e246 11870 flag_access_control = save_access_control;
5c74d5b0 11871 }
1f6e1acc
AS
11872
11873 return fn_type;
11874}
669ec2b4 11875
cb753e49 11876/* Return truthvalue if we're processing a template different from
dc957d14 11877 the last one involved in diagnostics. */
cb753e49 11878int
3a978d72 11879problematic_instantiation_changed (void)
cb753e49
GDR
11880{
11881 return last_template_error_tick != tinst_level_tick;
11882}
11883
11884/* Remember current template involved in diagnostics. */
11885void
3a978d72 11886record_last_problematic_instantiation (void)
cb753e49
GDR
11887{
11888 last_template_error_tick = tinst_level_tick;
11889}
11890
11891tree
3a978d72 11892current_instantiation (void)
cb753e49
GDR
11893{
11894 return current_tinst_level;
11895}
db3f4e4e
NS
11896
11897/* [temp.param] Check that template non-type parm TYPE is of an allowable
838dfd8a 11898 type. Return zero for ok, nonzero for disallowed. Issue error and
c2ea3a40 11899 warning messages under control of COMPLAIN. */
db3f4e4e
NS
11900
11901static int
3a978d72 11902invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
db3f4e4e
NS
11903{
11904 if (INTEGRAL_TYPE_P (type))
11905 return 0;
11906 else if (POINTER_TYPE_P (type))
11907 return 0;
a5ac359a 11908 else if (TYPE_PTR_TO_MEMBER_P (type))
db3f4e4e 11909 return 0;
db3f4e4e
NS
11910 else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11911 return 0;
11912 else if (TREE_CODE (type) == TYPENAME_TYPE)
11913 return 0;
c8094d83 11914
c2ea3a40 11915 if (complain & tf_error)
0f51ccfc 11916 error ("%q#T is not a valid type for a template constant parameter", type);
db3f4e4e
NS
11917 return 1;
11918}
e2500fed 11919
5552b43c
MM
11920/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11921 Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
1fb3244a 11922
5552b43c
MM
11923static bool
11924dependent_type_p_r (tree type)
1fb3244a
MM
11925{
11926 tree scope;
11927
1fb3244a
MM
11928 /* [temp.dep.type]
11929
11930 A type is dependent if it is:
11931
6615c446
JO
11932 -- a template parameter. Template template parameters are types
11933 for us (since TYPE_P holds true for them) so we handle
11934 them here. */
c8094d83 11935 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
6bf92cb6 11936 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
1fb3244a
MM
11937 return true;
11938 /* -- a qualified-id with a nested-name-specifier which contains a
0cbd7506 11939 class-name that names a dependent type or whose unqualified-id
1fb3244a
MM
11940 names a dependent type. */
11941 if (TREE_CODE (type) == TYPENAME_TYPE)
11942 return true;
11943 /* -- a cv-qualified type where the cv-unqualified type is
0cbd7506 11944 dependent. */
1fb3244a
MM
11945 type = TYPE_MAIN_VARIANT (type);
11946 /* -- a compound type constructed from any dependent type. */
a5ac359a 11947 if (TYPE_PTR_TO_MEMBER_P (type))
1fb3244a 11948 return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
c8094d83 11949 || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
1fb3244a
MM
11950 (type)));
11951 else if (TREE_CODE (type) == POINTER_TYPE
11952 || TREE_CODE (type) == REFERENCE_TYPE)
11953 return dependent_type_p (TREE_TYPE (type));
11954 else if (TREE_CODE (type) == FUNCTION_TYPE
11955 || TREE_CODE (type) == METHOD_TYPE)
11956 {
11957 tree arg_type;
11958
11959 if (dependent_type_p (TREE_TYPE (type)))
11960 return true;
c8094d83
MS
11961 for (arg_type = TYPE_ARG_TYPES (type);
11962 arg_type;
1fb3244a
MM
11963 arg_type = TREE_CHAIN (arg_type))
11964 if (dependent_type_p (TREE_VALUE (arg_type)))
11965 return true;
11966 return false;
11967 }
11968 /* -- an array type constructed from any dependent type or whose
0cbd7506 11969 size is specified by a constant expression that is
1fb3244a
MM
11970 value-dependent. */
11971 if (TREE_CODE (type) == ARRAY_TYPE)
11972 {
11973 if (TYPE_DOMAIN (type)
c8094d83 11974 && ((value_dependent_expression_p
1fb3244a
MM
11975 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11976 || (type_dependent_expression_p
11977 (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11978 return true;
11979 return dependent_type_p (TREE_TYPE (type));
11980 }
c8094d83 11981
1fb3244a 11982 /* -- a template-id in which either the template name is a template
86306a6b
NS
11983 parameter ... */
11984 if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
1fb3244a 11985 return true;
86306a6b 11986 /* ... or any of the template arguments is a dependent type or
04c06002 11987 an expression that is type-dependent or value-dependent. */
86306a6b 11988 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
c8094d83 11989 && (any_dependent_template_arguments_p
7e99327d 11990 (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
1fb3244a 11991 return true;
c8094d83 11992
1fb3244a
MM
11993 /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11994 expression is not type-dependent, then it should already been
11995 have resolved. */
11996 if (TREE_CODE (type) == TYPEOF_TYPE)
11997 return true;
c8094d83 11998
1fb3244a
MM
11999 /* The standard does not specifically mention types that are local
12000 to template functions or local classes, but they should be
12001 considered dependent too. For example:
12002
c8094d83 12003 template <int I> void f() {
0cbd7506 12004 enum E { a = I };
1fb3244a
MM
12005 S<sizeof (E)> s;
12006 }
12007
12008 The size of `E' cannot be known until the value of `I' has been
12009 determined. Therefore, `E' must be considered dependent. */
12010 scope = TYPE_CONTEXT (type);
12011 if (scope && TYPE_P (scope))
12012 return dependent_type_p (scope);
12013 else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
12014 return type_dependent_expression_p (scope);
12015
12016 /* Other types are non-dependent. */
12017 return false;
12018}
12019
5552b43c
MM
12020/* Returns TRUE if TYPE is dependent, in the sense of
12021 [temp.dep.type]. */
12022
12023bool
12024dependent_type_p (tree type)
12025{
12026 /* If there are no template parameters in scope, then there can't be
12027 any dependent types. */
12028 if (!processing_template_decl)
12029 return false;
12030
12031 /* If the type is NULL, we have not computed a type for the entity
12032 in question; in that case, the type is dependent. */
12033 if (!type)
12034 return true;
12035
12036 /* Erroneous types can be considered non-dependent. */
12037 if (type == error_mark_node)
12038 return false;
12039
12040 /* If we have not already computed the appropriate value for TYPE,
12041 do so now. */
12042 if (!TYPE_DEPENDENT_P_VALID (type))
12043 {
12044 TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
12045 TYPE_DEPENDENT_P_VALID (type) = 1;
12046 }
12047
12048 return TYPE_DEPENDENT_P (type);
12049}
12050
8d83f792
MM
12051/* Returns TRUE if EXPRESSION is dependent, according to CRITERION. */
12052
12053static bool
12054dependent_scope_ref_p (tree expression, bool criterion (tree))
12055{
12056 tree scope;
12057 tree name;
12058
50bc768d 12059 gcc_assert (TREE_CODE (expression) == SCOPE_REF);
8d83f792
MM
12060
12061 if (!TYPE_P (TREE_OPERAND (expression, 0)))
12062 return true;
12063
12064 scope = TREE_OPERAND (expression, 0);
12065 name = TREE_OPERAND (expression, 1);
12066
12067 /* [temp.dep.expr]
12068
12069 An id-expression is type-dependent if it contains a
12070 nested-name-specifier that contains a class-name that names a
12071 dependent type. */
12072 /* The suggested resolution to Core Issue 2 implies that if the
12073 qualifying type is the current class, then we must peek
12074 inside it. */
c8094d83 12075 if (DECL_P (name)
8d83f792
MM
12076 && currently_open_class (scope)
12077 && !criterion (name))
12078 return false;
12079 if (dependent_type_p (scope))
12080 return true;
12081
12082 return false;
12083}
12084
20929c7f
GB
12085/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
12086 [temp.dep.constexpr] */
1fb3244a 12087
14d22dd6 12088bool
1fb3244a
MM
12089value_dependent_expression_p (tree expression)
12090{
12091 if (!processing_template_decl)
12092 return false;
12093
12094 /* A name declared with a dependent type. */
7416ab02 12095 if (DECL_P (expression) && type_dependent_expression_p (expression))
1fb3244a 12096 return true;
c8094d83 12097
7416ab02
NS
12098 switch (TREE_CODE (expression))
12099 {
12100 case IDENTIFIER_NODE:
12101 /* A name that has not been looked up -- must be dependent. */
12102 return true;
12103
12104 case TEMPLATE_PARM_INDEX:
12105 /* A non-type template parm. */
12106 return true;
12107
12108 case CONST_DECL:
12109 /* A non-type template parm. */
12110 if (DECL_TEMPLATE_PARM_P (expression))
d17811fd 12111 return true;
7416ab02 12112 return false;
d36d5600 12113
7416ab02 12114 case VAR_DECL:
c8094d83 12115 /* A constant with integral or enumeration type and is initialized
0cbd7506 12116 with an expression that is value-dependent. */
7416ab02
NS
12117 if (DECL_INITIAL (expression)
12118 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
12119 && value_dependent_expression_p (DECL_INITIAL (expression)))
12120 return true;
12121 return false;
12122
12123 case DYNAMIC_CAST_EXPR:
12124 case STATIC_CAST_EXPR:
12125 case CONST_CAST_EXPR:
12126 case REINTERPRET_CAST_EXPR:
12127 case CAST_EXPR:
12128 /* These expressions are value-dependent if the type to which
0cbd7506
MS
12129 the cast occurs is dependent or the expression being casted
12130 is value-dependent. */
7416ab02
NS
12131 {
12132 tree type = TREE_TYPE (expression);
c8094d83 12133
7416ab02
NS
12134 if (dependent_type_p (type))
12135 return true;
c8094d83 12136
7416ab02
NS
12137 /* A functional cast has a list of operands. */
12138 expression = TREE_OPERAND (expression, 0);
12139 if (!expression)
12140 {
12141 /* If there are no operands, it must be an expression such
12142 as "int()". This should not happen for aggregate types
12143 because it would form non-constant expressions. */
12144 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
c8094d83 12145
7416ab02
NS
12146 return false;
12147 }
c8094d83 12148
7416ab02
NS
12149 if (TREE_CODE (expression) == TREE_LIST)
12150 {
12151 for (; expression; expression = TREE_CHAIN (expression))
d17811fd
MM
12152 if (value_dependent_expression_p (TREE_VALUE (expression)))
12153 return true;
7416ab02
NS
12154 return false;
12155 }
c8094d83 12156
d17811fd 12157 return value_dependent_expression_p (expression);
7416ab02 12158 }
c8094d83 12159
7416ab02
NS
12160 case SIZEOF_EXPR:
12161 case ALIGNOF_EXPR:
12162 /* A `sizeof' expression is value-dependent if the operand is
0cbd7506 12163 type-dependent. */
d17811fd
MM
12164 expression = TREE_OPERAND (expression, 0);
12165 if (TYPE_P (expression))
12166 return dependent_type_p (expression);
12167 return type_dependent_expression_p (expression);
100d337a 12168
7416ab02
NS
12169 case SCOPE_REF:
12170 return dependent_scope_ref_p (expression, value_dependent_expression_p);
100d337a 12171
7416ab02
NS
12172 case COMPONENT_REF:
12173 return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
12174 || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
12175
12176 case CALL_EXPR:
12177 /* A CALL_EXPR is value-dependent if any argument is
0cbd7506
MS
12178 value-dependent. Why do we have to handle CALL_EXPRs in this
12179 function at all? First, some function calls, those for which
12180 value_dependent_expression_p is true, man appear in constant
12181 expressions. Second, there appear to be bugs which result in
12182 other CALL_EXPRs reaching this point. */
7416ab02
NS
12183 {
12184 tree function = TREE_OPERAND (expression, 0);
12185 tree args = TREE_OPERAND (expression, 1);
c8094d83 12186
7416ab02
NS
12187 if (value_dependent_expression_p (function))
12188 return true;
c8094d83 12189
7416ab02
NS
12190 if (! args)
12191 return false;
c8094d83 12192
7416ab02
NS
12193 if (TREE_CODE (args) == TREE_LIST)
12194 {
12195 for (; args; args = TREE_CHAIN (args))
100d337a
MA
12196 if (value_dependent_expression_p (TREE_VALUE (args)))
12197 return true;
7416ab02
NS
12198 return false;
12199 }
c8094d83 12200
100d337a 12201 return value_dependent_expression_p (args);
7416ab02
NS
12202 }
12203
12204 default:
12205 /* A constant expression is value-dependent if any subexpression is
0cbd7506 12206 value-dependent. */
1fb3244a
MM
12207 switch (TREE_CODE_CLASS (TREE_CODE (expression)))
12208 {
7416ab02 12209 case tcc_reference:
6615c446 12210 case tcc_unary:
c8094d83 12211 return (value_dependent_expression_p
1fb3244a 12212 (TREE_OPERAND (expression, 0)));
c8094d83 12213
6615c446
JO
12214 case tcc_comparison:
12215 case tcc_binary:
c8094d83 12216 return ((value_dependent_expression_p
1fb3244a 12217 (TREE_OPERAND (expression, 0)))
c8094d83 12218 || (value_dependent_expression_p
1fb3244a 12219 (TREE_OPERAND (expression, 1))));
c8094d83 12220
6615c446 12221 case tcc_expression:
1fb3244a
MM
12222 {
12223 int i;
54e4aedb 12224 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (expression)); ++i)
14d22dd6
MM
12225 /* In some cases, some of the operands may be missing.
12226 (For example, in the case of PREDECREMENT_EXPR, the
12227 amount to increment by may be missing.) That doesn't
12228 make the expression dependent. */
12229 if (TREE_OPERAND (expression, i)
12230 && (value_dependent_expression_p
12231 (TREE_OPERAND (expression, i))))
1fb3244a
MM
12232 return true;
12233 return false;
12234 }
c8094d83 12235
6615c446 12236 default:
7416ab02 12237 break;
1fb3244a
MM
12238 }
12239 }
c8094d83 12240
1fb3244a
MM
12241 /* The expression is not value-dependent. */
12242 return false;
12243}
12244
12245/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
12246 [temp.dep.expr]. */
12247
12248bool
3a978d72 12249type_dependent_expression_p (tree expression)
1fb3244a
MM
12250{
12251 if (!processing_template_decl)
12252 return false;
12253
7efa3e22
NS
12254 if (expression == error_mark_node)
12255 return false;
10b1d5e7
MM
12256
12257 /* An unresolved name is always dependent. */
12258 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12259 return true;
c8094d83 12260
1fb3244a
MM
12261 /* Some expression forms are never type-dependent. */
12262 if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
12263 || TREE_CODE (expression) == SIZEOF_EXPR
12264 || TREE_CODE (expression) == ALIGNOF_EXPR
12265 || TREE_CODE (expression) == TYPEID_EXPR
12266 || TREE_CODE (expression) == DELETE_EXPR
12267 || TREE_CODE (expression) == VEC_DELETE_EXPR
12268 || TREE_CODE (expression) == THROW_EXPR)
12269 return false;
12270
12271 /* The types of these expressions depends only on the type to which
12272 the cast occurs. */
12273 if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
12274 || TREE_CODE (expression) == STATIC_CAST_EXPR
12275 || TREE_CODE (expression) == CONST_CAST_EXPR
12276 || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
12277 || TREE_CODE (expression) == CAST_EXPR)
12278 return dependent_type_p (TREE_TYPE (expression));
d17811fd 12279
1fb3244a
MM
12280 /* The types of these expressions depends only on the type created
12281 by the expression. */
d17811fd
MM
12282 if (TREE_CODE (expression) == NEW_EXPR
12283 || TREE_CODE (expression) == VEC_NEW_EXPR)
09d2f85f
KL
12284 {
12285 /* For NEW_EXPR tree nodes created inside a template, either
12286 the object type itself or a TREE_LIST may appear as the
12287 operand 1. */
12288 tree type = TREE_OPERAND (expression, 1);
12289 if (TREE_CODE (type) == TREE_LIST)
12290 /* This is an array type. We need to check array dimensions
12291 as well. */
12292 return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12293 || value_dependent_expression_p
12294 (TREE_OPERAND (TREE_VALUE (type), 1));
12295 else
12296 return dependent_type_p (type);
12297 }
1fb3244a 12298
5a57f1b2
JM
12299 if (TREE_CODE (expression) == SCOPE_REF
12300 && dependent_scope_ref_p (expression,
12301 type_dependent_expression_p))
12302 return true;
12303
12304 if (TREE_CODE (expression) == FUNCTION_DECL
12305 && DECL_LANG_SPECIFIC (expression)
12306 && DECL_TEMPLATE_INFO (expression)
12307 && (any_dependent_template_arguments_p
12308 (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12309 return true;
12310
12311 if (TREE_CODE (expression) == TEMPLATE_DECL
12312 && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12313 return false;
12314
d17811fd
MM
12315 if (TREE_TYPE (expression) == unknown_type_node)
12316 {
12317 if (TREE_CODE (expression) == ADDR_EXPR)
12318 return type_dependent_expression_p (TREE_OPERAND (expression, 0));
c353b8e3
MM
12319 if (TREE_CODE (expression) == COMPONENT_REF
12320 || TREE_CODE (expression) == OFFSET_REF)
6cb89308
NS
12321 {
12322 if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12323 return true;
12324 expression = TREE_OPERAND (expression, 1);
12325 if (TREE_CODE (expression) == IDENTIFIER_NODE)
12326 return false;
12327 }
3601f003
KL
12328 /* SCOPE_REF with non-null TREE_TYPE is always non-dependent. */
12329 if (TREE_CODE (expression) == SCOPE_REF)
12330 return false;
c8094d83 12331
d17811fd
MM
12332 if (TREE_CODE (expression) == BASELINK)
12333 expression = BASELINK_FUNCTIONS (expression);
c8094d83 12334
d17811fd
MM
12335 if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12336 {
ee3071ef
NS
12337 if (any_dependent_template_arguments_p
12338 (TREE_OPERAND (expression, 1)))
d17811fd
MM
12339 return true;
12340 expression = TREE_OPERAND (expression, 0);
12341 }
315fb5db 12342 gcc_assert (TREE_CODE (expression) == OVERLOAD);
c8094d83 12343
315fb5db 12344 while (expression)
d17811fd 12345 {
315fb5db
NS
12346 if (type_dependent_expression_p (OVL_CURRENT (expression)))
12347 return true;
12348 expression = OVL_NEXT (expression);
d17811fd 12349 }
315fb5db 12350 return false;
d17811fd 12351 }
c8094d83 12352
1fb3244a
MM
12353 return (dependent_type_p (TREE_TYPE (expression)));
12354}
12355
d17811fd
MM
12356/* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12357 contains a type-dependent expression. */
1fb3244a
MM
12358
12359bool
d17811fd
MM
12360any_type_dependent_arguments_p (tree args)
12361{
12362 while (args)
12363 {
7efa3e22
NS
12364 tree arg = TREE_VALUE (args);
12365
12366 if (type_dependent_expression_p (arg))
d17811fd
MM
12367 return true;
12368 args = TREE_CHAIN (args);
12369 }
12370 return false;
12371}
12372
12373/* Returns TRUE if the ARG (a template argument) is dependent. */
12374
12375static bool
1fb3244a
MM
12376dependent_template_arg_p (tree arg)
12377{
12378 if (!processing_template_decl)
12379 return false;
12380
12381 if (TREE_CODE (arg) == TEMPLATE_DECL
12382 || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12383 return dependent_template_p (arg);
12384 else if (TYPE_P (arg))
12385 return dependent_type_p (arg);
12386 else
12387 return (type_dependent_expression_p (arg)
12388 || value_dependent_expression_p (arg));
12389}
12390
d17811fd
MM
12391/* Returns true if ARGS (a collection of template arguments) contains
12392 any dependent arguments. */
1fb3244a 12393
d17811fd
MM
12394bool
12395any_dependent_template_arguments_p (tree args)
1fb3244a 12396{
bf12d54d 12397 int i;
c353b8e3
MM
12398 int j;
12399
d17811fd
MM
12400 if (!args)
12401 return false;
12402
c353b8e3
MM
12403 for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12404 {
12405 tree level = TMPL_ARGS_LEVEL (args, i + 1);
12406 for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12407 if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12408 return true;
12409 }
1fb3244a 12410
1fb3244a
MM
12411 return false;
12412}
12413
12414/* Returns TRUE if the template TMPL is dependent. */
12415
12416bool
12417dependent_template_p (tree tmpl)
12418{
b95cc51a
MM
12419 if (TREE_CODE (tmpl) == OVERLOAD)
12420 {
12421 while (tmpl)
12422 {
12423 if (dependent_template_p (OVL_FUNCTION (tmpl)))
12424 return true;
12425 tmpl = OVL_CHAIN (tmpl);
12426 }
12427 return false;
12428 }
12429
1fb3244a
MM
12430 /* Template template parameters are dependent. */
12431 if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12432 || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12433 return true;
27ab0504 12434 /* So are names that have not been looked up. */
acccf788
MM
12435 if (TREE_CODE (tmpl) == SCOPE_REF
12436 || TREE_CODE (tmpl) == IDENTIFIER_NODE)
d17811fd 12437 return true;
1fb3244a
MM
12438 /* So are member templates of dependent classes. */
12439 if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12440 return dependent_type_p (DECL_CONTEXT (tmpl));
12441 return false;
12442}
12443
d17811fd
MM
12444/* Returns TRUE if the specialization TMPL<ARGS> is dependent. */
12445
12446bool
12447dependent_template_id_p (tree tmpl, tree args)
12448{
12449 return (dependent_template_p (tmpl)
12450 || any_dependent_template_arguments_p (args));
12451}
12452
14d22dd6
MM
12453/* TYPE is a TYPENAME_TYPE. Returns the ordinary TYPE to which the
12454 TYPENAME_TYPE corresponds. Returns ERROR_MARK_NODE if no such TYPE
12455 can be found. Note that this function peers inside uninstantiated
12456 templates and therefore should be used only in extremely limited
dda04398 12457 situations. ONLY_CURRENT_P restricts this peering to the currently
c51940a2 12458 open classes hierarchy (which is required when comparing types). */
14d22dd6
MM
12459
12460tree
12461resolve_typename_type (tree type, bool only_current_p)
12462{
12463 tree scope;
12464 tree name;
12465 tree decl;
12466 int quals;
4514aa8c 12467 tree pushed_scope;
14d22dd6 12468
50bc768d 12469 gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
14d22dd6
MM
12470
12471 scope = TYPE_CONTEXT (type);
12472 name = TYPE_IDENTIFIER (type);
12473
12474 /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12475 it first before we can figure out what NAME refers to. */
12476 if (TREE_CODE (scope) == TYPENAME_TYPE)
12477 scope = resolve_typename_type (scope, only_current_p);
12478 /* If we don't know what SCOPE refers to, then we cannot resolve the
12479 TYPENAME_TYPE. */
12480 if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12481 return error_mark_node;
12482 /* If the SCOPE is a template type parameter, we have no way of
12483 resolving the name. */
12484 if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12485 return type;
12486 /* If the SCOPE is not the current instantiation, there's no reason
12487 to look inside it. */
12488 if (only_current_p && !currently_open_class (scope))
12489 return error_mark_node;
ca099ac8
MM
12490 /* If SCOPE is a partial instantiation, it will not have a valid
12491 TYPE_FIELDS list, so use the original template. */
353b4fc0 12492 scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
14d22dd6
MM
12493 /* Enter the SCOPE so that name lookup will be resolved as if we
12494 were in the class definition. In particular, SCOPE will no
12495 longer be considered a dependent type. */
4514aa8c 12496 pushed_scope = push_scope (scope);
14d22dd6 12497 /* Look up the declaration. */
86ac0575 12498 decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
14d22dd6
MM
12499 /* Obtain the set of qualifiers applied to the TYPE. */
12500 quals = cp_type_quals (type);
12501 /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12502 find a TEMPLATE_DECL. Otherwise, we want to find a TYPE_DECL. */
12503 if (!decl)
12504 type = error_mark_node;
12505 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12506 && TREE_CODE (decl) == TYPE_DECL)
12507 type = TREE_TYPE (decl);
12508 else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12509 && DECL_CLASS_TEMPLATE_P (decl))
12510 {
12511 tree tmpl;
12512 tree args;
12513 /* Obtain the template and the arguments. */
12514 tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12515 args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12516 /* Instantiate the template. */
12517 type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
42eaed49 12518 /*entering_scope=*/0, tf_error | tf_user);
14d22dd6
MM
12519 }
12520 else
12521 type = error_mark_node;
12522 /* Qualify the resulting type. */
12523 if (type != error_mark_node && quals)
12524 type = cp_build_qualified_type (type, quals);
12525 /* Leave the SCOPE. */
4514aa8c
NS
12526 if (pushed_scope)
12527 pop_scope (pushed_scope);
14d22dd6
MM
12528
12529 return type;
12530}
12531
d17811fd
MM
12532/* EXPR is an expression which is not type-dependent. Return a proxy
12533 for EXPR that can be used to compute the types of larger
12534 expressions containing EXPR. */
12535
12536tree
12537build_non_dependent_expr (tree expr)
12538{
0deb916c
MM
12539 tree inner_expr;
12540
c8094d83 12541 /* Preserve null pointer constants so that the type of things like
d17811fd
MM
12542 "p == 0" where "p" is a pointer can be determined. */
12543 if (null_ptr_cst_p (expr))
12544 return expr;
12545 /* Preserve OVERLOADs; the functions must be available to resolve
12546 types. */
c8094d83 12547 inner_expr = (TREE_CODE (expr) == ADDR_EXPR ?
0deb916c 12548 TREE_OPERAND (expr, 0) : expr);
2226e997 12549 if (is_overloaded_fn (inner_expr)
6439fffd 12550 || TREE_CODE (inner_expr) == OFFSET_REF)
d17811fd 12551 return expr;
5ae9ba3e
MM
12552 /* There is no need to return a proxy for a variable. */
12553 if (TREE_CODE (expr) == VAR_DECL)
12554 return expr;
7433e6d4
MM
12555 /* Preserve string constants; conversions from string constants to
12556 "char *" are allowed, even though normally a "const char *"
12557 cannot be used to initialize a "char *". */
12558 if (TREE_CODE (expr) == STRING_CST)
12559 return expr;
b7c707d1
MM
12560 /* Preserve arithmetic constants, as an optimization -- there is no
12561 reason to create a new node. */
12562 if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12563 return expr;
9b7be7b5
MM
12564 /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12565 There is at least one place where we want to know that a
12566 particular expression is a throw-expression: when checking a ?:
12567 expression, there are special rules if the second or third
878cbb73 12568 argument is a throw-expression. */
9b7be7b5
MM
12569 if (TREE_CODE (expr) == THROW_EXPR)
12570 return expr;
47d4c811
NS
12571
12572 if (TREE_CODE (expr) == COND_EXPR)
f293ce4b
RS
12573 return build3 (COND_EXPR,
12574 TREE_TYPE (expr),
12575 TREE_OPERAND (expr, 0),
c8094d83 12576 (TREE_OPERAND (expr, 1)
f293ce4b
RS
12577 ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12578 : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12579 build_non_dependent_expr (TREE_OPERAND (expr, 2)));
8e1daa34
NS
12580 if (TREE_CODE (expr) == COMPOUND_EXPR
12581 && !COMPOUND_EXPR_OVERLOADED (expr))
f293ce4b
RS
12582 return build2 (COMPOUND_EXPR,
12583 TREE_TYPE (expr),
12584 TREE_OPERAND (expr, 0),
12585 build_non_dependent_expr (TREE_OPERAND (expr, 1)));
c8094d83
MS
12586
12587 /* Otherwise, build a NON_DEPENDENT_EXPR.
d17811fd
MM
12588
12589 REFERENCE_TYPEs are not stripped for expressions in templates
12590 because doing so would play havoc with mangling. Consider, for
12591 example:
12592
c8094d83 12593 template <typename T> void f<T& g>() { g(); }
d17811fd
MM
12594
12595 In the body of "f", the expression for "g" will have
12596 REFERENCE_TYPE, even though the standard says that it should
12597 not. The reason is that we must preserve the syntactic form of
12598 the expression so that mangling (say) "f<g>" inside the body of
12599 "f" works out correctly. Therefore, the REFERENCE_TYPE is
12600 stripped here. */
018a5803 12601 return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
d17811fd
MM
12602}
12603
12604/* ARGS is a TREE_LIST of expressions as arguments to a function call.
12605 Return a new TREE_LIST with the various arguments replaced with
12606 equivalent non-dependent expressions. */
12607
12608tree
12609build_non_dependent_args (tree args)
12610{
12611 tree a;
12612 tree new_args;
12613
12614 new_args = NULL_TREE;
12615 for (a = args; a; a = TREE_CHAIN (a))
c8094d83 12616 new_args = tree_cons (NULL_TREE,
d17811fd
MM
12617 build_non_dependent_expr (TREE_VALUE (a)),
12618 new_args);
12619 return nreverse (new_args);
12620}
12621
e2500fed 12622#include "gt-cp-pt.h"
This page took 4.826214 seconds and 5 git commands to generate.