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