typeck.c revision 259405
1/* Build expressions with type checking for C++ compiler. 2 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 3 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 4 Hacked by Michael Tiemann (tiemann@cygnus.com) 5 6This file is part of GCC. 7 8GCC is free software; you can redistribute it and/or modify 9it under the terms of the GNU General Public License as published by 10the Free Software Foundation; either version 2, or (at your option) 11any later version. 12 13GCC is distributed in the hope that it will be useful, 14but WITHOUT ANY WARRANTY; without even the implied warranty of 15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16GNU General Public License for more details. 17 18You should have received a copy of the GNU General Public License 19along with GCC; see the file COPYING. If not, write to 20the Free Software Foundation, 51 Franklin Street, Fifth Floor, 21Boston, MA 02110-1301, USA. */ 22 23 24/* This file is part of the C++ front end. 25 It contains routines to build C++ expressions given their operands, 26 including computing the types of the result, C and C++ specific error 27 checks, and some optimization. */ 28 29#include "config.h" 30#include "system.h" 31#include "coretypes.h" 32#include "tm.h" 33#include "tree.h" 34#include "rtl.h" 35#include "expr.h" 36#include "cp-tree.h" 37#include "tm_p.h" 38#include "flags.h" 39#include "output.h" 40#include "toplev.h" 41#include "diagnostic.h" 42#include "target.h" 43#include "convert.h" 44#include "c-common.h" 45 46static tree pfn_from_ptrmemfunc (tree); 47static tree convert_for_assignment (tree, tree, const char *, tree, int); 48static tree cp_pointer_int_sum (enum tree_code, tree, tree); 49static tree rationalize_conditional_expr (enum tree_code, tree); 50static int comp_ptr_ttypes_real (tree, tree, int); 51static bool comp_except_types (tree, tree, bool); 52static bool comp_array_types (tree, tree, bool); 53static tree common_base_type (tree, tree); 54static tree pointer_diff (tree, tree, tree); 55static tree get_delta_difference (tree, tree, bool, bool); 56static void casts_away_constness_r (tree *, tree *); 57static bool casts_away_constness (tree, tree); 58static void maybe_warn_about_returning_address_of_local (tree); 59static tree lookup_destructor (tree, tree, tree); 60static tree convert_arguments (tree, tree, tree, int); 61 62/* Do `exp = require_complete_type (exp);' to make sure exp 63 does not have an incomplete type. (That includes void types.) 64 Returns the error_mark_node if the VALUE does not have 65 complete type when this function returns. */ 66 67tree 68require_complete_type (tree value) 69{ 70 tree type; 71 72 if (processing_template_decl || value == error_mark_node) 73 return value; 74 75 if (TREE_CODE (value) == OVERLOAD) 76 type = unknown_type_node; 77 else 78 type = TREE_TYPE (value); 79 80 if (type == error_mark_node) 81 return error_mark_node; 82 83 /* First, detect a valid value with a complete type. */ 84 if (COMPLETE_TYPE_P (type)) 85 return value; 86 87 if (complete_type_or_else (type, value)) 88 return value; 89 else 90 return error_mark_node; 91} 92 93/* Try to complete TYPE, if it is incomplete. For example, if TYPE is 94 a template instantiation, do the instantiation. Returns TYPE, 95 whether or not it could be completed, unless something goes 96 horribly wrong, in which case the error_mark_node is returned. */ 97 98tree 99complete_type (tree type) 100{ 101 if (type == NULL_TREE) 102 /* Rather than crash, we return something sure to cause an error 103 at some point. */ 104 return error_mark_node; 105 106 if (type == error_mark_node || COMPLETE_TYPE_P (type)) 107 ; 108 else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type)) 109 { 110 tree t = complete_type (TREE_TYPE (type)); 111 unsigned int needs_constructing, has_nontrivial_dtor; 112 if (COMPLETE_TYPE_P (t) && !dependent_type_p (type)) 113 layout_type (type); 114 needs_constructing 115 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (t)); 116 has_nontrivial_dtor 117 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (t)); 118 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) 119 { 120 TYPE_NEEDS_CONSTRUCTING (t) = needs_constructing; 121 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t) = has_nontrivial_dtor; 122 } 123 } 124 else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INSTANTIATION (type)) 125 instantiate_class_template (TYPE_MAIN_VARIANT (type)); 126 127 return type; 128} 129 130/* Like complete_type, but issue an error if the TYPE cannot be completed. 131 VALUE is used for informative diagnostics. 132 Returns NULL_TREE if the type cannot be made complete. */ 133 134tree 135complete_type_or_else (tree type, tree value) 136{ 137 type = complete_type (type); 138 if (type == error_mark_node) 139 /* We already issued an error. */ 140 return NULL_TREE; 141 else if (!COMPLETE_TYPE_P (type)) 142 { 143 cxx_incomplete_type_diagnostic (value, type, 0); 144 return NULL_TREE; 145 } 146 else 147 return type; 148} 149 150/* Return truthvalue of whether type of EXP is instantiated. */ 151 152int 153type_unknown_p (tree exp) 154{ 155 return (TREE_CODE (exp) == TREE_LIST 156 || TREE_TYPE (exp) == unknown_type_node); 157} 158 159 160/* Return the common type of two parameter lists. 161 We assume that comptypes has already been done and returned 1; 162 if that isn't so, this may crash. 163 164 As an optimization, free the space we allocate if the parameter 165 lists are already common. */ 166 167static tree 168commonparms (tree p1, tree p2) 169{ 170 tree oldargs = p1, newargs, n; 171 int i, len; 172 int any_change = 0; 173 174 len = list_length (p1); 175 newargs = tree_last (p1); 176 177 if (newargs == void_list_node) 178 i = 1; 179 else 180 { 181 i = 0; 182 newargs = 0; 183 } 184 185 for (; i < len; i++) 186 newargs = tree_cons (NULL_TREE, NULL_TREE, newargs); 187 188 n = newargs; 189 190 for (i = 0; p1; 191 p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2), n = TREE_CHAIN (n), i++) 192 { 193 if (TREE_PURPOSE (p1) && !TREE_PURPOSE (p2)) 194 { 195 TREE_PURPOSE (n) = TREE_PURPOSE (p1); 196 any_change = 1; 197 } 198 else if (! TREE_PURPOSE (p1)) 199 { 200 if (TREE_PURPOSE (p2)) 201 { 202 TREE_PURPOSE (n) = TREE_PURPOSE (p2); 203 any_change = 1; 204 } 205 } 206 else 207 { 208 if (1 != simple_cst_equal (TREE_PURPOSE (p1), TREE_PURPOSE (p2))) 209 any_change = 1; 210 TREE_PURPOSE (n) = TREE_PURPOSE (p2); 211 } 212 if (TREE_VALUE (p1) != TREE_VALUE (p2)) 213 { 214 any_change = 1; 215 TREE_VALUE (n) = merge_types (TREE_VALUE (p1), TREE_VALUE (p2)); 216 } 217 else 218 TREE_VALUE (n) = TREE_VALUE (p1); 219 } 220 if (! any_change) 221 return oldargs; 222 223 return newargs; 224} 225 226/* Given a type, perhaps copied for a typedef, 227 find the "original" version of it. */ 228static tree 229original_type (tree t) 230{ 231 int quals = cp_type_quals (t); 232 while (t != error_mark_node 233 && TYPE_NAME (t) != NULL_TREE) 234 { 235 tree x = TYPE_NAME (t); 236 if (TREE_CODE (x) != TYPE_DECL) 237 break; 238 x = DECL_ORIGINAL_TYPE (x); 239 if (x == NULL_TREE) 240 break; 241 t = x; 242 } 243 return cp_build_qualified_type (t, quals); 244} 245 246/* T1 and T2 are arithmetic or enumeration types. Return the type 247 that will result from the "usual arithmetic conversions" on T1 and 248 T2 as described in [expr]. */ 249 250tree 251type_after_usual_arithmetic_conversions (tree t1, tree t2) 252{ 253 enum tree_code code1 = TREE_CODE (t1); 254 enum tree_code code2 = TREE_CODE (t2); 255 tree attributes; 256 257 /* FIXME: Attributes. */ 258 gcc_assert (ARITHMETIC_TYPE_P (t1) 259 || TREE_CODE (t1) == VECTOR_TYPE 260 || TREE_CODE (t1) == ENUMERAL_TYPE); 261 gcc_assert (ARITHMETIC_TYPE_P (t2) 262 || TREE_CODE (t2) == VECTOR_TYPE 263 || TREE_CODE (t2) == ENUMERAL_TYPE); 264 265 /* In what follows, we slightly generalize the rules given in [expr] so 266 as to deal with `long long' and `complex'. First, merge the 267 attributes. */ 268 attributes = (*targetm.merge_type_attributes) (t1, t2); 269 270 /* If one type is complex, form the common type of the non-complex 271 components, then make that complex. Use T1 or T2 if it is the 272 required type. */ 273 if (code1 == COMPLEX_TYPE || code2 == COMPLEX_TYPE) 274 { 275 tree subtype1 = code1 == COMPLEX_TYPE ? TREE_TYPE (t1) : t1; 276 tree subtype2 = code2 == COMPLEX_TYPE ? TREE_TYPE (t2) : t2; 277 tree subtype 278 = type_after_usual_arithmetic_conversions (subtype1, subtype2); 279 280 if (code1 == COMPLEX_TYPE && TREE_TYPE (t1) == subtype) 281 return build_type_attribute_variant (t1, attributes); 282 else if (code2 == COMPLEX_TYPE && TREE_TYPE (t2) == subtype) 283 return build_type_attribute_variant (t2, attributes); 284 else 285 return build_type_attribute_variant (build_complex_type (subtype), 286 attributes); 287 } 288 289 if (code1 == VECTOR_TYPE) 290 { 291 /* When we get here we should have two vectors of the same size. 292 Just prefer the unsigned one if present. */ 293 if (TYPE_UNSIGNED (t1)) 294 return build_type_attribute_variant (t1, attributes); 295 else 296 return build_type_attribute_variant (t2, attributes); 297 } 298 299 /* If only one is real, use it as the result. */ 300 if (code1 == REAL_TYPE && code2 != REAL_TYPE) 301 return build_type_attribute_variant (t1, attributes); 302 if (code2 == REAL_TYPE && code1 != REAL_TYPE) 303 return build_type_attribute_variant (t2, attributes); 304 305 /* Perform the integral promotions. */ 306 if (code1 != REAL_TYPE) 307 { 308 t1 = type_promotes_to (t1); 309 t2 = type_promotes_to (t2); 310 } 311 312 /* Both real or both integers; use the one with greater precision. */ 313 if (TYPE_PRECISION (t1) > TYPE_PRECISION (t2)) 314 return build_type_attribute_variant (t1, attributes); 315 else if (TYPE_PRECISION (t2) > TYPE_PRECISION (t1)) 316 return build_type_attribute_variant (t2, attributes); 317 318 /* The types are the same; no need to do anything fancy. */ 319 if (TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)) 320 return build_type_attribute_variant (t1, attributes); 321 322 if (code1 != REAL_TYPE) 323 { 324 /* If one is a sizetype, use it so size_binop doesn't blow up. */ 325 if (TYPE_IS_SIZETYPE (t1) > TYPE_IS_SIZETYPE (t2)) 326 return build_type_attribute_variant (t1, attributes); 327 if (TYPE_IS_SIZETYPE (t2) > TYPE_IS_SIZETYPE (t1)) 328 return build_type_attribute_variant (t2, attributes); 329 330 /* If one is unsigned long long, then convert the other to unsigned 331 long long. */ 332 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_unsigned_type_node) 333 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_unsigned_type_node)) 334 return build_type_attribute_variant (long_long_unsigned_type_node, 335 attributes); 336 /* If one is a long long, and the other is an unsigned long, and 337 long long can represent all the values of an unsigned long, then 338 convert to a long long. Otherwise, convert to an unsigned long 339 long. Otherwise, if either operand is long long, convert the 340 other to long long. 341 342 Since we're here, we know the TYPE_PRECISION is the same; 343 therefore converting to long long cannot represent all the values 344 of an unsigned long, so we choose unsigned long long in that 345 case. */ 346 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_long_integer_type_node) 347 || same_type_p (TYPE_MAIN_VARIANT (t2), long_long_integer_type_node)) 348 { 349 tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2)) 350 ? long_long_unsigned_type_node 351 : long_long_integer_type_node); 352 return build_type_attribute_variant (t, attributes); 353 } 354 355 /* Go through the same procedure, but for longs. */ 356 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_unsigned_type_node) 357 || same_type_p (TYPE_MAIN_VARIANT (t2), long_unsigned_type_node)) 358 return build_type_attribute_variant (long_unsigned_type_node, 359 attributes); 360 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_integer_type_node) 361 || same_type_p (TYPE_MAIN_VARIANT (t2), long_integer_type_node)) 362 { 363 tree t = ((TYPE_UNSIGNED (t1) || TYPE_UNSIGNED (t2)) 364 ? long_unsigned_type_node : long_integer_type_node); 365 return build_type_attribute_variant (t, attributes); 366 } 367 /* Otherwise prefer the unsigned one. */ 368 if (TYPE_UNSIGNED (t1)) 369 return build_type_attribute_variant (t1, attributes); 370 else 371 return build_type_attribute_variant (t2, attributes); 372 } 373 else 374 { 375 if (same_type_p (TYPE_MAIN_VARIANT (t1), long_double_type_node) 376 || same_type_p (TYPE_MAIN_VARIANT (t2), long_double_type_node)) 377 return build_type_attribute_variant (long_double_type_node, 378 attributes); 379 if (same_type_p (TYPE_MAIN_VARIANT (t1), double_type_node) 380 || same_type_p (TYPE_MAIN_VARIANT (t2), double_type_node)) 381 return build_type_attribute_variant (double_type_node, 382 attributes); 383 if (same_type_p (TYPE_MAIN_VARIANT (t1), float_type_node) 384 || same_type_p (TYPE_MAIN_VARIANT (t2), float_type_node)) 385 return build_type_attribute_variant (float_type_node, 386 attributes); 387 388 /* Two floating-point types whose TYPE_MAIN_VARIANTs are none of 389 the standard C++ floating-point types. Logic earlier in this 390 function has already eliminated the possibility that 391 TYPE_PRECISION (t2) != TYPE_PRECISION (t1), so there's no 392 compelling reason to choose one or the other. */ 393 return build_type_attribute_variant (t1, attributes); 394 } 395} 396 397/* Subroutine of composite_pointer_type to implement the recursive 398 case. See that function for documentation fo the parameters. */ 399 400static tree 401composite_pointer_type_r (tree t1, tree t2, const char* location) 402{ 403 tree pointee1; 404 tree pointee2; 405 tree result_type; 406 tree attributes; 407 408 /* Determine the types pointed to by T1 and T2. */ 409 if (TREE_CODE (t1) == POINTER_TYPE) 410 { 411 pointee1 = TREE_TYPE (t1); 412 pointee2 = TREE_TYPE (t2); 413 } 414 else 415 { 416 pointee1 = TYPE_PTRMEM_POINTED_TO_TYPE (t1); 417 pointee2 = TYPE_PTRMEM_POINTED_TO_TYPE (t2); 418 } 419 420 /* [expr.rel] 421 422 Otherwise, the composite pointer type is a pointer type 423 similar (_conv.qual_) to the type of one of the operands, 424 with a cv-qualification signature (_conv.qual_) that is the 425 union of the cv-qualification signatures of the operand 426 types. */ 427 if (same_type_ignoring_top_level_qualifiers_p (pointee1, pointee2)) 428 result_type = pointee1; 429 else if ((TREE_CODE (pointee1) == POINTER_TYPE 430 && TREE_CODE (pointee2) == POINTER_TYPE) 431 || (TYPE_PTR_TO_MEMBER_P (pointee1) 432 && TYPE_PTR_TO_MEMBER_P (pointee2))) 433 result_type = composite_pointer_type_r (pointee1, pointee2, location); 434 else 435 { 436 pedwarn ("%s between distinct pointer types %qT and %qT " 437 "lacks a cast", 438 location, t1, t2); 439 result_type = void_type_node; 440 } 441 result_type = cp_build_qualified_type (result_type, 442 (cp_type_quals (pointee1) 443 | cp_type_quals (pointee2))); 444 /* If the original types were pointers to members, so is the 445 result. */ 446 if (TYPE_PTR_TO_MEMBER_P (t1)) 447 { 448 if (!same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1), 449 TYPE_PTRMEM_CLASS_TYPE (t2))) 450 pedwarn ("%s between distinct pointer types %qT and %qT " 451 "lacks a cast", 452 location, t1, t2); 453 result_type = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1), 454 result_type); 455 } 456 else 457 result_type = build_pointer_type (result_type); 458 459 /* Merge the attributes. */ 460 attributes = (*targetm.merge_type_attributes) (t1, t2); 461 return build_type_attribute_variant (result_type, attributes); 462} 463 464/* Return the composite pointer type (see [expr.rel]) for T1 and T2. 465 ARG1 and ARG2 are the values with those types. The LOCATION is a 466 string describing the current location, in case an error occurs. 467 468 This routine also implements the computation of a common type for 469 pointers-to-members as per [expr.eq]. */ 470 471tree 472composite_pointer_type (tree t1, tree t2, tree arg1, tree arg2, 473 const char* location) 474{ 475 tree class1; 476 tree class2; 477 478 /* [expr.rel] 479 480 If one operand is a null pointer constant, the composite pointer 481 type is the type of the other operand. */ 482 if (null_ptr_cst_p (arg1)) 483 return t2; 484 if (null_ptr_cst_p (arg2)) 485 return t1; 486 487 /* We have: 488 489 [expr.rel] 490 491 If one of the operands has type "pointer to cv1 void*", then 492 the other has type "pointer to cv2T", and the composite pointer 493 type is "pointer to cv12 void", where cv12 is the union of cv1 494 and cv2. 495 496 If either type is a pointer to void, make sure it is T1. */ 497 if (TREE_CODE (t2) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t2))) 498 { 499 tree t; 500 t = t1; 501 t1 = t2; 502 t2 = t; 503 } 504 505 /* Now, if T1 is a pointer to void, merge the qualifiers. */ 506 if (TREE_CODE (t1) == POINTER_TYPE && VOID_TYPE_P (TREE_TYPE (t1))) 507 { 508 tree attributes; 509 tree result_type; 510 511 if (pedantic && TYPE_PTRFN_P (t2)) 512 pedwarn ("ISO C++ forbids %s between pointer of type %<void *%> " 513 "and pointer-to-function", location); 514 result_type 515 = cp_build_qualified_type (void_type_node, 516 (cp_type_quals (TREE_TYPE (t1)) 517 | cp_type_quals (TREE_TYPE (t2)))); 518 result_type = build_pointer_type (result_type); 519 /* Merge the attributes. */ 520 attributes = (*targetm.merge_type_attributes) (t1, t2); 521 return build_type_attribute_variant (result_type, attributes); 522 } 523 524 if (c_dialect_objc () && TREE_CODE (t1) == POINTER_TYPE 525 && TREE_CODE (t2) == POINTER_TYPE) 526 { 527 if (objc_compare_types (t1, t2, -3, NULL_TREE)) 528 return t1; 529 } 530 531 /* [expr.eq] permits the application of a pointer conversion to 532 bring the pointers to a common type. */ 533 if (TREE_CODE (t1) == POINTER_TYPE && TREE_CODE (t2) == POINTER_TYPE 534 && CLASS_TYPE_P (TREE_TYPE (t1)) 535 && CLASS_TYPE_P (TREE_TYPE (t2)) 536 && !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t1), 537 TREE_TYPE (t2))) 538 { 539 class1 = TREE_TYPE (t1); 540 class2 = TREE_TYPE (t2); 541 542 if (DERIVED_FROM_P (class1, class2)) 543 t2 = (build_pointer_type 544 (cp_build_qualified_type (class1, TYPE_QUALS (class2)))); 545 else if (DERIVED_FROM_P (class2, class1)) 546 t1 = (build_pointer_type 547 (cp_build_qualified_type (class2, TYPE_QUALS (class1)))); 548 else 549 { 550 error ("%s between distinct pointer types %qT and %qT " 551 "lacks a cast", location, t1, t2); 552 return error_mark_node; 553 } 554 } 555 /* [expr.eq] permits the application of a pointer-to-member 556 conversion to change the class type of one of the types. */ 557 else if (TYPE_PTR_TO_MEMBER_P (t1) 558 && !same_type_p (TYPE_PTRMEM_CLASS_TYPE (t1), 559 TYPE_PTRMEM_CLASS_TYPE (t2))) 560 { 561 class1 = TYPE_PTRMEM_CLASS_TYPE (t1); 562 class2 = TYPE_PTRMEM_CLASS_TYPE (t2); 563 564 if (DERIVED_FROM_P (class1, class2)) 565 t1 = build_ptrmem_type (class2, TYPE_PTRMEM_POINTED_TO_TYPE (t1)); 566 else if (DERIVED_FROM_P (class2, class1)) 567 t2 = build_ptrmem_type (class1, TYPE_PTRMEM_POINTED_TO_TYPE (t2)); 568 else 569 { 570 error ("%s between distinct pointer-to-member types %qT and %qT " 571 "lacks a cast", location, t1, t2); 572 return error_mark_node; 573 } 574 } 575 576 return composite_pointer_type_r (t1, t2, location); 577} 578 579/* Return the merged type of two types. 580 We assume that comptypes has already been done and returned 1; 581 if that isn't so, this may crash. 582 583 This just combines attributes and default arguments; any other 584 differences would cause the two types to compare unalike. */ 585 586tree 587merge_types (tree t1, tree t2) 588{ 589 enum tree_code code1; 590 enum tree_code code2; 591 tree attributes; 592 593 /* Save time if the two types are the same. */ 594 if (t1 == t2) 595 return t1; 596 if (original_type (t1) == original_type (t2)) 597 return t1; 598 599 /* If one type is nonsense, use the other. */ 600 if (t1 == error_mark_node) 601 return t2; 602 if (t2 == error_mark_node) 603 return t1; 604 605 /* Merge the attributes. */ 606 attributes = (*targetm.merge_type_attributes) (t1, t2); 607 608 if (TYPE_PTRMEMFUNC_P (t1)) 609 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1); 610 if (TYPE_PTRMEMFUNC_P (t2)) 611 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2); 612 613 code1 = TREE_CODE (t1); 614 code2 = TREE_CODE (t2); 615 616 switch (code1) 617 { 618 case POINTER_TYPE: 619 case REFERENCE_TYPE: 620 /* For two pointers, do this recursively on the target type. */ 621 { 622 tree target = merge_types (TREE_TYPE (t1), TREE_TYPE (t2)); 623 int quals = cp_type_quals (t1); 624 625 if (code1 == POINTER_TYPE) 626 t1 = build_pointer_type (target); 627 else 628 t1 = build_reference_type (target); 629 t1 = build_type_attribute_variant (t1, attributes); 630 t1 = cp_build_qualified_type (t1, quals); 631 632 if (TREE_CODE (target) == METHOD_TYPE) 633 t1 = build_ptrmemfunc_type (t1); 634 635 return t1; 636 } 637 638 case OFFSET_TYPE: 639 { 640 int quals; 641 tree pointee; 642 quals = cp_type_quals (t1); 643 pointee = merge_types (TYPE_PTRMEM_POINTED_TO_TYPE (t1), 644 TYPE_PTRMEM_POINTED_TO_TYPE (t2)); 645 t1 = build_ptrmem_type (TYPE_PTRMEM_CLASS_TYPE (t1), 646 pointee); 647 t1 = cp_build_qualified_type (t1, quals); 648 break; 649 } 650 651 case ARRAY_TYPE: 652 { 653 tree elt = merge_types (TREE_TYPE (t1), TREE_TYPE (t2)); 654 /* Save space: see if the result is identical to one of the args. */ 655 if (elt == TREE_TYPE (t1) && TYPE_DOMAIN (t1)) 656 return build_type_attribute_variant (t1, attributes); 657 if (elt == TREE_TYPE (t2) && TYPE_DOMAIN (t2)) 658 return build_type_attribute_variant (t2, attributes); 659 /* Merge the element types, and have a size if either arg has one. */ 660 t1 = build_cplus_array_type 661 (elt, TYPE_DOMAIN (TYPE_DOMAIN (t1) ? t1 : t2)); 662 break; 663 } 664 665 case FUNCTION_TYPE: 666 /* Function types: prefer the one that specified arg types. 667 If both do, merge the arg types. Also merge the return types. */ 668 { 669 tree valtype = merge_types (TREE_TYPE (t1), TREE_TYPE (t2)); 670 tree p1 = TYPE_ARG_TYPES (t1); 671 tree p2 = TYPE_ARG_TYPES (t2); 672 tree rval, raises; 673 674 /* Save space: see if the result is identical to one of the args. */ 675 if (valtype == TREE_TYPE (t1) && ! p2) 676 return cp_build_type_attribute_variant (t1, attributes); 677 if (valtype == TREE_TYPE (t2) && ! p1) 678 return cp_build_type_attribute_variant (t2, attributes); 679 680 /* Simple way if one arg fails to specify argument types. */ 681 if (p1 == NULL_TREE || TREE_VALUE (p1) == void_type_node) 682 { 683 rval = build_function_type (valtype, p2); 684 if ((raises = TYPE_RAISES_EXCEPTIONS (t2))) 685 rval = build_exception_variant (rval, raises); 686 return cp_build_type_attribute_variant (rval, attributes); 687 } 688 raises = TYPE_RAISES_EXCEPTIONS (t1); 689 if (p2 == NULL_TREE || TREE_VALUE (p2) == void_type_node) 690 { 691 rval = build_function_type (valtype, p1); 692 if (raises) 693 rval = build_exception_variant (rval, raises); 694 return cp_build_type_attribute_variant (rval, attributes); 695 } 696 697 rval = build_function_type (valtype, commonparms (p1, p2)); 698 t1 = build_exception_variant (rval, raises); 699 break; 700 } 701 702 case METHOD_TYPE: 703 { 704 /* Get this value the long way, since TYPE_METHOD_BASETYPE 705 is just the main variant of this. */ 706 tree basetype = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (t2))); 707 tree raises = TYPE_RAISES_EXCEPTIONS (t1); 708 tree t3; 709 710 /* If this was a member function type, get back to the 711 original type of type member function (i.e., without 712 the class instance variable up front. */ 713 t1 = build_function_type (TREE_TYPE (t1), 714 TREE_CHAIN (TYPE_ARG_TYPES (t1))); 715 t2 = build_function_type (TREE_TYPE (t2), 716 TREE_CHAIN (TYPE_ARG_TYPES (t2))); 717 t3 = merge_types (t1, t2); 718 t3 = build_method_type_directly (basetype, TREE_TYPE (t3), 719 TYPE_ARG_TYPES (t3)); 720 t1 = build_exception_variant (t3, raises); 721 break; 722 } 723 724 case TYPENAME_TYPE: 725 /* There is no need to merge attributes into a TYPENAME_TYPE. 726 When the type is instantiated it will have whatever 727 attributes result from the instantiation. */ 728 return t1; 729 730 default:; 731 } 732 733 if (attribute_list_equal (TYPE_ATTRIBUTES (t1), attributes)) 734 return t1; 735 else if (attribute_list_equal (TYPE_ATTRIBUTES (t2), attributes)) 736 return t2; 737 else 738 return cp_build_type_attribute_variant (t1, attributes); 739} 740 741/* Return the common type of two types. 742 We assume that comptypes has already been done and returned 1; 743 if that isn't so, this may crash. 744 745 This is the type for the result of most arithmetic operations 746 if the operands have the given two types. */ 747 748tree 749common_type (tree t1, tree t2) 750{ 751 enum tree_code code1; 752 enum tree_code code2; 753 754 /* If one type is nonsense, bail. */ 755 if (t1 == error_mark_node || t2 == error_mark_node) 756 return error_mark_node; 757 758 code1 = TREE_CODE (t1); 759 code2 = TREE_CODE (t2); 760 761 if ((ARITHMETIC_TYPE_P (t1) || code1 == ENUMERAL_TYPE 762 || code1 == VECTOR_TYPE) 763 && (ARITHMETIC_TYPE_P (t2) || code2 == ENUMERAL_TYPE 764 || code2 == VECTOR_TYPE)) 765 return type_after_usual_arithmetic_conversions (t1, t2); 766 767 else if ((TYPE_PTR_P (t1) && TYPE_PTR_P (t2)) 768 || (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2)) 769 || (TYPE_PTRMEMFUNC_P (t1) && TYPE_PTRMEMFUNC_P (t2))) 770 return composite_pointer_type (t1, t2, error_mark_node, error_mark_node, 771 "conversion"); 772 else 773 gcc_unreachable (); 774} 775 776/* Compare two exception specifier types for exactness or subsetness, if 777 allowed. Returns false for mismatch, true for match (same, or 778 derived and !exact). 779 780 [except.spec] "If a class X ... objects of class X or any class publicly 781 and unambiguously derived from X. Similarly, if a pointer type Y * ... 782 exceptions of type Y * or that are pointers to any type publicly and 783 unambiguously derived from Y. Otherwise a function only allows exceptions 784 that have the same type ..." 785 This does not mention cv qualifiers and is different to what throw 786 [except.throw] and catch [except.catch] will do. They will ignore the 787 top level cv qualifiers, and allow qualifiers in the pointer to class 788 example. 789 790 We implement the letter of the standard. */ 791 792static bool 793comp_except_types (tree a, tree b, bool exact) 794{ 795 if (same_type_p (a, b)) 796 return true; 797 else if (!exact) 798 { 799 if (cp_type_quals (a) || cp_type_quals (b)) 800 return false; 801 802 if (TREE_CODE (a) == POINTER_TYPE 803 && TREE_CODE (b) == POINTER_TYPE) 804 { 805 a = TREE_TYPE (a); 806 b = TREE_TYPE (b); 807 if (cp_type_quals (a) || cp_type_quals (b)) 808 return false; 809 } 810 811 if (TREE_CODE (a) != RECORD_TYPE 812 || TREE_CODE (b) != RECORD_TYPE) 813 return false; 814 815 if (PUBLICLY_UNIQUELY_DERIVED_P (a, b)) 816 return true; 817 } 818 return false; 819} 820 821/* Return true if TYPE1 and TYPE2 are equivalent exception specifiers. 822 If EXACT is false, T2 can be stricter than T1 (according to 15.4/7), 823 otherwise it must be exact. Exception lists are unordered, but 824 we've already filtered out duplicates. Most lists will be in order, 825 we should try to make use of that. */ 826 827bool 828comp_except_specs (tree t1, tree t2, bool exact) 829{ 830 tree probe; 831 tree base; 832 int length = 0; 833 834 if (t1 == t2) 835 return true; 836 837 if (t1 == NULL_TREE) /* T1 is ... */ 838 return t2 == NULL_TREE || !exact; 839 if (!TREE_VALUE (t1)) /* t1 is EMPTY */ 840 return t2 != NULL_TREE && !TREE_VALUE (t2); 841 if (t2 == NULL_TREE) /* T2 is ... */ 842 return false; 843 if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */ 844 return !exact; 845 846 /* Neither set is ... or EMPTY, make sure each part of T2 is in T1. 847 Count how many we find, to determine exactness. For exact matching and 848 ordered T1, T2, this is an O(n) operation, otherwise its worst case is 849 O(nm). */ 850 for (base = t1; t2 != NULL_TREE; t2 = TREE_CHAIN (t2)) 851 { 852 for (probe = base; probe != NULL_TREE; probe = TREE_CHAIN (probe)) 853 { 854 tree a = TREE_VALUE (probe); 855 tree b = TREE_VALUE (t2); 856 857 if (comp_except_types (a, b, exact)) 858 { 859 if (probe == base && exact) 860 base = TREE_CHAIN (probe); 861 length++; 862 break; 863 } 864 } 865 if (probe == NULL_TREE) 866 return false; 867 } 868 return !exact || base == NULL_TREE || length == list_length (t1); 869} 870 871/* Compare the array types T1 and T2. ALLOW_REDECLARATION is true if 872 [] can match [size]. */ 873 874static bool 875comp_array_types (tree t1, tree t2, bool allow_redeclaration) 876{ 877 tree d1; 878 tree d2; 879 tree max1, max2; 880 881 if (t1 == t2) 882 return true; 883 884 /* The type of the array elements must be the same. */ 885 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) 886 return false; 887 888 d1 = TYPE_DOMAIN (t1); 889 d2 = TYPE_DOMAIN (t2); 890 891 if (d1 == d2) 892 return true; 893 894 /* If one of the arrays is dimensionless, and the other has a 895 dimension, they are of different types. However, it is valid to 896 write: 897 898 extern int a[]; 899 int a[3]; 900 901 by [basic.link]: 902 903 declarations for an array object can specify 904 array types that differ by the presence or absence of a major 905 array bound (_dcl.array_). */ 906 if (!d1 || !d2) 907 return allow_redeclaration; 908 909 /* Check that the dimensions are the same. */ 910 911 if (!cp_tree_equal (TYPE_MIN_VALUE (d1), TYPE_MIN_VALUE (d2))) 912 return false; 913 max1 = TYPE_MAX_VALUE (d1); 914 max2 = TYPE_MAX_VALUE (d2); 915 if (processing_template_decl && !abi_version_at_least (2) 916 && !value_dependent_expression_p (max1) 917 && !value_dependent_expression_p (max2)) 918 { 919 /* With abi-1 we do not fold non-dependent array bounds, (and 920 consequently mangle them incorrectly). We must therefore 921 fold them here, to verify the domains have the same 922 value. */ 923 max1 = fold (max1); 924 max2 = fold (max2); 925 } 926 927 if (!cp_tree_equal (max1, max2)) 928 return false; 929 930 return true; 931} 932 933/* Return true if T1 and T2 are related as allowed by STRICT. STRICT 934 is a bitwise-or of the COMPARE_* flags. */ 935 936bool 937comptypes (tree t1, tree t2, int strict) 938{ 939 if (t1 == t2) 940 return true; 941 942 /* Suppress errors caused by previously reported errors. */ 943 if (t1 == error_mark_node || t2 == error_mark_node) 944 return false; 945 946 gcc_assert (TYPE_P (t1) && TYPE_P (t2)); 947 948 /* TYPENAME_TYPEs should be resolved if the qualifying scope is the 949 current instantiation. */ 950 if (TREE_CODE (t1) == TYPENAME_TYPE) 951 { 952 tree resolved = resolve_typename_type (t1, /*only_current_p=*/true); 953 954 if (resolved != error_mark_node) 955 t1 = resolved; 956 } 957 958 if (TREE_CODE (t2) == TYPENAME_TYPE) 959 { 960 tree resolved = resolve_typename_type (t2, /*only_current_p=*/true); 961 962 if (resolved != error_mark_node) 963 t2 = resolved; 964 } 965 966 /* If either type is the internal version of sizetype, use the 967 language version. */ 968 if (TREE_CODE (t1) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t1) 969 && TYPE_ORIG_SIZE_TYPE (t1)) 970 t1 = TYPE_ORIG_SIZE_TYPE (t1); 971 972 if (TREE_CODE (t2) == INTEGER_TYPE && TYPE_IS_SIZETYPE (t2) 973 && TYPE_ORIG_SIZE_TYPE (t2)) 974 t2 = TYPE_ORIG_SIZE_TYPE (t2); 975 976 if (TYPE_PTRMEMFUNC_P (t1)) 977 t1 = TYPE_PTRMEMFUNC_FN_TYPE (t1); 978 if (TYPE_PTRMEMFUNC_P (t2)) 979 t2 = TYPE_PTRMEMFUNC_FN_TYPE (t2); 980 981 /* Different classes of types can't be compatible. */ 982 if (TREE_CODE (t1) != TREE_CODE (t2)) 983 return false; 984 985 /* Qualifiers must match. For array types, we will check when we 986 recur on the array element types. */ 987 if (TREE_CODE (t1) != ARRAY_TYPE 988 && TYPE_QUALS (t1) != TYPE_QUALS (t2)) 989 return false; 990 if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2)) 991 return false; 992 993 /* Allow for two different type nodes which have essentially the same 994 definition. Note that we already checked for equality of the type 995 qualifiers (just above). */ 996 997 if (TREE_CODE (t1) != ARRAY_TYPE 998 && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)) 999 return true; 1000 1001 /* Compare the types. Break out if they could be the same. */ 1002 switch (TREE_CODE (t1)) 1003 { 1004 case TEMPLATE_TEMPLATE_PARM: 1005 case BOUND_TEMPLATE_TEMPLATE_PARM: 1006 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2) 1007 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)) 1008 return false; 1009 if (!comp_template_parms 1010 (DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t1)), 1011 DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2)))) 1012 return false; 1013 if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM) 1014 break; 1015 /* Don't check inheritance. */ 1016 strict = COMPARE_STRICT; 1017 /* Fall through. */ 1018 1019 case RECORD_TYPE: 1020 case UNION_TYPE: 1021 if (TYPE_TEMPLATE_INFO (t1) && TYPE_TEMPLATE_INFO (t2) 1022 && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2) 1023 || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM) 1024 && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2))) 1025 break; 1026 1027 if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2)) 1028 break; 1029 else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1)) 1030 break; 1031 1032 return false; 1033 1034 case OFFSET_TYPE: 1035 if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2), 1036 strict & ~COMPARE_REDECLARATION)) 1037 return false; 1038 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) 1039 return false; 1040 break; 1041 1042 case POINTER_TYPE: 1043 case REFERENCE_TYPE: 1044 if (TYPE_MODE (t1) != TYPE_MODE (t2) 1045 || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2) 1046 || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) 1047 return false; 1048 break; 1049 1050 case METHOD_TYPE: 1051 case FUNCTION_TYPE: 1052 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) 1053 return false; 1054 if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))) 1055 return false; 1056 break; 1057 1058 case ARRAY_TYPE: 1059 /* Target types must match incl. qualifiers. */ 1060 if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION))) 1061 return false; 1062 break; 1063 1064 case TEMPLATE_TYPE_PARM: 1065 if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2) 1066 || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)) 1067 return false; 1068 break; 1069 1070 case TYPENAME_TYPE: 1071 if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1), 1072 TYPENAME_TYPE_FULLNAME (t2))) 1073 return false; 1074 if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))) 1075 return false; 1076 break; 1077 1078 case UNBOUND_CLASS_TEMPLATE: 1079 if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2))) 1080 return false; 1081 if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))) 1082 return false; 1083 break; 1084 1085 case COMPLEX_TYPE: 1086 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) 1087 return false; 1088 break; 1089 1090 case VECTOR_TYPE: 1091 if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2) 1092 || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) 1093 return false; 1094 break; 1095 1096 default: 1097 return false; 1098 } 1099 1100 /* If we get here, we know that from a target independent POV the 1101 types are the same. Make sure the target attributes are also 1102 the same. */ 1103 return targetm.comp_type_attributes (t1, t2); 1104} 1105 1106/* Returns 1 if TYPE1 is at least as qualified as TYPE2. */ 1107 1108bool 1109at_least_as_qualified_p (tree type1, tree type2) 1110{ 1111 int q1 = cp_type_quals (type1); 1112 int q2 = cp_type_quals (type2); 1113 1114 /* All qualifiers for TYPE2 must also appear in TYPE1. */ 1115 return (q1 & q2) == q2; 1116} 1117 1118/* Returns 1 if TYPE1 is more cv-qualified than TYPE2, -1 if TYPE2 is 1119 more cv-qualified that TYPE1, and 0 otherwise. */ 1120 1121int 1122comp_cv_qualification (tree type1, tree type2) 1123{ 1124 int q1 = cp_type_quals (type1); 1125 int q2 = cp_type_quals (type2); 1126 1127 if (q1 == q2) 1128 return 0; 1129 1130 if ((q1 & q2) == q2) 1131 return 1; 1132 else if ((q1 & q2) == q1) 1133 return -1; 1134 1135 return 0; 1136} 1137 1138/* Returns 1 if the cv-qualification signature of TYPE1 is a proper 1139 subset of the cv-qualification signature of TYPE2, and the types 1140 are similar. Returns -1 if the other way 'round, and 0 otherwise. */ 1141 1142int 1143comp_cv_qual_signature (tree type1, tree type2) 1144{ 1145 if (comp_ptr_ttypes_real (type2, type1, -1)) 1146 return 1; 1147 else if (comp_ptr_ttypes_real (type1, type2, -1)) 1148 return -1; 1149 else 1150 return 0; 1151} 1152 1153/* If two types share a common base type, return that basetype. 1154 If there is not a unique most-derived base type, this function 1155 returns ERROR_MARK_NODE. */ 1156 1157static tree 1158common_base_type (tree tt1, tree tt2) 1159{ 1160 tree best = NULL_TREE; 1161 int i; 1162 1163 /* If one is a baseclass of another, that's good enough. */ 1164 if (UNIQUELY_DERIVED_FROM_P (tt1, tt2)) 1165 return tt1; 1166 if (UNIQUELY_DERIVED_FROM_P (tt2, tt1)) 1167 return tt2; 1168 1169 /* Otherwise, try to find a unique baseclass of TT1 1170 that is shared by TT2, and follow that down. */ 1171 for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt1))-1; i >= 0; i--) 1172 { 1173 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt1), i)); 1174 tree trial = common_base_type (basetype, tt2); 1175 1176 if (trial) 1177 { 1178 if (trial == error_mark_node) 1179 return trial; 1180 if (best == NULL_TREE) 1181 best = trial; 1182 else if (best != trial) 1183 return error_mark_node; 1184 } 1185 } 1186 1187 /* Same for TT2. */ 1188 for (i = BINFO_N_BASE_BINFOS (TYPE_BINFO (tt2))-1; i >= 0; i--) 1189 { 1190 tree basetype = BINFO_TYPE (BINFO_BASE_BINFO (TYPE_BINFO (tt2), i)); 1191 tree trial = common_base_type (tt1, basetype); 1192 1193 if (trial) 1194 { 1195 if (trial == error_mark_node) 1196 return trial; 1197 if (best == NULL_TREE) 1198 best = trial; 1199 else if (best != trial) 1200 return error_mark_node; 1201 } 1202 } 1203 return best; 1204} 1205 1206/* Subroutines of `comptypes'. */ 1207 1208/* Return true if two parameter type lists PARMS1 and PARMS2 are 1209 equivalent in the sense that functions with those parameter types 1210 can have equivalent types. The two lists must be equivalent, 1211 element by element. */ 1212 1213bool 1214compparms (tree parms1, tree parms2) 1215{ 1216 tree t1, t2; 1217 1218 /* An unspecified parmlist matches any specified parmlist 1219 whose argument types don't need default promotions. */ 1220 1221 for (t1 = parms1, t2 = parms2; 1222 t1 || t2; 1223 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2)) 1224 { 1225 /* If one parmlist is shorter than the other, 1226 they fail to match. */ 1227 if (!t1 || !t2) 1228 return false; 1229 if (!same_type_p (TREE_VALUE (t1), TREE_VALUE (t2))) 1230 return false; 1231 } 1232 return true; 1233} 1234 1235 1236/* Process a sizeof or alignof expression where the operand is a 1237 type. */ 1238 1239tree 1240cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain) 1241{ 1242 tree value; 1243 bool dependent_p; 1244 1245 gcc_assert (op == SIZEOF_EXPR || op == ALIGNOF_EXPR); 1246 if (type == error_mark_node) 1247 return error_mark_node; 1248 1249 type = non_reference (type); 1250 if (TREE_CODE (type) == METHOD_TYPE) 1251 { 1252 if (complain && (pedantic || warn_pointer_arith)) 1253 pedwarn ("invalid application of %qs to a member function", 1254 operator_name_info[(int) op].name); 1255 value = size_one_node; 1256 } 1257 1258 dependent_p = dependent_type_p (type); 1259 if (!dependent_p) 1260 complete_type (type); 1261 if (dependent_p 1262 /* VLA types will have a non-constant size. In the body of an 1263 uninstantiated template, we don't need to try to compute the 1264 value, because the sizeof expression is not an integral 1265 constant expression in that case. And, if we do try to 1266 compute the value, we'll likely end up with SAVE_EXPRs, which 1267 the template substitution machinery does not expect to see. */ 1268 || (processing_template_decl 1269 && COMPLETE_TYPE_P (type) 1270 && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)) 1271 { 1272 value = build_min (op, size_type_node, type); 1273 TREE_READONLY (value) = 1; 1274 return value; 1275 } 1276 1277 return c_sizeof_or_alignof_type (complete_type (type), 1278 op == SIZEOF_EXPR, 1279 complain); 1280} 1281 1282/* Process a sizeof expression where the operand is an expression. */ 1283 1284static tree 1285cxx_sizeof_expr (tree e) 1286{ 1287 if (e == error_mark_node) 1288 return error_mark_node; 1289 1290 if (processing_template_decl) 1291 { 1292 e = build_min (SIZEOF_EXPR, size_type_node, e); 1293 TREE_SIDE_EFFECTS (e) = 0; 1294 TREE_READONLY (e) = 1; 1295 1296 return e; 1297 } 1298 1299 if (TREE_CODE (e) == COMPONENT_REF 1300 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL 1301 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1))) 1302 { 1303 error ("invalid application of %<sizeof%> to a bit-field"); 1304 e = char_type_node; 1305 } 1306 else if (is_overloaded_fn (e)) 1307 { 1308 pedwarn ("ISO C++ forbids applying %<sizeof%> to an expression of " 1309 "function type"); 1310 e = char_type_node; 1311 } 1312 else if (type_unknown_p (e)) 1313 { 1314 cxx_incomplete_type_error (e, TREE_TYPE (e)); 1315 e = char_type_node; 1316 } 1317 else 1318 e = TREE_TYPE (e); 1319 1320 return cxx_sizeof_or_alignof_type (e, SIZEOF_EXPR, true); 1321} 1322 1323/* Implement the __alignof keyword: Return the minimum required 1324 alignment of E, measured in bytes. For VAR_DECL's and 1325 FIELD_DECL's return DECL_ALIGN (which can be set from an 1326 "aligned" __attribute__ specification). */ 1327 1328static tree 1329cxx_alignof_expr (tree e) 1330{ 1331 tree t; 1332 1333 if (e == error_mark_node) 1334 return error_mark_node; 1335 1336 if (processing_template_decl) 1337 { 1338 e = build_min (ALIGNOF_EXPR, size_type_node, e); 1339 TREE_SIDE_EFFECTS (e) = 0; 1340 TREE_READONLY (e) = 1; 1341 1342 return e; 1343 } 1344 1345 if (TREE_CODE (e) == VAR_DECL) 1346 t = size_int (DECL_ALIGN_UNIT (e)); 1347 else if (TREE_CODE (e) == COMPONENT_REF 1348 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL 1349 && DECL_C_BIT_FIELD (TREE_OPERAND (e, 1))) 1350 { 1351 error ("invalid application of %<__alignof%> to a bit-field"); 1352 t = size_one_node; 1353 } 1354 else if (TREE_CODE (e) == COMPONENT_REF 1355 && TREE_CODE (TREE_OPERAND (e, 1)) == FIELD_DECL) 1356 t = size_int (DECL_ALIGN_UNIT (TREE_OPERAND (e, 1))); 1357 else if (is_overloaded_fn (e)) 1358 { 1359 pedwarn ("ISO C++ forbids applying %<__alignof%> to an expression of " 1360 "function type"); 1361 t = size_one_node; 1362 } 1363 else if (type_unknown_p (e)) 1364 { 1365 cxx_incomplete_type_error (e, TREE_TYPE (e)); 1366 t = size_one_node; 1367 } 1368 else 1369 return cxx_sizeof_or_alignof_type (TREE_TYPE (e), ALIGNOF_EXPR, true); 1370 1371 return fold_convert (size_type_node, t); 1372} 1373 1374/* Process a sizeof or alignof expression E with code OP where the operand 1375 is an expression. */ 1376 1377tree 1378cxx_sizeof_or_alignof_expr (tree e, enum tree_code op) 1379{ 1380 if (op == SIZEOF_EXPR) 1381 return cxx_sizeof_expr (e); 1382 else 1383 return cxx_alignof_expr (e); 1384} 1385 1386/* EXPR is being used in a context that is not a function call. 1387 Enforce: 1388 1389 [expr.ref] 1390 1391 The expression can be used only as the left-hand operand of a 1392 member function call. 1393 1394 [expr.mptr.operator] 1395 1396 If the result of .* or ->* is a function, then that result can be 1397 used only as the operand for the function call operator (). 1398 1399 by issuing an error message if appropriate. Returns true iff EXPR 1400 violates these rules. */ 1401 1402bool 1403invalid_nonstatic_memfn_p (tree expr) 1404{ 1405 if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE) 1406 { 1407 error ("invalid use of non-static member function"); 1408 return true; 1409 } 1410 return false; 1411} 1412 1413/* If EXP is a reference to a bitfield, and the type of EXP does not 1414 match the declared type of the bitfield, return the declared type 1415 of the bitfield. Otherwise, return NULL_TREE. */ 1416 1417tree 1418is_bitfield_expr_with_lowered_type (tree exp) 1419{ 1420 switch (TREE_CODE (exp)) 1421 { 1422 case COND_EXPR: 1423 if (!is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1))) 1424 return NULL_TREE; 1425 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 2)); 1426 1427 case COMPOUND_EXPR: 1428 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 1)); 1429 1430 case MODIFY_EXPR: 1431 case SAVE_EXPR: 1432 return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0)); 1433 1434 case COMPONENT_REF: 1435 { 1436 tree field; 1437 1438 field = TREE_OPERAND (exp, 1); 1439 if (TREE_CODE (field) != FIELD_DECL || !DECL_C_BIT_FIELD (field)) 1440 return NULL_TREE; 1441 if (same_type_ignoring_top_level_qualifiers_p 1442 (TREE_TYPE (exp), DECL_BIT_FIELD_TYPE (field))) 1443 return NULL_TREE; 1444 return DECL_BIT_FIELD_TYPE (field); 1445 } 1446 1447 default: 1448 return NULL_TREE; 1449 } 1450} 1451 1452/* Like is_bitfield_with_lowered_type, except that if EXP is not a 1453 bitfield with a lowered type, the type of EXP is returned, rather 1454 than NULL_TREE. */ 1455 1456tree 1457unlowered_expr_type (tree exp) 1458{ 1459 tree type; 1460 1461 type = is_bitfield_expr_with_lowered_type (exp); 1462 if (!type) 1463 type = TREE_TYPE (exp); 1464 1465 return type; 1466} 1467 1468/* Perform the conversions in [expr] that apply when an lvalue appears 1469 in an rvalue context: the lvalue-to-rvalue, array-to-pointer, and 1470 function-to-pointer conversions. In addition, manifest constants 1471 are replaced by their values, and bitfield references are converted 1472 to their declared types. 1473 1474 Although the returned value is being used as an rvalue, this 1475 function does not wrap the returned expression in a 1476 NON_LVALUE_EXPR; the caller is expected to be mindful of the fact 1477 that the return value is no longer an lvalue. */ 1478 1479tree 1480decay_conversion (tree exp) 1481{ 1482 tree type; 1483 enum tree_code code; 1484 1485 type = TREE_TYPE (exp); 1486 if (type == error_mark_node) 1487 return error_mark_node; 1488 1489 if (type_unknown_p (exp)) 1490 { 1491 cxx_incomplete_type_error (exp, TREE_TYPE (exp)); 1492 return error_mark_node; 1493 } 1494 1495 exp = decl_constant_value (exp); 1496 if (error_operand_p (exp)) 1497 return error_mark_node; 1498 1499 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 1500 Leave such NOP_EXPRs, since RHS is being used in non-lvalue context. */ 1501 code = TREE_CODE (type); 1502 if (code == VOID_TYPE) 1503 { 1504 error ("void value not ignored as it ought to be"); 1505 return error_mark_node; 1506 } 1507 if (invalid_nonstatic_memfn_p (exp)) 1508 return error_mark_node; 1509 if (code == FUNCTION_TYPE || is_overloaded_fn (exp)) 1510 return build_unary_op (ADDR_EXPR, exp, 0); 1511 if (code == ARRAY_TYPE) 1512 { 1513 tree adr; 1514 tree ptrtype; 1515 1516 if (TREE_CODE (exp) == INDIRECT_REF) 1517 return build_nop (build_pointer_type (TREE_TYPE (type)), 1518 TREE_OPERAND (exp, 0)); 1519 1520 if (TREE_CODE (exp) == COMPOUND_EXPR) 1521 { 1522 tree op1 = decay_conversion (TREE_OPERAND (exp, 1)); 1523 return build2 (COMPOUND_EXPR, TREE_TYPE (op1), 1524 TREE_OPERAND (exp, 0), op1); 1525 } 1526 1527 if (!lvalue_p (exp) 1528 && ! (TREE_CODE (exp) == CONSTRUCTOR && TREE_STATIC (exp))) 1529 { 1530 error ("invalid use of non-lvalue array"); 1531 return error_mark_node; 1532 } 1533 1534 ptrtype = build_pointer_type (TREE_TYPE (type)); 1535 1536 if (TREE_CODE (exp) == VAR_DECL) 1537 { 1538 if (!cxx_mark_addressable (exp)) 1539 return error_mark_node; 1540 adr = build_nop (ptrtype, build_address (exp)); 1541 return adr; 1542 } 1543 /* This way is better for a COMPONENT_REF since it can 1544 simplify the offset for a component. */ 1545 adr = build_unary_op (ADDR_EXPR, exp, 1); 1546 return cp_convert (ptrtype, adr); 1547 } 1548 1549 /* If a bitfield is used in a context where integral promotion 1550 applies, then the caller is expected to have used 1551 default_conversion. That function promotes bitfields correctly 1552 before calling this function. At this point, if we have a 1553 bitfield referenced, we may assume that is not subject to 1554 promotion, and that, therefore, the type of the resulting rvalue 1555 is the declared type of the bitfield. */ 1556 exp = convert_bitfield_to_declared_type (exp); 1557 1558 /* We do not call rvalue() here because we do not want to wrap EXP 1559 in a NON_LVALUE_EXPR. */ 1560 1561 /* [basic.lval] 1562 1563 Non-class rvalues always have cv-unqualified types. */ 1564 type = TREE_TYPE (exp); 1565 if (!CLASS_TYPE_P (type) && cp_type_quals (type)) 1566 exp = build_nop (TYPE_MAIN_VARIANT (type), exp); 1567 1568 return exp; 1569} 1570 1571/* Perform prepatory conversions, as part of the "usual arithmetic 1572 conversions". In particular, as per [expr]: 1573 1574 Whenever an lvalue expression appears as an operand of an 1575 operator that expects the rvalue for that operand, the 1576 lvalue-to-rvalue, array-to-pointer, or function-to-pointer 1577 standard conversions are applied to convert the expression to an 1578 rvalue. 1579 1580 In addition, we perform integral promotions here, as those are 1581 applied to both operands to a binary operator before determining 1582 what additional conversions should apply. */ 1583 1584tree 1585default_conversion (tree exp) 1586{ 1587 /* Perform the integral promotions first so that bitfield 1588 expressions (which may promote to "int", even if the bitfield is 1589 declared "unsigned") are promoted correctly. */ 1590 if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (exp))) 1591 exp = perform_integral_promotions (exp); 1592 /* Perform the other conversions. */ 1593 exp = decay_conversion (exp); 1594 1595 return exp; 1596} 1597 1598/* EXPR is an expression with an integral or enumeration type. 1599 Perform the integral promotions in [conv.prom], and return the 1600 converted value. */ 1601 1602tree 1603perform_integral_promotions (tree expr) 1604{ 1605 tree type; 1606 tree promoted_type; 1607 1608 /* [conv.prom] 1609 1610 If the bitfield has an enumerated type, it is treated as any 1611 other value of that type for promotion purposes. */ 1612 type = is_bitfield_expr_with_lowered_type (expr); 1613 if (!type || TREE_CODE (type) != ENUMERAL_TYPE) 1614 type = TREE_TYPE (expr); 1615 gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type)); 1616 promoted_type = type_promotes_to (type); 1617 if (type != promoted_type) 1618 expr = cp_convert (promoted_type, expr); 1619 return expr; 1620} 1621 1622/* Take the address of an inline function without setting TREE_ADDRESSABLE 1623 or TREE_USED. */ 1624 1625tree 1626inline_conversion (tree exp) 1627{ 1628 if (TREE_CODE (exp) == FUNCTION_DECL) 1629 exp = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (exp)), exp); 1630 1631 return exp; 1632} 1633 1634/* Returns nonzero iff exp is a STRING_CST or the result of applying 1635 decay_conversion to one. */ 1636 1637int 1638string_conv_p (tree totype, tree exp, int warn) 1639{ 1640 tree t; 1641 1642 if (TREE_CODE (totype) != POINTER_TYPE) 1643 return 0; 1644 1645 t = TREE_TYPE (totype); 1646 if (!same_type_p (t, char_type_node) 1647 && !same_type_p (t, wchar_type_node)) 1648 return 0; 1649 1650 if (TREE_CODE (exp) == STRING_CST) 1651 { 1652 /* Make sure that we don't try to convert between char and wchar_t. */ 1653 if (!same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (exp))), t)) 1654 return 0; 1655 } 1656 else 1657 { 1658 /* Is this a string constant which has decayed to 'const char *'? */ 1659 t = build_pointer_type (build_qualified_type (t, TYPE_QUAL_CONST)); 1660 if (!same_type_p (TREE_TYPE (exp), t)) 1661 return 0; 1662 STRIP_NOPS (exp); 1663 if (TREE_CODE (exp) != ADDR_EXPR 1664 || TREE_CODE (TREE_OPERAND (exp, 0)) != STRING_CST) 1665 return 0; 1666 } 1667 1668 /* This warning is not very useful, as it complains about printf. */ 1669 if (warn) 1670 warning (OPT_Wwrite_strings, 1671 "deprecated conversion from string constant to %qT", 1672 totype); 1673 1674 return 1; 1675} 1676 1677/* Given a COND_EXPR, MIN_EXPR, or MAX_EXPR in T, return it in a form that we 1678 can, for example, use as an lvalue. This code used to be in 1679 unary_complex_lvalue, but we needed it to deal with `a = (d == c) ? b : c' 1680 expressions, where we're dealing with aggregates. But now it's again only 1681 called from unary_complex_lvalue. The case (in particular) that led to 1682 this was with CODE == ADDR_EXPR, since it's not an lvalue when we'd 1683 get it there. */ 1684 1685static tree 1686rationalize_conditional_expr (enum tree_code code, tree t) 1687{ 1688 /* For MIN_EXPR or MAX_EXPR, fold-const.c has arranged things so that 1689 the first operand is always the one to be used if both operands 1690 are equal, so we know what conditional expression this used to be. */ 1691 if (TREE_CODE (t) == MIN_EXPR || TREE_CODE (t) == MAX_EXPR) 1692 { 1693 tree op0 = TREE_OPERAND (t, 0); 1694 tree op1 = TREE_OPERAND (t, 1); 1695 1696 /* The following code is incorrect if either operand side-effects. */ 1697 gcc_assert (!TREE_SIDE_EFFECTS (op0) 1698 && !TREE_SIDE_EFFECTS (op1)); 1699 return 1700 build_conditional_expr (build_x_binary_op ((TREE_CODE (t) == MIN_EXPR 1701 ? LE_EXPR : GE_EXPR), 1702 op0, TREE_CODE (op0), 1703 op1, TREE_CODE (op1), 1704 /*overloaded_p=*/NULL), 1705 build_unary_op (code, op0, 0), 1706 build_unary_op (code, op1, 0)); 1707 } 1708 1709 return 1710 build_conditional_expr (TREE_OPERAND (t, 0), 1711 build_unary_op (code, TREE_OPERAND (t, 1), 0), 1712 build_unary_op (code, TREE_OPERAND (t, 2), 0)); 1713} 1714 1715/* Given the TYPE of an anonymous union field inside T, return the 1716 FIELD_DECL for the field. If not found return NULL_TREE. Because 1717 anonymous unions can nest, we must also search all anonymous unions 1718 that are directly reachable. */ 1719 1720tree 1721lookup_anon_field (tree t, tree type) 1722{ 1723 tree field; 1724 1725 for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field)) 1726 { 1727 if (TREE_STATIC (field)) 1728 continue; 1729 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field)) 1730 continue; 1731 1732 /* If we find it directly, return the field. */ 1733 if (DECL_NAME (field) == NULL_TREE 1734 && type == TYPE_MAIN_VARIANT (TREE_TYPE (field))) 1735 { 1736 return field; 1737 } 1738 1739 /* Otherwise, it could be nested, search harder. */ 1740 if (DECL_NAME (field) == NULL_TREE 1741 && ANON_AGGR_TYPE_P (TREE_TYPE (field))) 1742 { 1743 tree subfield = lookup_anon_field (TREE_TYPE (field), type); 1744 if (subfield) 1745 return subfield; 1746 } 1747 } 1748 return NULL_TREE; 1749} 1750 1751/* Build an expression representing OBJECT.MEMBER. OBJECT is an 1752 expression; MEMBER is a DECL or baselink. If ACCESS_PATH is 1753 non-NULL, it indicates the path to the base used to name MEMBER. 1754 If PRESERVE_REFERENCE is true, the expression returned will have 1755 REFERENCE_TYPE if the MEMBER does. Otherwise, the expression 1756 returned will have the type referred to by the reference. 1757 1758 This function does not perform access control; that is either done 1759 earlier by the parser when the name of MEMBER is resolved to MEMBER 1760 itself, or later when overload resolution selects one of the 1761 functions indicated by MEMBER. */ 1762 1763tree 1764build_class_member_access_expr (tree object, tree member, 1765 tree access_path, bool preserve_reference) 1766{ 1767 tree object_type; 1768 tree member_scope; 1769 tree result = NULL_TREE; 1770 1771 if (error_operand_p (object) || error_operand_p (member)) 1772 return error_mark_node; 1773 1774 gcc_assert (DECL_P (member) || BASELINK_P (member)); 1775 1776 /* [expr.ref] 1777 1778 The type of the first expression shall be "class object" (of a 1779 complete type). */ 1780 object_type = TREE_TYPE (object); 1781 if (!currently_open_class (object_type) 1782 && !complete_type_or_else (object_type, object)) 1783 return error_mark_node; 1784 if (!CLASS_TYPE_P (object_type)) 1785 { 1786 error ("request for member %qD in %qE, which is of non-class type %qT", 1787 member, object, object_type); 1788 return error_mark_node; 1789 } 1790 1791 /* The standard does not seem to actually say that MEMBER must be a 1792 member of OBJECT_TYPE. However, that is clearly what is 1793 intended. */ 1794 if (DECL_P (member)) 1795 { 1796 member_scope = DECL_CLASS_CONTEXT (member); 1797 mark_used (member); 1798 if (TREE_DEPRECATED (member)) 1799 warn_deprecated_use (member); 1800 } 1801 else 1802 member_scope = BINFO_TYPE (BASELINK_BINFO (member)); 1803 /* If MEMBER is from an anonymous aggregate, MEMBER_SCOPE will 1804 presently be the anonymous union. Go outwards until we find a 1805 type related to OBJECT_TYPE. */ 1806 while (ANON_AGGR_TYPE_P (member_scope) 1807 && !same_type_ignoring_top_level_qualifiers_p (member_scope, 1808 object_type)) 1809 member_scope = TYPE_CONTEXT (member_scope); 1810 if (!member_scope || !DERIVED_FROM_P (member_scope, object_type)) 1811 { 1812 if (TREE_CODE (member) == FIELD_DECL) 1813 error ("invalid use of nonstatic data member %qE", member); 1814 else 1815 error ("%qD is not a member of %qT", member, object_type); 1816 return error_mark_node; 1817 } 1818 1819 /* Transform `(a, b).x' into `(*(a, &b)).x', `(a ? b : c).x' into 1820 `(*(a ? &b : &c)).x', and so on. A COND_EXPR is only an lvalue 1821 in the frontend; only _DECLs and _REFs are lvalues in the backend. */ 1822 { 1823 tree temp = unary_complex_lvalue (ADDR_EXPR, object); 1824 if (temp) 1825 object = build_indirect_ref (temp, NULL); 1826 } 1827 1828 /* In [expr.ref], there is an explicit list of the valid choices for 1829 MEMBER. We check for each of those cases here. */ 1830 if (TREE_CODE (member) == VAR_DECL) 1831 { 1832 /* A static data member. */ 1833 result = member; 1834 /* If OBJECT has side-effects, they are supposed to occur. */ 1835 if (TREE_SIDE_EFFECTS (object)) 1836 result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result); 1837 } 1838 else if (TREE_CODE (member) == FIELD_DECL) 1839 { 1840 /* A non-static data member. */ 1841 bool null_object_p; 1842 int type_quals; 1843 tree member_type; 1844 1845 null_object_p = (TREE_CODE (object) == INDIRECT_REF 1846 && integer_zerop (TREE_OPERAND (object, 0))); 1847 1848 /* Convert OBJECT to the type of MEMBER. */ 1849 if (!same_type_p (TYPE_MAIN_VARIANT (object_type), 1850 TYPE_MAIN_VARIANT (member_scope))) 1851 { 1852 tree binfo; 1853 base_kind kind; 1854 1855 binfo = lookup_base (access_path ? access_path : object_type, 1856 member_scope, ba_unique, &kind); 1857 if (binfo == error_mark_node) 1858 return error_mark_node; 1859 1860 /* It is invalid to try to get to a virtual base of a 1861 NULL object. The most common cause is invalid use of 1862 offsetof macro. */ 1863 if (null_object_p && kind == bk_via_virtual) 1864 { 1865 error ("invalid access to non-static data member %qD of " 1866 "NULL object", 1867 member); 1868 error ("(perhaps the %<offsetof%> macro was used incorrectly)"); 1869 return error_mark_node; 1870 } 1871 1872 /* Convert to the base. */ 1873 object = build_base_path (PLUS_EXPR, object, binfo, 1874 /*nonnull=*/1); 1875 /* If we found the base successfully then we should be able 1876 to convert to it successfully. */ 1877 gcc_assert (object != error_mark_node); 1878 } 1879 1880 /* Complain about other invalid uses of offsetof, even though they will 1881 give the right answer. Note that we complain whether or not they 1882 actually used the offsetof macro, since there's no way to know at this 1883 point. So we just give a warning, instead of a pedwarn. */ 1884 /* Do not produce this warning for base class field references, because 1885 we know for a fact that didn't come from offsetof. This does occur 1886 in various testsuite cases where a null object is passed where a 1887 vtable access is required. */ 1888 if (null_object_p && warn_invalid_offsetof 1889 && CLASSTYPE_NON_POD_P (object_type) 1890 && !DECL_FIELD_IS_BASE (member) 1891 && !skip_evaluation) 1892 { 1893 warning (0, "invalid access to non-static data member %qD of NULL object", 1894 member); 1895 warning (0, "(perhaps the %<offsetof%> macro was used incorrectly)"); 1896 } 1897 1898 /* If MEMBER is from an anonymous aggregate, we have converted 1899 OBJECT so that it refers to the class containing the 1900 anonymous union. Generate a reference to the anonymous union 1901 itself, and recur to find MEMBER. */ 1902 if (ANON_AGGR_TYPE_P (DECL_CONTEXT (member)) 1903 /* When this code is called from build_field_call, the 1904 object already has the type of the anonymous union. 1905 That is because the COMPONENT_REF was already 1906 constructed, and was then disassembled before calling 1907 build_field_call. After the function-call code is 1908 cleaned up, this waste can be eliminated. */ 1909 && (!same_type_ignoring_top_level_qualifiers_p 1910 (TREE_TYPE (object), DECL_CONTEXT (member)))) 1911 { 1912 tree anonymous_union; 1913 1914 anonymous_union = lookup_anon_field (TREE_TYPE (object), 1915 DECL_CONTEXT (member)); 1916 object = build_class_member_access_expr (object, 1917 anonymous_union, 1918 /*access_path=*/NULL_TREE, 1919 preserve_reference); 1920 } 1921 1922 /* Compute the type of the field, as described in [expr.ref]. */ 1923 type_quals = TYPE_UNQUALIFIED; 1924 member_type = TREE_TYPE (member); 1925 if (TREE_CODE (member_type) != REFERENCE_TYPE) 1926 { 1927 type_quals = (cp_type_quals (member_type) 1928 | cp_type_quals (object_type)); 1929 1930 /* A field is const (volatile) if the enclosing object, or the 1931 field itself, is const (volatile). But, a mutable field is 1932 not const, even within a const object. */ 1933 if (DECL_MUTABLE_P (member)) 1934 type_quals &= ~TYPE_QUAL_CONST; 1935 member_type = cp_build_qualified_type (member_type, type_quals); 1936 } 1937 1938 result = build3 (COMPONENT_REF, member_type, object, member, 1939 NULL_TREE); 1940 result = fold_if_not_in_template (result); 1941 1942 /* Mark the expression const or volatile, as appropriate. Even 1943 though we've dealt with the type above, we still have to mark the 1944 expression itself. */ 1945 if (type_quals & TYPE_QUAL_CONST) 1946 TREE_READONLY (result) = 1; 1947 if (type_quals & TYPE_QUAL_VOLATILE) 1948 TREE_THIS_VOLATILE (result) = 1; 1949 } 1950 else if (BASELINK_P (member)) 1951 { 1952 /* The member is a (possibly overloaded) member function. */ 1953 tree functions; 1954 tree type; 1955 1956 /* If the MEMBER is exactly one static member function, then we 1957 know the type of the expression. Otherwise, we must wait 1958 until overload resolution has been performed. */ 1959 functions = BASELINK_FUNCTIONS (member); 1960 if (TREE_CODE (functions) == FUNCTION_DECL 1961 && DECL_STATIC_FUNCTION_P (functions)) 1962 type = TREE_TYPE (functions); 1963 else 1964 type = unknown_type_node; 1965 /* Note that we do not convert OBJECT to the BASELINK_BINFO 1966 base. That will happen when the function is called. */ 1967 result = build3 (COMPONENT_REF, type, object, member, NULL_TREE); 1968 } 1969 else if (TREE_CODE (member) == CONST_DECL) 1970 { 1971 /* The member is an enumerator. */ 1972 result = member; 1973 /* If OBJECT has side-effects, they are supposed to occur. */ 1974 if (TREE_SIDE_EFFECTS (object)) 1975 result = build2 (COMPOUND_EXPR, TREE_TYPE (result), 1976 object, result); 1977 } 1978 else 1979 { 1980 error ("invalid use of %qD", member); 1981 return error_mark_node; 1982 } 1983 1984 if (!preserve_reference) 1985 /* [expr.ref] 1986 1987 If E2 is declared to have type "reference to T", then ... the 1988 type of E1.E2 is T. */ 1989 result = convert_from_reference (result); 1990 1991 return result; 1992} 1993 1994/* Return the destructor denoted by OBJECT.SCOPE::~DTOR_NAME, or, if 1995 SCOPE is NULL, by OBJECT.~DTOR_NAME. */ 1996 1997static tree 1998lookup_destructor (tree object, tree scope, tree dtor_name) 1999{ 2000 tree object_type = TREE_TYPE (object); 2001 tree dtor_type = TREE_OPERAND (dtor_name, 0); 2002 tree expr; 2003 2004 if (scope && !check_dtor_name (scope, dtor_type)) 2005 { 2006 error ("qualified type %qT does not match destructor name ~%qT", 2007 scope, dtor_type); 2008 return error_mark_node; 2009 } 2010 if (!DERIVED_FROM_P (dtor_type, TYPE_MAIN_VARIANT (object_type))) 2011 { 2012 error ("the type being destroyed is %qT, but the destructor refers to %qT", 2013 TYPE_MAIN_VARIANT (object_type), dtor_type); 2014 return error_mark_node; 2015 } 2016 expr = lookup_member (dtor_type, complete_dtor_identifier, 2017 /*protect=*/1, /*want_type=*/false); 2018 expr = (adjust_result_of_qualified_name_lookup 2019 (expr, dtor_type, object_type)); 2020 return expr; 2021} 2022 2023/* An expression of the form "A::template B" has been resolved to 2024 DECL. Issue a diagnostic if B is not a template or template 2025 specialization. */ 2026 2027void 2028check_template_keyword (tree decl) 2029{ 2030 /* The standard says: 2031 2032 [temp.names] 2033 2034 If a name prefixed by the keyword template is not a member 2035 template, the program is ill-formed. 2036 2037 DR 228 removed the restriction that the template be a member 2038 template. 2039 2040 DR 96, if accepted would add the further restriction that explicit 2041 template arguments must be provided if the template keyword is 2042 used, but, as of 2005-10-16, that DR is still in "drafting". If 2043 this DR is accepted, then the semantic checks here can be 2044 simplified, as the entity named must in fact be a template 2045 specialization, rather than, as at present, a set of overloaded 2046 functions containing at least one template function. */ 2047 if (TREE_CODE (decl) != TEMPLATE_DECL 2048 && TREE_CODE (decl) != TEMPLATE_ID_EXPR) 2049 { 2050 if (!is_overloaded_fn (decl)) 2051 pedwarn ("%qD is not a template", decl); 2052 else 2053 { 2054 tree fns; 2055 fns = decl; 2056 if (BASELINK_P (fns)) 2057 fns = BASELINK_FUNCTIONS (fns); 2058 while (fns) 2059 { 2060 tree fn = OVL_CURRENT (fns); 2061 if (TREE_CODE (fn) == TEMPLATE_DECL 2062 || TREE_CODE (fn) == TEMPLATE_ID_EXPR) 2063 break; 2064 if (TREE_CODE (fn) == FUNCTION_DECL 2065 && DECL_USE_TEMPLATE (fn) 2066 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (fn))) 2067 break; 2068 fns = OVL_NEXT (fns); 2069 } 2070 if (!fns) 2071 pedwarn ("%qD is not a template", decl); 2072 } 2073 } 2074} 2075 2076/* This function is called by the parser to process a class member 2077 access expression of the form OBJECT.NAME. NAME is a node used by 2078 the parser to represent a name; it is not yet a DECL. It may, 2079 however, be a BASELINK where the BASELINK_FUNCTIONS is a 2080 TEMPLATE_ID_EXPR. Templates must be looked up by the parser, and 2081 there is no reason to do the lookup twice, so the parser keeps the 2082 BASELINK. TEMPLATE_P is true iff NAME was explicitly declared to 2083 be a template via the use of the "A::template B" syntax. */ 2084 2085tree 2086finish_class_member_access_expr (tree object, tree name, bool template_p) 2087{ 2088 tree expr; 2089 tree object_type; 2090 tree member; 2091 tree access_path = NULL_TREE; 2092 tree orig_object = object; 2093 tree orig_name = name; 2094 2095 if (object == error_mark_node || name == error_mark_node) 2096 return error_mark_node; 2097 2098 /* If OBJECT is an ObjC class instance, we must obey ObjC access rules. */ 2099 if (!objc_is_public (object, name)) 2100 return error_mark_node; 2101 2102 object_type = TREE_TYPE (object); 2103 2104 if (processing_template_decl) 2105 { 2106 if (/* If OBJECT_TYPE is dependent, so is OBJECT.NAME. */ 2107 dependent_type_p (object_type) 2108 /* If NAME is just an IDENTIFIER_NODE, then the expression 2109 is dependent. */ 2110 || TREE_CODE (object) == IDENTIFIER_NODE 2111 /* If NAME is "f<args>", where either 'f' or 'args' is 2112 dependent, then the expression is dependent. */ 2113 || (TREE_CODE (name) == TEMPLATE_ID_EXPR 2114 && dependent_template_id_p (TREE_OPERAND (name, 0), 2115 TREE_OPERAND (name, 1))) 2116 /* If NAME is "T::X" where "T" is dependent, then the 2117 expression is dependent. */ 2118 || (TREE_CODE (name) == SCOPE_REF 2119 && TYPE_P (TREE_OPERAND (name, 0)) 2120 && dependent_type_p (TREE_OPERAND (name, 0)))) 2121 return build_min_nt (COMPONENT_REF, object, name, NULL_TREE); 2122 object = build_non_dependent_expr (object); 2123 } 2124 2125 /* [expr.ref] 2126 2127 The type of the first expression shall be "class object" (of a 2128 complete type). */ 2129 if (!currently_open_class (object_type) 2130 && !complete_type_or_else (object_type, object)) 2131 return error_mark_node; 2132 if (!CLASS_TYPE_P (object_type)) 2133 { 2134 error ("request for member %qD in %qE, which is of non-class type %qT", 2135 name, object, object_type); 2136 return error_mark_node; 2137 } 2138 2139 if (BASELINK_P (name)) 2140 /* A member function that has already been looked up. */ 2141 member = name; 2142 else 2143 { 2144 bool is_template_id = false; 2145 tree template_args = NULL_TREE; 2146 tree scope; 2147 2148 if (TREE_CODE (name) == TEMPLATE_ID_EXPR) 2149 { 2150 is_template_id = true; 2151 template_args = TREE_OPERAND (name, 1); 2152 name = TREE_OPERAND (name, 0); 2153 2154 if (TREE_CODE (name) == OVERLOAD) 2155 name = DECL_NAME (get_first_fn (name)); 2156 else if (DECL_P (name)) 2157 name = DECL_NAME (name); 2158 } 2159 2160 if (TREE_CODE (name) == SCOPE_REF) 2161 { 2162 /* A qualified name. The qualifying class or namespace `S' 2163 has already been looked up; it is either a TYPE or a 2164 NAMESPACE_DECL. */ 2165 scope = TREE_OPERAND (name, 0); 2166 name = TREE_OPERAND (name, 1); 2167 2168 /* If SCOPE is a namespace, then the qualified name does not 2169 name a member of OBJECT_TYPE. */ 2170 if (TREE_CODE (scope) == NAMESPACE_DECL) 2171 { 2172 error ("%<%D::%D%> is not a member of %qT", 2173 scope, name, object_type); 2174 return error_mark_node; 2175 } 2176 2177 gcc_assert (CLASS_TYPE_P (scope)); 2178 gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE 2179 || TREE_CODE (name) == BIT_NOT_EXPR); 2180 2181 /* Find the base of OBJECT_TYPE corresponding to SCOPE. */ 2182 access_path = lookup_base (object_type, scope, ba_check, NULL); 2183 if (access_path == error_mark_node) 2184 return error_mark_node; 2185 if (!access_path) 2186 { 2187 error ("%qT is not a base of %qT", scope, object_type); 2188 return error_mark_node; 2189 } 2190 } 2191 else 2192 { 2193 scope = NULL_TREE; 2194 access_path = object_type; 2195 } 2196 2197 if (TREE_CODE (name) == BIT_NOT_EXPR) 2198 member = lookup_destructor (object, scope, name); 2199 else 2200 { 2201 /* Look up the member. */ 2202 member = lookup_member (access_path, name, /*protect=*/1, 2203 /*want_type=*/false); 2204 if (member == NULL_TREE) 2205 { 2206 error ("%qD has no member named %qE", object_type, name); 2207 return error_mark_node; 2208 } 2209 if (member == error_mark_node) 2210 return error_mark_node; 2211 } 2212 2213 if (is_template_id) 2214 { 2215 tree template = member; 2216 2217 if (BASELINK_P (template)) 2218 template = lookup_template_function (template, template_args); 2219 else 2220 { 2221 error ("%qD is not a member template function", name); 2222 return error_mark_node; 2223 } 2224 } 2225 } 2226 2227 if (TREE_DEPRECATED (member)) 2228 warn_deprecated_use (member); 2229 2230 if (template_p) 2231 check_template_keyword (member); 2232 2233 expr = build_class_member_access_expr (object, member, access_path, 2234 /*preserve_reference=*/false); 2235 if (processing_template_decl && expr != error_mark_node) 2236 { 2237 if (BASELINK_P (member)) 2238 { 2239 if (TREE_CODE (orig_name) == SCOPE_REF) 2240 BASELINK_QUALIFIED_P (member) = 1; 2241 orig_name = member; 2242 } 2243 return build_min_non_dep (COMPONENT_REF, expr, 2244 orig_object, orig_name, 2245 NULL_TREE); 2246 } 2247 2248 return expr; 2249} 2250 2251/* Return an expression for the MEMBER_NAME field in the internal 2252 representation of PTRMEM, a pointer-to-member function. (Each 2253 pointer-to-member function type gets its own RECORD_TYPE so it is 2254 more convenient to access the fields by name than by FIELD_DECL.) 2255 This routine converts the NAME to a FIELD_DECL and then creates the 2256 node for the complete expression. */ 2257 2258tree 2259build_ptrmemfunc_access_expr (tree ptrmem, tree member_name) 2260{ 2261 tree ptrmem_type; 2262 tree member; 2263 tree member_type; 2264 2265 /* This code is a stripped down version of 2266 build_class_member_access_expr. It does not work to use that 2267 routine directly because it expects the object to be of class 2268 type. */ 2269 ptrmem_type = TREE_TYPE (ptrmem); 2270 gcc_assert (TYPE_PTRMEMFUNC_P (ptrmem_type)); 2271 member = lookup_member (ptrmem_type, member_name, /*protect=*/0, 2272 /*want_type=*/false); 2273 member_type = cp_build_qualified_type (TREE_TYPE (member), 2274 cp_type_quals (ptrmem_type)); 2275 return fold_build3 (COMPONENT_REF, member_type, 2276 ptrmem, member, NULL_TREE); 2277} 2278 2279/* Given an expression PTR for a pointer, return an expression 2280 for the value pointed to. 2281 ERRORSTRING is the name of the operator to appear in error messages. 2282 2283 This function may need to overload OPERATOR_FNNAME. 2284 Must also handle REFERENCE_TYPEs for C++. */ 2285 2286tree 2287build_x_indirect_ref (tree expr, const char *errorstring) 2288{ 2289 tree orig_expr = expr; 2290 tree rval; 2291 2292 if (processing_template_decl) 2293 { 2294 if (type_dependent_expression_p (expr)) 2295 return build_min_nt (INDIRECT_REF, expr); 2296 expr = build_non_dependent_expr (expr); 2297 } 2298 2299 rval = build_new_op (INDIRECT_REF, LOOKUP_NORMAL, expr, NULL_TREE, 2300 NULL_TREE, /*overloaded_p=*/NULL); 2301 if (!rval) 2302 rval = build_indirect_ref (expr, errorstring); 2303 2304 if (processing_template_decl && rval != error_mark_node) 2305 return build_min_non_dep (INDIRECT_REF, rval, orig_expr); 2306 else 2307 return rval; 2308} 2309 2310tree 2311build_indirect_ref (tree ptr, const char *errorstring) 2312{ 2313 tree pointer, type; 2314 2315 if (ptr == error_mark_node) 2316 return error_mark_node; 2317 2318 if (ptr == current_class_ptr) 2319 return current_class_ref; 2320 2321 pointer = (TREE_CODE (TREE_TYPE (ptr)) == REFERENCE_TYPE 2322 ? ptr : decay_conversion (ptr)); 2323 type = TREE_TYPE (pointer); 2324 2325 if (POINTER_TYPE_P (type)) 2326 { 2327 /* [expr.unary.op] 2328 2329 If the type of the expression is "pointer to T," the type 2330 of the result is "T." 2331 2332 We must use the canonical variant because certain parts of 2333 the back end, like fold, do pointer comparisons between 2334 types. */ 2335 tree t = canonical_type_variant (TREE_TYPE (type)); 2336 2337 if (TREE_CODE (ptr) == CONVERT_EXPR 2338 || TREE_CODE (ptr) == NOP_EXPR 2339 || TREE_CODE (ptr) == VIEW_CONVERT_EXPR) 2340 { 2341 /* If a warning is issued, mark it to avoid duplicates from 2342 the backend. This only needs to be done at 2343 warn_strict_aliasing > 2. */ 2344 if (warn_strict_aliasing > 2) 2345 if (strict_aliasing_warning (TREE_TYPE (TREE_OPERAND (ptr, 0)), 2346 type, TREE_OPERAND (ptr, 0))) 2347 TREE_NO_WARNING (ptr) = 1; 2348 } 2349 2350 if (VOID_TYPE_P (t)) 2351 { 2352 /* A pointer to incomplete type (other than cv void) can be 2353 dereferenced [expr.unary.op]/1 */ 2354 error ("%qT is not a pointer-to-object type", type); 2355 return error_mark_node; 2356 } 2357 else if (TREE_CODE (pointer) == ADDR_EXPR 2358 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0)))) 2359 /* The POINTER was something like `&x'. We simplify `*&x' to 2360 `x'. */ 2361 return TREE_OPERAND (pointer, 0); 2362 else 2363 { 2364 tree ref = build1 (INDIRECT_REF, t, pointer); 2365 2366 /* We *must* set TREE_READONLY when dereferencing a pointer to const, 2367 so that we get the proper error message if the result is used 2368 to assign to. Also, &* is supposed to be a no-op. */ 2369 TREE_READONLY (ref) = CP_TYPE_CONST_P (t); 2370 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t); 2371 TREE_SIDE_EFFECTS (ref) 2372 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer)); 2373 return ref; 2374 } 2375 } 2376 /* `pointer' won't be an error_mark_node if we were given a 2377 pointer to member, so it's cool to check for this here. */ 2378 else if (TYPE_PTR_TO_MEMBER_P (type)) 2379 error ("invalid use of %qs on pointer to member", errorstring); 2380 else if (pointer != error_mark_node) 2381 { 2382 if (errorstring) 2383 error ("invalid type argument of %qs", errorstring); 2384 else 2385 error ("invalid type argument"); 2386 } 2387 return error_mark_node; 2388} 2389 2390/* This handles expressions of the form "a[i]", which denotes 2391 an array reference. 2392 2393 This is logically equivalent in C to *(a+i), but we may do it differently. 2394 If A is a variable or a member, we generate a primitive ARRAY_REF. 2395 This avoids forcing the array out of registers, and can work on 2396 arrays that are not lvalues (for example, members of structures returned 2397 by functions). 2398 2399 If INDEX is of some user-defined type, it must be converted to 2400 integer type. Otherwise, to make a compatible PLUS_EXPR, it 2401 will inherit the type of the array, which will be some pointer type. */ 2402 2403tree 2404build_array_ref (tree array, tree idx) 2405{ 2406 if (idx == 0) 2407 { 2408 error ("subscript missing in array reference"); 2409 return error_mark_node; 2410 } 2411 2412 if (TREE_TYPE (array) == error_mark_node 2413 || TREE_TYPE (idx) == error_mark_node) 2414 return error_mark_node; 2415 2416 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference 2417 inside it. */ 2418 switch (TREE_CODE (array)) 2419 { 2420 case COMPOUND_EXPR: 2421 { 2422 tree value = build_array_ref (TREE_OPERAND (array, 1), idx); 2423 return build2 (COMPOUND_EXPR, TREE_TYPE (value), 2424 TREE_OPERAND (array, 0), value); 2425 } 2426 2427 case COND_EXPR: 2428 return build_conditional_expr 2429 (TREE_OPERAND (array, 0), 2430 build_array_ref (TREE_OPERAND (array, 1), idx), 2431 build_array_ref (TREE_OPERAND (array, 2), idx)); 2432 2433 default: 2434 break; 2435 } 2436 2437 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE) 2438 { 2439 tree rval, type; 2440 2441 warn_array_subscript_with_type_char (idx); 2442 2443 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx))) 2444 { 2445 error ("array subscript is not an integer"); 2446 return error_mark_node; 2447 } 2448 2449 /* Apply integral promotions *after* noticing character types. 2450 (It is unclear why we do these promotions -- the standard 2451 does not say that we should. In fact, the natural thing would 2452 seem to be to convert IDX to ptrdiff_t; we're performing 2453 pointer arithmetic.) */ 2454 idx = perform_integral_promotions (idx); 2455 2456 /* An array that is indexed by a non-constant 2457 cannot be stored in a register; we must be able to do 2458 address arithmetic on its address. 2459 Likewise an array of elements of variable size. */ 2460 if (TREE_CODE (idx) != INTEGER_CST 2461 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array))) 2462 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) 2463 != INTEGER_CST))) 2464 { 2465 if (!cxx_mark_addressable (array)) 2466 return error_mark_node; 2467 } 2468 2469 /* An array that is indexed by a constant value which is not within 2470 the array bounds cannot be stored in a register either; because we 2471 would get a crash in store_bit_field/extract_bit_field when trying 2472 to access a non-existent part of the register. */ 2473 if (TREE_CODE (idx) == INTEGER_CST 2474 && TYPE_DOMAIN (TREE_TYPE (array)) 2475 && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array)))) 2476 { 2477 if (!cxx_mark_addressable (array)) 2478 return error_mark_node; 2479 } 2480 2481 if (pedantic && !lvalue_p (array)) 2482 pedwarn ("ISO C++ forbids subscripting non-lvalue array"); 2483 2484 /* Note in C++ it is valid to subscript a `register' array, since 2485 it is valid to take the address of something with that 2486 storage specification. */ 2487 if (extra_warnings) 2488 { 2489 tree foo = array; 2490 while (TREE_CODE (foo) == COMPONENT_REF) 2491 foo = TREE_OPERAND (foo, 0); 2492 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo)) 2493 warning (OPT_Wextra, "subscripting array declared %<register%>"); 2494 } 2495 2496 type = TREE_TYPE (TREE_TYPE (array)); 2497 rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE); 2498 /* Array ref is const/volatile if the array elements are 2499 or if the array is.. */ 2500 TREE_READONLY (rval) 2501 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array)); 2502 TREE_SIDE_EFFECTS (rval) 2503 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array)); 2504 TREE_THIS_VOLATILE (rval) 2505 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array)); 2506 return require_complete_type (fold_if_not_in_template (rval)); 2507 } 2508 2509 { 2510 tree ar = default_conversion (array); 2511 tree ind = default_conversion (idx); 2512 2513 /* Put the integer in IND to simplify error checking. */ 2514 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE) 2515 { 2516 tree temp = ar; 2517 ar = ind; 2518 ind = temp; 2519 } 2520 2521 if (ar == error_mark_node) 2522 return ar; 2523 2524 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE) 2525 { 2526 error ("subscripted value is neither array nor pointer"); 2527 return error_mark_node; 2528 } 2529 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE) 2530 { 2531 error ("array subscript is not an integer"); 2532 return error_mark_node; 2533 } 2534 2535 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind), 2536 "array indexing"); 2537 } 2538} 2539 2540/* Resolve a pointer to member function. INSTANCE is the object 2541 instance to use, if the member points to a virtual member. 2542 2543 This used to avoid checking for virtual functions if basetype 2544 has no virtual functions, according to an earlier ANSI draft. 2545 With the final ISO C++ rules, such an optimization is 2546 incorrect: A pointer to a derived member can be static_cast 2547 to pointer-to-base-member, as long as the dynamic object 2548 later has the right member. */ 2549 2550tree 2551get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function) 2552{ 2553 if (TREE_CODE (function) == OFFSET_REF) 2554 function = TREE_OPERAND (function, 1); 2555 2556 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function))) 2557 { 2558 tree idx, delta, e1, e2, e3, vtbl, basetype; 2559 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function)); 2560 2561 tree instance_ptr = *instance_ptrptr; 2562 tree instance_save_expr = 0; 2563 if (instance_ptr == error_mark_node) 2564 { 2565 if (TREE_CODE (function) == PTRMEM_CST) 2566 { 2567 /* Extracting the function address from a pmf is only 2568 allowed with -Wno-pmf-conversions. It only works for 2569 pmf constants. */ 2570 e1 = build_addr_func (PTRMEM_CST_MEMBER (function)); 2571 e1 = convert (fntype, e1); 2572 return e1; 2573 } 2574 else 2575 { 2576 error ("object missing in use of %qE", function); 2577 return error_mark_node; 2578 } 2579 } 2580 2581 if (TREE_SIDE_EFFECTS (instance_ptr)) 2582 instance_ptr = instance_save_expr = save_expr (instance_ptr); 2583 2584 if (TREE_SIDE_EFFECTS (function)) 2585 function = save_expr (function); 2586 2587 /* Start by extracting all the information from the PMF itself. */ 2588 e3 = pfn_from_ptrmemfunc (function); 2589 delta = build_ptrmemfunc_access_expr (function, delta_identifier); 2590 idx = build1 (NOP_EXPR, vtable_index_type, e3); 2591 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION) 2592 { 2593 case ptrmemfunc_vbit_in_pfn: 2594 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node); 2595 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node); 2596 break; 2597 2598 case ptrmemfunc_vbit_in_delta: 2599 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node); 2600 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node); 2601 break; 2602 2603 default: 2604 gcc_unreachable (); 2605 } 2606 2607 /* Convert down to the right base before using the instance. A 2608 special case is that in a pointer to member of class C, C may 2609 be incomplete. In that case, the function will of course be 2610 a member of C, and no conversion is required. In fact, 2611 lookup_base will fail in that case, because incomplete 2612 classes do not have BINFOs. */ 2613 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype)); 2614 if (!same_type_ignoring_top_level_qualifiers_p 2615 (basetype, TREE_TYPE (TREE_TYPE (instance_ptr)))) 2616 { 2617 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)), 2618 basetype, ba_check, NULL); 2619 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype, 2620 1); 2621 if (instance_ptr == error_mark_node) 2622 return error_mark_node; 2623 } 2624 /* ...and then the delta in the PMF. */ 2625 instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr), 2626 instance_ptr, delta); 2627 2628 /* Hand back the adjusted 'this' argument to our caller. */ 2629 *instance_ptrptr = instance_ptr; 2630 2631 /* Next extract the vtable pointer from the object. */ 2632 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node), 2633 instance_ptr); 2634 vtbl = build_indirect_ref (vtbl, NULL); 2635 2636 /* Finally, extract the function pointer from the vtable. */ 2637 e2 = fold_build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx); 2638 e2 = build_indirect_ref (e2, NULL); 2639 TREE_CONSTANT (e2) = 1; 2640 TREE_INVARIANT (e2) = 1; 2641 2642 /* When using function descriptors, the address of the 2643 vtable entry is treated as a function pointer. */ 2644 if (TARGET_VTABLE_USES_DESCRIPTORS) 2645 e2 = build1 (NOP_EXPR, TREE_TYPE (e2), 2646 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1)); 2647 2648 TREE_TYPE (e2) = TREE_TYPE (e3); 2649 e1 = build_conditional_expr (e1, e2, e3); 2650 2651 /* Make sure this doesn't get evaluated first inside one of the 2652 branches of the COND_EXPR. */ 2653 if (instance_save_expr) 2654 e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1), 2655 instance_save_expr, e1); 2656 2657 function = e1; 2658 } 2659 return function; 2660} 2661 2662tree 2663build_function_call (tree function, tree params) 2664{ 2665 tree fntype, fndecl; 2666 tree coerced_params; 2667 tree name = NULL_TREE; 2668 int is_method; 2669 tree original = function; 2670 2671 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF 2672 expressions, like those used for ObjC messenger dispatches. */ 2673 function = objc_rewrite_function_call (function, params); 2674 2675 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 2676 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */ 2677 if (TREE_CODE (function) == NOP_EXPR 2678 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0))) 2679 function = TREE_OPERAND (function, 0); 2680 2681 if (TREE_CODE (function) == FUNCTION_DECL) 2682 { 2683 name = DECL_NAME (function); 2684 2685 mark_used (function); 2686 fndecl = function; 2687 2688 /* Convert anything with function type to a pointer-to-function. */ 2689 if (pedantic && DECL_MAIN_P (function)) 2690 pedwarn ("ISO C++ forbids calling %<::main%> from within program"); 2691 2692 /* Differs from default_conversion by not setting TREE_ADDRESSABLE 2693 (because calling an inline function does not mean the function 2694 needs to be separately compiled). */ 2695 2696 if (DECL_INLINE (function)) 2697 function = inline_conversion (function); 2698 else 2699 function = build_addr_func (function); 2700 } 2701 else 2702 { 2703 fndecl = NULL_TREE; 2704 2705 function = build_addr_func (function); 2706 } 2707 2708 if (function == error_mark_node) 2709 return error_mark_node; 2710 2711 fntype = TREE_TYPE (function); 2712 2713 if (TYPE_PTRMEMFUNC_P (fntype)) 2714 { 2715 error ("must use %<.*%> or %<->*%> to call pointer-to-member " 2716 "function in %<%E (...)%>", 2717 original); 2718 return error_mark_node; 2719 } 2720 2721 is_method = (TREE_CODE (fntype) == POINTER_TYPE 2722 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE); 2723 2724 if (!((TREE_CODE (fntype) == POINTER_TYPE 2725 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE) 2726 || is_method 2727 || TREE_CODE (function) == TEMPLATE_ID_EXPR)) 2728 { 2729 error ("%qE cannot be used as a function", original); 2730 return error_mark_node; 2731 } 2732 2733 /* fntype now gets the type of function pointed to. */ 2734 fntype = TREE_TYPE (fntype); 2735 2736 /* Convert the parameters to the types declared in the 2737 function prototype, or apply default promotions. */ 2738 2739 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype), 2740 params, fndecl, LOOKUP_NORMAL); 2741 if (coerced_params == error_mark_node) 2742 return error_mark_node; 2743 2744 /* Check for errors in format strings and inappropriately 2745 null parameters. */ 2746 2747 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params, 2748 TYPE_ARG_TYPES (fntype)); 2749 2750 return build_cxx_call (function, coerced_params); 2751} 2752 2753/* Convert the actual parameter expressions in the list VALUES 2754 to the types in the list TYPELIST. 2755 If parmdecls is exhausted, or when an element has NULL as its type, 2756 perform the default conversions. 2757 2758 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages. 2759 2760 This is also where warnings about wrong number of args are generated. 2761 2762 Return a list of expressions for the parameters as converted. 2763 2764 Both VALUES and the returned value are chains of TREE_LIST nodes 2765 with the elements of the list in the TREE_VALUE slots of those nodes. 2766 2767 In C++, unspecified trailing parameters can be filled in with their 2768 default arguments, if such were specified. Do so here. */ 2769 2770static tree 2771convert_arguments (tree typelist, tree values, tree fndecl, int flags) 2772{ 2773 tree typetail, valtail; 2774 tree result = NULL_TREE; 2775 const char *called_thing = 0; 2776 int i = 0; 2777 2778 /* Argument passing is always copy-initialization. */ 2779 flags |= LOOKUP_ONLYCONVERTING; 2780 2781 if (fndecl) 2782 { 2783 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE) 2784 { 2785 if (DECL_NAME (fndecl) == NULL_TREE 2786 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl))) 2787 called_thing = "constructor"; 2788 else 2789 called_thing = "member function"; 2790 } 2791 else 2792 called_thing = "function"; 2793 } 2794 2795 for (valtail = values, typetail = typelist; 2796 valtail; 2797 valtail = TREE_CHAIN (valtail), i++) 2798 { 2799 tree type = typetail ? TREE_VALUE (typetail) : 0; 2800 tree val = TREE_VALUE (valtail); 2801 2802 if (val == error_mark_node || type == error_mark_node) 2803 return error_mark_node; 2804 2805 if (type == void_type_node) 2806 { 2807 if (fndecl) 2808 { 2809 error ("too many arguments to %s %q+#D", called_thing, fndecl); 2810 error ("at this point in file"); 2811 } 2812 else 2813 error ("too many arguments to function"); 2814 /* In case anybody wants to know if this argument 2815 list is valid. */ 2816 if (result) 2817 TREE_TYPE (tree_last (result)) = error_mark_node; 2818 break; 2819 } 2820 2821 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 2822 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */ 2823 if (TREE_CODE (val) == NOP_EXPR 2824 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)) 2825 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)) 2826 val = TREE_OPERAND (val, 0); 2827 2828 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE) 2829 { 2830 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE 2831 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE 2832 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE) 2833 val = decay_conversion (val); 2834 } 2835 2836 if (val == error_mark_node) 2837 return error_mark_node; 2838 2839 if (type != 0) 2840 { 2841 /* Formal parm type is specified by a function prototype. */ 2842 tree parmval; 2843 2844 if (!COMPLETE_TYPE_P (complete_type (type))) 2845 { 2846 if (fndecl) 2847 error ("parameter %P of %qD has incomplete type %qT", 2848 i, fndecl, type); 2849 else 2850 error ("parameter %P has incomplete type %qT", i, type); 2851 parmval = error_mark_node; 2852 } 2853 else 2854 { 2855 parmval = convert_for_initialization 2856 (NULL_TREE, type, val, flags, 2857 "argument passing", fndecl, i); 2858 parmval = convert_for_arg_passing (type, parmval); 2859 } 2860 2861 if (parmval == error_mark_node) 2862 return error_mark_node; 2863 2864 result = tree_cons (NULL_TREE, parmval, result); 2865 } 2866 else 2867 { 2868 if (fndecl && DECL_BUILT_IN (fndecl) 2869 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P) 2870 /* Don't do ellipsis conversion for __built_in_constant_p 2871 as this will result in spurious warnings for non-POD 2872 types. */ 2873 val = require_complete_type (val); 2874 else 2875 val = convert_arg_to_ellipsis (val); 2876 2877 result = tree_cons (NULL_TREE, val, result); 2878 } 2879 2880 if (typetail) 2881 typetail = TREE_CHAIN (typetail); 2882 } 2883 2884 if (typetail != 0 && typetail != void_list_node) 2885 { 2886 /* See if there are default arguments that can be used. */ 2887 if (TREE_PURPOSE (typetail) 2888 && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG) 2889 { 2890 for (; typetail != void_list_node; ++i) 2891 { 2892 tree parmval 2893 = convert_default_arg (TREE_VALUE (typetail), 2894 TREE_PURPOSE (typetail), 2895 fndecl, i); 2896 2897 if (parmval == error_mark_node) 2898 return error_mark_node; 2899 2900 result = tree_cons (0, parmval, result); 2901 typetail = TREE_CHAIN (typetail); 2902 /* ends with `...'. */ 2903 if (typetail == NULL_TREE) 2904 break; 2905 } 2906 } 2907 else 2908 { 2909 if (fndecl) 2910 { 2911 error ("too few arguments to %s %q+#D", called_thing, fndecl); 2912 error ("at this point in file"); 2913 } 2914 else 2915 error ("too few arguments to function"); 2916 return error_mark_node; 2917 } 2918 } 2919 2920 return nreverse (result); 2921} 2922 2923/* Build a binary-operation expression, after performing default 2924 conversions on the operands. CODE is the kind of expression to build. */ 2925 2926tree 2927build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code, 2928 tree arg2, enum tree_code arg2_code, bool *overloaded_p) 2929{ 2930 tree orig_arg1; 2931 tree orig_arg2; 2932 tree expr; 2933 2934 orig_arg1 = arg1; 2935 orig_arg2 = arg2; 2936 2937 if (processing_template_decl) 2938 { 2939 if (type_dependent_expression_p (arg1) 2940 || type_dependent_expression_p (arg2)) 2941 return build_min_nt (code, arg1, arg2); 2942 arg1 = build_non_dependent_expr (arg1); 2943 arg2 = build_non_dependent_expr (arg2); 2944 } 2945 2946 if (code == DOTSTAR_EXPR) 2947 expr = build_m_component_ref (arg1, arg2); 2948 else 2949 expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE, 2950 overloaded_p); 2951 2952 /* Check for cases such as x+y<<z which users are likely to 2953 misinterpret. But don't warn about obj << x + y, since that is a 2954 common idiom for I/O. */ 2955 if (warn_parentheses 2956 && !processing_template_decl 2957 && !error_operand_p (arg1) 2958 && !error_operand_p (arg2) 2959 && (code != LSHIFT_EXPR 2960 || !IS_AGGR_TYPE (TREE_TYPE (arg1)))) 2961 warn_about_parentheses (code, arg1_code, arg2_code); 2962 2963 if (processing_template_decl && expr != error_mark_node) 2964 return build_min_non_dep (code, expr, orig_arg1, orig_arg2); 2965 2966 return expr; 2967} 2968 2969/* Build a binary-operation expression without default conversions. 2970 CODE is the kind of expression to build. 2971 This function differs from `build' in several ways: 2972 the data type of the result is computed and recorded in it, 2973 warnings are generated if arg data types are invalid, 2974 special handling for addition and subtraction of pointers is known, 2975 and some optimization is done (operations on narrow ints 2976 are done in the narrower type when that gives the same result). 2977 Constant folding is also done before the result is returned. 2978 2979 Note that the operands will never have enumeral types 2980 because either they have just had the default conversions performed 2981 or they have both just been converted to some other type in which 2982 the arithmetic is to be done. 2983 2984 C++: must do special pointer arithmetic when implementing 2985 multiple inheritance, and deal with pointer to member functions. */ 2986 2987tree 2988build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1, 2989 int convert_p ATTRIBUTE_UNUSED) 2990{ 2991 tree op0, op1; 2992 enum tree_code code0, code1; 2993 tree type0, type1; 2994 const char *invalid_op_diag; 2995 2996 /* Expression code to give to the expression when it is built. 2997 Normally this is CODE, which is what the caller asked for, 2998 but in some special cases we change it. */ 2999 enum tree_code resultcode = code; 3000 3001 /* Data type in which the computation is to be performed. 3002 In the simplest cases this is the common type of the arguments. */ 3003 tree result_type = NULL; 3004 3005 /* Nonzero means operands have already been type-converted 3006 in whatever way is necessary. 3007 Zero means they need to be converted to RESULT_TYPE. */ 3008 int converted = 0; 3009 3010 /* Nonzero means create the expression with this type, rather than 3011 RESULT_TYPE. */ 3012 tree build_type = 0; 3013 3014 /* Nonzero means after finally constructing the expression 3015 convert it to this type. */ 3016 tree final_type = 0; 3017 3018 tree result; 3019 3020 /* Nonzero if this is an operation like MIN or MAX which can 3021 safely be computed in short if both args are promoted shorts. 3022 Also implies COMMON. 3023 -1 indicates a bitwise operation; this makes a difference 3024 in the exact conditions for when it is safe to do the operation 3025 in a narrower mode. */ 3026 int shorten = 0; 3027 3028 /* Nonzero if this is a comparison operation; 3029 if both args are promoted shorts, compare the original shorts. 3030 Also implies COMMON. */ 3031 int short_compare = 0; 3032 3033 /* Nonzero if this is a right-shift operation, which can be computed on the 3034 original short and then promoted if the operand is a promoted short. */ 3035 int short_shift = 0; 3036 3037 /* Nonzero means set RESULT_TYPE to the common type of the args. */ 3038 int common = 0; 3039 3040 /* True if both operands have arithmetic type. */ 3041 bool arithmetic_types_p; 3042 3043 /* Apply default conversions. */ 3044 op0 = orig_op0; 3045 op1 = orig_op1; 3046 3047 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR 3048 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR 3049 || code == TRUTH_XOR_EXPR) 3050 { 3051 if (!really_overloaded_fn (op0)) 3052 op0 = decay_conversion (op0); 3053 if (!really_overloaded_fn (op1)) 3054 op1 = decay_conversion (op1); 3055 } 3056 else 3057 { 3058 if (!really_overloaded_fn (op0)) 3059 op0 = default_conversion (op0); 3060 if (!really_overloaded_fn (op1)) 3061 op1 = default_conversion (op1); 3062 } 3063 3064 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */ 3065 STRIP_TYPE_NOPS (op0); 3066 STRIP_TYPE_NOPS (op1); 3067 3068 /* DTRT if one side is an overloaded function, but complain about it. */ 3069 if (type_unknown_p (op0)) 3070 { 3071 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none); 3072 if (t != error_mark_node) 3073 { 3074 pedwarn ("assuming cast to type %qT from overloaded function", 3075 TREE_TYPE (t)); 3076 op0 = t; 3077 } 3078 } 3079 if (type_unknown_p (op1)) 3080 { 3081 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none); 3082 if (t != error_mark_node) 3083 { 3084 pedwarn ("assuming cast to type %qT from overloaded function", 3085 TREE_TYPE (t)); 3086 op1 = t; 3087 } 3088 } 3089 3090 type0 = TREE_TYPE (op0); 3091 type1 = TREE_TYPE (op1); 3092 3093 /* The expression codes of the data types of the arguments tell us 3094 whether the arguments are integers, floating, pointers, etc. */ 3095 code0 = TREE_CODE (type0); 3096 code1 = TREE_CODE (type1); 3097 3098 /* If an error was already reported for one of the arguments, 3099 avoid reporting another error. */ 3100 3101 if (code0 == ERROR_MARK || code1 == ERROR_MARK) 3102 return error_mark_node; 3103 3104 if ((invalid_op_diag 3105 = targetm.invalid_binary_op (code, type0, type1))) 3106 { 3107 error (invalid_op_diag); 3108 return error_mark_node; 3109 } 3110 3111 switch (code) 3112 { 3113 case MINUS_EXPR: 3114 /* Subtraction of two similar pointers. 3115 We must subtract them as integers, then divide by object size. */ 3116 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE 3117 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0), 3118 TREE_TYPE (type1))) 3119 return pointer_diff (op0, op1, common_type (type0, type1)); 3120 /* In all other cases except pointer - int, the usual arithmetic 3121 rules aply. */ 3122 else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE)) 3123 { 3124 common = 1; 3125 break; 3126 } 3127 /* The pointer - int case is just like pointer + int; fall 3128 through. */ 3129 case PLUS_EXPR: 3130 if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE) 3131 && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE)) 3132 { 3133 tree ptr_operand; 3134 tree int_operand; 3135 ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1); 3136 int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1); 3137 if (processing_template_decl) 3138 { 3139 result_type = TREE_TYPE (ptr_operand); 3140 break; 3141 } 3142 return cp_pointer_int_sum (code, 3143 ptr_operand, 3144 int_operand); 3145 } 3146 common = 1; 3147 break; 3148 3149 case MULT_EXPR: 3150 common = 1; 3151 break; 3152 3153 case TRUNC_DIV_EXPR: 3154 case CEIL_DIV_EXPR: 3155 case FLOOR_DIV_EXPR: 3156 case ROUND_DIV_EXPR: 3157 case EXACT_DIV_EXPR: 3158 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE 3159 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE) 3160 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE 3161 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)) 3162 { 3163 enum tree_code tcode0 = code0, tcode1 = code1; 3164 3165 if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1)) 3166 warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0); 3167 else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1)) 3168 warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0); 3169 3170 if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE) 3171 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0))); 3172 if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE) 3173 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1))); 3174 3175 if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE)) 3176 resultcode = RDIV_EXPR; 3177 else 3178 /* When dividing two signed integers, we have to promote to int. 3179 unless we divide by a constant != -1. Note that default 3180 conversion will have been performed on the operands at this 3181 point, so we have to dig out the original type to find out if 3182 it was unsigned. */ 3183 shorten = ((TREE_CODE (op0) == NOP_EXPR 3184 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0)))) 3185 || (TREE_CODE (op1) == INTEGER_CST 3186 && ! integer_all_onesp (op1))); 3187 3188 common = 1; 3189 } 3190 break; 3191 3192 case BIT_AND_EXPR: 3193 case BIT_IOR_EXPR: 3194 case BIT_XOR_EXPR: 3195 if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3196 || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)) 3197 shorten = -1; 3198 break; 3199 3200 case TRUNC_MOD_EXPR: 3201 case FLOOR_MOD_EXPR: 3202 if (code1 == INTEGER_TYPE && integer_zerop (op1)) 3203 warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0); 3204 else if (code1 == REAL_TYPE && real_zerop (op1)) 3205 warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0); 3206 3207 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3208 { 3209 /* Although it would be tempting to shorten always here, that loses 3210 on some targets, since the modulo instruction is undefined if the 3211 quotient can't be represented in the computation mode. We shorten 3212 only if unsigned or if dividing by something we know != -1. */ 3213 shorten = ((TREE_CODE (op0) == NOP_EXPR 3214 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0)))) 3215 || (TREE_CODE (op1) == INTEGER_CST 3216 && ! integer_all_onesp (op1))); 3217 common = 1; 3218 } 3219 break; 3220 3221 case TRUTH_ANDIF_EXPR: 3222 case TRUTH_ORIF_EXPR: 3223 case TRUTH_AND_EXPR: 3224 case TRUTH_OR_EXPR: 3225 result_type = boolean_type_node; 3226 break; 3227 3228 /* Shift operations: result has same type as first operand; 3229 always convert second operand to int. 3230 Also set SHORT_SHIFT if shifting rightward. */ 3231 3232 case RSHIFT_EXPR: 3233 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3234 { 3235 result_type = type0; 3236 if (TREE_CODE (op1) == INTEGER_CST) 3237 { 3238 if (tree_int_cst_lt (op1, integer_zero_node)) 3239 warning (0, "right shift count is negative"); 3240 else 3241 { 3242 if (! integer_zerop (op1)) 3243 short_shift = 1; 3244 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) 3245 warning (0, "right shift count >= width of type"); 3246 } 3247 } 3248 /* Convert the shift-count to an integer, regardless of 3249 size of value being shifted. */ 3250 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node) 3251 op1 = cp_convert (integer_type_node, op1); 3252 /* Avoid converting op1 to result_type later. */ 3253 converted = 1; 3254 } 3255 break; 3256 3257 case LSHIFT_EXPR: 3258 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3259 { 3260 result_type = type0; 3261 if (TREE_CODE (op1) == INTEGER_CST) 3262 { 3263 if (tree_int_cst_lt (op1, integer_zero_node)) 3264 warning (0, "left shift count is negative"); 3265 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) 3266 warning (0, "left shift count >= width of type"); 3267 } 3268 /* Convert the shift-count to an integer, regardless of 3269 size of value being shifted. */ 3270 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node) 3271 op1 = cp_convert (integer_type_node, op1); 3272 /* Avoid converting op1 to result_type later. */ 3273 converted = 1; 3274 } 3275 break; 3276 3277 case RROTATE_EXPR: 3278 case LROTATE_EXPR: 3279 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3280 { 3281 result_type = type0; 3282 if (TREE_CODE (op1) == INTEGER_CST) 3283 { 3284 if (tree_int_cst_lt (op1, integer_zero_node)) 3285 warning (0, "%s rotate count is negative", 3286 (code == LROTATE_EXPR) ? "left" : "right"); 3287 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) 3288 warning (0, "%s rotate count >= width of type", 3289 (code == LROTATE_EXPR) ? "left" : "right"); 3290 } 3291 /* Convert the shift-count to an integer, regardless of 3292 size of value being shifted. */ 3293 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node) 3294 op1 = cp_convert (integer_type_node, op1); 3295 } 3296 break; 3297 3298 case EQ_EXPR: 3299 case NE_EXPR: 3300 if (code0 == REAL_TYPE || code1 == REAL_TYPE) 3301 warning (OPT_Wfloat_equal, 3302 "comparing floating point with == or != is unsafe"); 3303 if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1)) 3304 || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0))) 3305 warning (OPT_Waddress, 3306 "comparison with string literal results in unspecified behaviour"); 3307 3308 build_type = boolean_type_node; 3309 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE 3310 || code0 == COMPLEX_TYPE) 3311 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE 3312 || code1 == COMPLEX_TYPE)) 3313 short_compare = 1; 3314 else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE) 3315 || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1))) 3316 result_type = composite_pointer_type (type0, type1, op0, op1, 3317 "comparison"); 3318 else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0)) 3319 && null_ptr_cst_p (op1)) 3320 result_type = type0; 3321 else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1)) 3322 && null_ptr_cst_p (op0)) 3323 result_type = type1; 3324 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE) 3325 { 3326 result_type = type0; 3327 error ("ISO C++ forbids comparison between pointer and integer"); 3328 } 3329 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE) 3330 { 3331 result_type = type1; 3332 error ("ISO C++ forbids comparison between pointer and integer"); 3333 } 3334 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1)) 3335 { 3336 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier); 3337 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node); 3338 result_type = TREE_TYPE (op0); 3339 } 3340 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0)) 3341 return cp_build_binary_op (code, op1, op0); 3342 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1) 3343 && same_type_p (type0, type1)) 3344 { 3345 /* E will be the final comparison. */ 3346 tree e; 3347 /* E1 and E2 are for scratch. */ 3348 tree e1; 3349 tree e2; 3350 tree pfn0; 3351 tree pfn1; 3352 tree delta0; 3353 tree delta1; 3354 3355 if (TREE_SIDE_EFFECTS (op0)) 3356 op0 = save_expr (op0); 3357 if (TREE_SIDE_EFFECTS (op1)) 3358 op1 = save_expr (op1); 3359 3360 /* We generate: 3361 3362 (op0.pfn == op1.pfn 3363 && (!op0.pfn || op0.delta == op1.delta)) 3364 3365 The reason for the `!op0.pfn' bit is that a NULL 3366 pointer-to-member is any member with a zero PFN; the 3367 DELTA field is unspecified. */ 3368 pfn0 = pfn_from_ptrmemfunc (op0); 3369 pfn1 = pfn_from_ptrmemfunc (op1); 3370 delta0 = build_ptrmemfunc_access_expr (op0, 3371 delta_identifier); 3372 delta1 = build_ptrmemfunc_access_expr (op1, 3373 delta_identifier); 3374 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1); 3375 e2 = cp_build_binary_op (EQ_EXPR, 3376 pfn0, 3377 cp_convert (TREE_TYPE (pfn0), 3378 integer_zero_node)); 3379 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2); 3380 e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1); 3381 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1); 3382 if (code == EQ_EXPR) 3383 return e; 3384 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node); 3385 } 3386 else 3387 { 3388 gcc_assert (!TYPE_PTRMEMFUNC_P (type0) 3389 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0), 3390 type1)); 3391 gcc_assert (!TYPE_PTRMEMFUNC_P (type1) 3392 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1), 3393 type0)); 3394 } 3395 3396 break; 3397 3398 case MAX_EXPR: 3399 case MIN_EXPR: 3400 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE) 3401 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE)) 3402 shorten = 1; 3403 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) 3404 result_type = composite_pointer_type (type0, type1, op0, op1, 3405 "comparison"); 3406 break; 3407 3408 case LE_EXPR: 3409 case GE_EXPR: 3410 case LT_EXPR: 3411 case GT_EXPR: 3412 if (TREE_CODE (orig_op0) == STRING_CST 3413 || TREE_CODE (orig_op1) == STRING_CST) 3414 warning (OPT_Waddress, 3415 "comparison with string literal results in unspecified behaviour"); 3416 3417 build_type = boolean_type_node; 3418 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE) 3419 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE)) 3420 short_compare = 1; 3421 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) 3422 result_type = composite_pointer_type (type0, type1, op0, op1, 3423 "comparison"); 3424 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST 3425 && integer_zerop (op1)) 3426 result_type = type0; 3427 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST 3428 && integer_zerop (op0)) 3429 result_type = type1; 3430 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE) 3431 { 3432 result_type = type0; 3433 pedwarn ("ISO C++ forbids comparison between pointer and integer"); 3434 } 3435 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE) 3436 { 3437 result_type = type1; 3438 pedwarn ("ISO C++ forbids comparison between pointer and integer"); 3439 } 3440 break; 3441 3442 case UNORDERED_EXPR: 3443 case ORDERED_EXPR: 3444 case UNLT_EXPR: 3445 case UNLE_EXPR: 3446 case UNGT_EXPR: 3447 case UNGE_EXPR: 3448 case UNEQ_EXPR: 3449 build_type = integer_type_node; 3450 if (code0 != REAL_TYPE || code1 != REAL_TYPE) 3451 { 3452 error ("unordered comparison on non-floating point argument"); 3453 return error_mark_node; 3454 } 3455 common = 1; 3456 break; 3457 3458 default: 3459 break; 3460 } 3461 3462 if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE) 3463 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE 3464 || code1 == COMPLEX_TYPE))) 3465 arithmetic_types_p = 1; 3466 else 3467 { 3468 arithmetic_types_p = 0; 3469 /* Vector arithmetic is only allowed when both sides are vectors. */ 3470 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE) 3471 { 3472 if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1)) 3473 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0), 3474 TREE_TYPE (type1))) 3475 { 3476 binary_op_error (code); 3477 return error_mark_node; 3478 } 3479 arithmetic_types_p = 1; 3480 } 3481 } 3482 /* Determine the RESULT_TYPE, if it is not already known. */ 3483 if (!result_type 3484 && arithmetic_types_p 3485 && (shorten || common || short_compare)) 3486 result_type = common_type (type0, type1); 3487 3488 if (!result_type) 3489 { 3490 error ("invalid operands of types %qT and %qT to binary %qO", 3491 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code); 3492 return error_mark_node; 3493 } 3494 3495 /* If we're in a template, the only thing we need to know is the 3496 RESULT_TYPE. */ 3497 if (processing_template_decl) 3498 return build2 (resultcode, 3499 build_type ? build_type : result_type, 3500 op0, op1); 3501 3502 if (arithmetic_types_p) 3503 { 3504 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE); 3505 3506 /* For certain operations (which identify themselves by shorten != 0) 3507 if both args were extended from the same smaller type, 3508 do the arithmetic in that type and then extend. 3509 3510 shorten !=0 and !=1 indicates a bitwise operation. 3511 For them, this optimization is safe only if 3512 both args are zero-extended or both are sign-extended. 3513 Otherwise, we might change the result. 3514 Eg, (short)-1 | (unsigned short)-1 is (int)-1 3515 but calculated in (unsigned short) it would be (unsigned short)-1. */ 3516 3517 if (shorten && none_complex) 3518 { 3519 int unsigned0, unsigned1; 3520 tree arg0 = get_narrower (op0, &unsigned0); 3521 tree arg1 = get_narrower (op1, &unsigned1); 3522 /* UNS is 1 if the operation to be done is an unsigned one. */ 3523 int uns = TYPE_UNSIGNED (result_type); 3524 tree type; 3525 3526 final_type = result_type; 3527 3528 /* Handle the case that OP0 does not *contain* a conversion 3529 but it *requires* conversion to FINAL_TYPE. */ 3530 3531 if (op0 == arg0 && TREE_TYPE (op0) != final_type) 3532 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0)); 3533 if (op1 == arg1 && TREE_TYPE (op1) != final_type) 3534 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1)); 3535 3536 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */ 3537 3538 /* For bitwise operations, signedness of nominal type 3539 does not matter. Consider only how operands were extended. */ 3540 if (shorten == -1) 3541 uns = unsigned0; 3542 3543 /* Note that in all three cases below we refrain from optimizing 3544 an unsigned operation on sign-extended args. 3545 That would not be valid. */ 3546 3547 /* Both args variable: if both extended in same way 3548 from same width, do it in that width. 3549 Do it unsigned if args were zero-extended. */ 3550 if ((TYPE_PRECISION (TREE_TYPE (arg0)) 3551 < TYPE_PRECISION (result_type)) 3552 && (TYPE_PRECISION (TREE_TYPE (arg1)) 3553 == TYPE_PRECISION (TREE_TYPE (arg0))) 3554 && unsigned0 == unsigned1 3555 && (unsigned0 || !uns)) 3556 result_type = c_common_signed_or_unsigned_type 3557 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1))); 3558 else if (TREE_CODE (arg0) == INTEGER_CST 3559 && (unsigned1 || !uns) 3560 && (TYPE_PRECISION (TREE_TYPE (arg1)) 3561 < TYPE_PRECISION (result_type)) 3562 && (type = c_common_signed_or_unsigned_type 3563 (unsigned1, TREE_TYPE (arg1)), 3564 int_fits_type_p (arg0, type))) 3565 result_type = type; 3566 else if (TREE_CODE (arg1) == INTEGER_CST 3567 && (unsigned0 || !uns) 3568 && (TYPE_PRECISION (TREE_TYPE (arg0)) 3569 < TYPE_PRECISION (result_type)) 3570 && (type = c_common_signed_or_unsigned_type 3571 (unsigned0, TREE_TYPE (arg0)), 3572 int_fits_type_p (arg1, type))) 3573 result_type = type; 3574 } 3575 3576 /* Shifts can be shortened if shifting right. */ 3577 3578 if (short_shift) 3579 { 3580 int unsigned_arg; 3581 tree arg0 = get_narrower (op0, &unsigned_arg); 3582 3583 final_type = result_type; 3584 3585 if (arg0 == op0 && final_type == TREE_TYPE (op0)) 3586 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0)); 3587 3588 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type) 3589 /* We can shorten only if the shift count is less than the 3590 number of bits in the smaller type size. */ 3591 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0 3592 /* If arg is sign-extended and then unsigned-shifted, 3593 we can simulate this with a signed shift in arg's type 3594 only if the extended result is at least twice as wide 3595 as the arg. Otherwise, the shift could use up all the 3596 ones made by sign-extension and bring in zeros. 3597 We can't optimize that case at all, but in most machines 3598 it never happens because available widths are 2**N. */ 3599 && (!TYPE_UNSIGNED (final_type) 3600 || unsigned_arg 3601 || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0))) 3602 <= TYPE_PRECISION (result_type)))) 3603 { 3604 /* Do an unsigned shift if the operand was zero-extended. */ 3605 result_type 3606 = c_common_signed_or_unsigned_type (unsigned_arg, 3607 TREE_TYPE (arg0)); 3608 /* Convert value-to-be-shifted to that type. */ 3609 if (TREE_TYPE (op0) != result_type) 3610 op0 = cp_convert (result_type, op0); 3611 converted = 1; 3612 } 3613 } 3614 3615 /* Comparison operations are shortened too but differently. 3616 They identify themselves by setting short_compare = 1. */ 3617 3618 if (short_compare) 3619 { 3620 /* Don't write &op0, etc., because that would prevent op0 3621 from being kept in a register. 3622 Instead, make copies of the our local variables and 3623 pass the copies by reference, then copy them back afterward. */ 3624 tree xop0 = op0, xop1 = op1, xresult_type = result_type; 3625 enum tree_code xresultcode = resultcode; 3626 tree val 3627 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode); 3628 if (val != 0) 3629 return cp_convert (boolean_type_node, val); 3630 op0 = xop0, op1 = xop1; 3631 converted = 1; 3632 resultcode = xresultcode; 3633 } 3634 3635 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR) 3636 && warn_sign_compare 3637 /* Do not warn until the template is instantiated; we cannot 3638 bound the ranges of the arguments until that point. */ 3639 && !processing_template_decl) 3640 { 3641 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0)); 3642 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1)); 3643 3644 int unsignedp0, unsignedp1; 3645 tree primop0 = get_narrower (op0, &unsignedp0); 3646 tree primop1 = get_narrower (op1, &unsignedp1); 3647 3648 /* Check for comparison of different enum types. */ 3649 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE 3650 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE 3651 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0)) 3652 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1))) 3653 { 3654 warning (0, "comparison between types %q#T and %q#T", 3655 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1)); 3656 } 3657 3658 /* Give warnings for comparisons between signed and unsigned 3659 quantities that may fail. */ 3660 /* Do the checking based on the original operand trees, so that 3661 casts will be considered, but default promotions won't be. */ 3662 3663 /* Do not warn if the comparison is being done in a signed type, 3664 since the signed type will only be chosen if it can represent 3665 all the values of the unsigned type. */ 3666 if (!TYPE_UNSIGNED (result_type)) 3667 /* OK */; 3668 /* Do not warn if both operands are unsigned. */ 3669 else if (op0_signed == op1_signed) 3670 /* OK */; 3671 /* Do not warn if the signed quantity is an unsuffixed 3672 integer literal (or some static constant expression 3673 involving such literals or a conditional expression 3674 involving such literals) and it is non-negative. */ 3675 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0)) 3676 || (op1_signed && tree_expr_nonnegative_p (orig_op1))) 3677 /* OK */; 3678 /* Do not warn if the comparison is an equality operation, 3679 the unsigned quantity is an integral constant and it does 3680 not use the most significant bit of result_type. */ 3681 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR) 3682 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST 3683 && int_fits_type_p (orig_op1, c_common_signed_type 3684 (result_type))) 3685 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST 3686 && int_fits_type_p (orig_op0, c_common_signed_type 3687 (result_type))))) 3688 /* OK */; 3689 else 3690 warning (0, "comparison between signed and unsigned integer expressions"); 3691 3692 /* Warn if two unsigned values are being compared in a size 3693 larger than their original size, and one (and only one) is the 3694 result of a `~' operator. This comparison will always fail. 3695 3696 Also warn if one operand is a constant, and the constant does not 3697 have all bits set that are set in the ~ operand when it is 3698 extended. */ 3699 3700 if ((TREE_CODE (primop0) == BIT_NOT_EXPR) 3701 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR)) 3702 { 3703 if (TREE_CODE (primop0) == BIT_NOT_EXPR) 3704 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0); 3705 if (TREE_CODE (primop1) == BIT_NOT_EXPR) 3706 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1); 3707 3708 if (host_integerp (primop0, 0) || host_integerp (primop1, 0)) 3709 { 3710 tree primop; 3711 HOST_WIDE_INT constant, mask; 3712 int unsignedp; 3713 unsigned int bits; 3714 3715 if (host_integerp (primop0, 0)) 3716 { 3717 primop = primop1; 3718 unsignedp = unsignedp1; 3719 constant = tree_low_cst (primop0, 0); 3720 } 3721 else 3722 { 3723 primop = primop0; 3724 unsignedp = unsignedp0; 3725 constant = tree_low_cst (primop1, 0); 3726 } 3727 3728 bits = TYPE_PRECISION (TREE_TYPE (primop)); 3729 if (bits < TYPE_PRECISION (result_type) 3730 && bits < HOST_BITS_PER_LONG && unsignedp) 3731 { 3732 mask = (~ (HOST_WIDE_INT) 0) << bits; 3733 if ((mask & constant) != mask) 3734 warning (0, "comparison of promoted ~unsigned with constant"); 3735 } 3736 } 3737 else if (unsignedp0 && unsignedp1 3738 && (TYPE_PRECISION (TREE_TYPE (primop0)) 3739 < TYPE_PRECISION (result_type)) 3740 && (TYPE_PRECISION (TREE_TYPE (primop1)) 3741 < TYPE_PRECISION (result_type))) 3742 warning (0, "comparison of promoted ~unsigned with unsigned"); 3743 } 3744 } 3745 } 3746 3747 /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE. 3748 Then the expression will be built. 3749 It will be given type FINAL_TYPE if that is nonzero; 3750 otherwise, it will be given type RESULT_TYPE. */ 3751 3752 /* Issue warnings about peculiar, but valid, uses of NULL. */ 3753 if (/* It's reasonable to use pointer values as operands of && 3754 and ||, so NULL is no exception. */ 3755 !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR) 3756 && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa. */ 3757 (orig_op0 == null_node 3758 && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE) 3759 /* Or vice versa. */ 3760 || (orig_op1 == null_node 3761 && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE) 3762 /* Or, both are NULL and the operation was not a comparison. */ 3763 || (orig_op0 == null_node && orig_op1 == null_node 3764 && code != EQ_EXPR && code != NE_EXPR))) 3765 /* Some sort of arithmetic operation involving NULL was 3766 performed. Note that pointer-difference and pointer-addition 3767 have already been handled above, and so we don't end up here in 3768 that case. */ 3769 warning (0, "NULL used in arithmetic"); 3770 3771 if (! converted) 3772 { 3773 if (TREE_TYPE (op0) != result_type) 3774 op0 = cp_convert (result_type, op0); 3775 if (TREE_TYPE (op1) != result_type) 3776 op1 = cp_convert (result_type, op1); 3777 3778 if (op0 == error_mark_node || op1 == error_mark_node) 3779 return error_mark_node; 3780 } 3781 3782 if (build_type == NULL_TREE) 3783 build_type = result_type; 3784 3785 result = build2 (resultcode, build_type, op0, op1); 3786 result = fold_if_not_in_template (result); 3787 if (final_type != 0) 3788 result = cp_convert (final_type, result); 3789 3790 if (TREE_OVERFLOW_P (result) 3791 && !TREE_OVERFLOW_P (op0) 3792 && !TREE_OVERFLOW_P (op1)) 3793 overflow_warning (result); 3794 3795 return result; 3796} 3797 3798/* Return a tree for the sum or difference (RESULTCODE says which) 3799 of pointer PTROP and integer INTOP. */ 3800 3801static tree 3802cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop) 3803{ 3804 tree res_type = TREE_TYPE (ptrop); 3805 3806 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type) 3807 in certain circumstance (when it's valid to do so). So we need 3808 to make sure it's complete. We don't need to check here, if we 3809 can actually complete it at all, as those checks will be done in 3810 pointer_int_sum() anyway. */ 3811 complete_type (TREE_TYPE (res_type)); 3812 3813 return pointer_int_sum (resultcode, ptrop, 3814 fold_if_not_in_template (intop)); 3815} 3816 3817/* Return a tree for the difference of pointers OP0 and OP1. 3818 The resulting tree has type int. */ 3819 3820static tree 3821pointer_diff (tree op0, tree op1, tree ptrtype) 3822{ 3823 tree result; 3824 tree restype = ptrdiff_type_node; 3825 tree target_type = TREE_TYPE (ptrtype); 3826 3827 if (!complete_type_or_else (target_type, NULL_TREE)) 3828 return error_mark_node; 3829 3830 if (pedantic || warn_pointer_arith) 3831 { 3832 if (TREE_CODE (target_type) == VOID_TYPE) 3833 pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction"); 3834 if (TREE_CODE (target_type) == FUNCTION_TYPE) 3835 pedwarn ("ISO C++ forbids using pointer to a function in subtraction"); 3836 if (TREE_CODE (target_type) == METHOD_TYPE) 3837 pedwarn ("ISO C++ forbids using pointer to a method in subtraction"); 3838 } 3839 3840 /* First do the subtraction as integers; 3841 then drop through to build the divide operator. */ 3842 3843 op0 = cp_build_binary_op (MINUS_EXPR, 3844 cp_convert (restype, op0), 3845 cp_convert (restype, op1)); 3846 3847 /* This generates an error if op1 is a pointer to an incomplete type. */ 3848 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1)))) 3849 error ("invalid use of a pointer to an incomplete type in pointer arithmetic"); 3850 3851 op1 = (TYPE_PTROB_P (ptrtype) 3852 ? size_in_bytes (target_type) 3853 : integer_one_node); 3854 3855 /* Do the division. */ 3856 3857 result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1)); 3858 return fold_if_not_in_template (result); 3859} 3860 3861/* Construct and perhaps optimize a tree representation 3862 for a unary operation. CODE, a tree_code, specifies the operation 3863 and XARG is the operand. */ 3864 3865tree 3866build_x_unary_op (enum tree_code code, tree xarg) 3867{ 3868 tree orig_expr = xarg; 3869 tree exp; 3870 int ptrmem = 0; 3871 3872 if (processing_template_decl) 3873 { 3874 if (type_dependent_expression_p (xarg)) 3875 return build_min_nt (code, xarg, NULL_TREE); 3876 3877 xarg = build_non_dependent_expr (xarg); 3878 } 3879 3880 exp = NULL_TREE; 3881 3882 /* [expr.unary.op] says: 3883 3884 The address of an object of incomplete type can be taken. 3885 3886 (And is just the ordinary address operator, not an overloaded 3887 "operator &".) However, if the type is a template 3888 specialization, we must complete the type at this point so that 3889 an overloaded "operator &" will be available if required. */ 3890 if (code == ADDR_EXPR 3891 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR 3892 && ((CLASS_TYPE_P (TREE_TYPE (xarg)) 3893 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg)))) 3894 || (TREE_CODE (xarg) == OFFSET_REF))) 3895 /* Don't look for a function. */; 3896 else 3897 exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE, 3898 /*overloaded_p=*/NULL); 3899 if (!exp && code == ADDR_EXPR) 3900 { 3901 /* A pointer to member-function can be formed only by saying 3902 &X::mf. */ 3903 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE 3904 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg))) 3905 { 3906 if (TREE_CODE (xarg) != OFFSET_REF 3907 || !TYPE_P (TREE_OPERAND (xarg, 0))) 3908 { 3909 error ("invalid use of %qE to form a pointer-to-member-function", 3910 xarg); 3911 if (TREE_CODE (xarg) != OFFSET_REF) 3912 inform (" a qualified-id is required"); 3913 return error_mark_node; 3914 } 3915 else 3916 { 3917 error ("parentheses around %qE cannot be used to form a" 3918 " pointer-to-member-function", 3919 xarg); 3920 PTRMEM_OK_P (xarg) = 1; 3921 } 3922 } 3923 3924 if (TREE_CODE (xarg) == OFFSET_REF) 3925 { 3926 ptrmem = PTRMEM_OK_P (xarg); 3927 3928 if (!ptrmem && !flag_ms_extensions 3929 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE) 3930 { 3931 /* A single non-static member, make sure we don't allow a 3932 pointer-to-member. */ 3933 xarg = build2 (OFFSET_REF, TREE_TYPE (xarg), 3934 TREE_OPERAND (xarg, 0), 3935 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE)); 3936 PTRMEM_OK_P (xarg) = ptrmem; 3937 } 3938 } 3939 else if (TREE_CODE (xarg) == TARGET_EXPR) 3940 warning (0, "taking address of temporary"); 3941 exp = build_unary_op (ADDR_EXPR, xarg, 0); 3942 } 3943 3944 if (processing_template_decl && exp != error_mark_node) 3945 exp = build_min_non_dep (code, exp, orig_expr, 3946 /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE); 3947 if (TREE_CODE (exp) == ADDR_EXPR) 3948 PTRMEM_OK_P (exp) = ptrmem; 3949 return exp; 3950} 3951 3952/* Like c_common_truthvalue_conversion, but handle pointer-to-member 3953 constants, where a null value is represented by an INTEGER_CST of 3954 -1. */ 3955 3956tree 3957cp_truthvalue_conversion (tree expr) 3958{ 3959 tree type = TREE_TYPE (expr); 3960 if (TYPE_PTRMEM_P (type)) 3961 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1); 3962 else 3963 return c_common_truthvalue_conversion (expr); 3964} 3965 3966/* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */ 3967 3968tree 3969condition_conversion (tree expr) 3970{ 3971 tree t; 3972 if (processing_template_decl) 3973 return expr; 3974 t = perform_implicit_conversion (boolean_type_node, expr); 3975 t = fold_build_cleanup_point_expr (boolean_type_node, t); 3976 return t; 3977} 3978 3979/* Return an ADDR_EXPR giving the address of T. This function 3980 attempts no optimizations or simplifications; it is a low-level 3981 primitive. */ 3982 3983tree 3984build_address (tree t) 3985{ 3986 tree addr; 3987 3988 if (error_operand_p (t) || !cxx_mark_addressable (t)) 3989 return error_mark_node; 3990 3991 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t); 3992 3993 return addr; 3994} 3995 3996/* Return a NOP_EXPR converting EXPR to TYPE. */ 3997 3998tree 3999build_nop (tree type, tree expr) 4000{ 4001 if (type == error_mark_node || error_operand_p (expr)) 4002 return expr; 4003 return build1 (NOP_EXPR, type, expr); 4004} 4005 4006/* C++: Must handle pointers to members. 4007 4008 Perhaps type instantiation should be extended to handle conversion 4009 from aggregates to types we don't yet know we want? (Or are those 4010 cases typically errors which should be reported?) 4011 4012 NOCONVERT nonzero suppresses the default promotions 4013 (such as from short to int). */ 4014 4015tree 4016build_unary_op (enum tree_code code, tree xarg, int noconvert) 4017{ 4018 /* No default_conversion here. It causes trouble for ADDR_EXPR. */ 4019 tree arg = xarg; 4020 tree argtype = 0; 4021 const char *errstring = NULL; 4022 tree val; 4023 const char *invalid_op_diag; 4024 4025 if (arg == error_mark_node) 4026 return error_mark_node; 4027 4028 if ((invalid_op_diag 4029 = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR 4030 ? CONVERT_EXPR 4031 : code), 4032 TREE_TYPE (xarg)))) 4033 { 4034 error (invalid_op_diag); 4035 return error_mark_node; 4036 } 4037 4038 switch (code) 4039 { 4040 case UNARY_PLUS_EXPR: 4041 case NEGATE_EXPR: 4042 { 4043 int flags = WANT_ARITH | WANT_ENUM; 4044 /* Unary plus (but not unary minus) is allowed on pointers. */ 4045 if (code == UNARY_PLUS_EXPR) 4046 flags |= WANT_POINTER; 4047 arg = build_expr_type_conversion (flags, arg, true); 4048 if (!arg) 4049 errstring = (code == NEGATE_EXPR 4050 ? "wrong type argument to unary minus" 4051 : "wrong type argument to unary plus"); 4052 else 4053 { 4054 if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg))) 4055 arg = perform_integral_promotions (arg); 4056 4057 /* Make sure the result is not an lvalue: a unary plus or minus 4058 expression is always a rvalue. */ 4059 arg = rvalue (arg); 4060 } 4061 } 4062 break; 4063 4064 case BIT_NOT_EXPR: 4065 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4066 { 4067 code = CONJ_EXPR; 4068 if (!noconvert) 4069 arg = default_conversion (arg); 4070 } 4071 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM 4072 | WANT_VECTOR, 4073 arg, true))) 4074 errstring = "wrong type argument to bit-complement"; 4075 else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg))) 4076 arg = perform_integral_promotions (arg); 4077 break; 4078 4079 case ABS_EXPR: 4080 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true))) 4081 errstring = "wrong type argument to abs"; 4082 else if (!noconvert) 4083 arg = default_conversion (arg); 4084 break; 4085 4086 case CONJ_EXPR: 4087 /* Conjugating a real value is a no-op, but allow it anyway. */ 4088 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true))) 4089 errstring = "wrong type argument to conjugation"; 4090 else if (!noconvert) 4091 arg = default_conversion (arg); 4092 break; 4093 4094 case TRUTH_NOT_EXPR: 4095 arg = perform_implicit_conversion (boolean_type_node, arg); 4096 val = invert_truthvalue (arg); 4097 if (arg != error_mark_node) 4098 return val; 4099 errstring = "in argument to unary !"; 4100 break; 4101 4102 case NOP_EXPR: 4103 break; 4104 4105 case REALPART_EXPR: 4106 if (TREE_CODE (arg) == COMPLEX_CST) 4107 return TREE_REALPART (arg); 4108 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4109 { 4110 arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg); 4111 return fold_if_not_in_template (arg); 4112 } 4113 else 4114 return arg; 4115 4116 case IMAGPART_EXPR: 4117 if (TREE_CODE (arg) == COMPLEX_CST) 4118 return TREE_IMAGPART (arg); 4119 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4120 { 4121 arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg); 4122 return fold_if_not_in_template (arg); 4123 } 4124 else 4125 return cp_convert (TREE_TYPE (arg), integer_zero_node); 4126 4127 case PREINCREMENT_EXPR: 4128 case POSTINCREMENT_EXPR: 4129 case PREDECREMENT_EXPR: 4130 case POSTDECREMENT_EXPR: 4131 /* Handle complex lvalues (when permitted) 4132 by reduction to simpler cases. */ 4133 4134 val = unary_complex_lvalue (code, arg); 4135 if (val != 0) 4136 return val; 4137 4138 /* Increment or decrement the real part of the value, 4139 and don't change the imaginary part. */ 4140 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4141 { 4142 tree real, imag; 4143 4144 arg = stabilize_reference (arg); 4145 real = build_unary_op (REALPART_EXPR, arg, 1); 4146 imag = build_unary_op (IMAGPART_EXPR, arg, 1); 4147 return build2 (COMPLEX_EXPR, TREE_TYPE (arg), 4148 build_unary_op (code, real, 1), imag); 4149 } 4150 4151 /* Report invalid types. */ 4152 4153 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER, 4154 arg, true))) 4155 { 4156 if (code == PREINCREMENT_EXPR) 4157 errstring ="no pre-increment operator for type"; 4158 else if (code == POSTINCREMENT_EXPR) 4159 errstring ="no post-increment operator for type"; 4160 else if (code == PREDECREMENT_EXPR) 4161 errstring ="no pre-decrement operator for type"; 4162 else 4163 errstring ="no post-decrement operator for type"; 4164 break; 4165 } 4166 4167 /* Report something read-only. */ 4168 4169 if (CP_TYPE_CONST_P (TREE_TYPE (arg)) 4170 || TREE_READONLY (arg)) 4171 readonly_error (arg, ((code == PREINCREMENT_EXPR 4172 || code == POSTINCREMENT_EXPR) 4173 ? "increment" : "decrement"), 4174 0); 4175 4176 { 4177 tree inc; 4178 tree declared_type; 4179 tree result_type = TREE_TYPE (arg); 4180 4181 declared_type = unlowered_expr_type (arg); 4182 4183 arg = get_unwidened (arg, 0); 4184 argtype = TREE_TYPE (arg); 4185 4186 /* ARM $5.2.5 last annotation says this should be forbidden. */ 4187 if (TREE_CODE (argtype) == ENUMERAL_TYPE) 4188 pedwarn ("ISO C++ forbids %sing an enum", 4189 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR) 4190 ? "increment" : "decrement"); 4191 4192 /* Compute the increment. */ 4193 4194 if (TREE_CODE (argtype) == POINTER_TYPE) 4195 { 4196 tree type = complete_type (TREE_TYPE (argtype)); 4197 4198 if (!COMPLETE_OR_VOID_TYPE_P (type)) 4199 error ("cannot %s a pointer to incomplete type %qT", 4200 ((code == PREINCREMENT_EXPR 4201 || code == POSTINCREMENT_EXPR) 4202 ? "increment" : "decrement"), TREE_TYPE (argtype)); 4203 else if ((pedantic || warn_pointer_arith) 4204 && !TYPE_PTROB_P (argtype)) 4205 pedwarn ("ISO C++ forbids %sing a pointer of type %qT", 4206 ((code == PREINCREMENT_EXPR 4207 || code == POSTINCREMENT_EXPR) 4208 ? "increment" : "decrement"), argtype); 4209 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype)); 4210 } 4211 else 4212 inc = integer_one_node; 4213 4214 inc = cp_convert (argtype, inc); 4215 4216 /* Handle incrementing a cast-expression. */ 4217 4218 switch (TREE_CODE (arg)) 4219 { 4220 case NOP_EXPR: 4221 case CONVERT_EXPR: 4222 case FLOAT_EXPR: 4223 case FIX_TRUNC_EXPR: 4224 case FIX_FLOOR_EXPR: 4225 case FIX_ROUND_EXPR: 4226 case FIX_CEIL_EXPR: 4227 { 4228 tree incremented, modify, value, compound; 4229 if (! lvalue_p (arg) && pedantic) 4230 pedwarn ("cast to non-reference type used as lvalue"); 4231 arg = stabilize_reference (arg); 4232 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR) 4233 value = arg; 4234 else 4235 value = save_expr (arg); 4236 incremented = build2 (((code == PREINCREMENT_EXPR 4237 || code == POSTINCREMENT_EXPR) 4238 ? PLUS_EXPR : MINUS_EXPR), 4239 argtype, value, inc); 4240 4241 modify = build_modify_expr (arg, NOP_EXPR, incremented); 4242 compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg), 4243 modify, value); 4244 4245 /* Eliminate warning about unused result of + or -. */ 4246 TREE_NO_WARNING (compound) = 1; 4247 return compound; 4248 } 4249 4250 default: 4251 break; 4252 } 4253 4254 /* Complain about anything else that is not a true lvalue. */ 4255 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR 4256 || code == POSTINCREMENT_EXPR) 4257 ? lv_increment : lv_decrement))) 4258 return error_mark_node; 4259 4260 /* Forbid using -- on `bool'. */ 4261 if (same_type_p (declared_type, boolean_type_node)) 4262 { 4263 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR) 4264 { 4265 error ("invalid use of %<--%> on bool variable %qD", arg); 4266 return error_mark_node; 4267 } 4268 val = boolean_increment (code, arg); 4269 } 4270 else 4271 val = build2 (code, TREE_TYPE (arg), arg, inc); 4272 4273 TREE_SIDE_EFFECTS (val) = 1; 4274 return cp_convert (result_type, val); 4275 } 4276 4277 case ADDR_EXPR: 4278 /* Note that this operation never does default_conversion 4279 regardless of NOCONVERT. */ 4280 4281 argtype = lvalue_type (arg); 4282 4283 if (TREE_CODE (arg) == OFFSET_REF) 4284 goto offset_ref; 4285 4286 if (TREE_CODE (argtype) == REFERENCE_TYPE) 4287 { 4288 tree type = build_pointer_type (TREE_TYPE (argtype)); 4289 arg = build1 (CONVERT_EXPR, type, arg); 4290 return arg; 4291 } 4292 else if (pedantic && DECL_MAIN_P (arg)) 4293 /* ARM $3.4 */ 4294 pedwarn ("ISO C++ forbids taking address of function %<::main%>"); 4295 4296 /* Let &* cancel out to simplify resulting code. */ 4297 if (TREE_CODE (arg) == INDIRECT_REF) 4298 { 4299 /* We don't need to have `current_class_ptr' wrapped in a 4300 NON_LVALUE_EXPR node. */ 4301 if (arg == current_class_ref) 4302 return current_class_ptr; 4303 4304 arg = TREE_OPERAND (arg, 0); 4305 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE) 4306 { 4307 tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg))); 4308 arg = build1 (CONVERT_EXPR, type, arg); 4309 } 4310 else 4311 /* Don't let this be an lvalue. */ 4312 arg = rvalue (arg); 4313 return arg; 4314 } 4315 4316 /* Uninstantiated types are all functions. Taking the 4317 address of a function is a no-op, so just return the 4318 argument. */ 4319 4320 gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE 4321 || !IDENTIFIER_OPNAME_P (arg)); 4322 4323 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg) 4324 && !really_overloaded_fn (TREE_OPERAND (arg, 1))) 4325 { 4326 /* They're trying to take the address of a unique non-static 4327 member function. This is ill-formed (except in MS-land), 4328 but let's try to DTRT. 4329 Note: We only handle unique functions here because we don't 4330 want to complain if there's a static overload; non-unique 4331 cases will be handled by instantiate_type. But we need to 4332 handle this case here to allow casts on the resulting PMF. 4333 We could defer this in non-MS mode, but it's easier to give 4334 a useful error here. */ 4335 4336 /* Inside constant member functions, the `this' pointer 4337 contains an extra const qualifier. TYPE_MAIN_VARIANT 4338 is used here to remove this const from the diagnostics 4339 and the created OFFSET_REF. */ 4340 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0))); 4341 tree fn = get_first_fn (TREE_OPERAND (arg, 1)); 4342 mark_used (fn); 4343 4344 if (! flag_ms_extensions) 4345 { 4346 tree name = DECL_NAME (fn); 4347 if (current_class_type 4348 && TREE_OPERAND (arg, 0) == current_class_ref) 4349 /* An expression like &memfn. */ 4350 pedwarn ("ISO C++ forbids taking the address of an unqualified" 4351 " or parenthesized non-static member function to form" 4352 " a pointer to member function. Say %<&%T::%D%>", 4353 base, name); 4354 else 4355 pedwarn ("ISO C++ forbids taking the address of a bound member" 4356 " function to form a pointer to member function." 4357 " Say %<&%T::%D%>", 4358 base, name); 4359 } 4360 arg = build_offset_ref (base, fn, /*address_p=*/true); 4361 } 4362 4363 offset_ref: 4364 if (type_unknown_p (arg)) 4365 return build1 (ADDR_EXPR, unknown_type_node, arg); 4366 4367 /* Handle complex lvalues (when permitted) 4368 by reduction to simpler cases. */ 4369 val = unary_complex_lvalue (code, arg); 4370 if (val != 0) 4371 return val; 4372 4373 switch (TREE_CODE (arg)) 4374 { 4375 case NOP_EXPR: 4376 case CONVERT_EXPR: 4377 case FLOAT_EXPR: 4378 case FIX_TRUNC_EXPR: 4379 case FIX_FLOOR_EXPR: 4380 case FIX_ROUND_EXPR: 4381 case FIX_CEIL_EXPR: 4382 if (! lvalue_p (arg) && pedantic) 4383 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression"); 4384 break; 4385 4386 case BASELINK: 4387 arg = BASELINK_FUNCTIONS (arg); 4388 /* Fall through. */ 4389 4390 case OVERLOAD: 4391 arg = OVL_CURRENT (arg); 4392 break; 4393 4394 case OFFSET_REF: 4395 /* Turn a reference to a non-static data member into a 4396 pointer-to-member. */ 4397 { 4398 tree type; 4399 tree t; 4400 4401 if (!PTRMEM_OK_P (arg)) 4402 return build_unary_op (code, arg, 0); 4403 4404 t = TREE_OPERAND (arg, 1); 4405 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE) 4406 { 4407 error ("cannot create pointer to reference member %qD", t); 4408 return error_mark_node; 4409 } 4410 4411 type = build_ptrmem_type (context_for_name_lookup (t), 4412 TREE_TYPE (t)); 4413 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1)); 4414 return t; 4415 } 4416 4417 default: 4418 break; 4419 } 4420 4421 /* Anything not already handled and not a true memory reference 4422 is an error. */ 4423 if (TREE_CODE (argtype) != FUNCTION_TYPE 4424 && TREE_CODE (argtype) != METHOD_TYPE 4425 && TREE_CODE (arg) != OFFSET_REF 4426 && !lvalue_or_else (arg, lv_addressof)) 4427 return error_mark_node; 4428 4429 if (argtype != error_mark_node) 4430 argtype = build_pointer_type (argtype); 4431 4432 /* In a template, we are processing a non-dependent expression 4433 so we can just form an ADDR_EXPR with the correct type. */ 4434 if (processing_template_decl) 4435 { 4436 val = build_address (arg); 4437 if (TREE_CODE (arg) == OFFSET_REF) 4438 PTRMEM_OK_P (val) = PTRMEM_OK_P (arg); 4439 return val; 4440 } 4441 4442 if (TREE_CODE (arg) != COMPONENT_REF) 4443 { 4444 val = build_address (arg); 4445 if (TREE_CODE (arg) == OFFSET_REF) 4446 PTRMEM_OK_P (val) = PTRMEM_OK_P (arg); 4447 } 4448 else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK) 4449 { 4450 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1)); 4451 4452 /* We can only get here with a single static member 4453 function. */ 4454 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL 4455 && DECL_STATIC_FUNCTION_P (fn)); 4456 mark_used (fn); 4457 val = build_address (fn); 4458 if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0))) 4459 /* Do not lose object's side effects. */ 4460 val = build2 (COMPOUND_EXPR, TREE_TYPE (val), 4461 TREE_OPERAND (arg, 0), val); 4462 } 4463 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1))) 4464 { 4465 error ("attempt to take address of bit-field structure member %qD", 4466 TREE_OPERAND (arg, 1)); 4467 return error_mark_node; 4468 } 4469 else 4470 { 4471 tree object = TREE_OPERAND (arg, 0); 4472 tree field = TREE_OPERAND (arg, 1); 4473 gcc_assert (same_type_ignoring_top_level_qualifiers_p 4474 (TREE_TYPE (object), decl_type_context (field))); 4475 val = build_address (arg); 4476 } 4477 4478 if (TREE_CODE (argtype) == POINTER_TYPE 4479 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE) 4480 { 4481 build_ptrmemfunc_type (argtype); 4482 val = build_ptrmemfunc (argtype, val, 0, 4483 /*c_cast_p=*/false); 4484 } 4485 4486 return val; 4487 4488 default: 4489 break; 4490 } 4491 4492 if (!errstring) 4493 { 4494 if (argtype == 0) 4495 argtype = TREE_TYPE (arg); 4496 return fold_if_not_in_template (build1 (code, argtype, arg)); 4497 } 4498 4499 error ("%s", errstring); 4500 return error_mark_node; 4501} 4502 4503/* Apply unary lvalue-demanding operator CODE to the expression ARG 4504 for certain kinds of expressions which are not really lvalues 4505 but which we can accept as lvalues. 4506 4507 If ARG is not a kind of expression we can handle, return 4508 NULL_TREE. */ 4509 4510tree 4511unary_complex_lvalue (enum tree_code code, tree arg) 4512{ 4513 /* Inside a template, making these kinds of adjustments is 4514 pointless; we are only concerned with the type of the 4515 expression. */ 4516 if (processing_template_decl) 4517 return NULL_TREE; 4518 4519 /* Handle (a, b) used as an "lvalue". */ 4520 if (TREE_CODE (arg) == COMPOUND_EXPR) 4521 { 4522 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0); 4523 return build2 (COMPOUND_EXPR, TREE_TYPE (real_result), 4524 TREE_OPERAND (arg, 0), real_result); 4525 } 4526 4527 /* Handle (a ? b : c) used as an "lvalue". */ 4528 if (TREE_CODE (arg) == COND_EXPR 4529 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR) 4530 return rationalize_conditional_expr (code, arg); 4531 4532 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */ 4533 if (TREE_CODE (arg) == MODIFY_EXPR 4534 || TREE_CODE (arg) == PREINCREMENT_EXPR 4535 || TREE_CODE (arg) == PREDECREMENT_EXPR) 4536 { 4537 tree lvalue = TREE_OPERAND (arg, 0); 4538 if (TREE_SIDE_EFFECTS (lvalue)) 4539 { 4540 lvalue = stabilize_reference (lvalue); 4541 arg = build2 (TREE_CODE (arg), TREE_TYPE (arg), 4542 lvalue, TREE_OPERAND (arg, 1)); 4543 } 4544 return unary_complex_lvalue 4545 (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue)); 4546 } 4547 4548 if (code != ADDR_EXPR) 4549 return NULL_TREE; 4550 4551 /* Handle (a = b) used as an "lvalue" for `&'. */ 4552 if (TREE_CODE (arg) == MODIFY_EXPR 4553 || TREE_CODE (arg) == INIT_EXPR) 4554 { 4555 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0); 4556 arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result), 4557 arg, real_result); 4558 TREE_NO_WARNING (arg) = 1; 4559 return arg; 4560 } 4561 4562 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE 4563 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE 4564 || TREE_CODE (arg) == OFFSET_REF) 4565 return NULL_TREE; 4566 4567 /* We permit compiler to make function calls returning 4568 objects of aggregate type look like lvalues. */ 4569 { 4570 tree targ = arg; 4571 4572 if (TREE_CODE (targ) == SAVE_EXPR) 4573 targ = TREE_OPERAND (targ, 0); 4574 4575 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ))) 4576 { 4577 if (TREE_CODE (arg) == SAVE_EXPR) 4578 targ = arg; 4579 else 4580 targ = build_cplus_new (TREE_TYPE (arg), arg); 4581 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ); 4582 } 4583 4584 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF) 4585 return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)), 4586 TREE_OPERAND (targ, 0), current_function_decl, NULL); 4587 } 4588 4589 /* Don't let anything else be handled specially. */ 4590 return NULL_TREE; 4591} 4592 4593/* Mark EXP saying that we need to be able to take the 4594 address of it; it should not be allocated in a register. 4595 Value is true if successful. 4596 4597 C++: we do not allow `current_class_ptr' to be addressable. */ 4598 4599bool 4600cxx_mark_addressable (tree exp) 4601{ 4602 tree x = exp; 4603 4604 while (1) 4605 switch (TREE_CODE (x)) 4606 { 4607 case ADDR_EXPR: 4608 case COMPONENT_REF: 4609 case ARRAY_REF: 4610 case REALPART_EXPR: 4611 case IMAGPART_EXPR: 4612 x = TREE_OPERAND (x, 0); 4613 break; 4614 4615 case PARM_DECL: 4616 if (x == current_class_ptr) 4617 { 4618 error ("cannot take the address of %<this%>, which is an rvalue expression"); 4619 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later. */ 4620 return true; 4621 } 4622 /* Fall through. */ 4623 4624 case VAR_DECL: 4625 /* Caller should not be trying to mark initialized 4626 constant fields addressable. */ 4627 gcc_assert (DECL_LANG_SPECIFIC (x) == 0 4628 || DECL_IN_AGGR_P (x) == 0 4629 || TREE_STATIC (x) 4630 || DECL_EXTERNAL (x)); 4631 /* Fall through. */ 4632 4633 case CONST_DECL: 4634 case RESULT_DECL: 4635 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x) 4636 && !DECL_ARTIFICIAL (x)) 4637 { 4638 if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x)) 4639 { 4640 error 4641 ("address of explicit register variable %qD requested", x); 4642 return false; 4643 } 4644 else if (extra_warnings) 4645 warning 4646 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x); 4647 } 4648 TREE_ADDRESSABLE (x) = 1; 4649 return true; 4650 4651 case FUNCTION_DECL: 4652 TREE_ADDRESSABLE (x) = 1; 4653 return true; 4654 4655 case CONSTRUCTOR: 4656 TREE_ADDRESSABLE (x) = 1; 4657 return true; 4658 4659 case TARGET_EXPR: 4660 TREE_ADDRESSABLE (x) = 1; 4661 cxx_mark_addressable (TREE_OPERAND (x, 0)); 4662 return true; 4663 4664 default: 4665 return true; 4666 } 4667} 4668 4669/* Build and return a conditional expression IFEXP ? OP1 : OP2. */ 4670 4671tree 4672build_x_conditional_expr (tree ifexp, tree op1, tree op2) 4673{ 4674 tree orig_ifexp = ifexp; 4675 tree orig_op1 = op1; 4676 tree orig_op2 = op2; 4677 tree expr; 4678 4679 if (processing_template_decl) 4680 { 4681 /* The standard says that the expression is type-dependent if 4682 IFEXP is type-dependent, even though the eventual type of the 4683 expression doesn't dependent on IFEXP. */ 4684 if (type_dependent_expression_p (ifexp) 4685 /* As a GNU extension, the middle operand may be omitted. */ 4686 || (op1 && type_dependent_expression_p (op1)) 4687 || type_dependent_expression_p (op2)) 4688 return build_min_nt (COND_EXPR, ifexp, op1, op2); 4689 ifexp = build_non_dependent_expr (ifexp); 4690 if (op1) 4691 op1 = build_non_dependent_expr (op1); 4692 op2 = build_non_dependent_expr (op2); 4693 } 4694 4695 expr = build_conditional_expr (ifexp, op1, op2); 4696 if (processing_template_decl && expr != error_mark_node) 4697 return build_min_non_dep (COND_EXPR, expr, 4698 orig_ifexp, orig_op1, orig_op2); 4699 return expr; 4700} 4701 4702/* Given a list of expressions, return a compound expression 4703 that performs them all and returns the value of the last of them. */ 4704 4705tree build_x_compound_expr_from_list (tree list, const char *msg) 4706{ 4707 tree expr = TREE_VALUE (list); 4708 4709 if (TREE_CHAIN (list)) 4710 { 4711 if (msg) 4712 pedwarn ("%s expression list treated as compound expression", msg); 4713 4714 for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list)) 4715 expr = build_x_compound_expr (expr, TREE_VALUE (list)); 4716 } 4717 4718 return expr; 4719} 4720 4721/* Handle overloading of the ',' operator when needed. */ 4722 4723tree 4724build_x_compound_expr (tree op1, tree op2) 4725{ 4726 tree result; 4727 tree orig_op1 = op1; 4728 tree orig_op2 = op2; 4729 4730 if (processing_template_decl) 4731 { 4732 if (type_dependent_expression_p (op1) 4733 || type_dependent_expression_p (op2)) 4734 return build_min_nt (COMPOUND_EXPR, op1, op2); 4735 op1 = build_non_dependent_expr (op1); 4736 op2 = build_non_dependent_expr (op2); 4737 } 4738 4739 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE, 4740 /*overloaded_p=*/NULL); 4741 if (!result) 4742 result = build_compound_expr (op1, op2); 4743 4744 if (processing_template_decl && result != error_mark_node) 4745 return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2); 4746 4747 return result; 4748} 4749 4750/* Build a compound expression. */ 4751 4752tree 4753build_compound_expr (tree lhs, tree rhs) 4754{ 4755 lhs = convert_to_void (lhs, "left-hand operand of comma"); 4756 4757 if (lhs == error_mark_node || rhs == error_mark_node) 4758 return error_mark_node; 4759 4760 if (TREE_CODE (rhs) == TARGET_EXPR) 4761 { 4762 /* If the rhs is a TARGET_EXPR, then build the compound 4763 expression inside the target_expr's initializer. This 4764 helps the compiler to eliminate unnecessary temporaries. */ 4765 tree init = TREE_OPERAND (rhs, 1); 4766 4767 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init); 4768 TREE_OPERAND (rhs, 1) = init; 4769 4770 return rhs; 4771 } 4772 4773 return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs); 4774} 4775 4776/* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE 4777 casts away constness. DIAG_FN gives the function to call if we 4778 need to issue a diagnostic; if it is NULL, no diagnostic will be 4779 issued. DESCRIPTION explains what operation is taking place. */ 4780 4781static void 4782check_for_casting_away_constness (tree src_type, tree dest_type, 4783 void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2), 4784 const char *description) 4785{ 4786 if (diag_fn && casts_away_constness (src_type, dest_type)) 4787 diag_fn ("%s from type %qT to type %qT casts away constness", 4788 description, src_type, dest_type); 4789} 4790 4791/* Convert EXPR (an expression with pointer-to-member type) to TYPE 4792 (another pointer-to-member type in the same hierarchy) and return 4793 the converted expression. If ALLOW_INVERSE_P is permitted, a 4794 pointer-to-derived may be converted to pointer-to-base; otherwise, 4795 only the other direction is permitted. If C_CAST_P is true, this 4796 conversion is taking place as part of a C-style cast. */ 4797 4798tree 4799convert_ptrmem (tree type, tree expr, bool allow_inverse_p, 4800 bool c_cast_p) 4801{ 4802 if (TYPE_PTRMEM_P (type)) 4803 { 4804 tree delta; 4805 4806 if (TREE_CODE (expr) == PTRMEM_CST) 4807 expr = cplus_expand_constant (expr); 4808 delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)), 4809 TYPE_PTRMEM_CLASS_TYPE (type), 4810 allow_inverse_p, 4811 c_cast_p); 4812 if (!integer_zerop (delta)) 4813 expr = cp_build_binary_op (PLUS_EXPR, 4814 build_nop (ptrdiff_type_node, expr), 4815 delta); 4816 return build_nop (type, expr); 4817 } 4818 else 4819 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 4820 allow_inverse_p, c_cast_p); 4821} 4822 4823/* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return 4824 a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW 4825 set iff they are set in ORIG. Otherwise, return EXPR unchanged. */ 4826 4827static tree 4828ignore_overflows (tree expr, tree orig) 4829{ 4830 if (TREE_CODE (expr) == INTEGER_CST 4831 && CONSTANT_CLASS_P (orig) 4832 && TREE_CODE (orig) != STRING_CST 4833 && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig) 4834 || TREE_CONSTANT_OVERFLOW (expr) 4835 != TREE_CONSTANT_OVERFLOW (orig))) 4836 { 4837 if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig)) 4838 /* Ensure constant sharing. */ 4839 expr = build_int_cst_wide (TREE_TYPE (expr), 4840 TREE_INT_CST_LOW (expr), 4841 TREE_INT_CST_HIGH (expr)); 4842 else 4843 { 4844 /* Avoid clobbering a shared constant. */ 4845 expr = copy_node (expr); 4846 TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig); 4847 TREE_CONSTANT_OVERFLOW (expr) 4848 = TREE_CONSTANT_OVERFLOW (orig); 4849 } 4850 } 4851 return expr; 4852} 4853 4854/* Perform a static_cast from EXPR to TYPE. When C_CAST_P is true, 4855 this static_cast is being attempted as one of the possible casts 4856 allowed by a C-style cast. (In that case, accessibility of base 4857 classes is not considered, and it is OK to cast away 4858 constness.) Return the result of the cast. *VALID_P is set to 4859 indicate whether or not the cast was valid. */ 4860 4861static tree 4862build_static_cast_1 (tree type, tree expr, bool c_cast_p, 4863 bool *valid_p) 4864{ 4865 tree intype; 4866 tree result; 4867 tree orig; 4868 void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2); 4869 const char *desc; 4870 4871 /* Assume the cast is valid. */ 4872 *valid_p = true; 4873 4874 intype = TREE_TYPE (expr); 4875 4876 /* Save casted types in the function's used types hash table. */ 4877 used_types_insert (type); 4878 4879 /* Determine what to do when casting away constness. */ 4880 if (c_cast_p) 4881 { 4882 /* C-style casts are allowed to cast away constness. With 4883 WARN_CAST_QUAL, we still want to issue a warning. */ 4884 diag_fn = warn_cast_qual ? warning0 : NULL; 4885 desc = "cast"; 4886 } 4887 else 4888 { 4889 /* A static_cast may not cast away constness. */ 4890 diag_fn = error; 4891 desc = "static_cast"; 4892 } 4893 4894 /* [expr.static.cast] 4895 4896 An lvalue of type "cv1 B", where B is a class type, can be cast 4897 to type "reference to cv2 D", where D is a class derived (clause 4898 _class.derived_) from B, if a valid standard conversion from 4899 "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the 4900 same cv-qualification as, or greater cv-qualification than, cv1, 4901 and B is not a virtual base class of D. */ 4902 /* We check this case before checking the validity of "TYPE t = 4903 EXPR;" below because for this case: 4904 4905 struct B {}; 4906 struct D : public B { D(const B&); }; 4907 extern B& b; 4908 void f() { static_cast<const D&>(b); } 4909 4910 we want to avoid constructing a new D. The standard is not 4911 completely clear about this issue, but our interpretation is 4912 consistent with other compilers. */ 4913 if (TREE_CODE (type) == REFERENCE_TYPE 4914 && CLASS_TYPE_P (TREE_TYPE (type)) 4915 && CLASS_TYPE_P (intype) 4916 && real_lvalue_p (expr) 4917 && DERIVED_FROM_P (intype, TREE_TYPE (type)) 4918 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)), 4919 build_pointer_type (TYPE_MAIN_VARIANT 4920 (TREE_TYPE (type)))) 4921 && (c_cast_p 4922 || at_least_as_qualified_p (TREE_TYPE (type), intype))) 4923 { 4924 tree base; 4925 4926 /* There is a standard conversion from "D*" to "B*" even if "B" 4927 is ambiguous or inaccessible. If this is really a 4928 static_cast, then we check both for inaccessibility and 4929 ambiguity. However, if this is a static_cast being performed 4930 because the user wrote a C-style cast, then accessibility is 4931 not considered. */ 4932 base = lookup_base (TREE_TYPE (type), intype, 4933 c_cast_p ? ba_unique : ba_check, 4934 NULL); 4935 4936 /* Convert from "B*" to "D*". This function will check that "B" 4937 is not a virtual base of "D". */ 4938 expr = build_base_path (MINUS_EXPR, build_address (expr), 4939 base, /*nonnull=*/false); 4940 /* Convert the pointer to a reference -- but then remember that 4941 there are no expressions with reference type in C++. */ 4942 return convert_from_reference (build_nop (type, expr)); 4943 } 4944 4945 orig = expr; 4946 4947 /* [expr.static.cast] 4948 4949 An expression e can be explicitly converted to a type T using a 4950 static_cast of the form static_cast<T>(e) if the declaration T 4951 t(e);" is well-formed, for some invented temporary variable 4952 t. */ 4953 result = perform_direct_initialization_if_possible (type, expr, 4954 c_cast_p); 4955 if (result) 4956 { 4957 result = convert_from_reference (result); 4958 4959 /* Ignore any integer overflow caused by the cast. */ 4960 result = ignore_overflows (result, orig); 4961 4962 /* [expr.static.cast] 4963 4964 If T is a reference type, the result is an lvalue; otherwise, 4965 the result is an rvalue. */ 4966 if (TREE_CODE (type) != REFERENCE_TYPE) 4967 result = rvalue (result); 4968 return result; 4969 } 4970 4971 /* [expr.static.cast] 4972 4973 Any expression can be explicitly converted to type cv void. */ 4974 if (TREE_CODE (type) == VOID_TYPE) 4975 return convert_to_void (expr, /*implicit=*/NULL); 4976 4977 /* [expr.static.cast] 4978 4979 The inverse of any standard conversion sequence (clause _conv_), 4980 other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer 4981 (_conv.array_), function-to-pointer (_conv.func_), and boolean 4982 (_conv.bool_) conversions, can be performed explicitly using 4983 static_cast subject to the restriction that the explicit 4984 conversion does not cast away constness (_expr.const.cast_), and 4985 the following additional rules for specific cases: */ 4986 /* For reference, the conversions not excluded are: integral 4987 promotions, floating point promotion, integral conversions, 4988 floating point conversions, floating-integral conversions, 4989 pointer conversions, and pointer to member conversions. */ 4990 /* DR 128 4991 4992 A value of integral _or enumeration_ type can be explicitly 4993 converted to an enumeration type. */ 4994 /* The effect of all that is that any conversion between any two 4995 types which are integral, floating, or enumeration types can be 4996 performed. */ 4997 if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type)) 4998 && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype))) 4999 { 5000 expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL); 5001 5002 /* Ignore any integer overflow caused by the cast. */ 5003 expr = ignore_overflows (expr, orig); 5004 return expr; 5005 } 5006 5007 if (TYPE_PTR_P (type) && TYPE_PTR_P (intype) 5008 && CLASS_TYPE_P (TREE_TYPE (type)) 5009 && CLASS_TYPE_P (TREE_TYPE (intype)) 5010 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT 5011 (TREE_TYPE (intype))), 5012 build_pointer_type (TYPE_MAIN_VARIANT 5013 (TREE_TYPE (type))))) 5014 { 5015 tree base; 5016 5017 if (!c_cast_p) 5018 check_for_casting_away_constness (intype, type, diag_fn, desc); 5019 base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype), 5020 c_cast_p ? ba_unique : ba_check, 5021 NULL); 5022 return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false); 5023 } 5024 5025 if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype)) 5026 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))) 5027 { 5028 tree c1; 5029 tree c2; 5030 tree t1; 5031 tree t2; 5032 5033 c1 = TYPE_PTRMEM_CLASS_TYPE (intype); 5034 c2 = TYPE_PTRMEM_CLASS_TYPE (type); 5035 5036 if (TYPE_PTRMEM_P (type)) 5037 { 5038 t1 = (build_ptrmem_type 5039 (c1, 5040 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype)))); 5041 t2 = (build_ptrmem_type 5042 (c2, 5043 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type)))); 5044 } 5045 else 5046 { 5047 t1 = intype; 5048 t2 = type; 5049 } 5050 if (can_convert (t1, t2)) 5051 { 5052 if (!c_cast_p) 5053 check_for_casting_away_constness (intype, type, diag_fn, 5054 desc); 5055 return convert_ptrmem (type, expr, /*allow_inverse_p=*/1, 5056 c_cast_p); 5057 } 5058 } 5059 5060 /* [expr.static.cast] 5061 5062 An rvalue of type "pointer to cv void" can be explicitly 5063 converted to a pointer to object type. A value of type pointer 5064 to object converted to "pointer to cv void" and back to the 5065 original pointer type will have its original value. */ 5066 if (TREE_CODE (intype) == POINTER_TYPE 5067 && VOID_TYPE_P (TREE_TYPE (intype)) 5068 && TYPE_PTROB_P (type)) 5069 { 5070 if (!c_cast_p) 5071 check_for_casting_away_constness (intype, type, diag_fn, desc); 5072 return build_nop (type, expr); 5073 } 5074 5075 *valid_p = false; 5076 return error_mark_node; 5077} 5078 5079/* Return an expression representing static_cast<TYPE>(EXPR). */ 5080 5081tree 5082build_static_cast (tree type, tree expr) 5083{ 5084 tree result; 5085 bool valid_p; 5086 5087 if (type == error_mark_node || expr == error_mark_node) 5088 return error_mark_node; 5089 5090 if (processing_template_decl) 5091 { 5092 expr = build_min (STATIC_CAST_EXPR, type, expr); 5093 /* We don't know if it will or will not have side effects. */ 5094 TREE_SIDE_EFFECTS (expr) = 1; 5095 return convert_from_reference (expr); 5096 } 5097 5098 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 5099 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */ 5100 if (TREE_CODE (type) != REFERENCE_TYPE 5101 && TREE_CODE (expr) == NOP_EXPR 5102 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0))) 5103 expr = TREE_OPERAND (expr, 0); 5104 5105 result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p); 5106 if (valid_p) 5107 return result; 5108 5109 error ("invalid static_cast from type %qT to type %qT", 5110 TREE_TYPE (expr), type); 5111 return error_mark_node; 5112} 5113 5114/* EXPR is an expression with member function or pointer-to-member 5115 function type. TYPE is a pointer type. Converting EXPR to TYPE is 5116 not permitted by ISO C++, but we accept it in some modes. If we 5117 are not in one of those modes, issue a diagnostic. Return the 5118 converted expression. */ 5119 5120tree 5121convert_member_func_to_ptr (tree type, tree expr) 5122{ 5123 tree intype; 5124 tree decl; 5125 5126 intype = TREE_TYPE (expr); 5127 gcc_assert (TYPE_PTRMEMFUNC_P (intype) 5128 || TREE_CODE (intype) == METHOD_TYPE); 5129 5130 if (pedantic || warn_pmf2ptr) 5131 pedwarn ("converting from %qT to %qT", intype, type); 5132 5133 if (TREE_CODE (intype) == METHOD_TYPE) 5134 expr = build_addr_func (expr); 5135 else if (TREE_CODE (expr) == PTRMEM_CST) 5136 expr = build_address (PTRMEM_CST_MEMBER (expr)); 5137 else 5138 { 5139 decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0); 5140 decl = build_address (decl); 5141 expr = get_member_function_from_ptrfunc (&decl, expr); 5142 } 5143 5144 return build_nop (type, expr); 5145} 5146 5147/* Return a representation for a reinterpret_cast from EXPR to TYPE. 5148 If C_CAST_P is true, this reinterpret cast is being done as part of 5149 a C-style cast. If VALID_P is non-NULL, *VALID_P is set to 5150 indicate whether or not reinterpret_cast was valid. */ 5151 5152static tree 5153build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p, 5154 bool *valid_p) 5155{ 5156 tree intype; 5157 5158 /* Assume the cast is invalid. */ 5159 if (valid_p) 5160 *valid_p = true; 5161 5162 if (type == error_mark_node || error_operand_p (expr)) 5163 return error_mark_node; 5164 5165 intype = TREE_TYPE (expr); 5166 5167 /* Save casted types in the function's used types hash table. */ 5168 used_types_insert (type); 5169 5170 /* [expr.reinterpret.cast] 5171 An lvalue expression of type T1 can be cast to the type 5172 "reference to T2" if an expression of type "pointer to T1" can be 5173 explicitly converted to the type "pointer to T2" using a 5174 reinterpret_cast. */ 5175 if (TREE_CODE (type) == REFERENCE_TYPE) 5176 { 5177 if (! real_lvalue_p (expr)) 5178 { 5179 error ("invalid cast of an rvalue expression of type " 5180 "%qT to type %qT", 5181 intype, type); 5182 return error_mark_node; 5183 } 5184 5185 /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and 5186 "B" are related class types; the reinterpret_cast does not 5187 adjust the pointer. */ 5188 if (TYPE_PTR_P (intype) 5189 && (comptypes (TREE_TYPE (intype), TREE_TYPE (type), 5190 COMPARE_BASE | COMPARE_DERIVED))) 5191 warning (0, "casting %qT to %qT does not dereference pointer", 5192 intype, type); 5193 5194 expr = build_unary_op (ADDR_EXPR, expr, 0); 5195 if (expr != error_mark_node) 5196 expr = build_reinterpret_cast_1 5197 (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p, 5198 valid_p); 5199 if (expr != error_mark_node) 5200 expr = build_indirect_ref (expr, 0); 5201 return expr; 5202 } 5203 5204 /* As a G++ extension, we consider conversions from member 5205 functions, and pointers to member functions to 5206 pointer-to-function and pointer-to-void types. If 5207 -Wno-pmf-conversions has not been specified, 5208 convert_member_func_to_ptr will issue an error message. */ 5209 if ((TYPE_PTRMEMFUNC_P (intype) 5210 || TREE_CODE (intype) == METHOD_TYPE) 5211 && TYPE_PTR_P (type) 5212 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE 5213 || VOID_TYPE_P (TREE_TYPE (type)))) 5214 return convert_member_func_to_ptr (type, expr); 5215 5216 /* If the cast is not to a reference type, the lvalue-to-rvalue, 5217 array-to-pointer, and function-to-pointer conversions are 5218 performed. */ 5219 expr = decay_conversion (expr); 5220 5221 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 5222 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */ 5223 if (TREE_CODE (expr) == NOP_EXPR 5224 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0))) 5225 expr = TREE_OPERAND (expr, 0); 5226 5227 if (error_operand_p (expr)) 5228 return error_mark_node; 5229 5230 intype = TREE_TYPE (expr); 5231 5232 /* [expr.reinterpret.cast] 5233 A pointer can be converted to any integral type large enough to 5234 hold it. */ 5235 if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype)) 5236 { 5237 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype)) 5238 pedwarn ("cast from %qT to %qT loses precision", 5239 intype, type); 5240 } 5241 /* [expr.reinterpret.cast] 5242 A value of integral or enumeration type can be explicitly 5243 converted to a pointer. */ 5244 else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype)) 5245 /* OK */ 5246 ; 5247 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype)) 5248 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))) 5249 return fold_if_not_in_template (build_nop (type, expr)); 5250 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype)) 5251 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype))) 5252 { 5253 tree sexpr = expr; 5254 5255 if (!c_cast_p) 5256 check_for_casting_away_constness (intype, type, error, 5257 "reinterpret_cast"); 5258 /* Warn about possible alignment problems. */ 5259 if (STRICT_ALIGNMENT && warn_cast_align 5260 && !VOID_TYPE_P (type) 5261 && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE 5262 && COMPLETE_TYPE_P (TREE_TYPE (type)) 5263 && COMPLETE_TYPE_P (TREE_TYPE (intype)) 5264 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype))) 5265 warning (0, "cast from %qT to %qT increases required alignment of " 5266 "target type", 5267 intype, type); 5268 5269 /* We need to strip nops here, because the frontend likes to 5270 create (int *)&a for array-to-pointer decay, instead of &a[0]. */ 5271 STRIP_NOPS (sexpr); 5272 if (warn_strict_aliasing <= 2) 5273 strict_aliasing_warning (intype, type, sexpr); 5274 5275 return fold_if_not_in_template (build_nop (type, expr)); 5276 } 5277 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype)) 5278 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type))) 5279 { 5280 if (pedantic) 5281 /* Only issue a warning, as we have always supported this 5282 where possible, and it is necessary in some cases. DR 195 5283 addresses this issue, but as of 2004/10/26 is still in 5284 drafting. */ 5285 warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object"); 5286 return fold_if_not_in_template (build_nop (type, expr)); 5287 } 5288 else if (TREE_CODE (type) == VECTOR_TYPE) 5289 return fold_if_not_in_template (convert_to_vector (type, expr)); 5290 else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type)) 5291 return fold_if_not_in_template (convert_to_integer (type, expr)); 5292 else 5293 { 5294 if (valid_p) 5295 *valid_p = false; 5296 error ("invalid cast from type %qT to type %qT", intype, type); 5297 return error_mark_node; 5298 } 5299 5300 return cp_convert (type, expr); 5301} 5302 5303tree 5304build_reinterpret_cast (tree type, tree expr) 5305{ 5306 if (type == error_mark_node || expr == error_mark_node) 5307 return error_mark_node; 5308 5309 if (processing_template_decl) 5310 { 5311 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr); 5312 5313 if (!TREE_SIDE_EFFECTS (t) 5314 && type_dependent_expression_p (expr)) 5315 /* There might turn out to be side effects inside expr. */ 5316 TREE_SIDE_EFFECTS (t) = 1; 5317 return convert_from_reference (t); 5318 } 5319 5320 return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false, 5321 /*valid_p=*/NULL); 5322} 5323 5324/* Perform a const_cast from EXPR to TYPE. If the cast is valid, 5325 return an appropriate expression. Otherwise, return 5326 error_mark_node. If the cast is not valid, and COMPLAIN is true, 5327 then a diagnostic will be issued. If VALID_P is non-NULL, we are 5328 performing a C-style cast, its value upon return will indicate 5329 whether or not the conversion succeeded. */ 5330 5331static tree 5332build_const_cast_1 (tree dst_type, tree expr, bool complain, 5333 bool *valid_p) 5334{ 5335 tree src_type; 5336 tree reference_type; 5337 5338 /* Callers are responsible for handling error_mark_node as a 5339 destination type. */ 5340 gcc_assert (dst_type != error_mark_node); 5341 /* In a template, callers should be building syntactic 5342 representations of casts, not using this machinery. */ 5343 gcc_assert (!processing_template_decl); 5344 5345 /* Assume the conversion is invalid. */ 5346 if (valid_p) 5347 *valid_p = false; 5348 5349 if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type)) 5350 { 5351 if (complain) 5352 error ("invalid use of const_cast with type %qT, " 5353 "which is not a pointer, " 5354 "reference, nor a pointer-to-data-member type", dst_type); 5355 return error_mark_node; 5356 } 5357 5358 if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE) 5359 { 5360 if (complain) 5361 error ("invalid use of const_cast with type %qT, which is a pointer " 5362 "or reference to a function type", dst_type); 5363 return error_mark_node; 5364 } 5365 5366 /* Save casted types in the function's used types hash table. */ 5367 used_types_insert (dst_type); 5368 5369 src_type = TREE_TYPE (expr); 5370 /* Expressions do not really have reference types. */ 5371 if (TREE_CODE (src_type) == REFERENCE_TYPE) 5372 src_type = TREE_TYPE (src_type); 5373 5374 /* [expr.const.cast] 5375 5376 An lvalue of type T1 can be explicitly converted to an lvalue of 5377 type T2 using the cast const_cast<T2&> (where T1 and T2 are object 5378 types) if a pointer to T1 can be explicitly converted to the type 5379 pointer to T2 using a const_cast. */ 5380 if (TREE_CODE (dst_type) == REFERENCE_TYPE) 5381 { 5382 reference_type = dst_type; 5383 if (! real_lvalue_p (expr)) 5384 { 5385 if (complain) 5386 error ("invalid const_cast of an rvalue of type %qT to type %qT", 5387 src_type, dst_type); 5388 return error_mark_node; 5389 } 5390 dst_type = build_pointer_type (TREE_TYPE (dst_type)); 5391 src_type = build_pointer_type (src_type); 5392 } 5393 else 5394 { 5395 reference_type = NULL_TREE; 5396 /* If the destination type is not a reference type, the 5397 lvalue-to-rvalue, array-to-pointer, and function-to-pointer 5398 conversions are performed. */ 5399 src_type = type_decays_to (src_type); 5400 if (src_type == error_mark_node) 5401 return error_mark_node; 5402 } 5403 5404 if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type)) 5405 && comp_ptr_ttypes_const (dst_type, src_type)) 5406 { 5407 if (valid_p) 5408 { 5409 *valid_p = true; 5410 /* This cast is actually a C-style cast. Issue a warning if 5411 the user is making a potentially unsafe cast. */ 5412 if (warn_cast_qual) 5413 check_for_casting_away_constness (src_type, dst_type, 5414 warning0, 5415 "cast"); 5416 } 5417 if (reference_type) 5418 { 5419 expr = build_unary_op (ADDR_EXPR, expr, 0); 5420 expr = build_nop (reference_type, expr); 5421 return convert_from_reference (expr); 5422 } 5423 else 5424 { 5425 expr = decay_conversion (expr); 5426 /* build_c_cast puts on a NOP_EXPR to make the result not an 5427 lvalue. Strip such NOP_EXPRs if VALUE is being used in 5428 non-lvalue context. */ 5429 if (TREE_CODE (expr) == NOP_EXPR 5430 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0))) 5431 expr = TREE_OPERAND (expr, 0); 5432 return build_nop (dst_type, expr); 5433 } 5434 } 5435 5436 if (complain) 5437 error ("invalid const_cast from type %qT to type %qT", 5438 src_type, dst_type); 5439 return error_mark_node; 5440} 5441 5442tree 5443build_const_cast (tree type, tree expr) 5444{ 5445 if (type == error_mark_node || error_operand_p (expr)) 5446 return error_mark_node; 5447 5448 if (processing_template_decl) 5449 { 5450 tree t = build_min (CONST_CAST_EXPR, type, expr); 5451 5452 if (!TREE_SIDE_EFFECTS (t) 5453 && type_dependent_expression_p (expr)) 5454 /* There might turn out to be side effects inside expr. */ 5455 TREE_SIDE_EFFECTS (t) = 1; 5456 return convert_from_reference (t); 5457 } 5458 5459 return build_const_cast_1 (type, expr, /*complain=*/true, 5460 /*valid_p=*/NULL); 5461} 5462 5463/* Build an expression representing an explicit C-style cast to type 5464 TYPE of expression EXPR. */ 5465 5466tree 5467build_c_cast (tree type, tree expr) 5468{ 5469 tree value = expr; 5470 tree result; 5471 bool valid_p; 5472 5473 if (type == error_mark_node || error_operand_p (expr)) 5474 return error_mark_node; 5475 5476 if (processing_template_decl) 5477 { 5478 tree t = build_min (CAST_EXPR, type, 5479 tree_cons (NULL_TREE, value, NULL_TREE)); 5480 /* We don't know if it will or will not have side effects. */ 5481 TREE_SIDE_EFFECTS (t) = 1; 5482 return convert_from_reference (t); 5483 } 5484 5485 /* Casts to a (pointer to a) specific ObjC class (or 'id' or 5486 'Class') should always be retained, because this information aids 5487 in method lookup. */ 5488 if (objc_is_object_ptr (type) 5489 && objc_is_object_ptr (TREE_TYPE (expr))) 5490 return build_nop (type, expr); 5491 5492 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 5493 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */ 5494 if (TREE_CODE (type) != REFERENCE_TYPE 5495 && TREE_CODE (value) == NOP_EXPR 5496 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0))) 5497 value = TREE_OPERAND (value, 0); 5498 5499 if (TREE_CODE (type) == ARRAY_TYPE) 5500 { 5501 /* Allow casting from T1* to T2[] because Cfront allows it. 5502 NIHCL uses it. It is not valid ISO C++ however. */ 5503 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE) 5504 { 5505 pedwarn ("ISO C++ forbids casting to an array type %qT", type); 5506 type = build_pointer_type (TREE_TYPE (type)); 5507 } 5508 else 5509 { 5510 error ("ISO C++ forbids casting to an array type %qT", type); 5511 return error_mark_node; 5512 } 5513 } 5514 5515 if (TREE_CODE (type) == FUNCTION_TYPE 5516 || TREE_CODE (type) == METHOD_TYPE) 5517 { 5518 error ("invalid cast to function type %qT", type); 5519 return error_mark_node; 5520 } 5521 5522 /* A C-style cast can be a const_cast. */ 5523 result = build_const_cast_1 (type, value, /*complain=*/false, 5524 &valid_p); 5525 if (valid_p) 5526 return result; 5527 5528 /* Or a static cast. */ 5529 result = build_static_cast_1 (type, value, /*c_cast_p=*/true, 5530 &valid_p); 5531 /* Or a reinterpret_cast. */ 5532 if (!valid_p) 5533 result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true, 5534 &valid_p); 5535 /* The static_cast or reinterpret_cast may be followed by a 5536 const_cast. */ 5537 if (valid_p 5538 /* A valid cast may result in errors if, for example, a 5539 conversion to am ambiguous base class is required. */ 5540 && !error_operand_p (result)) 5541 { 5542 tree result_type; 5543 5544 /* Non-class rvalues always have cv-unqualified type. */ 5545 if (!CLASS_TYPE_P (type)) 5546 type = TYPE_MAIN_VARIANT (type); 5547 result_type = TREE_TYPE (result); 5548 if (!CLASS_TYPE_P (result_type)) 5549 result_type = TYPE_MAIN_VARIANT (result_type); 5550 /* If the type of RESULT does not match TYPE, perform a 5551 const_cast to make it match. If the static_cast or 5552 reinterpret_cast succeeded, we will differ by at most 5553 cv-qualification, so the follow-on const_cast is guaranteed 5554 to succeed. */ 5555 if (!same_type_p (non_reference (type), non_reference (result_type))) 5556 { 5557 result = build_const_cast_1 (type, result, false, &valid_p); 5558 gcc_assert (valid_p); 5559 } 5560 return result; 5561 } 5562 5563 return error_mark_node; 5564} 5565 5566/* Build an assignment expression of lvalue LHS from value RHS. 5567 MODIFYCODE is the code for a binary operator that we use 5568 to combine the old value of LHS with RHS to get the new value. 5569 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. 5570 5571 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */ 5572 5573tree 5574build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) 5575{ 5576 tree result; 5577 tree newrhs = rhs; 5578 tree lhstype = TREE_TYPE (lhs); 5579 tree olhstype = lhstype; 5580 tree olhs = NULL_TREE; 5581 bool plain_assign = (modifycode == NOP_EXPR); 5582 5583 /* Avoid duplicate error messages from operands that had errors. */ 5584 if (error_operand_p (lhs) || error_operand_p (rhs)) 5585 return error_mark_node; 5586 5587 /* Handle control structure constructs used as "lvalues". */ 5588 switch (TREE_CODE (lhs)) 5589 { 5590 /* Handle --foo = 5; as these are valid constructs in C++. */ 5591 case PREDECREMENT_EXPR: 5592 case PREINCREMENT_EXPR: 5593 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))) 5594 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs), 5595 stabilize_reference (TREE_OPERAND (lhs, 0)), 5596 TREE_OPERAND (lhs, 1)); 5597 return build2 (COMPOUND_EXPR, lhstype, 5598 lhs, 5599 build_modify_expr (TREE_OPERAND (lhs, 0), 5600 modifycode, rhs)); 5601 5602 /* Handle (a, b) used as an "lvalue". */ 5603 case COMPOUND_EXPR: 5604 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), 5605 modifycode, rhs); 5606 if (newrhs == error_mark_node) 5607 return error_mark_node; 5608 return build2 (COMPOUND_EXPR, lhstype, 5609 TREE_OPERAND (lhs, 0), newrhs); 5610 5611 case MODIFY_EXPR: 5612 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))) 5613 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs), 5614 stabilize_reference (TREE_OPERAND (lhs, 0)), 5615 TREE_OPERAND (lhs, 1)); 5616 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs); 5617 if (newrhs == error_mark_node) 5618 return error_mark_node; 5619 return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs); 5620 5621 case MIN_EXPR: 5622 case MAX_EXPR: 5623 /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues, 5624 when neither operand has side-effects. */ 5625 if (!lvalue_or_else (lhs, lv_assign)) 5626 return error_mark_node; 5627 5628 gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)) 5629 && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1))); 5630 5631 lhs = build3 (COND_EXPR, TREE_TYPE (lhs), 5632 build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR, 5633 boolean_type_node, 5634 TREE_OPERAND (lhs, 0), 5635 TREE_OPERAND (lhs, 1)), 5636 TREE_OPERAND (lhs, 0), 5637 TREE_OPERAND (lhs, 1)); 5638 /* Fall through. */ 5639 5640 /* Handle (a ? b : c) used as an "lvalue". */ 5641 case COND_EXPR: 5642 { 5643 /* Produce (a ? (b = rhs) : (c = rhs)) 5644 except that the RHS goes through a save-expr 5645 so the code to compute it is only emitted once. */ 5646 tree cond; 5647 tree preeval = NULL_TREE; 5648 5649 if (VOID_TYPE_P (TREE_TYPE (rhs))) 5650 { 5651 error ("void value not ignored as it ought to be"); 5652 return error_mark_node; 5653 } 5654 5655 rhs = stabilize_expr (rhs, &preeval); 5656 5657 /* Check this here to avoid odd errors when trying to convert 5658 a throw to the type of the COND_EXPR. */ 5659 if (!lvalue_or_else (lhs, lv_assign)) 5660 return error_mark_node; 5661 5662 cond = build_conditional_expr 5663 (TREE_OPERAND (lhs, 0), 5664 build_modify_expr (TREE_OPERAND (lhs, 1), 5665 modifycode, rhs), 5666 build_modify_expr (TREE_OPERAND (lhs, 2), 5667 modifycode, rhs)); 5668 5669 if (cond == error_mark_node) 5670 return cond; 5671 /* Make sure the code to compute the rhs comes out 5672 before the split. */ 5673 if (preeval) 5674 cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond); 5675 return cond; 5676 } 5677 5678 default: 5679 break; 5680 } 5681 5682 if (modifycode == INIT_EXPR) 5683 { 5684 if (TREE_CODE (rhs) == CONSTRUCTOR) 5685 { 5686 if (! same_type_p (TREE_TYPE (rhs), lhstype)) 5687 /* Call convert to generate an error; see PR 11063. */ 5688 rhs = convert (lhstype, rhs); 5689 result = build2 (INIT_EXPR, lhstype, lhs, rhs); 5690 TREE_SIDE_EFFECTS (result) = 1; 5691 return result; 5692 } 5693 else if (! IS_AGGR_TYPE (lhstype)) 5694 /* Do the default thing. */; 5695 else 5696 { 5697 result = build_special_member_call (lhs, complete_ctor_identifier, 5698 build_tree_list (NULL_TREE, rhs), 5699 lhstype, LOOKUP_NORMAL); 5700 if (result == NULL_TREE) 5701 return error_mark_node; 5702 return result; 5703 } 5704 } 5705 else 5706 { 5707 lhs = require_complete_type (lhs); 5708 if (lhs == error_mark_node) 5709 return error_mark_node; 5710 5711 if (modifycode == NOP_EXPR) 5712 { 5713 /* `operator=' is not an inheritable operator. */ 5714 if (! IS_AGGR_TYPE (lhstype)) 5715 /* Do the default thing. */; 5716 else 5717 { 5718 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, 5719 lhs, rhs, make_node (NOP_EXPR), 5720 /*overloaded_p=*/NULL); 5721 if (result == NULL_TREE) 5722 return error_mark_node; 5723 return result; 5724 } 5725 lhstype = olhstype; 5726 } 5727 else 5728 { 5729 /* A binary op has been requested. Combine the old LHS 5730 value with the RHS producing the value we should actually 5731 store into the LHS. */ 5732 5733 gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE)); 5734 lhs = stabilize_reference (lhs); 5735 newrhs = cp_build_binary_op (modifycode, lhs, rhs); 5736 if (newrhs == error_mark_node) 5737 { 5738 error (" in evaluation of %<%Q(%#T, %#T)%>", modifycode, 5739 TREE_TYPE (lhs), TREE_TYPE (rhs)); 5740 return error_mark_node; 5741 } 5742 5743 /* Now it looks like a plain assignment. */ 5744 modifycode = NOP_EXPR; 5745 } 5746 gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE); 5747 gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE); 5748 } 5749 5750 /* The left-hand side must be an lvalue. */ 5751 if (!lvalue_or_else (lhs, lv_assign)) 5752 return error_mark_node; 5753 5754 /* Warn about modifying something that is `const'. Don't warn if 5755 this is initialization. */ 5756 if (modifycode != INIT_EXPR 5757 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype) 5758 /* Functions are not modifiable, even though they are 5759 lvalues. */ 5760 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE 5761 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE 5762 /* If it's an aggregate and any field is const, then it is 5763 effectively const. */ 5764 || (CLASS_TYPE_P (lhstype) 5765 && C_TYPE_FIELDS_READONLY (lhstype)))) 5766 readonly_error (lhs, "assignment", 0); 5767 5768 /* If storing into a structure or union member, it has probably been 5769 given type `int'. Compute the type that would go with the actual 5770 amount of storage the member occupies. */ 5771 5772 if (TREE_CODE (lhs) == COMPONENT_REF 5773 && (TREE_CODE (lhstype) == INTEGER_TYPE 5774 || TREE_CODE (lhstype) == REAL_TYPE 5775 || TREE_CODE (lhstype) == ENUMERAL_TYPE)) 5776 { 5777 lhstype = TREE_TYPE (get_unwidened (lhs, 0)); 5778 5779 /* If storing in a field that is in actuality a short or narrower 5780 than one, we must store in the field in its actual type. */ 5781 5782 if (lhstype != TREE_TYPE (lhs)) 5783 { 5784 /* Avoid warnings converting integral types back into enums for 5785 enum bit fields. */ 5786 if (TREE_CODE (lhstype) == INTEGER_TYPE 5787 && TREE_CODE (olhstype) == ENUMERAL_TYPE) 5788 { 5789 if (TREE_SIDE_EFFECTS (lhs)) 5790 lhs = stabilize_reference (lhs); 5791 olhs = lhs; 5792 } 5793 lhs = copy_node (lhs); 5794 TREE_TYPE (lhs) = lhstype; 5795 } 5796 } 5797 5798 /* Convert new value to destination type. */ 5799 5800 if (TREE_CODE (lhstype) == ARRAY_TYPE) 5801 { 5802 int from_array; 5803 5804 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype), 5805 TYPE_MAIN_VARIANT (TREE_TYPE (rhs)))) 5806 { 5807 error ("incompatible types in assignment of %qT to %qT", 5808 TREE_TYPE (rhs), lhstype); 5809 return error_mark_node; 5810 } 5811 5812 /* Allow array assignment in compiler-generated code. */ 5813 if (! DECL_ARTIFICIAL (current_function_decl)) 5814 { 5815 /* This routine is used for both initialization and assignment. 5816 Make sure the diagnostic message differentiates the context. */ 5817 if (modifycode == INIT_EXPR) 5818 error ("array used as initializer"); 5819 else 5820 error ("invalid array assignment"); 5821 return error_mark_node; 5822 } 5823 5824 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE 5825 ? 1 + (modifycode != INIT_EXPR): 0; 5826 return build_vec_init (lhs, NULL_TREE, newrhs, 5827 /*explicit_default_init_p=*/false, 5828 from_array); 5829 } 5830 5831 if (modifycode == INIT_EXPR) 5832 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL, 5833 "initialization", NULL_TREE, 0); 5834 else 5835 { 5836 /* Avoid warnings on enum bit fields. */ 5837 if (TREE_CODE (olhstype) == ENUMERAL_TYPE 5838 && TREE_CODE (lhstype) == INTEGER_TYPE) 5839 { 5840 newrhs = convert_for_assignment (olhstype, newrhs, "assignment", 5841 NULL_TREE, 0); 5842 newrhs = convert_force (lhstype, newrhs, 0); 5843 } 5844 else 5845 newrhs = convert_for_assignment (lhstype, newrhs, "assignment", 5846 NULL_TREE, 0); 5847 if (TREE_CODE (newrhs) == CALL_EXPR 5848 && TYPE_NEEDS_CONSTRUCTING (lhstype)) 5849 newrhs = build_cplus_new (lhstype, newrhs); 5850 5851 /* Can't initialize directly from a TARGET_EXPR, since that would 5852 cause the lhs to be constructed twice, and possibly result in 5853 accidental self-initialization. So we force the TARGET_EXPR to be 5854 expanded without a target. */ 5855 if (TREE_CODE (newrhs) == TARGET_EXPR) 5856 newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs, 5857 TREE_OPERAND (newrhs, 0)); 5858 } 5859 5860 if (newrhs == error_mark_node) 5861 return error_mark_node; 5862 5863 if (c_dialect_objc () && flag_objc_gc) 5864 { 5865 result = objc_generate_write_barrier (lhs, modifycode, newrhs); 5866 5867 if (result) 5868 return result; 5869 } 5870 5871 result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR, 5872 lhstype, lhs, newrhs); 5873 5874 TREE_SIDE_EFFECTS (result) = 1; 5875 if (!plain_assign) 5876 TREE_NO_WARNING (result) = 1; 5877 5878 /* If we got the LHS in a different type for storing in, 5879 convert the result back to the nominal type of LHS 5880 so that the value we return always has the same type 5881 as the LHS argument. */ 5882 5883 if (olhstype == TREE_TYPE (result)) 5884 return result; 5885 if (olhs) 5886 { 5887 result = build2 (COMPOUND_EXPR, olhstype, result, olhs); 5888 TREE_NO_WARNING (result) = 1; 5889 return result; 5890 } 5891 return convert_for_assignment (olhstype, result, "assignment", 5892 NULL_TREE, 0); 5893} 5894 5895tree 5896build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) 5897{ 5898 if (processing_template_decl) 5899 return build_min_nt (MODOP_EXPR, lhs, 5900 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs); 5901 5902 if (modifycode != NOP_EXPR) 5903 { 5904 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs, 5905 make_node (modifycode), 5906 /*overloaded_p=*/NULL); 5907 if (rval) 5908 { 5909 TREE_NO_WARNING (rval) = 1; 5910 return rval; 5911 } 5912 } 5913 return build_modify_expr (lhs, modifycode, rhs); 5914} 5915 5916 5917/* Get difference in deltas for different pointer to member function 5918 types. Returns an integer constant of type PTRDIFF_TYPE_NODE. If 5919 the conversion is invalid, the constant is zero. If 5920 ALLOW_INVERSE_P is true, then allow reverse conversions as well. 5921 If C_CAST_P is true this conversion is taking place as part of a 5922 C-style cast. 5923 5924 Note that the naming of FROM and TO is kind of backwards; the return 5925 value is what we add to a TO in order to get a FROM. They are named 5926 this way because we call this function to find out how to convert from 5927 a pointer to member of FROM to a pointer to member of TO. */ 5928 5929static tree 5930get_delta_difference (tree from, tree to, 5931 bool allow_inverse_p, 5932 bool c_cast_p) 5933{ 5934 tree binfo; 5935 base_kind kind; 5936 tree result; 5937 5938 /* Assume no conversion is required. */ 5939 result = integer_zero_node; 5940 binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind); 5941 if (kind == bk_inaccessible || kind == bk_ambig) 5942 error (" in pointer to member function conversion"); 5943 else if (binfo) 5944 { 5945 if (kind != bk_via_virtual) 5946 result = BINFO_OFFSET (binfo); 5947 else 5948 { 5949 tree virt_binfo = binfo_from_vbase (binfo); 5950 5951 /* This is a reinterpret cast, we choose to do nothing. */ 5952 if (allow_inverse_p) 5953 warning (0, "pointer to member cast via virtual base %qT", 5954 BINFO_TYPE (virt_binfo)); 5955 else 5956 error ("pointer to member conversion via virtual base %qT", 5957 BINFO_TYPE (virt_binfo)); 5958 } 5959 } 5960 else if (same_type_ignoring_top_level_qualifiers_p (from, to)) 5961 /* Pointer to member of incomplete class is permitted*/; 5962 else if (!allow_inverse_p) 5963 { 5964 error_not_base_type (from, to); 5965 error (" in pointer to member conversion"); 5966 } 5967 else 5968 { 5969 binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind); 5970 if (binfo) 5971 { 5972 if (kind != bk_via_virtual) 5973 result = size_diffop (size_zero_node, BINFO_OFFSET (binfo)); 5974 else 5975 { 5976 /* This is a reinterpret cast, we choose to do nothing. */ 5977 tree virt_binfo = binfo_from_vbase (binfo); 5978 5979 warning (0, "pointer to member cast via virtual base %qT", 5980 BINFO_TYPE (virt_binfo)); 5981 } 5982 } 5983 } 5984 5985 return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node, 5986 result)); 5987} 5988 5989/* Return a constructor for the pointer-to-member-function TYPE using 5990 the other components as specified. */ 5991 5992tree 5993build_ptrmemfunc1 (tree type, tree delta, tree pfn) 5994{ 5995 tree u = NULL_TREE; 5996 tree delta_field; 5997 tree pfn_field; 5998 VEC(constructor_elt, gc) *v; 5999 6000 /* Pull the FIELD_DECLs out of the type. */ 6001 pfn_field = TYPE_FIELDS (type); 6002 delta_field = TREE_CHAIN (pfn_field); 6003 6004 /* Make sure DELTA has the type we want. */ 6005 delta = convert_and_check (delta_type_node, delta); 6006 6007 /* Finish creating the initializer. */ 6008 v = VEC_alloc(constructor_elt, gc, 2); 6009 CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn); 6010 CONSTRUCTOR_APPEND_ELT(v, delta_field, delta); 6011 u = build_constructor (type, v); 6012 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta); 6013 TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta); 6014 TREE_STATIC (u) = (TREE_CONSTANT (u) 6015 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn)) 6016 != NULL_TREE) 6017 && (initializer_constant_valid_p (delta, TREE_TYPE (delta)) 6018 != NULL_TREE)); 6019 return u; 6020} 6021 6022/* Build a constructor for a pointer to member function. It can be 6023 used to initialize global variables, local variable, or used 6024 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we 6025 want to be. 6026 6027 If FORCE is nonzero, then force this conversion, even if 6028 we would rather not do it. Usually set when using an explicit 6029 cast. A C-style cast is being processed iff C_CAST_P is true. 6030 6031 Return error_mark_node, if something goes wrong. */ 6032 6033tree 6034build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p) 6035{ 6036 tree fn; 6037 tree pfn_type; 6038 tree to_type; 6039 6040 if (error_operand_p (pfn)) 6041 return error_mark_node; 6042 6043 pfn_type = TREE_TYPE (pfn); 6044 to_type = build_ptrmemfunc_type (type); 6045 6046 /* Handle multiple conversions of pointer to member functions. */ 6047 if (TYPE_PTRMEMFUNC_P (pfn_type)) 6048 { 6049 tree delta = NULL_TREE; 6050 tree npfn = NULL_TREE; 6051 tree n; 6052 6053 if (!force 6054 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL)) 6055 error ("invalid conversion to type %qT from type %qT", 6056 to_type, pfn_type); 6057 6058 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type), 6059 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type), 6060 force, 6061 c_cast_p); 6062 6063 /* We don't have to do any conversion to convert a 6064 pointer-to-member to its own type. But, we don't want to 6065 just return a PTRMEM_CST if there's an explicit cast; that 6066 cast should make the expression an invalid template argument. */ 6067 if (TREE_CODE (pfn) != PTRMEM_CST) 6068 { 6069 if (same_type_p (to_type, pfn_type)) 6070 return pfn; 6071 else if (integer_zerop (n)) 6072 return build_reinterpret_cast (to_type, pfn); 6073 } 6074 6075 if (TREE_SIDE_EFFECTS (pfn)) 6076 pfn = save_expr (pfn); 6077 6078 /* Obtain the function pointer and the current DELTA. */ 6079 if (TREE_CODE (pfn) == PTRMEM_CST) 6080 expand_ptrmemfunc_cst (pfn, &delta, &npfn); 6081 else 6082 { 6083 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier); 6084 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier); 6085 } 6086 6087 /* Just adjust the DELTA field. */ 6088 gcc_assert (same_type_ignoring_top_level_qualifiers_p 6089 (TREE_TYPE (delta), ptrdiff_type_node)); 6090 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta) 6091 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node); 6092 delta = cp_build_binary_op (PLUS_EXPR, delta, n); 6093 return build_ptrmemfunc1 (to_type, delta, npfn); 6094 } 6095 6096 /* Handle null pointer to member function conversions. */ 6097 if (integer_zerop (pfn)) 6098 { 6099 pfn = build_c_cast (type, integer_zero_node); 6100 return build_ptrmemfunc1 (to_type, 6101 integer_zero_node, 6102 pfn); 6103 } 6104 6105 if (type_unknown_p (pfn)) 6106 return instantiate_type (type, pfn, tf_warning_or_error); 6107 6108 fn = TREE_OPERAND (pfn, 0); 6109 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL 6110 /* In a template, we will have preserved the 6111 OFFSET_REF. */ 6112 || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF)); 6113 return make_ptrmem_cst (to_type, fn); 6114} 6115 6116/* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST 6117 given by CST. 6118 6119 ??? There is no consistency as to the types returned for the above 6120 values. Some code acts as if it were a sizetype and some as if it were 6121 integer_type_node. */ 6122 6123void 6124expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn) 6125{ 6126 tree type = TREE_TYPE (cst); 6127 tree fn = PTRMEM_CST_MEMBER (cst); 6128 tree ptr_class, fn_class; 6129 6130 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL); 6131 6132 /* The class that the function belongs to. */ 6133 fn_class = DECL_CONTEXT (fn); 6134 6135 /* The class that we're creating a pointer to member of. */ 6136 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type); 6137 6138 /* First, calculate the adjustment to the function's class. */ 6139 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0, 6140 /*c_cast_p=*/0); 6141 6142 if (!DECL_VIRTUAL_P (fn)) 6143 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn)); 6144 else 6145 { 6146 /* If we're dealing with a virtual function, we have to adjust 'this' 6147 again, to point to the base which provides the vtable entry for 6148 fn; the call will do the opposite adjustment. */ 6149 tree orig_class = DECL_CONTEXT (fn); 6150 tree binfo = binfo_or_else (orig_class, fn_class); 6151 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta), 6152 *delta, BINFO_OFFSET (binfo)); 6153 *delta = fold_if_not_in_template (*delta); 6154 6155 /* We set PFN to the vtable offset at which the function can be 6156 found, plus one (unless ptrmemfunc_vbit_in_delta, in which 6157 case delta is shifted left, and then incremented). */ 6158 *pfn = DECL_VINDEX (fn); 6159 *pfn = build2 (MULT_EXPR, integer_type_node, *pfn, 6160 TYPE_SIZE_UNIT (vtable_entry_type)); 6161 *pfn = fold_if_not_in_template (*pfn); 6162 6163 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION) 6164 { 6165 case ptrmemfunc_vbit_in_pfn: 6166 *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn, 6167 integer_one_node); 6168 *pfn = fold_if_not_in_template (*pfn); 6169 break; 6170 6171 case ptrmemfunc_vbit_in_delta: 6172 *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta), 6173 *delta, integer_one_node); 6174 *delta = fold_if_not_in_template (*delta); 6175 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta), 6176 *delta, integer_one_node); 6177 *delta = fold_if_not_in_template (*delta); 6178 break; 6179 6180 default: 6181 gcc_unreachable (); 6182 } 6183 6184 *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn); 6185 *pfn = fold_if_not_in_template (*pfn); 6186 } 6187} 6188 6189/* Return an expression for PFN from the pointer-to-member function 6190 given by T. */ 6191 6192static tree 6193pfn_from_ptrmemfunc (tree t) 6194{ 6195 if (TREE_CODE (t) == PTRMEM_CST) 6196 { 6197 tree delta; 6198 tree pfn; 6199 6200 expand_ptrmemfunc_cst (t, &delta, &pfn); 6201 if (pfn) 6202 return pfn; 6203 } 6204 6205 return build_ptrmemfunc_access_expr (t, pfn_identifier); 6206} 6207 6208/* Convert value RHS to type TYPE as preparation for an assignment to 6209 an lvalue of type TYPE. ERRTYPE is a string to use in error 6210 messages: "assignment", "return", etc. If FNDECL is non-NULL, we 6211 are doing the conversion in order to pass the PARMNUMth argument of 6212 FNDECL. */ 6213 6214static tree 6215convert_for_assignment (tree type, tree rhs, 6216 const char *errtype, tree fndecl, int parmnum) 6217{ 6218 tree rhstype; 6219 enum tree_code coder; 6220 6221 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ 6222 if (TREE_CODE (rhs) == NON_LVALUE_EXPR) 6223 rhs = TREE_OPERAND (rhs, 0); 6224 6225 rhstype = TREE_TYPE (rhs); 6226 coder = TREE_CODE (rhstype); 6227 6228 if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE 6229 && vector_types_convertible_p (type, rhstype)) 6230 return convert (type, rhs); 6231 6232 if (rhs == error_mark_node || rhstype == error_mark_node) 6233 return error_mark_node; 6234 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node) 6235 return error_mark_node; 6236 6237 /* The RHS of an assignment cannot have void type. */ 6238 if (coder == VOID_TYPE) 6239 { 6240 error ("void value not ignored as it ought to be"); 6241 return error_mark_node; 6242 } 6243 6244 /* Simplify the RHS if possible. */ 6245 if (TREE_CODE (rhs) == CONST_DECL) 6246 rhs = DECL_INITIAL (rhs); 6247 6248 if (c_dialect_objc ()) 6249 { 6250 int parmno; 6251 tree rname = fndecl; 6252 6253 if (!strcmp (errtype, "assignment")) 6254 parmno = -1; 6255 else if (!strcmp (errtype, "initialization")) 6256 parmno = -2; 6257 else 6258 { 6259 tree selector = objc_message_selector (); 6260 6261 parmno = parmnum; 6262 6263 if (selector && parmno > 1) 6264 { 6265 rname = selector; 6266 parmno -= 1; 6267 } 6268 } 6269 6270 if (objc_compare_types (type, rhstype, parmno, rname)) 6271 return convert (type, rhs); 6272 } 6273 6274 /* [expr.ass] 6275 6276 The expression is implicitly converted (clause _conv_) to the 6277 cv-unqualified type of the left operand. 6278 6279 We allow bad conversions here because by the time we get to this point 6280 we are committed to doing the conversion. If we end up doing a bad 6281 conversion, convert_like will complain. */ 6282 if (!can_convert_arg_bad (type, rhstype, rhs)) 6283 { 6284 /* When -Wno-pmf-conversions is use, we just silently allow 6285 conversions from pointers-to-members to plain pointers. If 6286 the conversion doesn't work, cp_convert will complain. */ 6287 if (!warn_pmf2ptr 6288 && TYPE_PTR_P (type) 6289 && TYPE_PTRMEMFUNC_P (rhstype)) 6290 rhs = cp_convert (strip_top_quals (type), rhs); 6291 else 6292 { 6293 /* If the right-hand side has unknown type, then it is an 6294 overloaded function. Call instantiate_type to get error 6295 messages. */ 6296 if (rhstype == unknown_type_node) 6297 instantiate_type (type, rhs, tf_warning_or_error); 6298 else if (fndecl) 6299 error ("cannot convert %qT to %qT for argument %qP to %qD", 6300 rhstype, type, parmnum, fndecl); 6301 else 6302 error ("cannot convert %qT to %qT in %s", rhstype, type, errtype); 6303 return error_mark_node; 6304 } 6305 } 6306 if (warn_missing_format_attribute) 6307 { 6308 const enum tree_code codel = TREE_CODE (type); 6309 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE) 6310 && coder == codel 6311 && check_missing_format_attribute (type, rhstype)) 6312 warning (OPT_Wmissing_format_attribute, 6313 "%s might be a candidate for a format attribute", 6314 errtype); 6315 } 6316 6317 /* If -Wparentheses, warn about a = b = c when a has type bool and b 6318 does not. */ 6319 if (warn_parentheses 6320 && type == boolean_type_node 6321 && TREE_CODE (rhs) == MODIFY_EXPR 6322 && !TREE_NO_WARNING (rhs) 6323 && TREE_TYPE (rhs) != boolean_type_node) 6324 { 6325 warning (OPT_Wparentheses, 6326 "suggest parentheses around assignment used as truth value"); 6327 TREE_NO_WARNING (rhs) = 1; 6328 } 6329 6330 return perform_implicit_conversion (strip_top_quals (type), rhs); 6331} 6332 6333/* Convert RHS to be of type TYPE. 6334 If EXP is nonzero, it is the target of the initialization. 6335 ERRTYPE is a string to use in error messages. 6336 6337 Two major differences between the behavior of 6338 `convert_for_assignment' and `convert_for_initialization' 6339 are that references are bashed in the former, while 6340 copied in the latter, and aggregates are assigned in 6341 the former (operator=) while initialized in the 6342 latter (X(X&)). 6343 6344 If using constructor make sure no conversion operator exists, if one does 6345 exist, an ambiguity exists. 6346 6347 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */ 6348 6349tree 6350convert_for_initialization (tree exp, tree type, tree rhs, int flags, 6351 const char *errtype, tree fndecl, int parmnum) 6352{ 6353 enum tree_code codel = TREE_CODE (type); 6354 tree rhstype; 6355 enum tree_code coder; 6356 6357 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 6358 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */ 6359 if (TREE_CODE (rhs) == NOP_EXPR 6360 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0)) 6361 && codel != REFERENCE_TYPE) 6362 rhs = TREE_OPERAND (rhs, 0); 6363 6364 if (type == error_mark_node 6365 || rhs == error_mark_node 6366 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)) 6367 return error_mark_node; 6368 6369 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE 6370 && TREE_CODE (type) != ARRAY_TYPE 6371 && (TREE_CODE (type) != REFERENCE_TYPE 6372 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE)) 6373 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE 6374 && (TREE_CODE (type) != REFERENCE_TYPE 6375 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)) 6376 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE) 6377 rhs = decay_conversion (rhs); 6378 6379 rhstype = TREE_TYPE (rhs); 6380 coder = TREE_CODE (rhstype); 6381 6382 if (coder == ERROR_MARK) 6383 return error_mark_node; 6384 6385 /* We accept references to incomplete types, so we can 6386 return here before checking if RHS is of complete type. */ 6387 6388 if (codel == REFERENCE_TYPE) 6389 { 6390 /* This should eventually happen in convert_arguments. */ 6391 int savew = 0, savee = 0; 6392 6393 if (fndecl) 6394 savew = warningcount, savee = errorcount; 6395 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE, 6396 /*cleanup=*/NULL); 6397 if (fndecl) 6398 { 6399 if (warningcount > savew) 6400 warning (0, "in passing argument %P of %q+D", parmnum, fndecl); 6401 else if (errorcount > savee) 6402 error ("in passing argument %P of %q+D", parmnum, fndecl); 6403 } 6404 return rhs; 6405 } 6406 6407 if (exp != 0) 6408 exp = require_complete_type (exp); 6409 if (exp == error_mark_node) 6410 return error_mark_node; 6411 6412 rhstype = non_reference (rhstype); 6413 6414 type = complete_type (type); 6415 6416 if (IS_AGGR_TYPE (type)) 6417 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); 6418 6419 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum); 6420} 6421 6422/* If RETVAL is the address of, or a reference to, a local variable or 6423 temporary give an appropriate warning. */ 6424 6425static void 6426maybe_warn_about_returning_address_of_local (tree retval) 6427{ 6428 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl)); 6429 tree whats_returned = retval; 6430 6431 for (;;) 6432 { 6433 if (TREE_CODE (whats_returned) == COMPOUND_EXPR) 6434 whats_returned = TREE_OPERAND (whats_returned, 1); 6435 else if (TREE_CODE (whats_returned) == CONVERT_EXPR 6436 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR 6437 || TREE_CODE (whats_returned) == NOP_EXPR) 6438 whats_returned = TREE_OPERAND (whats_returned, 0); 6439 else 6440 break; 6441 } 6442 6443 if (TREE_CODE (whats_returned) != ADDR_EXPR) 6444 return; 6445 whats_returned = TREE_OPERAND (whats_returned, 0); 6446 6447 if (TREE_CODE (valtype) == REFERENCE_TYPE) 6448 { 6449 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR 6450 || TREE_CODE (whats_returned) == TARGET_EXPR) 6451 { 6452 warning (0, "returning reference to temporary"); 6453 return; 6454 } 6455 if (TREE_CODE (whats_returned) == VAR_DECL 6456 && DECL_NAME (whats_returned) 6457 && TEMP_NAME_P (DECL_NAME (whats_returned))) 6458 { 6459 warning (0, "reference to non-lvalue returned"); 6460 return; 6461 } 6462 } 6463 6464 while (TREE_CODE (whats_returned) == COMPONENT_REF 6465 || TREE_CODE (whats_returned) == ARRAY_REF) 6466 whats_returned = TREE_OPERAND (whats_returned, 0); 6467 6468 if (DECL_P (whats_returned) 6469 && DECL_NAME (whats_returned) 6470 && DECL_FUNCTION_SCOPE_P (whats_returned) 6471 && !(TREE_STATIC (whats_returned) 6472 || TREE_PUBLIC (whats_returned))) 6473 { 6474 if (TREE_CODE (valtype) == REFERENCE_TYPE) 6475 warning (0, "reference to local variable %q+D returned", 6476 whats_returned); 6477 else 6478 warning (0, "address of local variable %q+D returned", 6479 whats_returned); 6480 return; 6481 } 6482} 6483 6484/* Check that returning RETVAL from the current function is valid. 6485 Return an expression explicitly showing all conversions required to 6486 change RETVAL into the function return type, and to assign it to 6487 the DECL_RESULT for the function. Set *NO_WARNING to true if 6488 code reaches end of non-void function warning shouldn't be issued 6489 on this RETURN_EXPR. */ 6490 6491tree 6492check_return_expr (tree retval, bool *no_warning) 6493{ 6494 tree result; 6495 /* The type actually returned by the function, after any 6496 promotions. */ 6497 tree valtype; 6498 int fn_returns_value_p; 6499 6500 *no_warning = false; 6501 6502 /* A `volatile' function is one that isn't supposed to return, ever. 6503 (This is a G++ extension, used to get better code for functions 6504 that call the `volatile' function.) */ 6505 if (TREE_THIS_VOLATILE (current_function_decl)) 6506 warning (0, "function declared %<noreturn%> has a %<return%> statement"); 6507 6508 /* Check for various simple errors. */ 6509 if (DECL_DESTRUCTOR_P (current_function_decl)) 6510 { 6511 if (retval) 6512 error ("returning a value from a destructor"); 6513 return NULL_TREE; 6514 } 6515 else if (DECL_CONSTRUCTOR_P (current_function_decl)) 6516 { 6517 if (in_function_try_handler) 6518 /* If a return statement appears in a handler of the 6519 function-try-block of a constructor, the program is ill-formed. */ 6520 error ("cannot return from a handler of a function-try-block of a constructor"); 6521 else if (retval) 6522 /* You can't return a value from a constructor. */ 6523 error ("returning a value from a constructor"); 6524 return NULL_TREE; 6525 } 6526 6527 if (processing_template_decl) 6528 { 6529 current_function_returns_value = 1; 6530 return retval; 6531 } 6532 6533 /* When no explicit return-value is given in a function with a named 6534 return value, the named return value is used. */ 6535 result = DECL_RESULT (current_function_decl); 6536 valtype = TREE_TYPE (result); 6537 gcc_assert (valtype != NULL_TREE); 6538 fn_returns_value_p = !VOID_TYPE_P (valtype); 6539 if (!retval && DECL_NAME (result) && fn_returns_value_p) 6540 retval = result; 6541 6542 /* Check for a return statement with no return value in a function 6543 that's supposed to return a value. */ 6544 if (!retval && fn_returns_value_p) 6545 { 6546 pedwarn ("return-statement with no value, in function returning %qT", 6547 valtype); 6548 /* Clear this, so finish_function won't say that we reach the 6549 end of a non-void function (which we don't, we gave a 6550 return!). */ 6551 current_function_returns_null = 0; 6552 /* And signal caller that TREE_NO_WARNING should be set on the 6553 RETURN_EXPR to avoid control reaches end of non-void function 6554 warnings in tree-cfg.c. */ 6555 *no_warning = true; 6556 } 6557 /* Check for a return statement with a value in a function that 6558 isn't supposed to return a value. */ 6559 else if (retval && !fn_returns_value_p) 6560 { 6561 if (VOID_TYPE_P (TREE_TYPE (retval))) 6562 /* You can return a `void' value from a function of `void' 6563 type. In that case, we have to evaluate the expression for 6564 its side-effects. */ 6565 finish_expr_stmt (retval); 6566 else 6567 pedwarn ("return-statement with a value, in function " 6568 "returning 'void'"); 6569 6570 current_function_returns_null = 1; 6571 6572 /* There's really no value to return, after all. */ 6573 return NULL_TREE; 6574 } 6575 else if (!retval) 6576 /* Remember that this function can sometimes return without a 6577 value. */ 6578 current_function_returns_null = 1; 6579 else 6580 /* Remember that this function did return a value. */ 6581 current_function_returns_value = 1; 6582 6583 /* Check for erroneous operands -- but after giving ourselves a 6584 chance to provide an error about returning a value from a void 6585 function. */ 6586 if (error_operand_p (retval)) 6587 { 6588 current_function_return_value = error_mark_node; 6589 return error_mark_node; 6590 } 6591 6592 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */ 6593 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR 6594 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR) 6595 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl)) 6596 && ! flag_check_new 6597 && null_ptr_cst_p (retval)) 6598 warning (0, "%<operator new%> must not return NULL unless it is " 6599 "declared %<throw()%> (or -fcheck-new is in effect)"); 6600 6601 /* Effective C++ rule 15. See also start_function. */ 6602 if (warn_ecpp 6603 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR)) 6604 { 6605 bool warn = true; 6606 6607 /* The function return type must be a reference to the current 6608 class. */ 6609 if (TREE_CODE (valtype) == REFERENCE_TYPE 6610 && same_type_ignoring_top_level_qualifiers_p 6611 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))) 6612 { 6613 /* Returning '*this' is obviously OK. */ 6614 if (retval == current_class_ref) 6615 warn = false; 6616 /* If we are calling a function whose return type is the same of 6617 the current class reference, it is ok. */ 6618 else if (TREE_CODE (retval) == INDIRECT_REF 6619 && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR) 6620 warn = false; 6621 } 6622 6623 if (warn) 6624 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>"); 6625 } 6626 6627 /* The fabled Named Return Value optimization, as per [class.copy]/15: 6628 6629 [...] For a function with a class return type, if the expression 6630 in the return statement is the name of a local object, and the cv- 6631 unqualified type of the local object is the same as the function 6632 return type, an implementation is permitted to omit creating the tem- 6633 porary object to hold the function return value [...] 6634 6635 So, if this is a value-returning function that always returns the same 6636 local variable, remember it. 6637 6638 It might be nice to be more flexible, and choose the first suitable 6639 variable even if the function sometimes returns something else, but 6640 then we run the risk of clobbering the variable we chose if the other 6641 returned expression uses the chosen variable somehow. And people expect 6642 this restriction, anyway. (jason 2000-11-19) 6643 6644 See finish_function and finalize_nrv for the rest of this optimization. */ 6645 6646 if (fn_returns_value_p && flag_elide_constructors) 6647 { 6648 if (retval != NULL_TREE 6649 && (current_function_return_value == NULL_TREE 6650 || current_function_return_value == retval) 6651 && TREE_CODE (retval) == VAR_DECL 6652 && DECL_CONTEXT (retval) == current_function_decl 6653 && ! TREE_STATIC (retval) 6654 && ! DECL_ANON_UNION_VAR_P (retval) 6655 && (DECL_ALIGN (retval) 6656 >= DECL_ALIGN (DECL_RESULT (current_function_decl))) 6657 && same_type_p ((TYPE_MAIN_VARIANT 6658 (TREE_TYPE (retval))), 6659 (TYPE_MAIN_VARIANT 6660 (TREE_TYPE (TREE_TYPE (current_function_decl)))))) 6661 current_function_return_value = retval; 6662 else 6663 current_function_return_value = error_mark_node; 6664 } 6665 6666 /* We don't need to do any conversions when there's nothing being 6667 returned. */ 6668 if (!retval) 6669 return NULL_TREE; 6670 6671 /* Do any required conversions. */ 6672 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl)) 6673 /* No conversions are required. */ 6674 ; 6675 else 6676 { 6677 /* The type the function is declared to return. */ 6678 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl)); 6679 6680 /* The functype's return type will have been set to void, if it 6681 was an incomplete type. Just treat this as 'return;' */ 6682 if (VOID_TYPE_P (functype)) 6683 return error_mark_node; 6684 6685 /* First convert the value to the function's return type, then 6686 to the type of return value's location to handle the 6687 case that functype is smaller than the valtype. */ 6688 retval = convert_for_initialization 6689 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING, 6690 "return", NULL_TREE, 0); 6691 retval = convert (valtype, retval); 6692 6693 /* If the conversion failed, treat this just like `return;'. */ 6694 if (retval == error_mark_node) 6695 return retval; 6696 /* We can't initialize a register from a AGGR_INIT_EXPR. */ 6697 else if (! current_function_returns_struct 6698 && TREE_CODE (retval) == TARGET_EXPR 6699 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR) 6700 retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval, 6701 TREE_OPERAND (retval, 0)); 6702 else 6703 maybe_warn_about_returning_address_of_local (retval); 6704 } 6705 6706 /* Actually copy the value returned into the appropriate location. */ 6707 if (retval && retval != result) 6708 retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval); 6709 6710 return retval; 6711} 6712 6713 6714/* Returns nonzero if the pointer-type FROM can be converted to the 6715 pointer-type TO via a qualification conversion. If CONSTP is -1, 6716 then we return nonzero if the pointers are similar, and the 6717 cv-qualification signature of FROM is a proper subset of that of TO. 6718 6719 If CONSTP is positive, then all outer pointers have been 6720 const-qualified. */ 6721 6722static int 6723comp_ptr_ttypes_real (tree to, tree from, int constp) 6724{ 6725 bool to_more_cv_qualified = false; 6726 6727 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from)) 6728 { 6729 if (TREE_CODE (to) != TREE_CODE (from)) 6730 return 0; 6731 6732 if (TREE_CODE (from) == OFFSET_TYPE 6733 && !same_type_p (TYPE_OFFSET_BASETYPE (from), 6734 TYPE_OFFSET_BASETYPE (to))) 6735 return 0; 6736 6737 /* Const and volatile mean something different for function types, 6738 so the usual checks are not appropriate. */ 6739 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE) 6740 { 6741 /* In Objective-C++, some types may have been 'volatilized' by 6742 the compiler for EH; when comparing them here, the volatile 6743 qualification must be ignored. */ 6744 bool objc_quals_match = objc_type_quals_match (to, from); 6745 6746 if (!at_least_as_qualified_p (to, from) && !objc_quals_match) 6747 return 0; 6748 6749 if (!at_least_as_qualified_p (from, to) && !objc_quals_match) 6750 { 6751 if (constp == 0) 6752 return 0; 6753 to_more_cv_qualified = true; 6754 } 6755 6756 if (constp > 0) 6757 constp &= TYPE_READONLY (to); 6758 } 6759 6760 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to)) 6761 return ((constp >= 0 || to_more_cv_qualified) 6762 && same_type_ignoring_top_level_qualifiers_p (to, from)); 6763 } 6764} 6765 6766/* When comparing, say, char ** to char const **, this function takes 6767 the 'char *' and 'char const *'. Do not pass non-pointer/reference 6768 types to this function. */ 6769 6770int 6771comp_ptr_ttypes (tree to, tree from) 6772{ 6773 return comp_ptr_ttypes_real (to, from, 1); 6774} 6775 6776/* Returns 1 if to and from are (possibly multi-level) pointers to the same 6777 type or inheritance-related types, regardless of cv-quals. */ 6778 6779int 6780ptr_reasonably_similar (tree to, tree from) 6781{ 6782 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from)) 6783 { 6784 /* Any target type is similar enough to void. */ 6785 if (TREE_CODE (to) == VOID_TYPE 6786 || TREE_CODE (from) == VOID_TYPE) 6787 return 1; 6788 6789 if (TREE_CODE (to) != TREE_CODE (from)) 6790 return 0; 6791 6792 if (TREE_CODE (from) == OFFSET_TYPE 6793 && comptypes (TYPE_OFFSET_BASETYPE (to), 6794 TYPE_OFFSET_BASETYPE (from), 6795 COMPARE_BASE | COMPARE_DERIVED)) 6796 continue; 6797 6798 if (TREE_CODE (to) == VECTOR_TYPE 6799 && vector_types_convertible_p (to, from)) 6800 return 1; 6801 6802 if (TREE_CODE (to) == INTEGER_TYPE 6803 && TYPE_PRECISION (to) == TYPE_PRECISION (from)) 6804 return 1; 6805 6806 if (TREE_CODE (to) == FUNCTION_TYPE) 6807 return 1; 6808 6809 if (TREE_CODE (to) != POINTER_TYPE) 6810 return comptypes 6811 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from), 6812 COMPARE_BASE | COMPARE_DERIVED); 6813 } 6814} 6815 6816/* Return true if TO and FROM (both of which are POINTER_TYPEs or 6817 pointer-to-member types) are the same, ignoring cv-qualification at 6818 all levels. */ 6819 6820bool 6821comp_ptr_ttypes_const (tree to, tree from) 6822{ 6823 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from)) 6824 { 6825 if (TREE_CODE (to) != TREE_CODE (from)) 6826 return false; 6827 6828 if (TREE_CODE (from) == OFFSET_TYPE 6829 && same_type_p (TYPE_OFFSET_BASETYPE (from), 6830 TYPE_OFFSET_BASETYPE (to))) 6831 continue; 6832 6833 if (TREE_CODE (to) != POINTER_TYPE) 6834 return same_type_ignoring_top_level_qualifiers_p (to, from); 6835 } 6836} 6837 6838/* Returns the type qualifiers for this type, including the qualifiers on the 6839 elements for an array type. */ 6840 6841int 6842cp_type_quals (tree type) 6843{ 6844 type = strip_array_types (type); 6845 if (type == error_mark_node) 6846 return TYPE_UNQUALIFIED; 6847 return TYPE_QUALS (type); 6848} 6849 6850/* Returns nonzero if the TYPE is const from a C++ perspective: look inside 6851 arrays. */ 6852 6853bool 6854cp_type_readonly (tree type) 6855{ 6856 type = strip_array_types (type); 6857 return TYPE_READONLY (type); 6858} 6859 6860/* Returns nonzero if the TYPE contains a mutable member. */ 6861 6862bool 6863cp_has_mutable_p (tree type) 6864{ 6865 type = strip_array_types (type); 6866 6867 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type); 6868} 6869 6870/* Apply the TYPE_QUALS to the new DECL. */ 6871void 6872cp_apply_type_quals_to_decl (int type_quals, tree decl) 6873{ 6874 tree type = TREE_TYPE (decl); 6875 6876 if (type == error_mark_node) 6877 return; 6878 6879 if (TREE_CODE (type) == FUNCTION_TYPE 6880 && type_quals != TYPE_UNQUALIFIED) 6881 { 6882 /* This was an error in C++98 (cv-qualifiers cannot be added to 6883 a function type), but DR 295 makes the code well-formed by 6884 dropping the extra qualifiers. */ 6885 if (pedantic) 6886 { 6887 tree bad_type = build_qualified_type (type, type_quals); 6888 pedwarn ("ignoring %qV qualifiers added to function type %qT", 6889 bad_type, type); 6890 } 6891 6892 TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type); 6893 return; 6894 } 6895 6896 /* Avoid setting TREE_READONLY incorrectly. */ 6897 if (/* If the object has a constructor, the constructor may modify 6898 the object. */ 6899 TYPE_NEEDS_CONSTRUCTING (type) 6900 /* If the type isn't complete, we don't know yet if it will need 6901 constructing. */ 6902 || !COMPLETE_TYPE_P (type) 6903 /* If the type has a mutable component, that component might be 6904 modified. */ 6905 || TYPE_HAS_MUTABLE_P (type)) 6906 type_quals &= ~TYPE_QUAL_CONST; 6907 6908 c_apply_type_quals_to_decl (type_quals, decl); 6909} 6910 6911/* Subroutine of casts_away_constness. Make T1 and T2 point at 6912 exemplar types such that casting T1 to T2 is casting away constness 6913 if and only if there is no implicit conversion from T1 to T2. */ 6914 6915static void 6916casts_away_constness_r (tree *t1, tree *t2) 6917{ 6918 int quals1; 6919 int quals2; 6920 6921 /* [expr.const.cast] 6922 6923 For multi-level pointer to members and multi-level mixed pointers 6924 and pointers to members (conv.qual), the "member" aspect of a 6925 pointer to member level is ignored when determining if a const 6926 cv-qualifier has been cast away. */ 6927 /* [expr.const.cast] 6928 6929 For two pointer types: 6930 6931 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type 6932 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type 6933 K is min(N,M) 6934 6935 casting from X1 to X2 casts away constness if, for a non-pointer 6936 type T there does not exist an implicit conversion (clause 6937 _conv_) from: 6938 6939 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N * 6940 6941 to 6942 6943 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */ 6944 if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1)) 6945 || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2))) 6946 { 6947 *t1 = cp_build_qualified_type (void_type_node, 6948 cp_type_quals (*t1)); 6949 *t2 = cp_build_qualified_type (void_type_node, 6950 cp_type_quals (*t2)); 6951 return; 6952 } 6953 6954 quals1 = cp_type_quals (*t1); 6955 quals2 = cp_type_quals (*t2); 6956 6957 if (TYPE_PTRMEM_P (*t1)) 6958 *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1); 6959 else 6960 *t1 = TREE_TYPE (*t1); 6961 if (TYPE_PTRMEM_P (*t2)) 6962 *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2); 6963 else 6964 *t2 = TREE_TYPE (*t2); 6965 6966 casts_away_constness_r (t1, t2); 6967 *t1 = build_pointer_type (*t1); 6968 *t2 = build_pointer_type (*t2); 6969 *t1 = cp_build_qualified_type (*t1, quals1); 6970 *t2 = cp_build_qualified_type (*t2, quals2); 6971} 6972 6973/* Returns nonzero if casting from TYPE1 to TYPE2 casts away 6974 constness. */ 6975 6976static bool 6977casts_away_constness (tree t1, tree t2) 6978{ 6979 if (TREE_CODE (t2) == REFERENCE_TYPE) 6980 { 6981 /* [expr.const.cast] 6982 6983 Casting from an lvalue of type T1 to an lvalue of type T2 6984 using a reference cast casts away constness if a cast from an 6985 rvalue of type "pointer to T1" to the type "pointer to T2" 6986 casts away constness. */ 6987 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1); 6988 return casts_away_constness (build_pointer_type (t1), 6989 build_pointer_type (TREE_TYPE (t2))); 6990 } 6991 6992 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2)) 6993 /* [expr.const.cast] 6994 6995 Casting from an rvalue of type "pointer to data member of X 6996 of type T1" to the type "pointer to data member of Y of type 6997 T2" casts away constness if a cast from an rvalue of type 6998 "pointer to T1" to the type "pointer to T2" casts away 6999 constness. */ 7000 return casts_away_constness 7001 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)), 7002 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2))); 7003 7004 /* Casting away constness is only something that makes sense for 7005 pointer or reference types. */ 7006 if (TREE_CODE (t1) != POINTER_TYPE 7007 || TREE_CODE (t2) != POINTER_TYPE) 7008 return false; 7009 7010 /* Top-level qualifiers don't matter. */ 7011 t1 = TYPE_MAIN_VARIANT (t1); 7012 t2 = TYPE_MAIN_VARIANT (t2); 7013 casts_away_constness_r (&t1, &t2); 7014 if (!can_convert (t2, t1)) 7015 return true; 7016 7017 return false; 7018} 7019 7020/* If T is a REFERENCE_TYPE return the type to which T refers. 7021 Otherwise, return T itself. */ 7022 7023tree 7024non_reference (tree t) 7025{ 7026 if (TREE_CODE (t) == REFERENCE_TYPE) 7027 t = TREE_TYPE (t); 7028 return t; 7029} 7030 7031 7032/* Return nonzero if REF is an lvalue valid for this language; 7033 otherwise, print an error message and return zero. USE says 7034 how the lvalue is being used and so selects the error message. */ 7035 7036int 7037lvalue_or_else (tree ref, enum lvalue_use use) 7038{ 7039 int win = lvalue_p (ref); 7040 7041 if (!win) 7042 lvalue_error (use); 7043 7044 return win; 7045} 7046