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