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