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