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
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
21 Boston, 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
46 static tree pfn_from_ptrmemfunc (tree);
47 static tree convert_for_assignment (tree, tree, const char *, tree, int);
48 static tree cp_pointer_int_sum (enum tree_code, tree, tree);
49 static tree rationalize_conditional_expr (enum tree_code, tree);
50 static int comp_ptr_ttypes_real (tree, tree, int);
51 static bool comp_except_types (tree, tree, bool);
52 static bool comp_array_types (tree, tree, bool);
53 static tree common_base_type (tree, tree);
54 static tree pointer_diff (tree, tree, tree);
55 static tree get_delta_difference (tree, tree, bool, bool);
56 static void casts_away_constness_r (tree *, tree *);
57 static bool casts_away_constness (tree, tree);
58 static void maybe_warn_about_returning_address_of_local (tree);
59 static tree lookup_destructor (tree, tree, tree);
60 static 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
67 tree
require_complete_type(tree value)68 require_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
98 tree
complete_type(tree type)99 complete_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
134 tree
complete_type_or_else(tree type,tree value)135 complete_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
152 int
type_unknown_p(tree exp)153 type_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
167 static tree
commonparms(tree p1,tree p2)168 commonparms (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. */
228 static tree
original_type(tree t)229 original_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
250 tree
type_after_usual_arithmetic_conversions(tree t1,tree t2)251 type_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
400 static tree
composite_pointer_type_r(tree t1,tree t2,const char * location)401 composite_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
471 tree
composite_pointer_type(tree t1,tree t2,tree arg1,tree arg2,const char * location)472 composite_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
586 tree
merge_types(tree t1,tree t2)587 merge_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
748 tree
common_type(tree t1,tree t2)749 common_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
792 static bool
comp_except_types(tree a,tree b,bool exact)793 comp_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
827 bool
comp_except_specs(tree t1,tree t2,bool exact)828 comp_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
874 static bool
comp_array_types(tree t1,tree t2,bool allow_redeclaration)875 comp_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
936 bool
comptypes(tree t1,tree t2,int strict)937 comptypes (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
1108 bool
at_least_as_qualified_p(tree type1,tree type2)1109 at_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
1121 int
comp_cv_qualification(tree type1,tree type2)1122 comp_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
1142 int
comp_cv_qual_signature(tree type1,tree type2)1143 comp_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
1157 static tree
common_base_type(tree tt1,tree tt2)1158 common_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
1213 bool
compparms(tree parms1,tree parms2)1214 compparms (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
1239 tree
cxx_sizeof_or_alignof_type(tree type,enum tree_code op,bool complain)1240 cxx_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
1284 static tree
cxx_sizeof_expr(tree e)1285 cxx_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
1328 static tree
cxx_alignof_expr(tree e)1329 cxx_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
1377 tree
cxx_sizeof_or_alignof_expr(tree e,enum tree_code op)1378 cxx_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
1402 bool
invalid_nonstatic_memfn_p(tree expr)1403 invalid_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
1417 tree
is_bitfield_expr_with_lowered_type(tree exp)1418 is_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
1456 tree
unlowered_expr_type(tree exp)1457 unlowered_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
1479 tree
decay_conversion(tree exp)1480 decay_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
1584 tree
default_conversion(tree exp)1585 default_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
1602 tree
perform_integral_promotions(tree expr)1603 perform_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
1625 tree
inline_conversion(tree exp)1626 inline_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
1637 int
string_conv_p(tree totype,tree exp,int warn)1638 string_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
1685 static tree
rationalize_conditional_expr(enum tree_code code,tree t)1686 rationalize_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
1717 tree
lookup_anon_field(tree t,tree type)1718 lookup_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
1760 tree
build_class_member_access_expr(tree object,tree member,tree access_path,bool preserve_reference)1761 build_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
1994 static tree
lookup_destructor(tree object,tree scope,tree dtor_name)1995 lookup_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
2024 void
check_template_keyword(tree decl)2025 check_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
2082 tree
finish_class_member_access_expr(tree object,tree name,bool template_p)2083 finish_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
2255 tree
build_ptrmemfunc_access_expr(tree ptrmem,tree member_name)2256 build_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
2283 tree
build_x_indirect_ref(tree expr,const char * errorstring)2284 build_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
2307 tree
build_indirect_ref(tree ptr,const char * errorstring)2308 build_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
2387 tree
build_array_ref(tree array,tree idx)2388 build_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
2534 tree
get_member_function_from_ptrfunc(tree * instance_ptrptr,tree function)2535 get_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
2646 tree
build_function_call(tree function,tree params)2647 build_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
2754 static tree
convert_arguments(tree typelist,tree values,tree fndecl,int flags)2755 convert_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
2910 tree
build_x_binary_op(enum tree_code code,tree arg1,tree arg2,bool * overloaded_p)2911 build_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
2960 tree
build_binary_op(enum tree_code code,tree orig_op0,tree orig_op1,int convert_p ATTRIBUTE_UNUSED)2961 build_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
3768 static tree
cp_pointer_int_sum(enum tree_code resultcode,tree ptrop,tree intop)3769 cp_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
3787 static tree
pointer_diff(tree op0,tree op1,tree ptrtype)3788 pointer_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
3832 tree
build_x_unary_op(enum tree_code code,tree xarg)3833 build_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
3923 tree
cp_truthvalue_conversion(tree expr)3924 cp_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
3935 tree
condition_conversion(tree expr)3936 condition_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
3950 tree
build_address(tree t)3951 build_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
3965 tree
build_nop(tree type,tree expr)3966 build_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
3982 tree
build_unary_op(enum tree_code code,tree xarg,int noconvert)3983 build_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
4477 tree
unary_complex_lvalue(enum tree_code code,tree arg)4478 unary_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
4566 bool
cxx_mark_addressable(tree exp)4567 cxx_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
4638 tree
build_x_conditional_expr(tree ifexp,tree op1,tree op2)4639 build_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
build_x_compound_expr_from_list(tree list,const char * msg)4672 tree 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
4690 tree
build_x_compound_expr(tree op1,tree op2)4691 build_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
4719 tree
build_compound_expr(tree lhs,tree rhs)4720 build_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
4748 static void
4749 check_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
4765 tree
convert_ptrmem(tree type,tree expr,bool allow_inverse_p,bool c_cast_p)4766 convert_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
4794 static tree
ignore_overflows(tree expr,tree orig)4795 ignore_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
4828 static tree
build_static_cast_1(tree type,tree expr,bool c_cast_p,bool * valid_p)4829 build_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
5048 tree
build_static_cast(tree type,tree expr)5049 build_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
5087 tree
convert_member_func_to_ptr(tree type,tree expr)5088 convert_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
5119 static tree
build_reinterpret_cast_1(tree type,tree expr,bool c_cast_p,bool * valid_p)5120 build_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
5269 tree
build_reinterpret_cast(tree type,tree expr)5270 build_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
5297 static tree
build_const_cast_1(tree dst_type,tree expr,bool complain,bool * valid_p)5298 build_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
5408 tree
build_const_cast(tree type,tree expr)5409 build_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
5432 tree
build_c_cast(tree type,tree expr)5433 build_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
5539 tree
build_modify_expr(tree lhs,enum tree_code modifycode,tree rhs)5540 build_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
5861 tree
build_x_modify_expr(tree lhs,enum tree_code modifycode,tree rhs)5862 build_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
5895 static tree
get_delta_difference(tree from,tree to,bool allow_inverse_p,bool c_cast_p)5896 get_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
5958 tree
build_ptrmemfunc1(tree type,tree delta,tree pfn)5959 build_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
5999 tree
build_ptrmemfunc(tree type,tree pfn,int force,bool c_cast_p)6000 build_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
6089 void
expand_ptrmemfunc_cst(tree cst,tree * delta,tree * pfn)6090 expand_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
6158 static tree
pfn_from_ptrmemfunc(tree t)6159 pfn_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
6180 static tree
convert_for_assignment(tree type,tree rhs,const char * errtype,tree fndecl,int parmnum)6181 convert_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
6302 tree
convert_for_initialization(tree exp,tree type,tree rhs,int flags,const char * errtype,tree fndecl,int parmnum)6303 convert_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
6378 static void
maybe_warn_about_returning_address_of_local(tree retval)6379 maybe_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
6444 tree
check_return_expr(tree retval,bool * no_warning)6445 check_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_ALIGN (retval)
6608 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6609 && same_type_p ((TYPE_MAIN_VARIANT
6610 (TREE_TYPE (retval))),
6611 (TYPE_MAIN_VARIANT
6612 (TREE_TYPE (TREE_TYPE (current_function_decl))))))
6613 current_function_return_value = retval;
6614 else
6615 current_function_return_value = error_mark_node;
6616 }
6617
6618 /* We don't need to do any conversions when there's nothing being
6619 returned. */
6620 if (!retval)
6621 return NULL_TREE;
6622
6623 /* Do any required conversions. */
6624 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6625 /* No conversions are required. */
6626 ;
6627 else
6628 {
6629 /* The type the function is declared to return. */
6630 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6631
6632 /* The functype's return type will have been set to void, if it
6633 was an incomplete type. Just treat this as 'return;' */
6634 if (VOID_TYPE_P (functype))
6635 return error_mark_node;
6636
6637 /* First convert the value to the function's return type, then
6638 to the type of return value's location to handle the
6639 case that functype is smaller than the valtype. */
6640 retval = convert_for_initialization
6641 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
6642 "return", NULL_TREE, 0);
6643 retval = convert (valtype, retval);
6644
6645 /* If the conversion failed, treat this just like `return;'. */
6646 if (retval == error_mark_node)
6647 return retval;
6648 /* We can't initialize a register from a AGGR_INIT_EXPR. */
6649 else if (! current_function_returns_struct
6650 && TREE_CODE (retval) == TARGET_EXPR
6651 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
6652 retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6653 TREE_OPERAND (retval, 0));
6654 else
6655 maybe_warn_about_returning_address_of_local (retval);
6656 }
6657
6658 /* Actually copy the value returned into the appropriate location. */
6659 if (retval && retval != result)
6660 retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
6661
6662 return retval;
6663 }
6664
6665
6666 /* Returns nonzero if the pointer-type FROM can be converted to the
6667 pointer-type TO via a qualification conversion. If CONSTP is -1,
6668 then we return nonzero if the pointers are similar, and the
6669 cv-qualification signature of FROM is a proper subset of that of TO.
6670
6671 If CONSTP is positive, then all outer pointers have been
6672 const-qualified. */
6673
6674 static int
comp_ptr_ttypes_real(tree to,tree from,int constp)6675 comp_ptr_ttypes_real (tree to, tree from, int constp)
6676 {
6677 bool to_more_cv_qualified = false;
6678
6679 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6680 {
6681 if (TREE_CODE (to) != TREE_CODE (from))
6682 return 0;
6683
6684 if (TREE_CODE (from) == OFFSET_TYPE
6685 && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6686 TYPE_OFFSET_BASETYPE (to)))
6687 return 0;
6688
6689 /* Const and volatile mean something different for function types,
6690 so the usual checks are not appropriate. */
6691 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6692 {
6693 /* In Objective-C++, some types may have been 'volatilized' by
6694 the compiler for EH; when comparing them here, the volatile
6695 qualification must be ignored. */
6696 bool objc_quals_match = objc_type_quals_match (to, from);
6697
6698 if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
6699 return 0;
6700
6701 if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
6702 {
6703 if (constp == 0)
6704 return 0;
6705 to_more_cv_qualified = true;
6706 }
6707
6708 if (constp > 0)
6709 constp &= TYPE_READONLY (to);
6710 }
6711
6712 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
6713 return ((constp >= 0 || to_more_cv_qualified)
6714 && same_type_ignoring_top_level_qualifiers_p (to, from));
6715 }
6716 }
6717
6718 /* When comparing, say, char ** to char const **, this function takes
6719 the 'char *' and 'char const *'. Do not pass non-pointer/reference
6720 types to this function. */
6721
6722 int
comp_ptr_ttypes(tree to,tree from)6723 comp_ptr_ttypes (tree to, tree from)
6724 {
6725 return comp_ptr_ttypes_real (to, from, 1);
6726 }
6727
6728 /* Returns 1 if to and from are (possibly multi-level) pointers to the same
6729 type or inheritance-related types, regardless of cv-quals. */
6730
6731 int
ptr_reasonably_similar(tree to,tree from)6732 ptr_reasonably_similar (tree to, tree from)
6733 {
6734 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6735 {
6736 /* Any target type is similar enough to void. */
6737 if (TREE_CODE (to) == VOID_TYPE
6738 || TREE_CODE (from) == VOID_TYPE)
6739 return 1;
6740
6741 if (TREE_CODE (to) != TREE_CODE (from))
6742 return 0;
6743
6744 if (TREE_CODE (from) == OFFSET_TYPE
6745 && comptypes (TYPE_OFFSET_BASETYPE (to),
6746 TYPE_OFFSET_BASETYPE (from),
6747 COMPARE_BASE | COMPARE_DERIVED))
6748 continue;
6749
6750 if (TREE_CODE (to) == VECTOR_TYPE
6751 && vector_types_convertible_p (to, from))
6752 return 1;
6753
6754 if (TREE_CODE (to) == INTEGER_TYPE
6755 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6756 return 1;
6757
6758 if (TREE_CODE (to) == FUNCTION_TYPE)
6759 return 1;
6760
6761 if (TREE_CODE (to) != POINTER_TYPE)
6762 return comptypes
6763 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
6764 COMPARE_BASE | COMPARE_DERIVED);
6765 }
6766 }
6767
6768 /* Return true if TO and FROM (both of which are POINTER_TYPEs or
6769 pointer-to-member types) are the same, ignoring cv-qualification at
6770 all levels. */
6771
6772 bool
comp_ptr_ttypes_const(tree to,tree from)6773 comp_ptr_ttypes_const (tree to, tree from)
6774 {
6775 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6776 {
6777 if (TREE_CODE (to) != TREE_CODE (from))
6778 return false;
6779
6780 if (TREE_CODE (from) == OFFSET_TYPE
6781 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6782 TYPE_OFFSET_BASETYPE (to)))
6783 continue;
6784
6785 if (TREE_CODE (to) != POINTER_TYPE)
6786 return same_type_ignoring_top_level_qualifiers_p (to, from);
6787 }
6788 }
6789
6790 /* Returns the type qualifiers for this type, including the qualifiers on the
6791 elements for an array type. */
6792
6793 int
cp_type_quals(tree type)6794 cp_type_quals (tree type)
6795 {
6796 type = strip_array_types (type);
6797 if (type == error_mark_node)
6798 return TYPE_UNQUALIFIED;
6799 return TYPE_QUALS (type);
6800 }
6801
6802 /* Returns nonzero if the TYPE is const from a C++ perspective: look inside
6803 arrays. */
6804
6805 bool
cp_type_readonly(tree type)6806 cp_type_readonly (tree type)
6807 {
6808 type = strip_array_types (type);
6809 return TYPE_READONLY (type);
6810 }
6811
6812 /* Returns nonzero if the TYPE contains a mutable member. */
6813
6814 bool
cp_has_mutable_p(tree type)6815 cp_has_mutable_p (tree type)
6816 {
6817 type = strip_array_types (type);
6818
6819 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6820 }
6821
6822 /* Apply the TYPE_QUALS to the new DECL. */
6823 void
cp_apply_type_quals_to_decl(int type_quals,tree decl)6824 cp_apply_type_quals_to_decl (int type_quals, tree decl)
6825 {
6826 tree type = TREE_TYPE (decl);
6827
6828 if (type == error_mark_node)
6829 return;
6830
6831 if (TREE_CODE (type) == FUNCTION_TYPE
6832 && type_quals != TYPE_UNQUALIFIED)
6833 {
6834 /* This was an error in C++98 (cv-qualifiers cannot be added to
6835 a function type), but DR 295 makes the code well-formed by
6836 dropping the extra qualifiers. */
6837 if (pedantic)
6838 {
6839 tree bad_type = build_qualified_type (type, type_quals);
6840 pedwarn ("ignoring %qV qualifiers added to function type %qT",
6841 bad_type, type);
6842 }
6843
6844 TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
6845 return;
6846 }
6847
6848 /* Avoid setting TREE_READONLY incorrectly. */
6849 if (/* If the object has a constructor, the constructor may modify
6850 the object. */
6851 TYPE_NEEDS_CONSTRUCTING (type)
6852 /* If the type isn't complete, we don't know yet if it will need
6853 constructing. */
6854 || !COMPLETE_TYPE_P (type)
6855 /* If the type has a mutable component, that component might be
6856 modified. */
6857 || TYPE_HAS_MUTABLE_P (type))
6858 type_quals &= ~TYPE_QUAL_CONST;
6859
6860 c_apply_type_quals_to_decl (type_quals, decl);
6861 }
6862
6863 /* Subroutine of casts_away_constness. Make T1 and T2 point at
6864 exemplar types such that casting T1 to T2 is casting away constness
6865 if and only if there is no implicit conversion from T1 to T2. */
6866
6867 static void
casts_away_constness_r(tree * t1,tree * t2)6868 casts_away_constness_r (tree *t1, tree *t2)
6869 {
6870 int quals1;
6871 int quals2;
6872
6873 /* [expr.const.cast]
6874
6875 For multi-level pointer to members and multi-level mixed pointers
6876 and pointers to members (conv.qual), the "member" aspect of a
6877 pointer to member level is ignored when determining if a const
6878 cv-qualifier has been cast away. */
6879 /* [expr.const.cast]
6880
6881 For two pointer types:
6882
6883 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
6884 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
6885 K is min(N,M)
6886
6887 casting from X1 to X2 casts away constness if, for a non-pointer
6888 type T there does not exist an implicit conversion (clause
6889 _conv_) from:
6890
6891 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
6892
6893 to
6894
6895 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
6896 if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
6897 || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
6898 {
6899 *t1 = cp_build_qualified_type (void_type_node,
6900 cp_type_quals (*t1));
6901 *t2 = cp_build_qualified_type (void_type_node,
6902 cp_type_quals (*t2));
6903 return;
6904 }
6905
6906 quals1 = cp_type_quals (*t1);
6907 quals2 = cp_type_quals (*t2);
6908
6909 if (TYPE_PTRMEM_P (*t1))
6910 *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
6911 else
6912 *t1 = TREE_TYPE (*t1);
6913 if (TYPE_PTRMEM_P (*t2))
6914 *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
6915 else
6916 *t2 = TREE_TYPE (*t2);
6917
6918 casts_away_constness_r (t1, t2);
6919 *t1 = build_pointer_type (*t1);
6920 *t2 = build_pointer_type (*t2);
6921 *t1 = cp_build_qualified_type (*t1, quals1);
6922 *t2 = cp_build_qualified_type (*t2, quals2);
6923 }
6924
6925 /* Returns nonzero if casting from TYPE1 to TYPE2 casts away
6926 constness. */
6927
6928 static bool
casts_away_constness(tree t1,tree t2)6929 casts_away_constness (tree t1, tree t2)
6930 {
6931 if (TREE_CODE (t2) == REFERENCE_TYPE)
6932 {
6933 /* [expr.const.cast]
6934
6935 Casting from an lvalue of type T1 to an lvalue of type T2
6936 using a reference cast casts away constness if a cast from an
6937 rvalue of type "pointer to T1" to the type "pointer to T2"
6938 casts away constness. */
6939 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
6940 return casts_away_constness (build_pointer_type (t1),
6941 build_pointer_type (TREE_TYPE (t2)));
6942 }
6943
6944 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6945 /* [expr.const.cast]
6946
6947 Casting from an rvalue of type "pointer to data member of X
6948 of type T1" to the type "pointer to data member of Y of type
6949 T2" casts away constness if a cast from an rvalue of type
6950 "pointer to T1" to the type "pointer to T2" casts away
6951 constness. */
6952 return casts_away_constness
6953 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
6954 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
6955
6956 /* Casting away constness is only something that makes sense for
6957 pointer or reference types. */
6958 if (TREE_CODE (t1) != POINTER_TYPE
6959 || TREE_CODE (t2) != POINTER_TYPE)
6960 return false;
6961
6962 /* Top-level qualifiers don't matter. */
6963 t1 = TYPE_MAIN_VARIANT (t1);
6964 t2 = TYPE_MAIN_VARIANT (t2);
6965 casts_away_constness_r (&t1, &t2);
6966 if (!can_convert (t2, t1))
6967 return true;
6968
6969 return false;
6970 }
6971
6972 /* If T is a REFERENCE_TYPE return the type to which T refers.
6973 Otherwise, return T itself. */
6974
6975 tree
non_reference(tree t)6976 non_reference (tree t)
6977 {
6978 if (TREE_CODE (t) == REFERENCE_TYPE)
6979 t = TREE_TYPE (t);
6980 return t;
6981 }
6982
6983
6984 /* Return nonzero if REF is an lvalue valid for this language;
6985 otherwise, print an error message and return zero. USE says
6986 how the lvalue is being used and so selects the error message. */
6987
6988 int
lvalue_or_else(tree ref,enum lvalue_use use)6989 lvalue_or_else (tree ref, enum lvalue_use use)
6990 {
6991 int win = lvalue_p (ref);
6992
6993 if (!win)
6994 lvalue_error (use);
6995
6996 return win;
6997 }
6998