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