typeck.c revision 259268
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 (VOID_TYPE_P (t)) 2338 { 2339 /* A pointer to incomplete type (other than cv void) can be 2340 dereferenced [expr.unary.op]/1 */ 2341 error ("%qT is not a pointer-to-object type", type); 2342 return error_mark_node; 2343 } 2344 else if (TREE_CODE (pointer) == ADDR_EXPR 2345 && same_type_p (t, TREE_TYPE (TREE_OPERAND (pointer, 0)))) 2346 /* The POINTER was something like `&x'. We simplify `*&x' to 2347 `x'. */ 2348 return TREE_OPERAND (pointer, 0); 2349 else 2350 { 2351 tree ref = build1 (INDIRECT_REF, t, pointer); 2352 2353 /* We *must* set TREE_READONLY when dereferencing a pointer to const, 2354 so that we get the proper error message if the result is used 2355 to assign to. Also, &* is supposed to be a no-op. */ 2356 TREE_READONLY (ref) = CP_TYPE_CONST_P (t); 2357 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t); 2358 TREE_SIDE_EFFECTS (ref) 2359 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (pointer)); 2360 return ref; 2361 } 2362 } 2363 /* `pointer' won't be an error_mark_node if we were given a 2364 pointer to member, so it's cool to check for this here. */ 2365 else if (TYPE_PTR_TO_MEMBER_P (type)) 2366 error ("invalid use of %qs on pointer to member", errorstring); 2367 else if (pointer != error_mark_node) 2368 { 2369 if (errorstring) 2370 error ("invalid type argument of %qs", errorstring); 2371 else 2372 error ("invalid type argument"); 2373 } 2374 return error_mark_node; 2375} 2376 2377/* This handles expressions of the form "a[i]", which denotes 2378 an array reference. 2379 2380 This is logically equivalent in C to *(a+i), but we may do it differently. 2381 If A is a variable or a member, we generate a primitive ARRAY_REF. 2382 This avoids forcing the array out of registers, and can work on 2383 arrays that are not lvalues (for example, members of structures returned 2384 by functions). 2385 2386 If INDEX is of some user-defined type, it must be converted to 2387 integer type. Otherwise, to make a compatible PLUS_EXPR, it 2388 will inherit the type of the array, which will be some pointer type. */ 2389 2390tree 2391build_array_ref (tree array, tree idx) 2392{ 2393 if (idx == 0) 2394 { 2395 error ("subscript missing in array reference"); 2396 return error_mark_node; 2397 } 2398 2399 if (TREE_TYPE (array) == error_mark_node 2400 || TREE_TYPE (idx) == error_mark_node) 2401 return error_mark_node; 2402 2403 /* If ARRAY is a COMPOUND_EXPR or COND_EXPR, move our reference 2404 inside it. */ 2405 switch (TREE_CODE (array)) 2406 { 2407 case COMPOUND_EXPR: 2408 { 2409 tree value = build_array_ref (TREE_OPERAND (array, 1), idx); 2410 return build2 (COMPOUND_EXPR, TREE_TYPE (value), 2411 TREE_OPERAND (array, 0), value); 2412 } 2413 2414 case COND_EXPR: 2415 return build_conditional_expr 2416 (TREE_OPERAND (array, 0), 2417 build_array_ref (TREE_OPERAND (array, 1), idx), 2418 build_array_ref (TREE_OPERAND (array, 2), idx)); 2419 2420 default: 2421 break; 2422 } 2423 2424 if (TREE_CODE (TREE_TYPE (array)) == ARRAY_TYPE) 2425 { 2426 tree rval, type; 2427 2428 warn_array_subscript_with_type_char (idx); 2429 2430 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (idx))) 2431 { 2432 error ("array subscript is not an integer"); 2433 return error_mark_node; 2434 } 2435 2436 /* Apply integral promotions *after* noticing character types. 2437 (It is unclear why we do these promotions -- the standard 2438 does not say that we should. In fact, the natural thing would 2439 seem to be to convert IDX to ptrdiff_t; we're performing 2440 pointer arithmetic.) */ 2441 idx = perform_integral_promotions (idx); 2442 2443 /* An array that is indexed by a non-constant 2444 cannot be stored in a register; we must be able to do 2445 address arithmetic on its address. 2446 Likewise an array of elements of variable size. */ 2447 if (TREE_CODE (idx) != INTEGER_CST 2448 || (COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (array))) 2449 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (TREE_TYPE (array)))) 2450 != INTEGER_CST))) 2451 { 2452 if (!cxx_mark_addressable (array)) 2453 return error_mark_node; 2454 } 2455 2456 /* An array that is indexed by a constant value which is not within 2457 the array bounds cannot be stored in a register either; because we 2458 would get a crash in store_bit_field/extract_bit_field when trying 2459 to access a non-existent part of the register. */ 2460 if (TREE_CODE (idx) == INTEGER_CST 2461 && TYPE_DOMAIN (TREE_TYPE (array)) 2462 && ! int_fits_type_p (idx, TYPE_DOMAIN (TREE_TYPE (array)))) 2463 { 2464 if (!cxx_mark_addressable (array)) 2465 return error_mark_node; 2466 } 2467 2468 if (pedantic && !lvalue_p (array)) 2469 pedwarn ("ISO C++ forbids subscripting non-lvalue array"); 2470 2471 /* Note in C++ it is valid to subscript a `register' array, since 2472 it is valid to take the address of something with that 2473 storage specification. */ 2474 if (extra_warnings) 2475 { 2476 tree foo = array; 2477 while (TREE_CODE (foo) == COMPONENT_REF) 2478 foo = TREE_OPERAND (foo, 0); 2479 if (TREE_CODE (foo) == VAR_DECL && DECL_REGISTER (foo)) 2480 warning (OPT_Wextra, "subscripting array declared %<register%>"); 2481 } 2482 2483 type = TREE_TYPE (TREE_TYPE (array)); 2484 rval = build4 (ARRAY_REF, type, array, idx, NULL_TREE, NULL_TREE); 2485 /* Array ref is const/volatile if the array elements are 2486 or if the array is.. */ 2487 TREE_READONLY (rval) 2488 |= (CP_TYPE_CONST_P (type) | TREE_READONLY (array)); 2489 TREE_SIDE_EFFECTS (rval) 2490 |= (CP_TYPE_VOLATILE_P (type) | TREE_SIDE_EFFECTS (array)); 2491 TREE_THIS_VOLATILE (rval) 2492 |= (CP_TYPE_VOLATILE_P (type) | TREE_THIS_VOLATILE (array)); 2493 return require_complete_type (fold_if_not_in_template (rval)); 2494 } 2495 2496 { 2497 tree ar = default_conversion (array); 2498 tree ind = default_conversion (idx); 2499 2500 /* Put the integer in IND to simplify error checking. */ 2501 if (TREE_CODE (TREE_TYPE (ar)) == INTEGER_TYPE) 2502 { 2503 tree temp = ar; 2504 ar = ind; 2505 ind = temp; 2506 } 2507 2508 if (ar == error_mark_node) 2509 return ar; 2510 2511 if (TREE_CODE (TREE_TYPE (ar)) != POINTER_TYPE) 2512 { 2513 error ("subscripted value is neither array nor pointer"); 2514 return error_mark_node; 2515 } 2516 if (TREE_CODE (TREE_TYPE (ind)) != INTEGER_TYPE) 2517 { 2518 error ("array subscript is not an integer"); 2519 return error_mark_node; 2520 } 2521 2522 return build_indirect_ref (cp_build_binary_op (PLUS_EXPR, ar, ind), 2523 "array indexing"); 2524 } 2525} 2526 2527/* Resolve a pointer to member function. INSTANCE is the object 2528 instance to use, if the member points to a virtual member. 2529 2530 This used to avoid checking for virtual functions if basetype 2531 has no virtual functions, according to an earlier ANSI draft. 2532 With the final ISO C++ rules, such an optimization is 2533 incorrect: A pointer to a derived member can be static_cast 2534 to pointer-to-base-member, as long as the dynamic object 2535 later has the right member. */ 2536 2537tree 2538get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function) 2539{ 2540 if (TREE_CODE (function) == OFFSET_REF) 2541 function = TREE_OPERAND (function, 1); 2542 2543 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (function))) 2544 { 2545 tree idx, delta, e1, e2, e3, vtbl, basetype; 2546 tree fntype = TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (function)); 2547 2548 tree instance_ptr = *instance_ptrptr; 2549 tree instance_save_expr = 0; 2550 if (instance_ptr == error_mark_node) 2551 { 2552 if (TREE_CODE (function) == PTRMEM_CST) 2553 { 2554 /* Extracting the function address from a pmf is only 2555 allowed with -Wno-pmf-conversions. It only works for 2556 pmf constants. */ 2557 e1 = build_addr_func (PTRMEM_CST_MEMBER (function)); 2558 e1 = convert (fntype, e1); 2559 return e1; 2560 } 2561 else 2562 { 2563 error ("object missing in use of %qE", function); 2564 return error_mark_node; 2565 } 2566 } 2567 2568 if (TREE_SIDE_EFFECTS (instance_ptr)) 2569 instance_ptr = instance_save_expr = save_expr (instance_ptr); 2570 2571 if (TREE_SIDE_EFFECTS (function)) 2572 function = save_expr (function); 2573 2574 /* Start by extracting all the information from the PMF itself. */ 2575 e3 = pfn_from_ptrmemfunc (function); 2576 delta = build_ptrmemfunc_access_expr (function, delta_identifier); 2577 idx = build1 (NOP_EXPR, vtable_index_type, e3); 2578 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION) 2579 { 2580 case ptrmemfunc_vbit_in_pfn: 2581 e1 = cp_build_binary_op (BIT_AND_EXPR, idx, integer_one_node); 2582 idx = cp_build_binary_op (MINUS_EXPR, idx, integer_one_node); 2583 break; 2584 2585 case ptrmemfunc_vbit_in_delta: 2586 e1 = cp_build_binary_op (BIT_AND_EXPR, delta, integer_one_node); 2587 delta = cp_build_binary_op (RSHIFT_EXPR, delta, integer_one_node); 2588 break; 2589 2590 default: 2591 gcc_unreachable (); 2592 } 2593 2594 /* Convert down to the right base before using the instance. A 2595 special case is that in a pointer to member of class C, C may 2596 be incomplete. In that case, the function will of course be 2597 a member of C, and no conversion is required. In fact, 2598 lookup_base will fail in that case, because incomplete 2599 classes do not have BINFOs. */ 2600 basetype = TYPE_METHOD_BASETYPE (TREE_TYPE (fntype)); 2601 if (!same_type_ignoring_top_level_qualifiers_p 2602 (basetype, TREE_TYPE (TREE_TYPE (instance_ptr)))) 2603 { 2604 basetype = lookup_base (TREE_TYPE (TREE_TYPE (instance_ptr)), 2605 basetype, ba_check, NULL); 2606 instance_ptr = build_base_path (PLUS_EXPR, instance_ptr, basetype, 2607 1); 2608 if (instance_ptr == error_mark_node) 2609 return error_mark_node; 2610 } 2611 /* ...and then the delta in the PMF. */ 2612 instance_ptr = build2 (PLUS_EXPR, TREE_TYPE (instance_ptr), 2613 instance_ptr, delta); 2614 2615 /* Hand back the adjusted 'this' argument to our caller. */ 2616 *instance_ptrptr = instance_ptr; 2617 2618 /* Next extract the vtable pointer from the object. */ 2619 vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node), 2620 instance_ptr); 2621 vtbl = build_indirect_ref (vtbl, NULL); 2622 2623 /* Finally, extract the function pointer from the vtable. */ 2624 e2 = fold_build2 (PLUS_EXPR, TREE_TYPE (vtbl), vtbl, idx); 2625 e2 = build_indirect_ref (e2, NULL); 2626 TREE_CONSTANT (e2) = 1; 2627 TREE_INVARIANT (e2) = 1; 2628 2629 /* When using function descriptors, the address of the 2630 vtable entry is treated as a function pointer. */ 2631 if (TARGET_VTABLE_USES_DESCRIPTORS) 2632 e2 = build1 (NOP_EXPR, TREE_TYPE (e2), 2633 build_unary_op (ADDR_EXPR, e2, /*noconvert=*/1)); 2634 2635 TREE_TYPE (e2) = TREE_TYPE (e3); 2636 e1 = build_conditional_expr (e1, e2, e3); 2637 2638 /* Make sure this doesn't get evaluated first inside one of the 2639 branches of the COND_EXPR. */ 2640 if (instance_save_expr) 2641 e1 = build2 (COMPOUND_EXPR, TREE_TYPE (e1), 2642 instance_save_expr, e1); 2643 2644 function = e1; 2645 } 2646 return function; 2647} 2648 2649tree 2650build_function_call (tree function, tree params) 2651{ 2652 tree fntype, fndecl; 2653 tree coerced_params; 2654 tree name = NULL_TREE; 2655 int is_method; 2656 tree original = function; 2657 2658 /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF 2659 expressions, like those used for ObjC messenger dispatches. */ 2660 function = objc_rewrite_function_call (function, params); 2661 2662 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 2663 Strip such NOP_EXPRs, since FUNCTION is used in non-lvalue context. */ 2664 if (TREE_CODE (function) == NOP_EXPR 2665 && TREE_TYPE (function) == TREE_TYPE (TREE_OPERAND (function, 0))) 2666 function = TREE_OPERAND (function, 0); 2667 2668 if (TREE_CODE (function) == FUNCTION_DECL) 2669 { 2670 name = DECL_NAME (function); 2671 2672 mark_used (function); 2673 fndecl = function; 2674 2675 /* Convert anything with function type to a pointer-to-function. */ 2676 if (pedantic && DECL_MAIN_P (function)) 2677 pedwarn ("ISO C++ forbids calling %<::main%> from within program"); 2678 2679 /* Differs from default_conversion by not setting TREE_ADDRESSABLE 2680 (because calling an inline function does not mean the function 2681 needs to be separately compiled). */ 2682 2683 if (DECL_INLINE (function)) 2684 function = inline_conversion (function); 2685 else 2686 function = build_addr_func (function); 2687 } 2688 else 2689 { 2690 fndecl = NULL_TREE; 2691 2692 function = build_addr_func (function); 2693 } 2694 2695 if (function == error_mark_node) 2696 return error_mark_node; 2697 2698 fntype = TREE_TYPE (function); 2699 2700 if (TYPE_PTRMEMFUNC_P (fntype)) 2701 { 2702 error ("must use %<.*%> or %<->*%> to call pointer-to-member " 2703 "function in %<%E (...)%>", 2704 original); 2705 return error_mark_node; 2706 } 2707 2708 is_method = (TREE_CODE (fntype) == POINTER_TYPE 2709 && TREE_CODE (TREE_TYPE (fntype)) == METHOD_TYPE); 2710 2711 if (!((TREE_CODE (fntype) == POINTER_TYPE 2712 && TREE_CODE (TREE_TYPE (fntype)) == FUNCTION_TYPE) 2713 || is_method 2714 || TREE_CODE (function) == TEMPLATE_ID_EXPR)) 2715 { 2716 error ("%qE cannot be used as a function", original); 2717 return error_mark_node; 2718 } 2719 2720 /* fntype now gets the type of function pointed to. */ 2721 fntype = TREE_TYPE (fntype); 2722 2723 /* Convert the parameters to the types declared in the 2724 function prototype, or apply default promotions. */ 2725 2726 coerced_params = convert_arguments (TYPE_ARG_TYPES (fntype), 2727 params, fndecl, LOOKUP_NORMAL); 2728 if (coerced_params == error_mark_node) 2729 return error_mark_node; 2730 2731 /* Check for errors in format strings and inappropriately 2732 null parameters. */ 2733 2734 check_function_arguments (TYPE_ATTRIBUTES (fntype), coerced_params, 2735 TYPE_ARG_TYPES (fntype)); 2736 2737 return build_cxx_call (function, coerced_params); 2738} 2739 2740/* Convert the actual parameter expressions in the list VALUES 2741 to the types in the list TYPELIST. 2742 If parmdecls is exhausted, or when an element has NULL as its type, 2743 perform the default conversions. 2744 2745 NAME is an IDENTIFIER_NODE or 0. It is used only for error messages. 2746 2747 This is also where warnings about wrong number of args are generated. 2748 2749 Return a list of expressions for the parameters as converted. 2750 2751 Both VALUES and the returned value are chains of TREE_LIST nodes 2752 with the elements of the list in the TREE_VALUE slots of those nodes. 2753 2754 In C++, unspecified trailing parameters can be filled in with their 2755 default arguments, if such were specified. Do so here. */ 2756 2757static tree 2758convert_arguments (tree typelist, tree values, tree fndecl, int flags) 2759{ 2760 tree typetail, valtail; 2761 tree result = NULL_TREE; 2762 const char *called_thing = 0; 2763 int i = 0; 2764 2765 /* Argument passing is always copy-initialization. */ 2766 flags |= LOOKUP_ONLYCONVERTING; 2767 2768 if (fndecl) 2769 { 2770 if (TREE_CODE (TREE_TYPE (fndecl)) == METHOD_TYPE) 2771 { 2772 if (DECL_NAME (fndecl) == NULL_TREE 2773 || IDENTIFIER_HAS_TYPE_VALUE (DECL_NAME (fndecl))) 2774 called_thing = "constructor"; 2775 else 2776 called_thing = "member function"; 2777 } 2778 else 2779 called_thing = "function"; 2780 } 2781 2782 for (valtail = values, typetail = typelist; 2783 valtail; 2784 valtail = TREE_CHAIN (valtail), i++) 2785 { 2786 tree type = typetail ? TREE_VALUE (typetail) : 0; 2787 tree val = TREE_VALUE (valtail); 2788 2789 if (val == error_mark_node || type == error_mark_node) 2790 return error_mark_node; 2791 2792 if (type == void_type_node) 2793 { 2794 if (fndecl) 2795 { 2796 error ("too many arguments to %s %q+#D", called_thing, fndecl); 2797 error ("at this point in file"); 2798 } 2799 else 2800 error ("too many arguments to function"); 2801 /* In case anybody wants to know if this argument 2802 list is valid. */ 2803 if (result) 2804 TREE_TYPE (tree_last (result)) = error_mark_node; 2805 break; 2806 } 2807 2808 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 2809 Strip such NOP_EXPRs, since VAL is used in non-lvalue context. */ 2810 if (TREE_CODE (val) == NOP_EXPR 2811 && TREE_TYPE (val) == TREE_TYPE (TREE_OPERAND (val, 0)) 2812 && (type == 0 || TREE_CODE (type) != REFERENCE_TYPE)) 2813 val = TREE_OPERAND (val, 0); 2814 2815 if (type == 0 || TREE_CODE (type) != REFERENCE_TYPE) 2816 { 2817 if (TREE_CODE (TREE_TYPE (val)) == ARRAY_TYPE 2818 || TREE_CODE (TREE_TYPE (val)) == FUNCTION_TYPE 2819 || TREE_CODE (TREE_TYPE (val)) == METHOD_TYPE) 2820 val = decay_conversion (val); 2821 } 2822 2823 if (val == error_mark_node) 2824 return error_mark_node; 2825 2826 if (type != 0) 2827 { 2828 /* Formal parm type is specified by a function prototype. */ 2829 tree parmval; 2830 2831 if (!COMPLETE_TYPE_P (complete_type (type))) 2832 { 2833 if (fndecl) 2834 error ("parameter %P of %qD has incomplete type %qT", 2835 i, fndecl, type); 2836 else 2837 error ("parameter %P has incomplete type %qT", i, type); 2838 parmval = error_mark_node; 2839 } 2840 else 2841 { 2842 parmval = convert_for_initialization 2843 (NULL_TREE, type, val, flags, 2844 "argument passing", fndecl, i); 2845 parmval = convert_for_arg_passing (type, parmval); 2846 } 2847 2848 if (parmval == error_mark_node) 2849 return error_mark_node; 2850 2851 result = tree_cons (NULL_TREE, parmval, result); 2852 } 2853 else 2854 { 2855 if (fndecl && DECL_BUILT_IN (fndecl) 2856 && DECL_FUNCTION_CODE (fndecl) == BUILT_IN_CONSTANT_P) 2857 /* Don't do ellipsis conversion for __built_in_constant_p 2858 as this will result in spurious warnings for non-POD 2859 types. */ 2860 val = require_complete_type (val); 2861 else 2862 val = convert_arg_to_ellipsis (val); 2863 2864 result = tree_cons (NULL_TREE, val, result); 2865 } 2866 2867 if (typetail) 2868 typetail = TREE_CHAIN (typetail); 2869 } 2870 2871 if (typetail != 0 && typetail != void_list_node) 2872 { 2873 /* See if there are default arguments that can be used. */ 2874 if (TREE_PURPOSE (typetail) 2875 && TREE_CODE (TREE_PURPOSE (typetail)) != DEFAULT_ARG) 2876 { 2877 for (; typetail != void_list_node; ++i) 2878 { 2879 tree parmval 2880 = convert_default_arg (TREE_VALUE (typetail), 2881 TREE_PURPOSE (typetail), 2882 fndecl, i); 2883 2884 if (parmval == error_mark_node) 2885 return error_mark_node; 2886 2887 result = tree_cons (0, parmval, result); 2888 typetail = TREE_CHAIN (typetail); 2889 /* ends with `...'. */ 2890 if (typetail == NULL_TREE) 2891 break; 2892 } 2893 } 2894 else 2895 { 2896 if (fndecl) 2897 { 2898 error ("too few arguments to %s %q+#D", called_thing, fndecl); 2899 error ("at this point in file"); 2900 } 2901 else 2902 error ("too few arguments to function"); 2903 return error_mark_node; 2904 } 2905 } 2906 2907 return nreverse (result); 2908} 2909 2910/* Build a binary-operation expression, after performing default 2911 conversions on the operands. CODE is the kind of expression to build. */ 2912 2913tree 2914build_x_binary_op (enum tree_code code, tree arg1, enum tree_code arg1_code, 2915 tree arg2, enum tree_code arg2_code, bool *overloaded_p) 2916{ 2917 tree orig_arg1; 2918 tree orig_arg2; 2919 tree expr; 2920 2921 orig_arg1 = arg1; 2922 orig_arg2 = arg2; 2923 2924 if (processing_template_decl) 2925 { 2926 if (type_dependent_expression_p (arg1) 2927 || type_dependent_expression_p (arg2)) 2928 return build_min_nt (code, arg1, arg2); 2929 arg1 = build_non_dependent_expr (arg1); 2930 arg2 = build_non_dependent_expr (arg2); 2931 } 2932 2933 if (code == DOTSTAR_EXPR) 2934 expr = build_m_component_ref (arg1, arg2); 2935 else 2936 expr = build_new_op (code, LOOKUP_NORMAL, arg1, arg2, NULL_TREE, 2937 overloaded_p); 2938 2939 /* Check for cases such as x+y<<z which users are likely to 2940 misinterpret. But don't warn about obj << x + y, since that is a 2941 common idiom for I/O. */ 2942 if (warn_parentheses 2943 && !processing_template_decl 2944 && !error_operand_p (arg1) 2945 && !error_operand_p (arg2) 2946 && (code != LSHIFT_EXPR 2947 || !IS_AGGR_TYPE (TREE_TYPE (arg1)))) 2948 warn_about_parentheses (code, arg1_code, arg2_code); 2949 2950 if (processing_template_decl && expr != error_mark_node) 2951 return build_min_non_dep (code, expr, orig_arg1, orig_arg2); 2952 2953 return expr; 2954} 2955 2956/* Build a binary-operation expression without default conversions. 2957 CODE is the kind of expression to build. 2958 This function differs from `build' in several ways: 2959 the data type of the result is computed and recorded in it, 2960 warnings are generated if arg data types are invalid, 2961 special handling for addition and subtraction of pointers is known, 2962 and some optimization is done (operations on narrow ints 2963 are done in the narrower type when that gives the same result). 2964 Constant folding is also done before the result is returned. 2965 2966 Note that the operands will never have enumeral types 2967 because either they have just had the default conversions performed 2968 or they have both just been converted to some other type in which 2969 the arithmetic is to be done. 2970 2971 C++: must do special pointer arithmetic when implementing 2972 multiple inheritance, and deal with pointer to member functions. */ 2973 2974tree 2975build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1, 2976 int convert_p ATTRIBUTE_UNUSED) 2977{ 2978 tree op0, op1; 2979 enum tree_code code0, code1; 2980 tree type0, type1; 2981 const char *invalid_op_diag; 2982 2983 /* Expression code to give to the expression when it is built. 2984 Normally this is CODE, which is what the caller asked for, 2985 but in some special cases we change it. */ 2986 enum tree_code resultcode = code; 2987 2988 /* Data type in which the computation is to be performed. 2989 In the simplest cases this is the common type of the arguments. */ 2990 tree result_type = NULL; 2991 2992 /* Nonzero means operands have already been type-converted 2993 in whatever way is necessary. 2994 Zero means they need to be converted to RESULT_TYPE. */ 2995 int converted = 0; 2996 2997 /* Nonzero means create the expression with this type, rather than 2998 RESULT_TYPE. */ 2999 tree build_type = 0; 3000 3001 /* Nonzero means after finally constructing the expression 3002 convert it to this type. */ 3003 tree final_type = 0; 3004 3005 tree result; 3006 3007 /* Nonzero if this is an operation like MIN or MAX which can 3008 safely be computed in short if both args are promoted shorts. 3009 Also implies COMMON. 3010 -1 indicates a bitwise operation; this makes a difference 3011 in the exact conditions for when it is safe to do the operation 3012 in a narrower mode. */ 3013 int shorten = 0; 3014 3015 /* Nonzero if this is a comparison operation; 3016 if both args are promoted shorts, compare the original shorts. 3017 Also implies COMMON. */ 3018 int short_compare = 0; 3019 3020 /* Nonzero if this is a right-shift operation, which can be computed on the 3021 original short and then promoted if the operand is a promoted short. */ 3022 int short_shift = 0; 3023 3024 /* Nonzero means set RESULT_TYPE to the common type of the args. */ 3025 int common = 0; 3026 3027 /* True if both operands have arithmetic type. */ 3028 bool arithmetic_types_p; 3029 3030 /* Apply default conversions. */ 3031 op0 = orig_op0; 3032 op1 = orig_op1; 3033 3034 if (code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR 3035 || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR 3036 || code == TRUTH_XOR_EXPR) 3037 { 3038 if (!really_overloaded_fn (op0)) 3039 op0 = decay_conversion (op0); 3040 if (!really_overloaded_fn (op1)) 3041 op1 = decay_conversion (op1); 3042 } 3043 else 3044 { 3045 if (!really_overloaded_fn (op0)) 3046 op0 = default_conversion (op0); 3047 if (!really_overloaded_fn (op1)) 3048 op1 = default_conversion (op1); 3049 } 3050 3051 /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */ 3052 STRIP_TYPE_NOPS (op0); 3053 STRIP_TYPE_NOPS (op1); 3054 3055 /* DTRT if one side is an overloaded function, but complain about it. */ 3056 if (type_unknown_p (op0)) 3057 { 3058 tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none); 3059 if (t != error_mark_node) 3060 { 3061 pedwarn ("assuming cast to type %qT from overloaded function", 3062 TREE_TYPE (t)); 3063 op0 = t; 3064 } 3065 } 3066 if (type_unknown_p (op1)) 3067 { 3068 tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none); 3069 if (t != error_mark_node) 3070 { 3071 pedwarn ("assuming cast to type %qT from overloaded function", 3072 TREE_TYPE (t)); 3073 op1 = t; 3074 } 3075 } 3076 3077 type0 = TREE_TYPE (op0); 3078 type1 = TREE_TYPE (op1); 3079 3080 /* The expression codes of the data types of the arguments tell us 3081 whether the arguments are integers, floating, pointers, etc. */ 3082 code0 = TREE_CODE (type0); 3083 code1 = TREE_CODE (type1); 3084 3085 /* If an error was already reported for one of the arguments, 3086 avoid reporting another error. */ 3087 3088 if (code0 == ERROR_MARK || code1 == ERROR_MARK) 3089 return error_mark_node; 3090 3091 if ((invalid_op_diag 3092 = targetm.invalid_binary_op (code, type0, type1))) 3093 { 3094 error (invalid_op_diag); 3095 return error_mark_node; 3096 } 3097 3098 switch (code) 3099 { 3100 case MINUS_EXPR: 3101 /* Subtraction of two similar pointers. 3102 We must subtract them as integers, then divide by object size. */ 3103 if (code0 == POINTER_TYPE && code1 == POINTER_TYPE 3104 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type0), 3105 TREE_TYPE (type1))) 3106 return pointer_diff (op0, op1, common_type (type0, type1)); 3107 /* In all other cases except pointer - int, the usual arithmetic 3108 rules aply. */ 3109 else if (!(code0 == POINTER_TYPE && code1 == INTEGER_TYPE)) 3110 { 3111 common = 1; 3112 break; 3113 } 3114 /* The pointer - int case is just like pointer + int; fall 3115 through. */ 3116 case PLUS_EXPR: 3117 if ((code0 == POINTER_TYPE || code1 == POINTER_TYPE) 3118 && (code0 == INTEGER_TYPE || code1 == INTEGER_TYPE)) 3119 { 3120 tree ptr_operand; 3121 tree int_operand; 3122 ptr_operand = ((code0 == POINTER_TYPE) ? op0 : op1); 3123 int_operand = ((code0 == INTEGER_TYPE) ? op0 : op1); 3124 if (processing_template_decl) 3125 { 3126 result_type = TREE_TYPE (ptr_operand); 3127 break; 3128 } 3129 return cp_pointer_int_sum (code, 3130 ptr_operand, 3131 int_operand); 3132 } 3133 common = 1; 3134 break; 3135 3136 case MULT_EXPR: 3137 common = 1; 3138 break; 3139 3140 case TRUNC_DIV_EXPR: 3141 case CEIL_DIV_EXPR: 3142 case FLOOR_DIV_EXPR: 3143 case ROUND_DIV_EXPR: 3144 case EXACT_DIV_EXPR: 3145 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE 3146 || code0 == COMPLEX_TYPE || code0 == VECTOR_TYPE) 3147 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE 3148 || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)) 3149 { 3150 enum tree_code tcode0 = code0, tcode1 = code1; 3151 3152 if (TREE_CODE (op1) == INTEGER_CST && integer_zerop (op1)) 3153 warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0%>", op0); 3154 else if (TREE_CODE (op1) == REAL_CST && real_zerop (op1)) 3155 warning (OPT_Wdiv_by_zero, "division by zero in %<%E / 0.%>", op0); 3156 3157 if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE) 3158 tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0))); 3159 if (tcode1 == COMPLEX_TYPE || tcode1 == VECTOR_TYPE) 3160 tcode1 = TREE_CODE (TREE_TYPE (TREE_TYPE (op1))); 3161 3162 if (!(tcode0 == INTEGER_TYPE && tcode1 == INTEGER_TYPE)) 3163 resultcode = RDIV_EXPR; 3164 else 3165 /* When dividing two signed integers, we have to promote to int. 3166 unless we divide by a constant != -1. Note that default 3167 conversion will have been performed on the operands at this 3168 point, so we have to dig out the original type to find out if 3169 it was unsigned. */ 3170 shorten = ((TREE_CODE (op0) == NOP_EXPR 3171 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0)))) 3172 || (TREE_CODE (op1) == INTEGER_CST 3173 && ! integer_all_onesp (op1))); 3174 3175 common = 1; 3176 } 3177 break; 3178 3179 case BIT_AND_EXPR: 3180 case BIT_IOR_EXPR: 3181 case BIT_XOR_EXPR: 3182 if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3183 || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)) 3184 shorten = -1; 3185 break; 3186 3187 case TRUNC_MOD_EXPR: 3188 case FLOOR_MOD_EXPR: 3189 if (code1 == INTEGER_TYPE && integer_zerop (op1)) 3190 warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0%>", op0); 3191 else if (code1 == REAL_TYPE && real_zerop (op1)) 3192 warning (OPT_Wdiv_by_zero, "division by zero in %<%E %% 0.%>", op0); 3193 3194 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3195 { 3196 /* Although it would be tempting to shorten always here, that loses 3197 on some targets, since the modulo instruction is undefined if the 3198 quotient can't be represented in the computation mode. We shorten 3199 only if unsigned or if dividing by something we know != -1. */ 3200 shorten = ((TREE_CODE (op0) == NOP_EXPR 3201 && TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (op0, 0)))) 3202 || (TREE_CODE (op1) == INTEGER_CST 3203 && ! integer_all_onesp (op1))); 3204 common = 1; 3205 } 3206 break; 3207 3208 case TRUTH_ANDIF_EXPR: 3209 case TRUTH_ORIF_EXPR: 3210 case TRUTH_AND_EXPR: 3211 case TRUTH_OR_EXPR: 3212 result_type = boolean_type_node; 3213 break; 3214 3215 /* Shift operations: result has same type as first operand; 3216 always convert second operand to int. 3217 Also set SHORT_SHIFT if shifting rightward. */ 3218 3219 case RSHIFT_EXPR: 3220 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3221 { 3222 result_type = type0; 3223 if (TREE_CODE (op1) == INTEGER_CST) 3224 { 3225 if (tree_int_cst_lt (op1, integer_zero_node)) 3226 warning (0, "right shift count is negative"); 3227 else 3228 { 3229 if (! integer_zerop (op1)) 3230 short_shift = 1; 3231 if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) 3232 warning (0, "right shift count >= width of type"); 3233 } 3234 } 3235 /* Convert the shift-count to an integer, regardless of 3236 size of value being shifted. */ 3237 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node) 3238 op1 = cp_convert (integer_type_node, op1); 3239 /* Avoid converting op1 to result_type later. */ 3240 converted = 1; 3241 } 3242 break; 3243 3244 case LSHIFT_EXPR: 3245 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3246 { 3247 result_type = type0; 3248 if (TREE_CODE (op1) == INTEGER_CST) 3249 { 3250 if (tree_int_cst_lt (op1, integer_zero_node)) 3251 warning (0, "left shift count is negative"); 3252 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) 3253 warning (0, "left shift count >= width of type"); 3254 } 3255 /* Convert the shift-count to an integer, regardless of 3256 size of value being shifted. */ 3257 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node) 3258 op1 = cp_convert (integer_type_node, op1); 3259 /* Avoid converting op1 to result_type later. */ 3260 converted = 1; 3261 } 3262 break; 3263 3264 case RROTATE_EXPR: 3265 case LROTATE_EXPR: 3266 if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) 3267 { 3268 result_type = type0; 3269 if (TREE_CODE (op1) == INTEGER_CST) 3270 { 3271 if (tree_int_cst_lt (op1, integer_zero_node)) 3272 warning (0, "%s rotate count is negative", 3273 (code == LROTATE_EXPR) ? "left" : "right"); 3274 else if (compare_tree_int (op1, TYPE_PRECISION (type0)) >= 0) 3275 warning (0, "%s rotate count >= width of type", 3276 (code == LROTATE_EXPR) ? "left" : "right"); 3277 } 3278 /* Convert the shift-count to an integer, regardless of 3279 size of value being shifted. */ 3280 if (TYPE_MAIN_VARIANT (TREE_TYPE (op1)) != integer_type_node) 3281 op1 = cp_convert (integer_type_node, op1); 3282 } 3283 break; 3284 3285 case EQ_EXPR: 3286 case NE_EXPR: 3287 if (code0 == REAL_TYPE || code1 == REAL_TYPE) 3288 warning (OPT_Wfloat_equal, 3289 "comparing floating point with == or != is unsafe"); 3290 if ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1)) 3291 || (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0))) 3292 warning (OPT_Waddress, 3293 "comparison with string literal results in unspecified behaviour"); 3294 3295 build_type = boolean_type_node; 3296 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE 3297 || code0 == COMPLEX_TYPE) 3298 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE 3299 || code1 == COMPLEX_TYPE)) 3300 short_compare = 1; 3301 else if ((code0 == POINTER_TYPE && code1 == POINTER_TYPE) 3302 || (TYPE_PTRMEM_P (type0) && TYPE_PTRMEM_P (type1))) 3303 result_type = composite_pointer_type (type0, type1, op0, op1, 3304 "comparison"); 3305 else if ((code0 == POINTER_TYPE || TYPE_PTRMEM_P (type0)) 3306 && null_ptr_cst_p (op1)) 3307 result_type = type0; 3308 else if ((code1 == POINTER_TYPE || TYPE_PTRMEM_P (type1)) 3309 && null_ptr_cst_p (op0)) 3310 result_type = type1; 3311 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE) 3312 { 3313 result_type = type0; 3314 error ("ISO C++ forbids comparison between pointer and integer"); 3315 } 3316 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE) 3317 { 3318 result_type = type1; 3319 error ("ISO C++ forbids comparison between pointer and integer"); 3320 } 3321 else if (TYPE_PTRMEMFUNC_P (type0) && null_ptr_cst_p (op1)) 3322 { 3323 op0 = build_ptrmemfunc_access_expr (op0, pfn_identifier); 3324 op1 = cp_convert (TREE_TYPE (op0), integer_zero_node); 3325 result_type = TREE_TYPE (op0); 3326 } 3327 else if (TYPE_PTRMEMFUNC_P (type1) && null_ptr_cst_p (op0)) 3328 return cp_build_binary_op (code, op1, op0); 3329 else if (TYPE_PTRMEMFUNC_P (type0) && TYPE_PTRMEMFUNC_P (type1) 3330 && same_type_p (type0, type1)) 3331 { 3332 /* E will be the final comparison. */ 3333 tree e; 3334 /* E1 and E2 are for scratch. */ 3335 tree e1; 3336 tree e2; 3337 tree pfn0; 3338 tree pfn1; 3339 tree delta0; 3340 tree delta1; 3341 3342 if (TREE_SIDE_EFFECTS (op0)) 3343 op0 = save_expr (op0); 3344 if (TREE_SIDE_EFFECTS (op1)) 3345 op1 = save_expr (op1); 3346 3347 /* We generate: 3348 3349 (op0.pfn == op1.pfn 3350 && (!op0.pfn || op0.delta == op1.delta)) 3351 3352 The reason for the `!op0.pfn' bit is that a NULL 3353 pointer-to-member is any member with a zero PFN; the 3354 DELTA field is unspecified. */ 3355 pfn0 = pfn_from_ptrmemfunc (op0); 3356 pfn1 = pfn_from_ptrmemfunc (op1); 3357 delta0 = build_ptrmemfunc_access_expr (op0, 3358 delta_identifier); 3359 delta1 = build_ptrmemfunc_access_expr (op1, 3360 delta_identifier); 3361 e1 = cp_build_binary_op (EQ_EXPR, delta0, delta1); 3362 e2 = cp_build_binary_op (EQ_EXPR, 3363 pfn0, 3364 cp_convert (TREE_TYPE (pfn0), 3365 integer_zero_node)); 3366 e1 = cp_build_binary_op (TRUTH_ORIF_EXPR, e1, e2); 3367 e2 = build2 (EQ_EXPR, boolean_type_node, pfn0, pfn1); 3368 e = cp_build_binary_op (TRUTH_ANDIF_EXPR, e2, e1); 3369 if (code == EQ_EXPR) 3370 return e; 3371 return cp_build_binary_op (EQ_EXPR, e, integer_zero_node); 3372 } 3373 else 3374 { 3375 gcc_assert (!TYPE_PTRMEMFUNC_P (type0) 3376 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type0), 3377 type1)); 3378 gcc_assert (!TYPE_PTRMEMFUNC_P (type1) 3379 || !same_type_p (TYPE_PTRMEMFUNC_FN_TYPE (type1), 3380 type0)); 3381 } 3382 3383 break; 3384 3385 case MAX_EXPR: 3386 case MIN_EXPR: 3387 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE) 3388 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE)) 3389 shorten = 1; 3390 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) 3391 result_type = composite_pointer_type (type0, type1, op0, op1, 3392 "comparison"); 3393 break; 3394 3395 case LE_EXPR: 3396 case GE_EXPR: 3397 case LT_EXPR: 3398 case GT_EXPR: 3399 if (TREE_CODE (orig_op0) == STRING_CST 3400 || TREE_CODE (orig_op1) == STRING_CST) 3401 warning (OPT_Waddress, 3402 "comparison with string literal results in unspecified behaviour"); 3403 3404 build_type = boolean_type_node; 3405 if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE) 3406 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE)) 3407 short_compare = 1; 3408 else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) 3409 result_type = composite_pointer_type (type0, type1, op0, op1, 3410 "comparison"); 3411 else if (code0 == POINTER_TYPE && TREE_CODE (op1) == INTEGER_CST 3412 && integer_zerop (op1)) 3413 result_type = type0; 3414 else if (code1 == POINTER_TYPE && TREE_CODE (op0) == INTEGER_CST 3415 && integer_zerop (op0)) 3416 result_type = type1; 3417 else if (code0 == POINTER_TYPE && code1 == INTEGER_TYPE) 3418 { 3419 result_type = type0; 3420 pedwarn ("ISO C++ forbids comparison between pointer and integer"); 3421 } 3422 else if (code0 == INTEGER_TYPE && code1 == POINTER_TYPE) 3423 { 3424 result_type = type1; 3425 pedwarn ("ISO C++ forbids comparison between pointer and integer"); 3426 } 3427 break; 3428 3429 case UNORDERED_EXPR: 3430 case ORDERED_EXPR: 3431 case UNLT_EXPR: 3432 case UNLE_EXPR: 3433 case UNGT_EXPR: 3434 case UNGE_EXPR: 3435 case UNEQ_EXPR: 3436 build_type = integer_type_node; 3437 if (code0 != REAL_TYPE || code1 != REAL_TYPE) 3438 { 3439 error ("unordered comparison on non-floating point argument"); 3440 return error_mark_node; 3441 } 3442 common = 1; 3443 break; 3444 3445 default: 3446 break; 3447 } 3448 3449 if (((code0 == INTEGER_TYPE || code0 == REAL_TYPE || code0 == COMPLEX_TYPE) 3450 && (code1 == INTEGER_TYPE || code1 == REAL_TYPE 3451 || code1 == COMPLEX_TYPE))) 3452 arithmetic_types_p = 1; 3453 else 3454 { 3455 arithmetic_types_p = 0; 3456 /* Vector arithmetic is only allowed when both sides are vectors. */ 3457 if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE) 3458 { 3459 if (!tree_int_cst_equal (TYPE_SIZE (type0), TYPE_SIZE (type1)) 3460 || !same_scalar_type_ignoring_signedness (TREE_TYPE (type0), 3461 TREE_TYPE (type1))) 3462 { 3463 binary_op_error (code); 3464 return error_mark_node; 3465 } 3466 arithmetic_types_p = 1; 3467 } 3468 } 3469 /* Determine the RESULT_TYPE, if it is not already known. */ 3470 if (!result_type 3471 && arithmetic_types_p 3472 && (shorten || common || short_compare)) 3473 result_type = common_type (type0, type1); 3474 3475 if (!result_type) 3476 { 3477 error ("invalid operands of types %qT and %qT to binary %qO", 3478 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1), code); 3479 return error_mark_node; 3480 } 3481 3482 /* If we're in a template, the only thing we need to know is the 3483 RESULT_TYPE. */ 3484 if (processing_template_decl) 3485 return build2 (resultcode, 3486 build_type ? build_type : result_type, 3487 op0, op1); 3488 3489 if (arithmetic_types_p) 3490 { 3491 int none_complex = (code0 != COMPLEX_TYPE && code1 != COMPLEX_TYPE); 3492 3493 /* For certain operations (which identify themselves by shorten != 0) 3494 if both args were extended from the same smaller type, 3495 do the arithmetic in that type and then extend. 3496 3497 shorten !=0 and !=1 indicates a bitwise operation. 3498 For them, this optimization is safe only if 3499 both args are zero-extended or both are sign-extended. 3500 Otherwise, we might change the result. 3501 Eg, (short)-1 | (unsigned short)-1 is (int)-1 3502 but calculated in (unsigned short) it would be (unsigned short)-1. */ 3503 3504 if (shorten && none_complex) 3505 { 3506 int unsigned0, unsigned1; 3507 tree arg0 = get_narrower (op0, &unsigned0); 3508 tree arg1 = get_narrower (op1, &unsigned1); 3509 /* UNS is 1 if the operation to be done is an unsigned one. */ 3510 int uns = TYPE_UNSIGNED (result_type); 3511 tree type; 3512 3513 final_type = result_type; 3514 3515 /* Handle the case that OP0 does not *contain* a conversion 3516 but it *requires* conversion to FINAL_TYPE. */ 3517 3518 if (op0 == arg0 && TREE_TYPE (op0) != final_type) 3519 unsigned0 = TYPE_UNSIGNED (TREE_TYPE (op0)); 3520 if (op1 == arg1 && TREE_TYPE (op1) != final_type) 3521 unsigned1 = TYPE_UNSIGNED (TREE_TYPE (op1)); 3522 3523 /* Now UNSIGNED0 is 1 if ARG0 zero-extends to FINAL_TYPE. */ 3524 3525 /* For bitwise operations, signedness of nominal type 3526 does not matter. Consider only how operands were extended. */ 3527 if (shorten == -1) 3528 uns = unsigned0; 3529 3530 /* Note that in all three cases below we refrain from optimizing 3531 an unsigned operation on sign-extended args. 3532 That would not be valid. */ 3533 3534 /* Both args variable: if both extended in same way 3535 from same width, do it in that width. 3536 Do it unsigned if args were zero-extended. */ 3537 if ((TYPE_PRECISION (TREE_TYPE (arg0)) 3538 < TYPE_PRECISION (result_type)) 3539 && (TYPE_PRECISION (TREE_TYPE (arg1)) 3540 == TYPE_PRECISION (TREE_TYPE (arg0))) 3541 && unsigned0 == unsigned1 3542 && (unsigned0 || !uns)) 3543 result_type = c_common_signed_or_unsigned_type 3544 (unsigned0, common_type (TREE_TYPE (arg0), TREE_TYPE (arg1))); 3545 else if (TREE_CODE (arg0) == INTEGER_CST 3546 && (unsigned1 || !uns) 3547 && (TYPE_PRECISION (TREE_TYPE (arg1)) 3548 < TYPE_PRECISION (result_type)) 3549 && (type = c_common_signed_or_unsigned_type 3550 (unsigned1, TREE_TYPE (arg1)), 3551 int_fits_type_p (arg0, type))) 3552 result_type = type; 3553 else if (TREE_CODE (arg1) == INTEGER_CST 3554 && (unsigned0 || !uns) 3555 && (TYPE_PRECISION (TREE_TYPE (arg0)) 3556 < TYPE_PRECISION (result_type)) 3557 && (type = c_common_signed_or_unsigned_type 3558 (unsigned0, TREE_TYPE (arg0)), 3559 int_fits_type_p (arg1, type))) 3560 result_type = type; 3561 } 3562 3563 /* Shifts can be shortened if shifting right. */ 3564 3565 if (short_shift) 3566 { 3567 int unsigned_arg; 3568 tree arg0 = get_narrower (op0, &unsigned_arg); 3569 3570 final_type = result_type; 3571 3572 if (arg0 == op0 && final_type == TREE_TYPE (op0)) 3573 unsigned_arg = TYPE_UNSIGNED (TREE_TYPE (op0)); 3574 3575 if (TYPE_PRECISION (TREE_TYPE (arg0)) < TYPE_PRECISION (result_type) 3576 /* We can shorten only if the shift count is less than the 3577 number of bits in the smaller type size. */ 3578 && compare_tree_int (op1, TYPE_PRECISION (TREE_TYPE (arg0))) < 0 3579 /* If arg is sign-extended and then unsigned-shifted, 3580 we can simulate this with a signed shift in arg's type 3581 only if the extended result is at least twice as wide 3582 as the arg. Otherwise, the shift could use up all the 3583 ones made by sign-extension and bring in zeros. 3584 We can't optimize that case at all, but in most machines 3585 it never happens because available widths are 2**N. */ 3586 && (!TYPE_UNSIGNED (final_type) 3587 || unsigned_arg 3588 || (((unsigned) 2 * TYPE_PRECISION (TREE_TYPE (arg0))) 3589 <= TYPE_PRECISION (result_type)))) 3590 { 3591 /* Do an unsigned shift if the operand was zero-extended. */ 3592 result_type 3593 = c_common_signed_or_unsigned_type (unsigned_arg, 3594 TREE_TYPE (arg0)); 3595 /* Convert value-to-be-shifted to that type. */ 3596 if (TREE_TYPE (op0) != result_type) 3597 op0 = cp_convert (result_type, op0); 3598 converted = 1; 3599 } 3600 } 3601 3602 /* Comparison operations are shortened too but differently. 3603 They identify themselves by setting short_compare = 1. */ 3604 3605 if (short_compare) 3606 { 3607 /* Don't write &op0, etc., because that would prevent op0 3608 from being kept in a register. 3609 Instead, make copies of the our local variables and 3610 pass the copies by reference, then copy them back afterward. */ 3611 tree xop0 = op0, xop1 = op1, xresult_type = result_type; 3612 enum tree_code xresultcode = resultcode; 3613 tree val 3614 = shorten_compare (&xop0, &xop1, &xresult_type, &xresultcode); 3615 if (val != 0) 3616 return cp_convert (boolean_type_node, val); 3617 op0 = xop0, op1 = xop1; 3618 converted = 1; 3619 resultcode = xresultcode; 3620 } 3621 3622 if ((short_compare || code == MIN_EXPR || code == MAX_EXPR) 3623 && warn_sign_compare 3624 /* Do not warn until the template is instantiated; we cannot 3625 bound the ranges of the arguments until that point. */ 3626 && !processing_template_decl) 3627 { 3628 int op0_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op0)); 3629 int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1)); 3630 3631 int unsignedp0, unsignedp1; 3632 tree primop0 = get_narrower (op0, &unsignedp0); 3633 tree primop1 = get_narrower (op1, &unsignedp1); 3634 3635 /* Check for comparison of different enum types. */ 3636 if (TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE 3637 && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE 3638 && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0)) 3639 != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1))) 3640 { 3641 warning (0, "comparison between types %q#T and %q#T", 3642 TREE_TYPE (orig_op0), TREE_TYPE (orig_op1)); 3643 } 3644 3645 /* Give warnings for comparisons between signed and unsigned 3646 quantities that may fail. */ 3647 /* Do the checking based on the original operand trees, so that 3648 casts will be considered, but default promotions won't be. */ 3649 3650 /* Do not warn if the comparison is being done in a signed type, 3651 since the signed type will only be chosen if it can represent 3652 all the values of the unsigned type. */ 3653 if (!TYPE_UNSIGNED (result_type)) 3654 /* OK */; 3655 /* Do not warn if both operands are unsigned. */ 3656 else if (op0_signed == op1_signed) 3657 /* OK */; 3658 /* Do not warn if the signed quantity is an unsuffixed 3659 integer literal (or some static constant expression 3660 involving such literals or a conditional expression 3661 involving such literals) and it is non-negative. */ 3662 else if ((op0_signed && tree_expr_nonnegative_p (orig_op0)) 3663 || (op1_signed && tree_expr_nonnegative_p (orig_op1))) 3664 /* OK */; 3665 /* Do not warn if the comparison is an equality operation, 3666 the unsigned quantity is an integral constant and it does 3667 not use the most significant bit of result_type. */ 3668 else if ((resultcode == EQ_EXPR || resultcode == NE_EXPR) 3669 && ((op0_signed && TREE_CODE (orig_op1) == INTEGER_CST 3670 && int_fits_type_p (orig_op1, c_common_signed_type 3671 (result_type))) 3672 || (op1_signed && TREE_CODE (orig_op0) == INTEGER_CST 3673 && int_fits_type_p (orig_op0, c_common_signed_type 3674 (result_type))))) 3675 /* OK */; 3676 else 3677 warning (0, "comparison between signed and unsigned integer expressions"); 3678 3679 /* Warn if two unsigned values are being compared in a size 3680 larger than their original size, and one (and only one) is the 3681 result of a `~' operator. This comparison will always fail. 3682 3683 Also warn if one operand is a constant, and the constant does not 3684 have all bits set that are set in the ~ operand when it is 3685 extended. */ 3686 3687 if ((TREE_CODE (primop0) == BIT_NOT_EXPR) 3688 ^ (TREE_CODE (primop1) == BIT_NOT_EXPR)) 3689 { 3690 if (TREE_CODE (primop0) == BIT_NOT_EXPR) 3691 primop0 = get_narrower (TREE_OPERAND (op0, 0), &unsignedp0); 3692 if (TREE_CODE (primop1) == BIT_NOT_EXPR) 3693 primop1 = get_narrower (TREE_OPERAND (op1, 0), &unsignedp1); 3694 3695 if (host_integerp (primop0, 0) || host_integerp (primop1, 0)) 3696 { 3697 tree primop; 3698 HOST_WIDE_INT constant, mask; 3699 int unsignedp; 3700 unsigned int bits; 3701 3702 if (host_integerp (primop0, 0)) 3703 { 3704 primop = primop1; 3705 unsignedp = unsignedp1; 3706 constant = tree_low_cst (primop0, 0); 3707 } 3708 else 3709 { 3710 primop = primop0; 3711 unsignedp = unsignedp0; 3712 constant = tree_low_cst (primop1, 0); 3713 } 3714 3715 bits = TYPE_PRECISION (TREE_TYPE (primop)); 3716 if (bits < TYPE_PRECISION (result_type) 3717 && bits < HOST_BITS_PER_LONG && unsignedp) 3718 { 3719 mask = (~ (HOST_WIDE_INT) 0) << bits; 3720 if ((mask & constant) != mask) 3721 warning (0, "comparison of promoted ~unsigned with constant"); 3722 } 3723 } 3724 else if (unsignedp0 && unsignedp1 3725 && (TYPE_PRECISION (TREE_TYPE (primop0)) 3726 < TYPE_PRECISION (result_type)) 3727 && (TYPE_PRECISION (TREE_TYPE (primop1)) 3728 < TYPE_PRECISION (result_type))) 3729 warning (0, "comparison of promoted ~unsigned with unsigned"); 3730 } 3731 } 3732 } 3733 3734 /* If CONVERTED is zero, both args will be converted to type RESULT_TYPE. 3735 Then the expression will be built. 3736 It will be given type FINAL_TYPE if that is nonzero; 3737 otherwise, it will be given type RESULT_TYPE. */ 3738 3739 /* Issue warnings about peculiar, but valid, uses of NULL. */ 3740 if (/* It's reasonable to use pointer values as operands of && 3741 and ||, so NULL is no exception. */ 3742 !(code == TRUTH_ANDIF_EXPR || code == TRUTH_ORIF_EXPR) 3743 && (/* If OP0 is NULL and OP1 is not a pointer, or vice versa. */ 3744 (orig_op0 == null_node 3745 && TREE_CODE (TREE_TYPE (op1)) != POINTER_TYPE) 3746 /* Or vice versa. */ 3747 || (orig_op1 == null_node 3748 && TREE_CODE (TREE_TYPE (op0)) != POINTER_TYPE) 3749 /* Or, both are NULL and the operation was not a comparison. */ 3750 || (orig_op0 == null_node && orig_op1 == null_node 3751 && code != EQ_EXPR && code != NE_EXPR))) 3752 /* Some sort of arithmetic operation involving NULL was 3753 performed. Note that pointer-difference and pointer-addition 3754 have already been handled above, and so we don't end up here in 3755 that case. */ 3756 warning (0, "NULL used in arithmetic"); 3757 3758 if (! converted) 3759 { 3760 if (TREE_TYPE (op0) != result_type) 3761 op0 = cp_convert (result_type, op0); 3762 if (TREE_TYPE (op1) != result_type) 3763 op1 = cp_convert (result_type, op1); 3764 3765 if (op0 == error_mark_node || op1 == error_mark_node) 3766 return error_mark_node; 3767 } 3768 3769 if (build_type == NULL_TREE) 3770 build_type = result_type; 3771 3772 result = build2 (resultcode, build_type, op0, op1); 3773 result = fold_if_not_in_template (result); 3774 if (final_type != 0) 3775 result = cp_convert (final_type, result); 3776 3777 if (TREE_OVERFLOW_P (result) 3778 && !TREE_OVERFLOW_P (op0) 3779 && !TREE_OVERFLOW_P (op1)) 3780 overflow_warning (result); 3781 3782 return result; 3783} 3784 3785/* Return a tree for the sum or difference (RESULTCODE says which) 3786 of pointer PTROP and integer INTOP. */ 3787 3788static tree 3789cp_pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop) 3790{ 3791 tree res_type = TREE_TYPE (ptrop); 3792 3793 /* pointer_int_sum() uses size_in_bytes() on the TREE_TYPE(res_type) 3794 in certain circumstance (when it's valid to do so). So we need 3795 to make sure it's complete. We don't need to check here, if we 3796 can actually complete it at all, as those checks will be done in 3797 pointer_int_sum() anyway. */ 3798 complete_type (TREE_TYPE (res_type)); 3799 3800 return pointer_int_sum (resultcode, ptrop, 3801 fold_if_not_in_template (intop)); 3802} 3803 3804/* Return a tree for the difference of pointers OP0 and OP1. 3805 The resulting tree has type int. */ 3806 3807static tree 3808pointer_diff (tree op0, tree op1, tree ptrtype) 3809{ 3810 tree result; 3811 tree restype = ptrdiff_type_node; 3812 tree target_type = TREE_TYPE (ptrtype); 3813 3814 if (!complete_type_or_else (target_type, NULL_TREE)) 3815 return error_mark_node; 3816 3817 if (pedantic || warn_pointer_arith) 3818 { 3819 if (TREE_CODE (target_type) == VOID_TYPE) 3820 pedwarn ("ISO C++ forbids using pointer of type %<void *%> in subtraction"); 3821 if (TREE_CODE (target_type) == FUNCTION_TYPE) 3822 pedwarn ("ISO C++ forbids using pointer to a function in subtraction"); 3823 if (TREE_CODE (target_type) == METHOD_TYPE) 3824 pedwarn ("ISO C++ forbids using pointer to a method in subtraction"); 3825 } 3826 3827 /* First do the subtraction as integers; 3828 then drop through to build the divide operator. */ 3829 3830 op0 = cp_build_binary_op (MINUS_EXPR, 3831 cp_convert (restype, op0), 3832 cp_convert (restype, op1)); 3833 3834 /* This generates an error if op1 is a pointer to an incomplete type. */ 3835 if (!COMPLETE_TYPE_P (TREE_TYPE (TREE_TYPE (op1)))) 3836 error ("invalid use of a pointer to an incomplete type in pointer arithmetic"); 3837 3838 op1 = (TYPE_PTROB_P (ptrtype) 3839 ? size_in_bytes (target_type) 3840 : integer_one_node); 3841 3842 /* Do the division. */ 3843 3844 result = build2 (EXACT_DIV_EXPR, restype, op0, cp_convert (restype, op1)); 3845 return fold_if_not_in_template (result); 3846} 3847 3848/* Construct and perhaps optimize a tree representation 3849 for a unary operation. CODE, a tree_code, specifies the operation 3850 and XARG is the operand. */ 3851 3852tree 3853build_x_unary_op (enum tree_code code, tree xarg) 3854{ 3855 tree orig_expr = xarg; 3856 tree exp; 3857 int ptrmem = 0; 3858 3859 if (processing_template_decl) 3860 { 3861 if (type_dependent_expression_p (xarg)) 3862 return build_min_nt (code, xarg, NULL_TREE); 3863 3864 xarg = build_non_dependent_expr (xarg); 3865 } 3866 3867 exp = NULL_TREE; 3868 3869 /* [expr.unary.op] says: 3870 3871 The address of an object of incomplete type can be taken. 3872 3873 (And is just the ordinary address operator, not an overloaded 3874 "operator &".) However, if the type is a template 3875 specialization, we must complete the type at this point so that 3876 an overloaded "operator &" will be available if required. */ 3877 if (code == ADDR_EXPR 3878 && TREE_CODE (xarg) != TEMPLATE_ID_EXPR 3879 && ((CLASS_TYPE_P (TREE_TYPE (xarg)) 3880 && !COMPLETE_TYPE_P (complete_type (TREE_TYPE (xarg)))) 3881 || (TREE_CODE (xarg) == OFFSET_REF))) 3882 /* Don't look for a function. */; 3883 else 3884 exp = build_new_op (code, LOOKUP_NORMAL, xarg, NULL_TREE, NULL_TREE, 3885 /*overloaded_p=*/NULL); 3886 if (!exp && code == ADDR_EXPR) 3887 { 3888 /* A pointer to member-function can be formed only by saying 3889 &X::mf. */ 3890 if (!flag_ms_extensions && TREE_CODE (TREE_TYPE (xarg)) == METHOD_TYPE 3891 && (TREE_CODE (xarg) != OFFSET_REF || !PTRMEM_OK_P (xarg))) 3892 { 3893 if (TREE_CODE (xarg) != OFFSET_REF 3894 || !TYPE_P (TREE_OPERAND (xarg, 0))) 3895 { 3896 error ("invalid use of %qE to form a pointer-to-member-function", 3897 xarg); 3898 if (TREE_CODE (xarg) != OFFSET_REF) 3899 inform (" a qualified-id is required"); 3900 return error_mark_node; 3901 } 3902 else 3903 { 3904 error ("parentheses around %qE cannot be used to form a" 3905 " pointer-to-member-function", 3906 xarg); 3907 PTRMEM_OK_P (xarg) = 1; 3908 } 3909 } 3910 3911 if (TREE_CODE (xarg) == OFFSET_REF) 3912 { 3913 ptrmem = PTRMEM_OK_P (xarg); 3914 3915 if (!ptrmem && !flag_ms_extensions 3916 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE) 3917 { 3918 /* A single non-static member, make sure we don't allow a 3919 pointer-to-member. */ 3920 xarg = build2 (OFFSET_REF, TREE_TYPE (xarg), 3921 TREE_OPERAND (xarg, 0), 3922 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE)); 3923 PTRMEM_OK_P (xarg) = ptrmem; 3924 } 3925 } 3926 else if (TREE_CODE (xarg) == TARGET_EXPR) 3927 warning (0, "taking address of temporary"); 3928 exp = build_unary_op (ADDR_EXPR, xarg, 0); 3929 } 3930 3931 if (processing_template_decl && exp != error_mark_node) 3932 exp = build_min_non_dep (code, exp, orig_expr, 3933 /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE); 3934 if (TREE_CODE (exp) == ADDR_EXPR) 3935 PTRMEM_OK_P (exp) = ptrmem; 3936 return exp; 3937} 3938 3939/* Like c_common_truthvalue_conversion, but handle pointer-to-member 3940 constants, where a null value is represented by an INTEGER_CST of 3941 -1. */ 3942 3943tree 3944cp_truthvalue_conversion (tree expr) 3945{ 3946 tree type = TREE_TYPE (expr); 3947 if (TYPE_PTRMEM_P (type)) 3948 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1); 3949 else 3950 return c_common_truthvalue_conversion (expr); 3951} 3952 3953/* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */ 3954 3955tree 3956condition_conversion (tree expr) 3957{ 3958 tree t; 3959 if (processing_template_decl) 3960 return expr; 3961 t = perform_implicit_conversion (boolean_type_node, expr); 3962 t = fold_build_cleanup_point_expr (boolean_type_node, t); 3963 return t; 3964} 3965 3966/* Return an ADDR_EXPR giving the address of T. This function 3967 attempts no optimizations or simplifications; it is a low-level 3968 primitive. */ 3969 3970tree 3971build_address (tree t) 3972{ 3973 tree addr; 3974 3975 if (error_operand_p (t) || !cxx_mark_addressable (t)) 3976 return error_mark_node; 3977 3978 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t); 3979 3980 return addr; 3981} 3982 3983/* Return a NOP_EXPR converting EXPR to TYPE. */ 3984 3985tree 3986build_nop (tree type, tree expr) 3987{ 3988 if (type == error_mark_node || error_operand_p (expr)) 3989 return expr; 3990 return build1 (NOP_EXPR, type, expr); 3991} 3992 3993/* C++: Must handle pointers to members. 3994 3995 Perhaps type instantiation should be extended to handle conversion 3996 from aggregates to types we don't yet know we want? (Or are those 3997 cases typically errors which should be reported?) 3998 3999 NOCONVERT nonzero suppresses the default promotions 4000 (such as from short to int). */ 4001 4002tree 4003build_unary_op (enum tree_code code, tree xarg, int noconvert) 4004{ 4005 /* No default_conversion here. It causes trouble for ADDR_EXPR. */ 4006 tree arg = xarg; 4007 tree argtype = 0; 4008 const char *errstring = NULL; 4009 tree val; 4010 const char *invalid_op_diag; 4011 4012 if (arg == error_mark_node) 4013 return error_mark_node; 4014 4015 if ((invalid_op_diag 4016 = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR 4017 ? CONVERT_EXPR 4018 : code), 4019 TREE_TYPE (xarg)))) 4020 { 4021 error (invalid_op_diag); 4022 return error_mark_node; 4023 } 4024 4025 switch (code) 4026 { 4027 case UNARY_PLUS_EXPR: 4028 case NEGATE_EXPR: 4029 { 4030 int flags = WANT_ARITH | WANT_ENUM; 4031 /* Unary plus (but not unary minus) is allowed on pointers. */ 4032 if (code == UNARY_PLUS_EXPR) 4033 flags |= WANT_POINTER; 4034 arg = build_expr_type_conversion (flags, arg, true); 4035 if (!arg) 4036 errstring = (code == NEGATE_EXPR 4037 ? "wrong type argument to unary minus" 4038 : "wrong type argument to unary plus"); 4039 else 4040 { 4041 if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg))) 4042 arg = perform_integral_promotions (arg); 4043 4044 /* Make sure the result is not an lvalue: a unary plus or minus 4045 expression is always a rvalue. */ 4046 arg = rvalue (arg); 4047 } 4048 } 4049 break; 4050 4051 case BIT_NOT_EXPR: 4052 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4053 { 4054 code = CONJ_EXPR; 4055 if (!noconvert) 4056 arg = default_conversion (arg); 4057 } 4058 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM 4059 | WANT_VECTOR, 4060 arg, true))) 4061 errstring = "wrong type argument to bit-complement"; 4062 else if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg))) 4063 arg = perform_integral_promotions (arg); 4064 break; 4065 4066 case ABS_EXPR: 4067 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true))) 4068 errstring = "wrong type argument to abs"; 4069 else if (!noconvert) 4070 arg = default_conversion (arg); 4071 break; 4072 4073 case CONJ_EXPR: 4074 /* Conjugating a real value is a no-op, but allow it anyway. */ 4075 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true))) 4076 errstring = "wrong type argument to conjugation"; 4077 else if (!noconvert) 4078 arg = default_conversion (arg); 4079 break; 4080 4081 case TRUTH_NOT_EXPR: 4082 arg = perform_implicit_conversion (boolean_type_node, arg); 4083 val = invert_truthvalue (arg); 4084 if (arg != error_mark_node) 4085 return val; 4086 errstring = "in argument to unary !"; 4087 break; 4088 4089 case NOP_EXPR: 4090 break; 4091 4092 case REALPART_EXPR: 4093 if (TREE_CODE (arg) == COMPLEX_CST) 4094 return TREE_REALPART (arg); 4095 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4096 { 4097 arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg); 4098 return fold_if_not_in_template (arg); 4099 } 4100 else 4101 return arg; 4102 4103 case IMAGPART_EXPR: 4104 if (TREE_CODE (arg) == COMPLEX_CST) 4105 return TREE_IMAGPART (arg); 4106 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4107 { 4108 arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg); 4109 return fold_if_not_in_template (arg); 4110 } 4111 else 4112 return cp_convert (TREE_TYPE (arg), integer_zero_node); 4113 4114 case PREINCREMENT_EXPR: 4115 case POSTINCREMENT_EXPR: 4116 case PREDECREMENT_EXPR: 4117 case POSTDECREMENT_EXPR: 4118 /* Handle complex lvalues (when permitted) 4119 by reduction to simpler cases. */ 4120 4121 val = unary_complex_lvalue (code, arg); 4122 if (val != 0) 4123 return val; 4124 4125 /* Increment or decrement the real part of the value, 4126 and don't change the imaginary part. */ 4127 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE) 4128 { 4129 tree real, imag; 4130 4131 arg = stabilize_reference (arg); 4132 real = build_unary_op (REALPART_EXPR, arg, 1); 4133 imag = build_unary_op (IMAGPART_EXPR, arg, 1); 4134 return build2 (COMPLEX_EXPR, TREE_TYPE (arg), 4135 build_unary_op (code, real, 1), imag); 4136 } 4137 4138 /* Report invalid types. */ 4139 4140 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER, 4141 arg, true))) 4142 { 4143 if (code == PREINCREMENT_EXPR) 4144 errstring ="no pre-increment operator for type"; 4145 else if (code == POSTINCREMENT_EXPR) 4146 errstring ="no post-increment operator for type"; 4147 else if (code == PREDECREMENT_EXPR) 4148 errstring ="no pre-decrement operator for type"; 4149 else 4150 errstring ="no post-decrement operator for type"; 4151 break; 4152 } 4153 4154 /* Report something read-only. */ 4155 4156 if (CP_TYPE_CONST_P (TREE_TYPE (arg)) 4157 || TREE_READONLY (arg)) 4158 readonly_error (arg, ((code == PREINCREMENT_EXPR 4159 || code == POSTINCREMENT_EXPR) 4160 ? "increment" : "decrement"), 4161 0); 4162 4163 { 4164 tree inc; 4165 tree declared_type; 4166 tree result_type = TREE_TYPE (arg); 4167 4168 declared_type = unlowered_expr_type (arg); 4169 4170 arg = get_unwidened (arg, 0); 4171 argtype = TREE_TYPE (arg); 4172 4173 /* ARM $5.2.5 last annotation says this should be forbidden. */ 4174 if (TREE_CODE (argtype) == ENUMERAL_TYPE) 4175 pedwarn ("ISO C++ forbids %sing an enum", 4176 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR) 4177 ? "increment" : "decrement"); 4178 4179 /* Compute the increment. */ 4180 4181 if (TREE_CODE (argtype) == POINTER_TYPE) 4182 { 4183 tree type = complete_type (TREE_TYPE (argtype)); 4184 4185 if (!COMPLETE_OR_VOID_TYPE_P (type)) 4186 error ("cannot %s a pointer to incomplete type %qT", 4187 ((code == PREINCREMENT_EXPR 4188 || code == POSTINCREMENT_EXPR) 4189 ? "increment" : "decrement"), TREE_TYPE (argtype)); 4190 else if ((pedantic || warn_pointer_arith) 4191 && !TYPE_PTROB_P (argtype)) 4192 pedwarn ("ISO C++ forbids %sing a pointer of type %qT", 4193 ((code == PREINCREMENT_EXPR 4194 || code == POSTINCREMENT_EXPR) 4195 ? "increment" : "decrement"), argtype); 4196 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype)); 4197 } 4198 else 4199 inc = integer_one_node; 4200 4201 inc = cp_convert (argtype, inc); 4202 4203 /* Handle incrementing a cast-expression. */ 4204 4205 switch (TREE_CODE (arg)) 4206 { 4207 case NOP_EXPR: 4208 case CONVERT_EXPR: 4209 case FLOAT_EXPR: 4210 case FIX_TRUNC_EXPR: 4211 case FIX_FLOOR_EXPR: 4212 case FIX_ROUND_EXPR: 4213 case FIX_CEIL_EXPR: 4214 { 4215 tree incremented, modify, value, compound; 4216 if (! lvalue_p (arg) && pedantic) 4217 pedwarn ("cast to non-reference type used as lvalue"); 4218 arg = stabilize_reference (arg); 4219 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR) 4220 value = arg; 4221 else 4222 value = save_expr (arg); 4223 incremented = build2 (((code == PREINCREMENT_EXPR 4224 || code == POSTINCREMENT_EXPR) 4225 ? PLUS_EXPR : MINUS_EXPR), 4226 argtype, value, inc); 4227 4228 modify = build_modify_expr (arg, NOP_EXPR, incremented); 4229 compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg), 4230 modify, value); 4231 4232 /* Eliminate warning about unused result of + or -. */ 4233 TREE_NO_WARNING (compound) = 1; 4234 return compound; 4235 } 4236 4237 default: 4238 break; 4239 } 4240 4241 /* Complain about anything else that is not a true lvalue. */ 4242 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR 4243 || code == POSTINCREMENT_EXPR) 4244 ? lv_increment : lv_decrement))) 4245 return error_mark_node; 4246 4247 /* Forbid using -- on `bool'. */ 4248 if (same_type_p (declared_type, boolean_type_node)) 4249 { 4250 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR) 4251 { 4252 error ("invalid use of %<--%> on bool variable %qD", arg); 4253 return error_mark_node; 4254 } 4255 val = boolean_increment (code, arg); 4256 } 4257 else 4258 val = build2 (code, TREE_TYPE (arg), arg, inc); 4259 4260 TREE_SIDE_EFFECTS (val) = 1; 4261 return cp_convert (result_type, val); 4262 } 4263 4264 case ADDR_EXPR: 4265 /* Note that this operation never does default_conversion 4266 regardless of NOCONVERT. */ 4267 4268 argtype = lvalue_type (arg); 4269 4270 if (TREE_CODE (arg) == OFFSET_REF) 4271 goto offset_ref; 4272 4273 if (TREE_CODE (argtype) == REFERENCE_TYPE) 4274 { 4275 tree type = build_pointer_type (TREE_TYPE (argtype)); 4276 arg = build1 (CONVERT_EXPR, type, arg); 4277 return arg; 4278 } 4279 else if (pedantic && DECL_MAIN_P (arg)) 4280 /* ARM $3.4 */ 4281 pedwarn ("ISO C++ forbids taking address of function %<::main%>"); 4282 4283 /* Let &* cancel out to simplify resulting code. */ 4284 if (TREE_CODE (arg) == INDIRECT_REF) 4285 { 4286 /* We don't need to have `current_class_ptr' wrapped in a 4287 NON_LVALUE_EXPR node. */ 4288 if (arg == current_class_ref) 4289 return current_class_ptr; 4290 4291 arg = TREE_OPERAND (arg, 0); 4292 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE) 4293 { 4294 tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg))); 4295 arg = build1 (CONVERT_EXPR, type, arg); 4296 } 4297 else 4298 /* Don't let this be an lvalue. */ 4299 arg = rvalue (arg); 4300 return arg; 4301 } 4302 4303 /* Uninstantiated types are all functions. Taking the 4304 address of a function is a no-op, so just return the 4305 argument. */ 4306 4307 gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE 4308 || !IDENTIFIER_OPNAME_P (arg)); 4309 4310 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg) 4311 && !really_overloaded_fn (TREE_OPERAND (arg, 1))) 4312 { 4313 /* They're trying to take the address of a unique non-static 4314 member function. This is ill-formed (except in MS-land), 4315 but let's try to DTRT. 4316 Note: We only handle unique functions here because we don't 4317 want to complain if there's a static overload; non-unique 4318 cases will be handled by instantiate_type. But we need to 4319 handle this case here to allow casts on the resulting PMF. 4320 We could defer this in non-MS mode, but it's easier to give 4321 a useful error here. */ 4322 4323 /* Inside constant member functions, the `this' pointer 4324 contains an extra const qualifier. TYPE_MAIN_VARIANT 4325 is used here to remove this const from the diagnostics 4326 and the created OFFSET_REF. */ 4327 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0))); 4328 tree fn = get_first_fn (TREE_OPERAND (arg, 1)); 4329 mark_used (fn); 4330 4331 if (! flag_ms_extensions) 4332 { 4333 tree name = DECL_NAME (fn); 4334 if (current_class_type 4335 && TREE_OPERAND (arg, 0) == current_class_ref) 4336 /* An expression like &memfn. */ 4337 pedwarn ("ISO C++ forbids taking the address of an unqualified" 4338 " or parenthesized non-static member function to form" 4339 " a pointer to member function. Say %<&%T::%D%>", 4340 base, name); 4341 else 4342 pedwarn ("ISO C++ forbids taking the address of a bound member" 4343 " function to form a pointer to member function." 4344 " Say %<&%T::%D%>", 4345 base, name); 4346 } 4347 arg = build_offset_ref (base, fn, /*address_p=*/true); 4348 } 4349 4350 offset_ref: 4351 if (type_unknown_p (arg)) 4352 return build1 (ADDR_EXPR, unknown_type_node, arg); 4353 4354 /* Handle complex lvalues (when permitted) 4355 by reduction to simpler cases. */ 4356 val = unary_complex_lvalue (code, arg); 4357 if (val != 0) 4358 return val; 4359 4360 switch (TREE_CODE (arg)) 4361 { 4362 case NOP_EXPR: 4363 case CONVERT_EXPR: 4364 case FLOAT_EXPR: 4365 case FIX_TRUNC_EXPR: 4366 case FIX_FLOOR_EXPR: 4367 case FIX_ROUND_EXPR: 4368 case FIX_CEIL_EXPR: 4369 if (! lvalue_p (arg) && pedantic) 4370 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression"); 4371 break; 4372 4373 case BASELINK: 4374 arg = BASELINK_FUNCTIONS (arg); 4375 /* Fall through. */ 4376 4377 case OVERLOAD: 4378 arg = OVL_CURRENT (arg); 4379 break; 4380 4381 case OFFSET_REF: 4382 /* Turn a reference to a non-static data member into a 4383 pointer-to-member. */ 4384 { 4385 tree type; 4386 tree t; 4387 4388 if (!PTRMEM_OK_P (arg)) 4389 return build_unary_op (code, arg, 0); 4390 4391 t = TREE_OPERAND (arg, 1); 4392 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE) 4393 { 4394 error ("cannot create pointer to reference member %qD", t); 4395 return error_mark_node; 4396 } 4397 4398 type = build_ptrmem_type (context_for_name_lookup (t), 4399 TREE_TYPE (t)); 4400 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1)); 4401 return t; 4402 } 4403 4404 default: 4405 break; 4406 } 4407 4408 /* Anything not already handled and not a true memory reference 4409 is an error. */ 4410 if (TREE_CODE (argtype) != FUNCTION_TYPE 4411 && TREE_CODE (argtype) != METHOD_TYPE 4412 && TREE_CODE (arg) != OFFSET_REF 4413 && !lvalue_or_else (arg, lv_addressof)) 4414 return error_mark_node; 4415 4416 if (argtype != error_mark_node) 4417 argtype = build_pointer_type (argtype); 4418 4419 /* In a template, we are processing a non-dependent expression 4420 so we can just form an ADDR_EXPR with the correct type. */ 4421 if (processing_template_decl) 4422 { 4423 val = build_address (arg); 4424 if (TREE_CODE (arg) == OFFSET_REF) 4425 PTRMEM_OK_P (val) = PTRMEM_OK_P (arg); 4426 return val; 4427 } 4428 4429 if (TREE_CODE (arg) != COMPONENT_REF) 4430 { 4431 val = build_address (arg); 4432 if (TREE_CODE (arg) == OFFSET_REF) 4433 PTRMEM_OK_P (val) = PTRMEM_OK_P (arg); 4434 } 4435 else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK) 4436 { 4437 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1)); 4438 4439 /* We can only get here with a single static member 4440 function. */ 4441 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL 4442 && DECL_STATIC_FUNCTION_P (fn)); 4443 mark_used (fn); 4444 val = build_address (fn); 4445 if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0))) 4446 /* Do not lose object's side effects. */ 4447 val = build2 (COMPOUND_EXPR, TREE_TYPE (val), 4448 TREE_OPERAND (arg, 0), val); 4449 } 4450 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1))) 4451 { 4452 error ("attempt to take address of bit-field structure member %qD", 4453 TREE_OPERAND (arg, 1)); 4454 return error_mark_node; 4455 } 4456 else 4457 { 4458 tree object = TREE_OPERAND (arg, 0); 4459 tree field = TREE_OPERAND (arg, 1); 4460 gcc_assert (same_type_ignoring_top_level_qualifiers_p 4461 (TREE_TYPE (object), decl_type_context (field))); 4462 val = build_address (arg); 4463 } 4464 4465 if (TREE_CODE (argtype) == POINTER_TYPE 4466 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE) 4467 { 4468 build_ptrmemfunc_type (argtype); 4469 val = build_ptrmemfunc (argtype, val, 0, 4470 /*c_cast_p=*/false); 4471 } 4472 4473 return val; 4474 4475 default: 4476 break; 4477 } 4478 4479 if (!errstring) 4480 { 4481 if (argtype == 0) 4482 argtype = TREE_TYPE (arg); 4483 return fold_if_not_in_template (build1 (code, argtype, arg)); 4484 } 4485 4486 error ("%s", errstring); 4487 return error_mark_node; 4488} 4489 4490/* Apply unary lvalue-demanding operator CODE to the expression ARG 4491 for certain kinds of expressions which are not really lvalues 4492 but which we can accept as lvalues. 4493 4494 If ARG is not a kind of expression we can handle, return 4495 NULL_TREE. */ 4496 4497tree 4498unary_complex_lvalue (enum tree_code code, tree arg) 4499{ 4500 /* Inside a template, making these kinds of adjustments is 4501 pointless; we are only concerned with the type of the 4502 expression. */ 4503 if (processing_template_decl) 4504 return NULL_TREE; 4505 4506 /* Handle (a, b) used as an "lvalue". */ 4507 if (TREE_CODE (arg) == COMPOUND_EXPR) 4508 { 4509 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0); 4510 return build2 (COMPOUND_EXPR, TREE_TYPE (real_result), 4511 TREE_OPERAND (arg, 0), real_result); 4512 } 4513 4514 /* Handle (a ? b : c) used as an "lvalue". */ 4515 if (TREE_CODE (arg) == COND_EXPR 4516 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR) 4517 return rationalize_conditional_expr (code, arg); 4518 4519 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */ 4520 if (TREE_CODE (arg) == MODIFY_EXPR 4521 || TREE_CODE (arg) == PREINCREMENT_EXPR 4522 || TREE_CODE (arg) == PREDECREMENT_EXPR) 4523 { 4524 tree lvalue = TREE_OPERAND (arg, 0); 4525 if (TREE_SIDE_EFFECTS (lvalue)) 4526 { 4527 lvalue = stabilize_reference (lvalue); 4528 arg = build2 (TREE_CODE (arg), TREE_TYPE (arg), 4529 lvalue, TREE_OPERAND (arg, 1)); 4530 } 4531 return unary_complex_lvalue 4532 (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue)); 4533 } 4534 4535 if (code != ADDR_EXPR) 4536 return NULL_TREE; 4537 4538 /* Handle (a = b) used as an "lvalue" for `&'. */ 4539 if (TREE_CODE (arg) == MODIFY_EXPR 4540 || TREE_CODE (arg) == INIT_EXPR) 4541 { 4542 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0); 4543 arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result), 4544 arg, real_result); 4545 TREE_NO_WARNING (arg) = 1; 4546 return arg; 4547 } 4548 4549 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE 4550 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE 4551 || TREE_CODE (arg) == OFFSET_REF) 4552 return NULL_TREE; 4553 4554 /* We permit compiler to make function calls returning 4555 objects of aggregate type look like lvalues. */ 4556 { 4557 tree targ = arg; 4558 4559 if (TREE_CODE (targ) == SAVE_EXPR) 4560 targ = TREE_OPERAND (targ, 0); 4561 4562 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ))) 4563 { 4564 if (TREE_CODE (arg) == SAVE_EXPR) 4565 targ = arg; 4566 else 4567 targ = build_cplus_new (TREE_TYPE (arg), arg); 4568 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ); 4569 } 4570 4571 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF) 4572 return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)), 4573 TREE_OPERAND (targ, 0), current_function_decl, NULL); 4574 } 4575 4576 /* Don't let anything else be handled specially. */ 4577 return NULL_TREE; 4578} 4579 4580/* Mark EXP saying that we need to be able to take the 4581 address of it; it should not be allocated in a register. 4582 Value is true if successful. 4583 4584 C++: we do not allow `current_class_ptr' to be addressable. */ 4585 4586bool 4587cxx_mark_addressable (tree exp) 4588{ 4589 tree x = exp; 4590 4591 while (1) 4592 switch (TREE_CODE (x)) 4593 { 4594 case ADDR_EXPR: 4595 case COMPONENT_REF: 4596 case ARRAY_REF: 4597 case REALPART_EXPR: 4598 case IMAGPART_EXPR: 4599 x = TREE_OPERAND (x, 0); 4600 break; 4601 4602 case PARM_DECL: 4603 if (x == current_class_ptr) 4604 { 4605 error ("cannot take the address of %<this%>, which is an rvalue expression"); 4606 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later. */ 4607 return true; 4608 } 4609 /* Fall through. */ 4610 4611 case VAR_DECL: 4612 /* Caller should not be trying to mark initialized 4613 constant fields addressable. */ 4614 gcc_assert (DECL_LANG_SPECIFIC (x) == 0 4615 || DECL_IN_AGGR_P (x) == 0 4616 || TREE_STATIC (x) 4617 || DECL_EXTERNAL (x)); 4618 /* Fall through. */ 4619 4620 case CONST_DECL: 4621 case RESULT_DECL: 4622 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x) 4623 && !DECL_ARTIFICIAL (x)) 4624 { 4625 if (TREE_CODE (x) == VAR_DECL && DECL_HARD_REGISTER (x)) 4626 { 4627 error 4628 ("address of explicit register variable %qD requested", x); 4629 return false; 4630 } 4631 else if (extra_warnings) 4632 warning 4633 (OPT_Wextra, "address requested for %qD, which is declared %<register%>", x); 4634 } 4635 TREE_ADDRESSABLE (x) = 1; 4636 return true; 4637 4638 case FUNCTION_DECL: 4639 TREE_ADDRESSABLE (x) = 1; 4640 return true; 4641 4642 case CONSTRUCTOR: 4643 TREE_ADDRESSABLE (x) = 1; 4644 return true; 4645 4646 case TARGET_EXPR: 4647 TREE_ADDRESSABLE (x) = 1; 4648 cxx_mark_addressable (TREE_OPERAND (x, 0)); 4649 return true; 4650 4651 default: 4652 return true; 4653 } 4654} 4655 4656/* Build and return a conditional expression IFEXP ? OP1 : OP2. */ 4657 4658tree 4659build_x_conditional_expr (tree ifexp, tree op1, tree op2) 4660{ 4661 tree orig_ifexp = ifexp; 4662 tree orig_op1 = op1; 4663 tree orig_op2 = op2; 4664 tree expr; 4665 4666 if (processing_template_decl) 4667 { 4668 /* The standard says that the expression is type-dependent if 4669 IFEXP is type-dependent, even though the eventual type of the 4670 expression doesn't dependent on IFEXP. */ 4671 if (type_dependent_expression_p (ifexp) 4672 /* As a GNU extension, the middle operand may be omitted. */ 4673 || (op1 && type_dependent_expression_p (op1)) 4674 || type_dependent_expression_p (op2)) 4675 return build_min_nt (COND_EXPR, ifexp, op1, op2); 4676 ifexp = build_non_dependent_expr (ifexp); 4677 if (op1) 4678 op1 = build_non_dependent_expr (op1); 4679 op2 = build_non_dependent_expr (op2); 4680 } 4681 4682 expr = build_conditional_expr (ifexp, op1, op2); 4683 if (processing_template_decl && expr != error_mark_node) 4684 return build_min_non_dep (COND_EXPR, expr, 4685 orig_ifexp, orig_op1, orig_op2); 4686 return expr; 4687} 4688 4689/* Given a list of expressions, return a compound expression 4690 that performs them all and returns the value of the last of them. */ 4691 4692tree build_x_compound_expr_from_list (tree list, const char *msg) 4693{ 4694 tree expr = TREE_VALUE (list); 4695 4696 if (TREE_CHAIN (list)) 4697 { 4698 if (msg) 4699 pedwarn ("%s expression list treated as compound expression", msg); 4700 4701 for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list)) 4702 expr = build_x_compound_expr (expr, TREE_VALUE (list)); 4703 } 4704 4705 return expr; 4706} 4707 4708/* Handle overloading of the ',' operator when needed. */ 4709 4710tree 4711build_x_compound_expr (tree op1, tree op2) 4712{ 4713 tree result; 4714 tree orig_op1 = op1; 4715 tree orig_op2 = op2; 4716 4717 if (processing_template_decl) 4718 { 4719 if (type_dependent_expression_p (op1) 4720 || type_dependent_expression_p (op2)) 4721 return build_min_nt (COMPOUND_EXPR, op1, op2); 4722 op1 = build_non_dependent_expr (op1); 4723 op2 = build_non_dependent_expr (op2); 4724 } 4725 4726 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE, 4727 /*overloaded_p=*/NULL); 4728 if (!result) 4729 result = build_compound_expr (op1, op2); 4730 4731 if (processing_template_decl && result != error_mark_node) 4732 return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2); 4733 4734 return result; 4735} 4736 4737/* Build a compound expression. */ 4738 4739tree 4740build_compound_expr (tree lhs, tree rhs) 4741{ 4742 lhs = convert_to_void (lhs, "left-hand operand of comma"); 4743 4744 if (lhs == error_mark_node || rhs == error_mark_node) 4745 return error_mark_node; 4746 4747 if (TREE_CODE (rhs) == TARGET_EXPR) 4748 { 4749 /* If the rhs is a TARGET_EXPR, then build the compound 4750 expression inside the target_expr's initializer. This 4751 helps the compiler to eliminate unnecessary temporaries. */ 4752 tree init = TREE_OPERAND (rhs, 1); 4753 4754 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init); 4755 TREE_OPERAND (rhs, 1) = init; 4756 4757 return rhs; 4758 } 4759 4760 return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs); 4761} 4762 4763/* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE 4764 casts away constness. DIAG_FN gives the function to call if we 4765 need to issue a diagnostic; if it is NULL, no diagnostic will be 4766 issued. DESCRIPTION explains what operation is taking place. */ 4767 4768static void 4769check_for_casting_away_constness (tree src_type, tree dest_type, 4770 void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2), 4771 const char *description) 4772{ 4773 if (diag_fn && casts_away_constness (src_type, dest_type)) 4774 diag_fn ("%s from type %qT to type %qT casts away constness", 4775 description, src_type, dest_type); 4776} 4777 4778/* Convert EXPR (an expression with pointer-to-member type) to TYPE 4779 (another pointer-to-member type in the same hierarchy) and return 4780 the converted expression. If ALLOW_INVERSE_P is permitted, a 4781 pointer-to-derived may be converted to pointer-to-base; otherwise, 4782 only the other direction is permitted. If C_CAST_P is true, this 4783 conversion is taking place as part of a C-style cast. */ 4784 4785tree 4786convert_ptrmem (tree type, tree expr, bool allow_inverse_p, 4787 bool c_cast_p) 4788{ 4789 if (TYPE_PTRMEM_P (type)) 4790 { 4791 tree delta; 4792 4793 if (TREE_CODE (expr) == PTRMEM_CST) 4794 expr = cplus_expand_constant (expr); 4795 delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)), 4796 TYPE_PTRMEM_CLASS_TYPE (type), 4797 allow_inverse_p, 4798 c_cast_p); 4799 if (!integer_zerop (delta)) 4800 expr = cp_build_binary_op (PLUS_EXPR, 4801 build_nop (ptrdiff_type_node, expr), 4802 delta); 4803 return build_nop (type, expr); 4804 } 4805 else 4806 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 4807 allow_inverse_p, c_cast_p); 4808} 4809 4810/* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return 4811 a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW 4812 set iff they are set in ORIG. Otherwise, return EXPR unchanged. */ 4813 4814static tree 4815ignore_overflows (tree expr, tree orig) 4816{ 4817 if (TREE_CODE (expr) == INTEGER_CST 4818 && CONSTANT_CLASS_P (orig) 4819 && TREE_CODE (orig) != STRING_CST 4820 && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig) 4821 || TREE_CONSTANT_OVERFLOW (expr) 4822 != TREE_CONSTANT_OVERFLOW (orig))) 4823 { 4824 if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig)) 4825 /* Ensure constant sharing. */ 4826 expr = build_int_cst_wide (TREE_TYPE (expr), 4827 TREE_INT_CST_LOW (expr), 4828 TREE_INT_CST_HIGH (expr)); 4829 else 4830 { 4831 /* Avoid clobbering a shared constant. */ 4832 expr = copy_node (expr); 4833 TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig); 4834 TREE_CONSTANT_OVERFLOW (expr) 4835 = TREE_CONSTANT_OVERFLOW (orig); 4836 } 4837 } 4838 return expr; 4839} 4840 4841/* Perform a static_cast from EXPR to TYPE. When C_CAST_P is true, 4842 this static_cast is being attempted as one of the possible casts 4843 allowed by a C-style cast. (In that case, accessibility of base 4844 classes is not considered, and it is OK to cast away 4845 constness.) Return the result of the cast. *VALID_P is set to 4846 indicate whether or not the cast was valid. */ 4847 4848static tree 4849build_static_cast_1 (tree type, tree expr, bool c_cast_p, 4850 bool *valid_p) 4851{ 4852 tree intype; 4853 tree result; 4854 tree orig; 4855 void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2); 4856 const char *desc; 4857 4858 /* Assume the cast is valid. */ 4859 *valid_p = true; 4860 4861 intype = TREE_TYPE (expr); 4862 4863 /* Save casted types in the function's used types hash table. */ 4864 used_types_insert (type); 4865 4866 /* Determine what to do when casting away constness. */ 4867 if (c_cast_p) 4868 { 4869 /* C-style casts are allowed to cast away constness. With 4870 WARN_CAST_QUAL, we still want to issue a warning. */ 4871 diag_fn = warn_cast_qual ? warning0 : NULL; 4872 desc = "cast"; 4873 } 4874 else 4875 { 4876 /* A static_cast may not cast away constness. */ 4877 diag_fn = error; 4878 desc = "static_cast"; 4879 } 4880 4881 /* [expr.static.cast] 4882 4883 An lvalue of type "cv1 B", where B is a class type, can be cast 4884 to type "reference to cv2 D", where D is a class derived (clause 4885 _class.derived_) from B, if a valid standard conversion from 4886 "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the 4887 same cv-qualification as, or greater cv-qualification than, cv1, 4888 and B is not a virtual base class of D. */ 4889 /* We check this case before checking the validity of "TYPE t = 4890 EXPR;" below because for this case: 4891 4892 struct B {}; 4893 struct D : public B { D(const B&); }; 4894 extern B& b; 4895 void f() { static_cast<const D&>(b); } 4896 4897 we want to avoid constructing a new D. The standard is not 4898 completely clear about this issue, but our interpretation is 4899 consistent with other compilers. */ 4900 if (TREE_CODE (type) == REFERENCE_TYPE 4901 && CLASS_TYPE_P (TREE_TYPE (type)) 4902 && CLASS_TYPE_P (intype) 4903 && real_lvalue_p (expr) 4904 && DERIVED_FROM_P (intype, TREE_TYPE (type)) 4905 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)), 4906 build_pointer_type (TYPE_MAIN_VARIANT 4907 (TREE_TYPE (type)))) 4908 && (c_cast_p 4909 || at_least_as_qualified_p (TREE_TYPE (type), intype))) 4910 { 4911 tree base; 4912 4913 /* There is a standard conversion from "D*" to "B*" even if "B" 4914 is ambiguous or inaccessible. If this is really a 4915 static_cast, then we check both for inaccessibility and 4916 ambiguity. However, if this is a static_cast being performed 4917 because the user wrote a C-style cast, then accessibility is 4918 not considered. */ 4919 base = lookup_base (TREE_TYPE (type), intype, 4920 c_cast_p ? ba_unique : ba_check, 4921 NULL); 4922 4923 /* Convert from "B*" to "D*". This function will check that "B" 4924 is not a virtual base of "D". */ 4925 expr = build_base_path (MINUS_EXPR, build_address (expr), 4926 base, /*nonnull=*/false); 4927 /* Convert the pointer to a reference -- but then remember that 4928 there are no expressions with reference type in C++. */ 4929 return convert_from_reference (build_nop (type, expr)); 4930 } 4931 4932 orig = expr; 4933 4934 /* [expr.static.cast] 4935 4936 An expression e can be explicitly converted to a type T using a 4937 static_cast of the form static_cast<T>(e) if the declaration T 4938 t(e);" is well-formed, for some invented temporary variable 4939 t. */ 4940 result = perform_direct_initialization_if_possible (type, expr, 4941 c_cast_p); 4942 if (result) 4943 { 4944 result = convert_from_reference (result); 4945 4946 /* Ignore any integer overflow caused by the cast. */ 4947 result = ignore_overflows (result, orig); 4948 4949 /* [expr.static.cast] 4950 4951 If T is a reference type, the result is an lvalue; otherwise, 4952 the result is an rvalue. */ 4953 if (TREE_CODE (type) != REFERENCE_TYPE) 4954 result = rvalue (result); 4955 return result; 4956 } 4957 4958 /* [expr.static.cast] 4959 4960 Any expression can be explicitly converted to type cv void. */ 4961 if (TREE_CODE (type) == VOID_TYPE) 4962 return convert_to_void (expr, /*implicit=*/NULL); 4963 4964 /* [expr.static.cast] 4965 4966 The inverse of any standard conversion sequence (clause _conv_), 4967 other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer 4968 (_conv.array_), function-to-pointer (_conv.func_), and boolean 4969 (_conv.bool_) conversions, can be performed explicitly using 4970 static_cast subject to the restriction that the explicit 4971 conversion does not cast away constness (_expr.const.cast_), and 4972 the following additional rules for specific cases: */ 4973 /* For reference, the conversions not excluded are: integral 4974 promotions, floating point promotion, integral conversions, 4975 floating point conversions, floating-integral conversions, 4976 pointer conversions, and pointer to member conversions. */ 4977 /* DR 128 4978 4979 A value of integral _or enumeration_ type can be explicitly 4980 converted to an enumeration type. */ 4981 /* The effect of all that is that any conversion between any two 4982 types which are integral, floating, or enumeration types can be 4983 performed. */ 4984 if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type)) 4985 && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype))) 4986 { 4987 expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL); 4988 4989 /* Ignore any integer overflow caused by the cast. */ 4990 expr = ignore_overflows (expr, orig); 4991 return expr; 4992 } 4993 4994 if (TYPE_PTR_P (type) && TYPE_PTR_P (intype) 4995 && CLASS_TYPE_P (TREE_TYPE (type)) 4996 && CLASS_TYPE_P (TREE_TYPE (intype)) 4997 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT 4998 (TREE_TYPE (intype))), 4999 build_pointer_type (TYPE_MAIN_VARIANT 5000 (TREE_TYPE (type))))) 5001 { 5002 tree base; 5003 5004 if (!c_cast_p) 5005 check_for_casting_away_constness (intype, type, diag_fn, desc); 5006 base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype), 5007 c_cast_p ? ba_unique : ba_check, 5008 NULL); 5009 return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false); 5010 } 5011 5012 if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype)) 5013 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))) 5014 { 5015 tree c1; 5016 tree c2; 5017 tree t1; 5018 tree t2; 5019 5020 c1 = TYPE_PTRMEM_CLASS_TYPE (intype); 5021 c2 = TYPE_PTRMEM_CLASS_TYPE (type); 5022 5023 if (TYPE_PTRMEM_P (type)) 5024 { 5025 t1 = (build_ptrmem_type 5026 (c1, 5027 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype)))); 5028 t2 = (build_ptrmem_type 5029 (c2, 5030 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type)))); 5031 } 5032 else 5033 { 5034 t1 = intype; 5035 t2 = type; 5036 } 5037 if (can_convert (t1, t2)) 5038 { 5039 if (!c_cast_p) 5040 check_for_casting_away_constness (intype, type, diag_fn, 5041 desc); 5042 return convert_ptrmem (type, expr, /*allow_inverse_p=*/1, 5043 c_cast_p); 5044 } 5045 } 5046 5047 /* [expr.static.cast] 5048 5049 An rvalue of type "pointer to cv void" can be explicitly 5050 converted to a pointer to object type. A value of type pointer 5051 to object converted to "pointer to cv void" and back to the 5052 original pointer type will have its original value. */ 5053 if (TREE_CODE (intype) == POINTER_TYPE 5054 && VOID_TYPE_P (TREE_TYPE (intype)) 5055 && TYPE_PTROB_P (type)) 5056 { 5057 if (!c_cast_p) 5058 check_for_casting_away_constness (intype, type, diag_fn, desc); 5059 return build_nop (type, expr); 5060 } 5061 5062 *valid_p = false; 5063 return error_mark_node; 5064} 5065 5066/* Return an expression representing static_cast<TYPE>(EXPR). */ 5067 5068tree 5069build_static_cast (tree type, tree expr) 5070{ 5071 tree result; 5072 bool valid_p; 5073 5074 if (type == error_mark_node || expr == error_mark_node) 5075 return error_mark_node; 5076 5077 if (processing_template_decl) 5078 { 5079 expr = build_min (STATIC_CAST_EXPR, type, expr); 5080 /* We don't know if it will or will not have side effects. */ 5081 TREE_SIDE_EFFECTS (expr) = 1; 5082 return convert_from_reference (expr); 5083 } 5084 5085 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 5086 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */ 5087 if (TREE_CODE (type) != REFERENCE_TYPE 5088 && TREE_CODE (expr) == NOP_EXPR 5089 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0))) 5090 expr = TREE_OPERAND (expr, 0); 5091 5092 result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p); 5093 if (valid_p) 5094 return result; 5095 5096 error ("invalid static_cast from type %qT to type %qT", 5097 TREE_TYPE (expr), type); 5098 return error_mark_node; 5099} 5100 5101/* EXPR is an expression with member function or pointer-to-member 5102 function type. TYPE is a pointer type. Converting EXPR to TYPE is 5103 not permitted by ISO C++, but we accept it in some modes. If we 5104 are not in one of those modes, issue a diagnostic. Return the 5105 converted expression. */ 5106 5107tree 5108convert_member_func_to_ptr (tree type, tree expr) 5109{ 5110 tree intype; 5111 tree decl; 5112 5113 intype = TREE_TYPE (expr); 5114 gcc_assert (TYPE_PTRMEMFUNC_P (intype) 5115 || TREE_CODE (intype) == METHOD_TYPE); 5116 5117 if (pedantic || warn_pmf2ptr) 5118 pedwarn ("converting from %qT to %qT", intype, type); 5119 5120 if (TREE_CODE (intype) == METHOD_TYPE) 5121 expr = build_addr_func (expr); 5122 else if (TREE_CODE (expr) == PTRMEM_CST) 5123 expr = build_address (PTRMEM_CST_MEMBER (expr)); 5124 else 5125 { 5126 decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0); 5127 decl = build_address (decl); 5128 expr = get_member_function_from_ptrfunc (&decl, expr); 5129 } 5130 5131 return build_nop (type, expr); 5132} 5133 5134/* Return a representation for a reinterpret_cast from EXPR to TYPE. 5135 If C_CAST_P is true, this reinterpret cast is being done as part of 5136 a C-style cast. If VALID_P is non-NULL, *VALID_P is set to 5137 indicate whether or not reinterpret_cast was valid. */ 5138 5139static tree 5140build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p, 5141 bool *valid_p) 5142{ 5143 tree intype; 5144 5145 /* Assume the cast is invalid. */ 5146 if (valid_p) 5147 *valid_p = true; 5148 5149 if (type == error_mark_node || error_operand_p (expr)) 5150 return error_mark_node; 5151 5152 intype = TREE_TYPE (expr); 5153 5154 /* Save casted types in the function's used types hash table. */ 5155 used_types_insert (type); 5156 5157 /* [expr.reinterpret.cast] 5158 An lvalue expression of type T1 can be cast to the type 5159 "reference to T2" if an expression of type "pointer to T1" can be 5160 explicitly converted to the type "pointer to T2" using a 5161 reinterpret_cast. */ 5162 if (TREE_CODE (type) == REFERENCE_TYPE) 5163 { 5164 if (! real_lvalue_p (expr)) 5165 { 5166 error ("invalid cast of an rvalue expression of type " 5167 "%qT to type %qT", 5168 intype, type); 5169 return error_mark_node; 5170 } 5171 5172 /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and 5173 "B" are related class types; the reinterpret_cast does not 5174 adjust the pointer. */ 5175 if (TYPE_PTR_P (intype) 5176 && (comptypes (TREE_TYPE (intype), TREE_TYPE (type), 5177 COMPARE_BASE | COMPARE_DERIVED))) 5178 warning (0, "casting %qT to %qT does not dereference pointer", 5179 intype, type); 5180 5181 expr = build_unary_op (ADDR_EXPR, expr, 0); 5182 if (expr != error_mark_node) 5183 expr = build_reinterpret_cast_1 5184 (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p, 5185 valid_p); 5186 if (expr != error_mark_node) 5187 expr = build_indirect_ref (expr, 0); 5188 return expr; 5189 } 5190 5191 /* As a G++ extension, we consider conversions from member 5192 functions, and pointers to member functions to 5193 pointer-to-function and pointer-to-void types. If 5194 -Wno-pmf-conversions has not been specified, 5195 convert_member_func_to_ptr will issue an error message. */ 5196 if ((TYPE_PTRMEMFUNC_P (intype) 5197 || TREE_CODE (intype) == METHOD_TYPE) 5198 && TYPE_PTR_P (type) 5199 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE 5200 || VOID_TYPE_P (TREE_TYPE (type)))) 5201 return convert_member_func_to_ptr (type, expr); 5202 5203 /* If the cast is not to a reference type, the lvalue-to-rvalue, 5204 array-to-pointer, and function-to-pointer conversions are 5205 performed. */ 5206 expr = decay_conversion (expr); 5207 5208 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 5209 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */ 5210 if (TREE_CODE (expr) == NOP_EXPR 5211 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0))) 5212 expr = TREE_OPERAND (expr, 0); 5213 5214 if (error_operand_p (expr)) 5215 return error_mark_node; 5216 5217 intype = TREE_TYPE (expr); 5218 5219 /* [expr.reinterpret.cast] 5220 A pointer can be converted to any integral type large enough to 5221 hold it. */ 5222 if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype)) 5223 { 5224 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype)) 5225 pedwarn ("cast from %qT to %qT loses precision", 5226 intype, type); 5227 } 5228 /* [expr.reinterpret.cast] 5229 A value of integral or enumeration type can be explicitly 5230 converted to a pointer. */ 5231 else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype)) 5232 /* OK */ 5233 ; 5234 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype)) 5235 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))) 5236 return fold_if_not_in_template (build_nop (type, expr)); 5237 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype)) 5238 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype))) 5239 { 5240 tree sexpr = expr; 5241 5242 if (!c_cast_p) 5243 check_for_casting_away_constness (intype, type, error, 5244 "reinterpret_cast"); 5245 /* Warn about possible alignment problems. */ 5246 if (STRICT_ALIGNMENT && warn_cast_align 5247 && !VOID_TYPE_P (type) 5248 && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE 5249 && COMPLETE_TYPE_P (TREE_TYPE (type)) 5250 && COMPLETE_TYPE_P (TREE_TYPE (intype)) 5251 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype))) 5252 warning (0, "cast from %qT to %qT increases required alignment of " 5253 "target type", 5254 intype, type); 5255 5256 /* We need to strip nops here, because the frontend likes to 5257 create (int *)&a for array-to-pointer decay, instead of &a[0]. */ 5258 STRIP_NOPS (sexpr); 5259 strict_aliasing_warning (intype, type, sexpr); 5260 5261 return fold_if_not_in_template (build_nop (type, expr)); 5262 } 5263 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype)) 5264 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type))) 5265 { 5266 if (pedantic) 5267 /* Only issue a warning, as we have always supported this 5268 where possible, and it is necessary in some cases. DR 195 5269 addresses this issue, but as of 2004/10/26 is still in 5270 drafting. */ 5271 warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object"); 5272 return fold_if_not_in_template (build_nop (type, expr)); 5273 } 5274 else if (TREE_CODE (type) == VECTOR_TYPE) 5275 return fold_if_not_in_template (convert_to_vector (type, expr)); 5276 else if (TREE_CODE (intype) == VECTOR_TYPE && INTEGRAL_TYPE_P (type)) 5277 return fold_if_not_in_template (convert_to_integer (type, expr)); 5278 else 5279 { 5280 if (valid_p) 5281 *valid_p = false; 5282 error ("invalid cast from type %qT to type %qT", intype, type); 5283 return error_mark_node; 5284 } 5285 5286 return cp_convert (type, expr); 5287} 5288 5289tree 5290build_reinterpret_cast (tree type, tree expr) 5291{ 5292 if (type == error_mark_node || expr == error_mark_node) 5293 return error_mark_node; 5294 5295 if (processing_template_decl) 5296 { 5297 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr); 5298 5299 if (!TREE_SIDE_EFFECTS (t) 5300 && type_dependent_expression_p (expr)) 5301 /* There might turn out to be side effects inside expr. */ 5302 TREE_SIDE_EFFECTS (t) = 1; 5303 return convert_from_reference (t); 5304 } 5305 5306 return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false, 5307 /*valid_p=*/NULL); 5308} 5309 5310/* Perform a const_cast from EXPR to TYPE. If the cast is valid, 5311 return an appropriate expression. Otherwise, return 5312 error_mark_node. If the cast is not valid, and COMPLAIN is true, 5313 then a diagnostic will be issued. If VALID_P is non-NULL, we are 5314 performing a C-style cast, its value upon return will indicate 5315 whether or not the conversion succeeded. */ 5316 5317static tree 5318build_const_cast_1 (tree dst_type, tree expr, bool complain, 5319 bool *valid_p) 5320{ 5321 tree src_type; 5322 tree reference_type; 5323 5324 /* Callers are responsible for handling error_mark_node as a 5325 destination type. */ 5326 gcc_assert (dst_type != error_mark_node); 5327 /* In a template, callers should be building syntactic 5328 representations of casts, not using this machinery. */ 5329 gcc_assert (!processing_template_decl); 5330 5331 /* Assume the conversion is invalid. */ 5332 if (valid_p) 5333 *valid_p = false; 5334 5335 if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type)) 5336 { 5337 if (complain) 5338 error ("invalid use of const_cast with type %qT, " 5339 "which is not a pointer, " 5340 "reference, nor a pointer-to-data-member type", dst_type); 5341 return error_mark_node; 5342 } 5343 5344 if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE) 5345 { 5346 if (complain) 5347 error ("invalid use of const_cast with type %qT, which is a pointer " 5348 "or reference to a function type", dst_type); 5349 return error_mark_node; 5350 } 5351 5352 /* Save casted types in the function's used types hash table. */ 5353 used_types_insert (dst_type); 5354 5355 src_type = TREE_TYPE (expr); 5356 /* Expressions do not really have reference types. */ 5357 if (TREE_CODE (src_type) == REFERENCE_TYPE) 5358 src_type = TREE_TYPE (src_type); 5359 5360 /* [expr.const.cast] 5361 5362 An lvalue of type T1 can be explicitly converted to an lvalue of 5363 type T2 using the cast const_cast<T2&> (where T1 and T2 are object 5364 types) if a pointer to T1 can be explicitly converted to the type 5365 pointer to T2 using a const_cast. */ 5366 if (TREE_CODE (dst_type) == REFERENCE_TYPE) 5367 { 5368 reference_type = dst_type; 5369 if (! real_lvalue_p (expr)) 5370 { 5371 if (complain) 5372 error ("invalid const_cast of an rvalue of type %qT to type %qT", 5373 src_type, dst_type); 5374 return error_mark_node; 5375 } 5376 dst_type = build_pointer_type (TREE_TYPE (dst_type)); 5377 src_type = build_pointer_type (src_type); 5378 } 5379 else 5380 { 5381 reference_type = NULL_TREE; 5382 /* If the destination type is not a reference type, the 5383 lvalue-to-rvalue, array-to-pointer, and function-to-pointer 5384 conversions are performed. */ 5385 src_type = type_decays_to (src_type); 5386 if (src_type == error_mark_node) 5387 return error_mark_node; 5388 } 5389 5390 if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type)) 5391 && comp_ptr_ttypes_const (dst_type, src_type)) 5392 { 5393 if (valid_p) 5394 { 5395 *valid_p = true; 5396 /* This cast is actually a C-style cast. Issue a warning if 5397 the user is making a potentially unsafe cast. */ 5398 if (warn_cast_qual) 5399 check_for_casting_away_constness (src_type, dst_type, 5400 warning0, 5401 "cast"); 5402 } 5403 if (reference_type) 5404 { 5405 expr = build_unary_op (ADDR_EXPR, expr, 0); 5406 expr = build_nop (reference_type, expr); 5407 return convert_from_reference (expr); 5408 } 5409 else 5410 { 5411 expr = decay_conversion (expr); 5412 /* build_c_cast puts on a NOP_EXPR to make the result not an 5413 lvalue. Strip such NOP_EXPRs if VALUE is being used in 5414 non-lvalue context. */ 5415 if (TREE_CODE (expr) == NOP_EXPR 5416 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0))) 5417 expr = TREE_OPERAND (expr, 0); 5418 return build_nop (dst_type, expr); 5419 } 5420 } 5421 5422 if (complain) 5423 error ("invalid const_cast from type %qT to type %qT", 5424 src_type, dst_type); 5425 return error_mark_node; 5426} 5427 5428tree 5429build_const_cast (tree type, tree expr) 5430{ 5431 if (type == error_mark_node || error_operand_p (expr)) 5432 return error_mark_node; 5433 5434 if (processing_template_decl) 5435 { 5436 tree t = build_min (CONST_CAST_EXPR, type, expr); 5437 5438 if (!TREE_SIDE_EFFECTS (t) 5439 && type_dependent_expression_p (expr)) 5440 /* There might turn out to be side effects inside expr. */ 5441 TREE_SIDE_EFFECTS (t) = 1; 5442 return convert_from_reference (t); 5443 } 5444 5445 return build_const_cast_1 (type, expr, /*complain=*/true, 5446 /*valid_p=*/NULL); 5447} 5448 5449/* Build an expression representing an explicit C-style cast to type 5450 TYPE of expression EXPR. */ 5451 5452tree 5453build_c_cast (tree type, tree expr) 5454{ 5455 tree value = expr; 5456 tree result; 5457 bool valid_p; 5458 5459 if (type == error_mark_node || error_operand_p (expr)) 5460 return error_mark_node; 5461 5462 if (processing_template_decl) 5463 { 5464 tree t = build_min (CAST_EXPR, type, 5465 tree_cons (NULL_TREE, value, NULL_TREE)); 5466 /* We don't know if it will or will not have side effects. */ 5467 TREE_SIDE_EFFECTS (t) = 1; 5468 return convert_from_reference (t); 5469 } 5470 5471 /* Casts to a (pointer to a) specific ObjC class (or 'id' or 5472 'Class') should always be retained, because this information aids 5473 in method lookup. */ 5474 if (objc_is_object_ptr (type) 5475 && objc_is_object_ptr (TREE_TYPE (expr))) 5476 return build_nop (type, expr); 5477 5478 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 5479 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */ 5480 if (TREE_CODE (type) != REFERENCE_TYPE 5481 && TREE_CODE (value) == NOP_EXPR 5482 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0))) 5483 value = TREE_OPERAND (value, 0); 5484 5485 if (TREE_CODE (type) == ARRAY_TYPE) 5486 { 5487 /* Allow casting from T1* to T2[] because Cfront allows it. 5488 NIHCL uses it. It is not valid ISO C++ however. */ 5489 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE) 5490 { 5491 pedwarn ("ISO C++ forbids casting to an array type %qT", type); 5492 type = build_pointer_type (TREE_TYPE (type)); 5493 } 5494 else 5495 { 5496 error ("ISO C++ forbids casting to an array type %qT", type); 5497 return error_mark_node; 5498 } 5499 } 5500 5501 if (TREE_CODE (type) == FUNCTION_TYPE 5502 || TREE_CODE (type) == METHOD_TYPE) 5503 { 5504 error ("invalid cast to function type %qT", type); 5505 return error_mark_node; 5506 } 5507 5508 /* A C-style cast can be a const_cast. */ 5509 result = build_const_cast_1 (type, value, /*complain=*/false, 5510 &valid_p); 5511 if (valid_p) 5512 return result; 5513 5514 /* Or a static cast. */ 5515 result = build_static_cast_1 (type, value, /*c_cast_p=*/true, 5516 &valid_p); 5517 /* Or a reinterpret_cast. */ 5518 if (!valid_p) 5519 result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true, 5520 &valid_p); 5521 /* The static_cast or reinterpret_cast may be followed by a 5522 const_cast. */ 5523 if (valid_p 5524 /* A valid cast may result in errors if, for example, a 5525 conversion to am ambiguous base class is required. */ 5526 && !error_operand_p (result)) 5527 { 5528 tree result_type; 5529 5530 /* Non-class rvalues always have cv-unqualified type. */ 5531 if (!CLASS_TYPE_P (type)) 5532 type = TYPE_MAIN_VARIANT (type); 5533 result_type = TREE_TYPE (result); 5534 if (!CLASS_TYPE_P (result_type)) 5535 result_type = TYPE_MAIN_VARIANT (result_type); 5536 /* If the type of RESULT does not match TYPE, perform a 5537 const_cast to make it match. If the static_cast or 5538 reinterpret_cast succeeded, we will differ by at most 5539 cv-qualification, so the follow-on const_cast is guaranteed 5540 to succeed. */ 5541 if (!same_type_p (non_reference (type), non_reference (result_type))) 5542 { 5543 result = build_const_cast_1 (type, result, false, &valid_p); 5544 gcc_assert (valid_p); 5545 } 5546 return result; 5547 } 5548 5549 return error_mark_node; 5550} 5551 5552/* Build an assignment expression of lvalue LHS from value RHS. 5553 MODIFYCODE is the code for a binary operator that we use 5554 to combine the old value of LHS with RHS to get the new value. 5555 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment. 5556 5557 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */ 5558 5559tree 5560build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) 5561{ 5562 tree result; 5563 tree newrhs = rhs; 5564 tree lhstype = TREE_TYPE (lhs); 5565 tree olhstype = lhstype; 5566 tree olhs = NULL_TREE; 5567 bool plain_assign = (modifycode == NOP_EXPR); 5568 5569 /* Avoid duplicate error messages from operands that had errors. */ 5570 if (error_operand_p (lhs) || error_operand_p (rhs)) 5571 return error_mark_node; 5572 5573 /* Handle control structure constructs used as "lvalues". */ 5574 switch (TREE_CODE (lhs)) 5575 { 5576 /* Handle --foo = 5; as these are valid constructs in C++. */ 5577 case PREDECREMENT_EXPR: 5578 case PREINCREMENT_EXPR: 5579 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))) 5580 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs), 5581 stabilize_reference (TREE_OPERAND (lhs, 0)), 5582 TREE_OPERAND (lhs, 1)); 5583 return build2 (COMPOUND_EXPR, lhstype, 5584 lhs, 5585 build_modify_expr (TREE_OPERAND (lhs, 0), 5586 modifycode, rhs)); 5587 5588 /* Handle (a, b) used as an "lvalue". */ 5589 case COMPOUND_EXPR: 5590 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1), 5591 modifycode, rhs); 5592 if (newrhs == error_mark_node) 5593 return error_mark_node; 5594 return build2 (COMPOUND_EXPR, lhstype, 5595 TREE_OPERAND (lhs, 0), newrhs); 5596 5597 case MODIFY_EXPR: 5598 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))) 5599 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs), 5600 stabilize_reference (TREE_OPERAND (lhs, 0)), 5601 TREE_OPERAND (lhs, 1)); 5602 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs); 5603 if (newrhs == error_mark_node) 5604 return error_mark_node; 5605 return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs); 5606 5607 case MIN_EXPR: 5608 case MAX_EXPR: 5609 /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues, 5610 when neither operand has side-effects. */ 5611 if (!lvalue_or_else (lhs, lv_assign)) 5612 return error_mark_node; 5613 5614 gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)) 5615 && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1))); 5616 5617 lhs = build3 (COND_EXPR, TREE_TYPE (lhs), 5618 build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR, 5619 boolean_type_node, 5620 TREE_OPERAND (lhs, 0), 5621 TREE_OPERAND (lhs, 1)), 5622 TREE_OPERAND (lhs, 0), 5623 TREE_OPERAND (lhs, 1)); 5624 /* Fall through. */ 5625 5626 /* Handle (a ? b : c) used as an "lvalue". */ 5627 case COND_EXPR: 5628 { 5629 /* Produce (a ? (b = rhs) : (c = rhs)) 5630 except that the RHS goes through a save-expr 5631 so the code to compute it is only emitted once. */ 5632 tree cond; 5633 tree preeval = NULL_TREE; 5634 5635 if (VOID_TYPE_P (TREE_TYPE (rhs))) 5636 { 5637 error ("void value not ignored as it ought to be"); 5638 return error_mark_node; 5639 } 5640 5641 rhs = stabilize_expr (rhs, &preeval); 5642 5643 /* Check this here to avoid odd errors when trying to convert 5644 a throw to the type of the COND_EXPR. */ 5645 if (!lvalue_or_else (lhs, lv_assign)) 5646 return error_mark_node; 5647 5648 cond = build_conditional_expr 5649 (TREE_OPERAND (lhs, 0), 5650 build_modify_expr (TREE_OPERAND (lhs, 1), 5651 modifycode, rhs), 5652 build_modify_expr (TREE_OPERAND (lhs, 2), 5653 modifycode, rhs)); 5654 5655 if (cond == error_mark_node) 5656 return cond; 5657 /* Make sure the code to compute the rhs comes out 5658 before the split. */ 5659 if (preeval) 5660 cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond); 5661 return cond; 5662 } 5663 5664 default: 5665 break; 5666 } 5667 5668 if (modifycode == INIT_EXPR) 5669 { 5670 if (TREE_CODE (rhs) == CONSTRUCTOR) 5671 { 5672 if (! same_type_p (TREE_TYPE (rhs), lhstype)) 5673 /* Call convert to generate an error; see PR 11063. */ 5674 rhs = convert (lhstype, rhs); 5675 result = build2 (INIT_EXPR, lhstype, lhs, rhs); 5676 TREE_SIDE_EFFECTS (result) = 1; 5677 return result; 5678 } 5679 else if (! IS_AGGR_TYPE (lhstype)) 5680 /* Do the default thing. */; 5681 else 5682 { 5683 result = build_special_member_call (lhs, complete_ctor_identifier, 5684 build_tree_list (NULL_TREE, rhs), 5685 lhstype, LOOKUP_NORMAL); 5686 if (result == NULL_TREE) 5687 return error_mark_node; 5688 return result; 5689 } 5690 } 5691 else 5692 { 5693 lhs = require_complete_type (lhs); 5694 if (lhs == error_mark_node) 5695 return error_mark_node; 5696 5697 if (modifycode == NOP_EXPR) 5698 { 5699 /* `operator=' is not an inheritable operator. */ 5700 if (! IS_AGGR_TYPE (lhstype)) 5701 /* Do the default thing. */; 5702 else 5703 { 5704 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, 5705 lhs, rhs, make_node (NOP_EXPR), 5706 /*overloaded_p=*/NULL); 5707 if (result == NULL_TREE) 5708 return error_mark_node; 5709 return result; 5710 } 5711 lhstype = olhstype; 5712 } 5713 else 5714 { 5715 /* A binary op has been requested. Combine the old LHS 5716 value with the RHS producing the value we should actually 5717 store into the LHS. */ 5718 5719 gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE)); 5720 lhs = stabilize_reference (lhs); 5721 newrhs = cp_build_binary_op (modifycode, lhs, rhs); 5722 if (newrhs == error_mark_node) 5723 { 5724 error (" in evaluation of %<%Q(%#T, %#T)%>", modifycode, 5725 TREE_TYPE (lhs), TREE_TYPE (rhs)); 5726 return error_mark_node; 5727 } 5728 5729 /* Now it looks like a plain assignment. */ 5730 modifycode = NOP_EXPR; 5731 } 5732 gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE); 5733 gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE); 5734 } 5735 5736 /* The left-hand side must be an lvalue. */ 5737 if (!lvalue_or_else (lhs, lv_assign)) 5738 return error_mark_node; 5739 5740 /* Warn about modifying something that is `const'. Don't warn if 5741 this is initialization. */ 5742 if (modifycode != INIT_EXPR 5743 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype) 5744 /* Functions are not modifiable, even though they are 5745 lvalues. */ 5746 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE 5747 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE 5748 /* If it's an aggregate and any field is const, then it is 5749 effectively const. */ 5750 || (CLASS_TYPE_P (lhstype) 5751 && C_TYPE_FIELDS_READONLY (lhstype)))) 5752 readonly_error (lhs, "assignment", 0); 5753 5754 /* If storing into a structure or union member, it has probably been 5755 given type `int'. Compute the type that would go with the actual 5756 amount of storage the member occupies. */ 5757 5758 if (TREE_CODE (lhs) == COMPONENT_REF 5759 && (TREE_CODE (lhstype) == INTEGER_TYPE 5760 || TREE_CODE (lhstype) == REAL_TYPE 5761 || TREE_CODE (lhstype) == ENUMERAL_TYPE)) 5762 { 5763 lhstype = TREE_TYPE (get_unwidened (lhs, 0)); 5764 5765 /* If storing in a field that is in actuality a short or narrower 5766 than one, we must store in the field in its actual type. */ 5767 5768 if (lhstype != TREE_TYPE (lhs)) 5769 { 5770 /* Avoid warnings converting integral types back into enums for 5771 enum bit fields. */ 5772 if (TREE_CODE (lhstype) == INTEGER_TYPE 5773 && TREE_CODE (olhstype) == ENUMERAL_TYPE) 5774 { 5775 if (TREE_SIDE_EFFECTS (lhs)) 5776 lhs = stabilize_reference (lhs); 5777 olhs = lhs; 5778 } 5779 lhs = copy_node (lhs); 5780 TREE_TYPE (lhs) = lhstype; 5781 } 5782 } 5783 5784 /* Convert new value to destination type. */ 5785 5786 if (TREE_CODE (lhstype) == ARRAY_TYPE) 5787 { 5788 int from_array; 5789 5790 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype), 5791 TYPE_MAIN_VARIANT (TREE_TYPE (rhs)))) 5792 { 5793 error ("incompatible types in assignment of %qT to %qT", 5794 TREE_TYPE (rhs), lhstype); 5795 return error_mark_node; 5796 } 5797 5798 /* Allow array assignment in compiler-generated code. */ 5799 if (! DECL_ARTIFICIAL (current_function_decl)) 5800 { 5801 /* This routine is used for both initialization and assignment. 5802 Make sure the diagnostic message differentiates the context. */ 5803 if (modifycode == INIT_EXPR) 5804 error ("array used as initializer"); 5805 else 5806 error ("invalid array assignment"); 5807 return error_mark_node; 5808 } 5809 5810 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE 5811 ? 1 + (modifycode != INIT_EXPR): 0; 5812 return build_vec_init (lhs, NULL_TREE, newrhs, 5813 /*explicit_default_init_p=*/false, 5814 from_array); 5815 } 5816 5817 if (modifycode == INIT_EXPR) 5818 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL, 5819 "initialization", NULL_TREE, 0); 5820 else 5821 { 5822 /* Avoid warnings on enum bit fields. */ 5823 if (TREE_CODE (olhstype) == ENUMERAL_TYPE 5824 && TREE_CODE (lhstype) == INTEGER_TYPE) 5825 { 5826 newrhs = convert_for_assignment (olhstype, newrhs, "assignment", 5827 NULL_TREE, 0); 5828 newrhs = convert_force (lhstype, newrhs, 0); 5829 } 5830 else 5831 newrhs = convert_for_assignment (lhstype, newrhs, "assignment", 5832 NULL_TREE, 0); 5833 if (TREE_CODE (newrhs) == CALL_EXPR 5834 && TYPE_NEEDS_CONSTRUCTING (lhstype)) 5835 newrhs = build_cplus_new (lhstype, newrhs); 5836 5837 /* Can't initialize directly from a TARGET_EXPR, since that would 5838 cause the lhs to be constructed twice, and possibly result in 5839 accidental self-initialization. So we force the TARGET_EXPR to be 5840 expanded without a target. */ 5841 if (TREE_CODE (newrhs) == TARGET_EXPR) 5842 newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs, 5843 TREE_OPERAND (newrhs, 0)); 5844 } 5845 5846 if (newrhs == error_mark_node) 5847 return error_mark_node; 5848 5849 if (c_dialect_objc () && flag_objc_gc) 5850 { 5851 result = objc_generate_write_barrier (lhs, modifycode, newrhs); 5852 5853 if (result) 5854 return result; 5855 } 5856 5857 result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR, 5858 lhstype, lhs, newrhs); 5859 5860 TREE_SIDE_EFFECTS (result) = 1; 5861 if (!plain_assign) 5862 TREE_NO_WARNING (result) = 1; 5863 5864 /* If we got the LHS in a different type for storing in, 5865 convert the result back to the nominal type of LHS 5866 so that the value we return always has the same type 5867 as the LHS argument. */ 5868 5869 if (olhstype == TREE_TYPE (result)) 5870 return result; 5871 if (olhs) 5872 { 5873 result = build2 (COMPOUND_EXPR, olhstype, result, olhs); 5874 TREE_NO_WARNING (result) = 1; 5875 return result; 5876 } 5877 return convert_for_assignment (olhstype, result, "assignment", 5878 NULL_TREE, 0); 5879} 5880 5881tree 5882build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs) 5883{ 5884 if (processing_template_decl) 5885 return build_min_nt (MODOP_EXPR, lhs, 5886 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs); 5887 5888 if (modifycode != NOP_EXPR) 5889 { 5890 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs, 5891 make_node (modifycode), 5892 /*overloaded_p=*/NULL); 5893 if (rval) 5894 { 5895 TREE_NO_WARNING (rval) = 1; 5896 return rval; 5897 } 5898 } 5899 return build_modify_expr (lhs, modifycode, rhs); 5900} 5901 5902 5903/* Get difference in deltas for different pointer to member function 5904 types. Returns an integer constant of type PTRDIFF_TYPE_NODE. If 5905 the conversion is invalid, the constant is zero. If 5906 ALLOW_INVERSE_P is true, then allow reverse conversions as well. 5907 If C_CAST_P is true this conversion is taking place as part of a 5908 C-style cast. 5909 5910 Note that the naming of FROM and TO is kind of backwards; the return 5911 value is what we add to a TO in order to get a FROM. They are named 5912 this way because we call this function to find out how to convert from 5913 a pointer to member of FROM to a pointer to member of TO. */ 5914 5915static tree 5916get_delta_difference (tree from, tree to, 5917 bool allow_inverse_p, 5918 bool c_cast_p) 5919{ 5920 tree binfo; 5921 base_kind kind; 5922 tree result; 5923 5924 /* Assume no conversion is required. */ 5925 result = integer_zero_node; 5926 binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind); 5927 if (kind == bk_inaccessible || kind == bk_ambig) 5928 error (" in pointer to member function conversion"); 5929 else if (binfo) 5930 { 5931 if (kind != bk_via_virtual) 5932 result = BINFO_OFFSET (binfo); 5933 else 5934 { 5935 tree virt_binfo = binfo_from_vbase (binfo); 5936 5937 /* This is a reinterpret cast, we choose to do nothing. */ 5938 if (allow_inverse_p) 5939 warning (0, "pointer to member cast via virtual base %qT", 5940 BINFO_TYPE (virt_binfo)); 5941 else 5942 error ("pointer to member conversion via virtual base %qT", 5943 BINFO_TYPE (virt_binfo)); 5944 } 5945 } 5946 else if (same_type_ignoring_top_level_qualifiers_p (from, to)) 5947 /* Pointer to member of incomplete class is permitted*/; 5948 else if (!allow_inverse_p) 5949 { 5950 error_not_base_type (from, to); 5951 error (" in pointer to member conversion"); 5952 } 5953 else 5954 { 5955 binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind); 5956 if (binfo) 5957 { 5958 if (kind != bk_via_virtual) 5959 result = size_diffop (size_zero_node, BINFO_OFFSET (binfo)); 5960 else 5961 { 5962 /* This is a reinterpret cast, we choose to do nothing. */ 5963 tree virt_binfo = binfo_from_vbase (binfo); 5964 5965 warning (0, "pointer to member cast via virtual base %qT", 5966 BINFO_TYPE (virt_binfo)); 5967 } 5968 } 5969 } 5970 5971 return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node, 5972 result)); 5973} 5974 5975/* Return a constructor for the pointer-to-member-function TYPE using 5976 the other components as specified. */ 5977 5978tree 5979build_ptrmemfunc1 (tree type, tree delta, tree pfn) 5980{ 5981 tree u = NULL_TREE; 5982 tree delta_field; 5983 tree pfn_field; 5984 VEC(constructor_elt, gc) *v; 5985 5986 /* Pull the FIELD_DECLs out of the type. */ 5987 pfn_field = TYPE_FIELDS (type); 5988 delta_field = TREE_CHAIN (pfn_field); 5989 5990 /* Make sure DELTA has the type we want. */ 5991 delta = convert_and_check (delta_type_node, delta); 5992 5993 /* Finish creating the initializer. */ 5994 v = VEC_alloc(constructor_elt, gc, 2); 5995 CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn); 5996 CONSTRUCTOR_APPEND_ELT(v, delta_field, delta); 5997 u = build_constructor (type, v); 5998 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta); 5999 TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta); 6000 TREE_STATIC (u) = (TREE_CONSTANT (u) 6001 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn)) 6002 != NULL_TREE) 6003 && (initializer_constant_valid_p (delta, TREE_TYPE (delta)) 6004 != NULL_TREE)); 6005 return u; 6006} 6007 6008/* Build a constructor for a pointer to member function. It can be 6009 used to initialize global variables, local variable, or used 6010 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we 6011 want to be. 6012 6013 If FORCE is nonzero, then force this conversion, even if 6014 we would rather not do it. Usually set when using an explicit 6015 cast. A C-style cast is being processed iff C_CAST_P is true. 6016 6017 Return error_mark_node, if something goes wrong. */ 6018 6019tree 6020build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p) 6021{ 6022 tree fn; 6023 tree pfn_type; 6024 tree to_type; 6025 6026 if (error_operand_p (pfn)) 6027 return error_mark_node; 6028 6029 pfn_type = TREE_TYPE (pfn); 6030 to_type = build_ptrmemfunc_type (type); 6031 6032 /* Handle multiple conversions of pointer to member functions. */ 6033 if (TYPE_PTRMEMFUNC_P (pfn_type)) 6034 { 6035 tree delta = NULL_TREE; 6036 tree npfn = NULL_TREE; 6037 tree n; 6038 6039 if (!force 6040 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL)) 6041 error ("invalid conversion to type %qT from type %qT", 6042 to_type, pfn_type); 6043 6044 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type), 6045 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type), 6046 force, 6047 c_cast_p); 6048 6049 /* We don't have to do any conversion to convert a 6050 pointer-to-member to its own type. But, we don't want to 6051 just return a PTRMEM_CST if there's an explicit cast; that 6052 cast should make the expression an invalid template argument. */ 6053 if (TREE_CODE (pfn) != PTRMEM_CST) 6054 { 6055 if (same_type_p (to_type, pfn_type)) 6056 return pfn; 6057 else if (integer_zerop (n)) 6058 return build_reinterpret_cast (to_type, pfn); 6059 } 6060 6061 if (TREE_SIDE_EFFECTS (pfn)) 6062 pfn = save_expr (pfn); 6063 6064 /* Obtain the function pointer and the current DELTA. */ 6065 if (TREE_CODE (pfn) == PTRMEM_CST) 6066 expand_ptrmemfunc_cst (pfn, &delta, &npfn); 6067 else 6068 { 6069 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier); 6070 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier); 6071 } 6072 6073 /* Just adjust the DELTA field. */ 6074 gcc_assert (same_type_ignoring_top_level_qualifiers_p 6075 (TREE_TYPE (delta), ptrdiff_type_node)); 6076 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta) 6077 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node); 6078 delta = cp_build_binary_op (PLUS_EXPR, delta, n); 6079 return build_ptrmemfunc1 (to_type, delta, npfn); 6080 } 6081 6082 /* Handle null pointer to member function conversions. */ 6083 if (integer_zerop (pfn)) 6084 { 6085 pfn = build_c_cast (type, integer_zero_node); 6086 return build_ptrmemfunc1 (to_type, 6087 integer_zero_node, 6088 pfn); 6089 } 6090 6091 if (type_unknown_p (pfn)) 6092 return instantiate_type (type, pfn, tf_warning_or_error); 6093 6094 fn = TREE_OPERAND (pfn, 0); 6095 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL 6096 /* In a template, we will have preserved the 6097 OFFSET_REF. */ 6098 || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF)); 6099 return make_ptrmem_cst (to_type, fn); 6100} 6101 6102/* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST 6103 given by CST. 6104 6105 ??? There is no consistency as to the types returned for the above 6106 values. Some code acts as if it were a sizetype and some as if it were 6107 integer_type_node. */ 6108 6109void 6110expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn) 6111{ 6112 tree type = TREE_TYPE (cst); 6113 tree fn = PTRMEM_CST_MEMBER (cst); 6114 tree ptr_class, fn_class; 6115 6116 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL); 6117 6118 /* The class that the function belongs to. */ 6119 fn_class = DECL_CONTEXT (fn); 6120 6121 /* The class that we're creating a pointer to member of. */ 6122 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type); 6123 6124 /* First, calculate the adjustment to the function's class. */ 6125 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0, 6126 /*c_cast_p=*/0); 6127 6128 if (!DECL_VIRTUAL_P (fn)) 6129 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn)); 6130 else 6131 { 6132 /* If we're dealing with a virtual function, we have to adjust 'this' 6133 again, to point to the base which provides the vtable entry for 6134 fn; the call will do the opposite adjustment. */ 6135 tree orig_class = DECL_CONTEXT (fn); 6136 tree binfo = binfo_or_else (orig_class, fn_class); 6137 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta), 6138 *delta, BINFO_OFFSET (binfo)); 6139 *delta = fold_if_not_in_template (*delta); 6140 6141 /* We set PFN to the vtable offset at which the function can be 6142 found, plus one (unless ptrmemfunc_vbit_in_delta, in which 6143 case delta is shifted left, and then incremented). */ 6144 *pfn = DECL_VINDEX (fn); 6145 *pfn = build2 (MULT_EXPR, integer_type_node, *pfn, 6146 TYPE_SIZE_UNIT (vtable_entry_type)); 6147 *pfn = fold_if_not_in_template (*pfn); 6148 6149 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION) 6150 { 6151 case ptrmemfunc_vbit_in_pfn: 6152 *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn, 6153 integer_one_node); 6154 *pfn = fold_if_not_in_template (*pfn); 6155 break; 6156 6157 case ptrmemfunc_vbit_in_delta: 6158 *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta), 6159 *delta, integer_one_node); 6160 *delta = fold_if_not_in_template (*delta); 6161 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta), 6162 *delta, integer_one_node); 6163 *delta = fold_if_not_in_template (*delta); 6164 break; 6165 6166 default: 6167 gcc_unreachable (); 6168 } 6169 6170 *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn); 6171 *pfn = fold_if_not_in_template (*pfn); 6172 } 6173} 6174 6175/* Return an expression for PFN from the pointer-to-member function 6176 given by T. */ 6177 6178static tree 6179pfn_from_ptrmemfunc (tree t) 6180{ 6181 if (TREE_CODE (t) == PTRMEM_CST) 6182 { 6183 tree delta; 6184 tree pfn; 6185 6186 expand_ptrmemfunc_cst (t, &delta, &pfn); 6187 if (pfn) 6188 return pfn; 6189 } 6190 6191 return build_ptrmemfunc_access_expr (t, pfn_identifier); 6192} 6193 6194/* Convert value RHS to type TYPE as preparation for an assignment to 6195 an lvalue of type TYPE. ERRTYPE is a string to use in error 6196 messages: "assignment", "return", etc. If FNDECL is non-NULL, we 6197 are doing the conversion in order to pass the PARMNUMth argument of 6198 FNDECL. */ 6199 6200static tree 6201convert_for_assignment (tree type, tree rhs, 6202 const char *errtype, tree fndecl, int parmnum) 6203{ 6204 tree rhstype; 6205 enum tree_code coder; 6206 6207 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */ 6208 if (TREE_CODE (rhs) == NON_LVALUE_EXPR) 6209 rhs = TREE_OPERAND (rhs, 0); 6210 6211 rhstype = TREE_TYPE (rhs); 6212 coder = TREE_CODE (rhstype); 6213 6214 if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE 6215 && vector_types_convertible_p (type, rhstype)) 6216 return convert (type, rhs); 6217 6218 if (rhs == error_mark_node || rhstype == error_mark_node) 6219 return error_mark_node; 6220 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node) 6221 return error_mark_node; 6222 6223 /* The RHS of an assignment cannot have void type. */ 6224 if (coder == VOID_TYPE) 6225 { 6226 error ("void value not ignored as it ought to be"); 6227 return error_mark_node; 6228 } 6229 6230 /* Simplify the RHS if possible. */ 6231 if (TREE_CODE (rhs) == CONST_DECL) 6232 rhs = DECL_INITIAL (rhs); 6233 6234 if (c_dialect_objc ()) 6235 { 6236 int parmno; 6237 tree rname = fndecl; 6238 6239 if (!strcmp (errtype, "assignment")) 6240 parmno = -1; 6241 else if (!strcmp (errtype, "initialization")) 6242 parmno = -2; 6243 else 6244 { 6245 tree selector = objc_message_selector (); 6246 6247 parmno = parmnum; 6248 6249 if (selector && parmno > 1) 6250 { 6251 rname = selector; 6252 parmno -= 1; 6253 } 6254 } 6255 6256 if (objc_compare_types (type, rhstype, parmno, rname)) 6257 return convert (type, rhs); 6258 } 6259 6260 /* [expr.ass] 6261 6262 The expression is implicitly converted (clause _conv_) to the 6263 cv-unqualified type of the left operand. 6264 6265 We allow bad conversions here because by the time we get to this point 6266 we are committed to doing the conversion. If we end up doing a bad 6267 conversion, convert_like will complain. */ 6268 if (!can_convert_arg_bad (type, rhstype, rhs)) 6269 { 6270 /* When -Wno-pmf-conversions is use, we just silently allow 6271 conversions from pointers-to-members to plain pointers. If 6272 the conversion doesn't work, cp_convert will complain. */ 6273 if (!warn_pmf2ptr 6274 && TYPE_PTR_P (type) 6275 && TYPE_PTRMEMFUNC_P (rhstype)) 6276 rhs = cp_convert (strip_top_quals (type), rhs); 6277 else 6278 { 6279 /* If the right-hand side has unknown type, then it is an 6280 overloaded function. Call instantiate_type to get error 6281 messages. */ 6282 if (rhstype == unknown_type_node) 6283 instantiate_type (type, rhs, tf_warning_or_error); 6284 else if (fndecl) 6285 error ("cannot convert %qT to %qT for argument %qP to %qD", 6286 rhstype, type, parmnum, fndecl); 6287 else 6288 error ("cannot convert %qT to %qT in %s", rhstype, type, errtype); 6289 return error_mark_node; 6290 } 6291 } 6292 if (warn_missing_format_attribute) 6293 { 6294 const enum tree_code codel = TREE_CODE (type); 6295 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE) 6296 && coder == codel 6297 && check_missing_format_attribute (type, rhstype)) 6298 warning (OPT_Wmissing_format_attribute, 6299 "%s might be a candidate for a format attribute", 6300 errtype); 6301 } 6302 6303 /* If -Wparentheses, warn about a = b = c when a has type bool and b 6304 does not. */ 6305 if (warn_parentheses 6306 && type == boolean_type_node 6307 && TREE_CODE (rhs) == MODIFY_EXPR 6308 && !TREE_NO_WARNING (rhs) 6309 && TREE_TYPE (rhs) != boolean_type_node) 6310 { 6311 warning (OPT_Wparentheses, 6312 "suggest parentheses around assignment used as truth value"); 6313 TREE_NO_WARNING (rhs) = 1; 6314 } 6315 6316 return perform_implicit_conversion (strip_top_quals (type), rhs); 6317} 6318 6319/* Convert RHS to be of type TYPE. 6320 If EXP is nonzero, it is the target of the initialization. 6321 ERRTYPE is a string to use in error messages. 6322 6323 Two major differences between the behavior of 6324 `convert_for_assignment' and `convert_for_initialization' 6325 are that references are bashed in the former, while 6326 copied in the latter, and aggregates are assigned in 6327 the former (operator=) while initialized in the 6328 latter (X(X&)). 6329 6330 If using constructor make sure no conversion operator exists, if one does 6331 exist, an ambiguity exists. 6332 6333 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */ 6334 6335tree 6336convert_for_initialization (tree exp, tree type, tree rhs, int flags, 6337 const char *errtype, tree fndecl, int parmnum) 6338{ 6339 enum tree_code codel = TREE_CODE (type); 6340 tree rhstype; 6341 enum tree_code coder; 6342 6343 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue. 6344 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */ 6345 if (TREE_CODE (rhs) == NOP_EXPR 6346 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0)) 6347 && codel != REFERENCE_TYPE) 6348 rhs = TREE_OPERAND (rhs, 0); 6349 6350 if (type == error_mark_node 6351 || rhs == error_mark_node 6352 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)) 6353 return error_mark_node; 6354 6355 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE 6356 && TREE_CODE (type) != ARRAY_TYPE 6357 && (TREE_CODE (type) != REFERENCE_TYPE 6358 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE)) 6359 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE 6360 && (TREE_CODE (type) != REFERENCE_TYPE 6361 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)) 6362 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE) 6363 rhs = decay_conversion (rhs); 6364 6365 rhstype = TREE_TYPE (rhs); 6366 coder = TREE_CODE (rhstype); 6367 6368 if (coder == ERROR_MARK) 6369 return error_mark_node; 6370 6371 /* We accept references to incomplete types, so we can 6372 return here before checking if RHS is of complete type. */ 6373 6374 if (codel == REFERENCE_TYPE) 6375 { 6376 /* This should eventually happen in convert_arguments. */ 6377 int savew = 0, savee = 0; 6378 6379 if (fndecl) 6380 savew = warningcount, savee = errorcount; 6381 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE, 6382 /*cleanup=*/NULL); 6383 if (fndecl) 6384 { 6385 if (warningcount > savew) 6386 warning (0, "in passing argument %P of %q+D", parmnum, fndecl); 6387 else if (errorcount > savee) 6388 error ("in passing argument %P of %q+D", parmnum, fndecl); 6389 } 6390 return rhs; 6391 } 6392 6393 if (exp != 0) 6394 exp = require_complete_type (exp); 6395 if (exp == error_mark_node) 6396 return error_mark_node; 6397 6398 rhstype = non_reference (rhstype); 6399 6400 type = complete_type (type); 6401 6402 if (IS_AGGR_TYPE (type)) 6403 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags); 6404 6405 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum); 6406} 6407 6408/* If RETVAL is the address of, or a reference to, a local variable or 6409 temporary give an appropriate warning. */ 6410 6411static void 6412maybe_warn_about_returning_address_of_local (tree retval) 6413{ 6414 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl)); 6415 tree whats_returned = retval; 6416 6417 for (;;) 6418 { 6419 if (TREE_CODE (whats_returned) == COMPOUND_EXPR) 6420 whats_returned = TREE_OPERAND (whats_returned, 1); 6421 else if (TREE_CODE (whats_returned) == CONVERT_EXPR 6422 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR 6423 || TREE_CODE (whats_returned) == NOP_EXPR) 6424 whats_returned = TREE_OPERAND (whats_returned, 0); 6425 else 6426 break; 6427 } 6428 6429 if (TREE_CODE (whats_returned) != ADDR_EXPR) 6430 return; 6431 whats_returned = TREE_OPERAND (whats_returned, 0); 6432 6433 if (TREE_CODE (valtype) == REFERENCE_TYPE) 6434 { 6435 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR 6436 || TREE_CODE (whats_returned) == TARGET_EXPR) 6437 { 6438 warning (0, "returning reference to temporary"); 6439 return; 6440 } 6441 if (TREE_CODE (whats_returned) == VAR_DECL 6442 && DECL_NAME (whats_returned) 6443 && TEMP_NAME_P (DECL_NAME (whats_returned))) 6444 { 6445 warning (0, "reference to non-lvalue returned"); 6446 return; 6447 } 6448 } 6449 6450 while (TREE_CODE (whats_returned) == COMPONENT_REF 6451 || TREE_CODE (whats_returned) == ARRAY_REF) 6452 whats_returned = TREE_OPERAND (whats_returned, 0); 6453 6454 if (DECL_P (whats_returned) 6455 && DECL_NAME (whats_returned) 6456 && DECL_FUNCTION_SCOPE_P (whats_returned) 6457 && !(TREE_STATIC (whats_returned) 6458 || TREE_PUBLIC (whats_returned))) 6459 { 6460 if (TREE_CODE (valtype) == REFERENCE_TYPE) 6461 warning (0, "reference to local variable %q+D returned", 6462 whats_returned); 6463 else 6464 warning (0, "address of local variable %q+D returned", 6465 whats_returned); 6466 return; 6467 } 6468} 6469 6470/* Check that returning RETVAL from the current function is valid. 6471 Return an expression explicitly showing all conversions required to 6472 change RETVAL into the function return type, and to assign it to 6473 the DECL_RESULT for the function. Set *NO_WARNING to true if 6474 code reaches end of non-void function warning shouldn't be issued 6475 on this RETURN_EXPR. */ 6476 6477tree 6478check_return_expr (tree retval, bool *no_warning) 6479{ 6480 tree result; 6481 /* The type actually returned by the function, after any 6482 promotions. */ 6483 tree valtype; 6484 int fn_returns_value_p; 6485 6486 *no_warning = false; 6487 6488 /* A `volatile' function is one that isn't supposed to return, ever. 6489 (This is a G++ extension, used to get better code for functions 6490 that call the `volatile' function.) */ 6491 if (TREE_THIS_VOLATILE (current_function_decl)) 6492 warning (0, "function declared %<noreturn%> has a %<return%> statement"); 6493 6494 /* Check for various simple errors. */ 6495 if (DECL_DESTRUCTOR_P (current_function_decl)) 6496 { 6497 if (retval) 6498 error ("returning a value from a destructor"); 6499 return NULL_TREE; 6500 } 6501 else if (DECL_CONSTRUCTOR_P (current_function_decl)) 6502 { 6503 if (in_function_try_handler) 6504 /* If a return statement appears in a handler of the 6505 function-try-block of a constructor, the program is ill-formed. */ 6506 error ("cannot return from a handler of a function-try-block of a constructor"); 6507 else if (retval) 6508 /* You can't return a value from a constructor. */ 6509 error ("returning a value from a constructor"); 6510 return NULL_TREE; 6511 } 6512 6513 if (processing_template_decl) 6514 { 6515 current_function_returns_value = 1; 6516 return retval; 6517 } 6518 6519 /* When no explicit return-value is given in a function with a named 6520 return value, the named return value is used. */ 6521 result = DECL_RESULT (current_function_decl); 6522 valtype = TREE_TYPE (result); 6523 gcc_assert (valtype != NULL_TREE); 6524 fn_returns_value_p = !VOID_TYPE_P (valtype); 6525 if (!retval && DECL_NAME (result) && fn_returns_value_p) 6526 retval = result; 6527 6528 /* Check for a return statement with no return value in a function 6529 that's supposed to return a value. */ 6530 if (!retval && fn_returns_value_p) 6531 { 6532 pedwarn ("return-statement with no value, in function returning %qT", 6533 valtype); 6534 /* Clear this, so finish_function won't say that we reach the 6535 end of a non-void function (which we don't, we gave a 6536 return!). */ 6537 current_function_returns_null = 0; 6538 /* And signal caller that TREE_NO_WARNING should be set on the 6539 RETURN_EXPR to avoid control reaches end of non-void function 6540 warnings in tree-cfg.c. */ 6541 *no_warning = true; 6542 } 6543 /* Check for a return statement with a value in a function that 6544 isn't supposed to return a value. */ 6545 else if (retval && !fn_returns_value_p) 6546 { 6547 if (VOID_TYPE_P (TREE_TYPE (retval))) 6548 /* You can return a `void' value from a function of `void' 6549 type. In that case, we have to evaluate the expression for 6550 its side-effects. */ 6551 finish_expr_stmt (retval); 6552 else 6553 pedwarn ("return-statement with a value, in function " 6554 "returning 'void'"); 6555 6556 current_function_returns_null = 1; 6557 6558 /* There's really no value to return, after all. */ 6559 return NULL_TREE; 6560 } 6561 else if (!retval) 6562 /* Remember that this function can sometimes return without a 6563 value. */ 6564 current_function_returns_null = 1; 6565 else 6566 /* Remember that this function did return a value. */ 6567 current_function_returns_value = 1; 6568 6569 /* Check for erroneous operands -- but after giving ourselves a 6570 chance to provide an error about returning a value from a void 6571 function. */ 6572 if (error_operand_p (retval)) 6573 { 6574 current_function_return_value = error_mark_node; 6575 return error_mark_node; 6576 } 6577 6578 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */ 6579 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR 6580 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR) 6581 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl)) 6582 && ! flag_check_new 6583 && null_ptr_cst_p (retval)) 6584 warning (0, "%<operator new%> must not return NULL unless it is " 6585 "declared %<throw()%> (or -fcheck-new is in effect)"); 6586 6587 /* Effective C++ rule 15. See also start_function. */ 6588 if (warn_ecpp 6589 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR)) 6590 { 6591 bool warn = true; 6592 6593 /* The function return type must be a reference to the current 6594 class. */ 6595 if (TREE_CODE (valtype) == REFERENCE_TYPE 6596 && same_type_ignoring_top_level_qualifiers_p 6597 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))) 6598 { 6599 /* Returning '*this' is obviously OK. */ 6600 if (retval == current_class_ref) 6601 warn = false; 6602 /* If we are calling a function whose return type is the same of 6603 the current class reference, it is ok. */ 6604 else if (TREE_CODE (retval) == INDIRECT_REF 6605 && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR) 6606 warn = false; 6607 } 6608 6609 if (warn) 6610 warning (OPT_Weffc__, "%<operator=%> should return a reference to %<*this%>"); 6611 } 6612 6613 /* The fabled Named Return Value optimization, as per [class.copy]/15: 6614 6615 [...] For a function with a class return type, if the expression 6616 in the return statement is the name of a local object, and the cv- 6617 unqualified type of the local object is the same as the function 6618 return type, an implementation is permitted to omit creating the tem- 6619 porary object to hold the function return value [...] 6620 6621 So, if this is a value-returning function that always returns the same 6622 local variable, remember it. 6623 6624 It might be nice to be more flexible, and choose the first suitable 6625 variable even if the function sometimes returns something else, but 6626 then we run the risk of clobbering the variable we chose if the other 6627 returned expression uses the chosen variable somehow. And people expect 6628 this restriction, anyway. (jason 2000-11-19) 6629 6630 See finish_function and finalize_nrv for the rest of this optimization. */ 6631 6632 if (fn_returns_value_p && flag_elide_constructors) 6633 { 6634 if (retval != NULL_TREE 6635 && (current_function_return_value == NULL_TREE 6636 || current_function_return_value == retval) 6637 && TREE_CODE (retval) == VAR_DECL 6638 && DECL_CONTEXT (retval) == current_function_decl 6639 && ! TREE_STATIC (retval) 6640 && ! DECL_ANON_UNION_VAR_P (retval) 6641 && (DECL_ALIGN (retval) 6642 >= DECL_ALIGN (DECL_RESULT (current_function_decl))) 6643 && same_type_p ((TYPE_MAIN_VARIANT 6644 (TREE_TYPE (retval))), 6645 (TYPE_MAIN_VARIANT 6646 (TREE_TYPE (TREE_TYPE (current_function_decl)))))) 6647 current_function_return_value = retval; 6648 else 6649 current_function_return_value = error_mark_node; 6650 } 6651 6652 /* We don't need to do any conversions when there's nothing being 6653 returned. */ 6654 if (!retval) 6655 return NULL_TREE; 6656 6657 /* Do any required conversions. */ 6658 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl)) 6659 /* No conversions are required. */ 6660 ; 6661 else 6662 { 6663 /* The type the function is declared to return. */ 6664 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl)); 6665 6666 /* The functype's return type will have been set to void, if it 6667 was an incomplete type. Just treat this as 'return;' */ 6668 if (VOID_TYPE_P (functype)) 6669 return error_mark_node; 6670 6671 /* First convert the value to the function's return type, then 6672 to the type of return value's location to handle the 6673 case that functype is smaller than the valtype. */ 6674 retval = convert_for_initialization 6675 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING, 6676 "return", NULL_TREE, 0); 6677 retval = convert (valtype, retval); 6678 6679 /* If the conversion failed, treat this just like `return;'. */ 6680 if (retval == error_mark_node) 6681 return retval; 6682 /* We can't initialize a register from a AGGR_INIT_EXPR. */ 6683 else if (! current_function_returns_struct 6684 && TREE_CODE (retval) == TARGET_EXPR 6685 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR) 6686 retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval, 6687 TREE_OPERAND (retval, 0)); 6688 else 6689 maybe_warn_about_returning_address_of_local (retval); 6690 } 6691 6692 /* Actually copy the value returned into the appropriate location. */ 6693 if (retval && retval != result) 6694 retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval); 6695 6696 return retval; 6697} 6698 6699 6700/* Returns nonzero if the pointer-type FROM can be converted to the 6701 pointer-type TO via a qualification conversion. If CONSTP is -1, 6702 then we return nonzero if the pointers are similar, and the 6703 cv-qualification signature of FROM is a proper subset of that of TO. 6704 6705 If CONSTP is positive, then all outer pointers have been 6706 const-qualified. */ 6707 6708static int 6709comp_ptr_ttypes_real (tree to, tree from, int constp) 6710{ 6711 bool to_more_cv_qualified = false; 6712 6713 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from)) 6714 { 6715 if (TREE_CODE (to) != TREE_CODE (from)) 6716 return 0; 6717 6718 if (TREE_CODE (from) == OFFSET_TYPE 6719 && !same_type_p (TYPE_OFFSET_BASETYPE (from), 6720 TYPE_OFFSET_BASETYPE (to))) 6721 return 0; 6722 6723 /* Const and volatile mean something different for function types, 6724 so the usual checks are not appropriate. */ 6725 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE) 6726 { 6727 /* In Objective-C++, some types may have been 'volatilized' by 6728 the compiler for EH; when comparing them here, the volatile 6729 qualification must be ignored. */ 6730 bool objc_quals_match = objc_type_quals_match (to, from); 6731 6732 if (!at_least_as_qualified_p (to, from) && !objc_quals_match) 6733 return 0; 6734 6735 if (!at_least_as_qualified_p (from, to) && !objc_quals_match) 6736 { 6737 if (constp == 0) 6738 return 0; 6739 to_more_cv_qualified = true; 6740 } 6741 6742 if (constp > 0) 6743 constp &= TYPE_READONLY (to); 6744 } 6745 6746 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to)) 6747 return ((constp >= 0 || to_more_cv_qualified) 6748 && same_type_ignoring_top_level_qualifiers_p (to, from)); 6749 } 6750} 6751 6752/* When comparing, say, char ** to char const **, this function takes 6753 the 'char *' and 'char const *'. Do not pass non-pointer/reference 6754 types to this function. */ 6755 6756int 6757comp_ptr_ttypes (tree to, tree from) 6758{ 6759 return comp_ptr_ttypes_real (to, from, 1); 6760} 6761 6762/* Returns 1 if to and from are (possibly multi-level) pointers to the same 6763 type or inheritance-related types, regardless of cv-quals. */ 6764 6765int 6766ptr_reasonably_similar (tree to, tree from) 6767{ 6768 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from)) 6769 { 6770 /* Any target type is similar enough to void. */ 6771 if (TREE_CODE (to) == VOID_TYPE 6772 || TREE_CODE (from) == VOID_TYPE) 6773 return 1; 6774 6775 if (TREE_CODE (to) != TREE_CODE (from)) 6776 return 0; 6777 6778 if (TREE_CODE (from) == OFFSET_TYPE 6779 && comptypes (TYPE_OFFSET_BASETYPE (to), 6780 TYPE_OFFSET_BASETYPE (from), 6781 COMPARE_BASE | COMPARE_DERIVED)) 6782 continue; 6783 6784 if (TREE_CODE (to) == VECTOR_TYPE 6785 && vector_types_convertible_p (to, from)) 6786 return 1; 6787 6788 if (TREE_CODE (to) == INTEGER_TYPE 6789 && TYPE_PRECISION (to) == TYPE_PRECISION (from)) 6790 return 1; 6791 6792 if (TREE_CODE (to) == FUNCTION_TYPE) 6793 return 1; 6794 6795 if (TREE_CODE (to) != POINTER_TYPE) 6796 return comptypes 6797 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from), 6798 COMPARE_BASE | COMPARE_DERIVED); 6799 } 6800} 6801 6802/* Return true if TO and FROM (both of which are POINTER_TYPEs or 6803 pointer-to-member types) are the same, ignoring cv-qualification at 6804 all levels. */ 6805 6806bool 6807comp_ptr_ttypes_const (tree to, tree from) 6808{ 6809 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from)) 6810 { 6811 if (TREE_CODE (to) != TREE_CODE (from)) 6812 return false; 6813 6814 if (TREE_CODE (from) == OFFSET_TYPE 6815 && same_type_p (TYPE_OFFSET_BASETYPE (from), 6816 TYPE_OFFSET_BASETYPE (to))) 6817 continue; 6818 6819 if (TREE_CODE (to) != POINTER_TYPE) 6820 return same_type_ignoring_top_level_qualifiers_p (to, from); 6821 } 6822} 6823 6824/* Returns the type qualifiers for this type, including the qualifiers on the 6825 elements for an array type. */ 6826 6827int 6828cp_type_quals (tree type) 6829{ 6830 type = strip_array_types (type); 6831 if (type == error_mark_node) 6832 return TYPE_UNQUALIFIED; 6833 return TYPE_QUALS (type); 6834} 6835 6836/* Returns nonzero if the TYPE is const from a C++ perspective: look inside 6837 arrays. */ 6838 6839bool 6840cp_type_readonly (tree type) 6841{ 6842 type = strip_array_types (type); 6843 return TYPE_READONLY (type); 6844} 6845 6846/* Returns nonzero if the TYPE contains a mutable member. */ 6847 6848bool 6849cp_has_mutable_p (tree type) 6850{ 6851 type = strip_array_types (type); 6852 6853 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type); 6854} 6855 6856/* Apply the TYPE_QUALS to the new DECL. */ 6857void 6858cp_apply_type_quals_to_decl (int type_quals, tree decl) 6859{ 6860 tree type = TREE_TYPE (decl); 6861 6862 if (type == error_mark_node) 6863 return; 6864 6865 if (TREE_CODE (type) == FUNCTION_TYPE 6866 && type_quals != TYPE_UNQUALIFIED) 6867 { 6868 /* This was an error in C++98 (cv-qualifiers cannot be added to 6869 a function type), but DR 295 makes the code well-formed by 6870 dropping the extra qualifiers. */ 6871 if (pedantic) 6872 { 6873 tree bad_type = build_qualified_type (type, type_quals); 6874 pedwarn ("ignoring %qV qualifiers added to function type %qT", 6875 bad_type, type); 6876 } 6877 6878 TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type); 6879 return; 6880 } 6881 6882 /* Avoid setting TREE_READONLY incorrectly. */ 6883 if (/* If the object has a constructor, the constructor may modify 6884 the object. */ 6885 TYPE_NEEDS_CONSTRUCTING (type) 6886 /* If the type isn't complete, we don't know yet if it will need 6887 constructing. */ 6888 || !COMPLETE_TYPE_P (type) 6889 /* If the type has a mutable component, that component might be 6890 modified. */ 6891 || TYPE_HAS_MUTABLE_P (type)) 6892 type_quals &= ~TYPE_QUAL_CONST; 6893 6894 c_apply_type_quals_to_decl (type_quals, decl); 6895} 6896 6897/* Subroutine of casts_away_constness. Make T1 and T2 point at 6898 exemplar types such that casting T1 to T2 is casting away constness 6899 if and only if there is no implicit conversion from T1 to T2. */ 6900 6901static void 6902casts_away_constness_r (tree *t1, tree *t2) 6903{ 6904 int quals1; 6905 int quals2; 6906 6907 /* [expr.const.cast] 6908 6909 For multi-level pointer to members and multi-level mixed pointers 6910 and pointers to members (conv.qual), the "member" aspect of a 6911 pointer to member level is ignored when determining if a const 6912 cv-qualifier has been cast away. */ 6913 /* [expr.const.cast] 6914 6915 For two pointer types: 6916 6917 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type 6918 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type 6919 K is min(N,M) 6920 6921 casting from X1 to X2 casts away constness if, for a non-pointer 6922 type T there does not exist an implicit conversion (clause 6923 _conv_) from: 6924 6925 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N * 6926 6927 to 6928 6929 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */ 6930 if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1)) 6931 || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2))) 6932 { 6933 *t1 = cp_build_qualified_type (void_type_node, 6934 cp_type_quals (*t1)); 6935 *t2 = cp_build_qualified_type (void_type_node, 6936 cp_type_quals (*t2)); 6937 return; 6938 } 6939 6940 quals1 = cp_type_quals (*t1); 6941 quals2 = cp_type_quals (*t2); 6942 6943 if (TYPE_PTRMEM_P (*t1)) 6944 *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1); 6945 else 6946 *t1 = TREE_TYPE (*t1); 6947 if (TYPE_PTRMEM_P (*t2)) 6948 *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2); 6949 else 6950 *t2 = TREE_TYPE (*t2); 6951 6952 casts_away_constness_r (t1, t2); 6953 *t1 = build_pointer_type (*t1); 6954 *t2 = build_pointer_type (*t2); 6955 *t1 = cp_build_qualified_type (*t1, quals1); 6956 *t2 = cp_build_qualified_type (*t2, quals2); 6957} 6958 6959/* Returns nonzero if casting from TYPE1 to TYPE2 casts away 6960 constness. */ 6961 6962static bool 6963casts_away_constness (tree t1, tree t2) 6964{ 6965 if (TREE_CODE (t2) == REFERENCE_TYPE) 6966 { 6967 /* [expr.const.cast] 6968 6969 Casting from an lvalue of type T1 to an lvalue of type T2 6970 using a reference cast casts away constness if a cast from an 6971 rvalue of type "pointer to T1" to the type "pointer to T2" 6972 casts away constness. */ 6973 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1); 6974 return casts_away_constness (build_pointer_type (t1), 6975 build_pointer_type (TREE_TYPE (t2))); 6976 } 6977 6978 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2)) 6979 /* [expr.const.cast] 6980 6981 Casting from an rvalue of type "pointer to data member of X 6982 of type T1" to the type "pointer to data member of Y of type 6983 T2" casts away constness if a cast from an rvalue of type 6984 "pointer to T1" to the type "pointer to T2" casts away 6985 constness. */ 6986 return casts_away_constness 6987 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)), 6988 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2))); 6989 6990 /* Casting away constness is only something that makes sense for 6991 pointer or reference types. */ 6992 if (TREE_CODE (t1) != POINTER_TYPE 6993 || TREE_CODE (t2) != POINTER_TYPE) 6994 return false; 6995 6996 /* Top-level qualifiers don't matter. */ 6997 t1 = TYPE_MAIN_VARIANT (t1); 6998 t2 = TYPE_MAIN_VARIANT (t2); 6999 casts_away_constness_r (&t1, &t2); 7000 if (!can_convert (t2, t1)) 7001 return true; 7002 7003 return false; 7004} 7005 7006/* If T is a REFERENCE_TYPE return the type to which T refers. 7007 Otherwise, return T itself. */ 7008 7009tree 7010non_reference (tree t) 7011{ 7012 if (TREE_CODE (t) == REFERENCE_TYPE) 7013 t = TREE_TYPE (t); 7014 return t; 7015} 7016 7017 7018/* Return nonzero if REF is an lvalue valid for this language; 7019 otherwise, print an error message and return zero. USE says 7020 how the lvalue is being used and so selects the error message. */ 7021 7022int 7023lvalue_or_else (tree ref, enum lvalue_use use) 7024{ 7025 int win = lvalue_p (ref); 7026 7027 if (!win) 7028 lvalue_error (use); 7029 7030 return win; 7031} 7032