]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/typeck.c
re PR c/23075 (Redundant / bogus warning)
[thirdparty/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 {
5ebbc0ee
NS
3618 if (TREE_CODE (xarg) != OFFSET_REF
3619 || !TYPE_P (TREE_OPERAND (xarg, 0)))
1e14c7f0 3620 {
5ebbc0ee 3621 error ("invalid use of %qE to form a pointer-to-member-function",
1e14c7f0 3622 xarg);
5ebbc0ee
NS
3623 if (TREE_CODE (xarg) != OFFSET_REF)
3624 inform (" a qualified-id is required");
1e14c7f0
GDR
3625 return error_mark_node;
3626 }
3627 else
3628 {
c4f73174 3629 error ("parenthesis around %qE cannot be used to form a"
0cbd7506 3630 " pointer-to-member-function",
1e14c7f0
GDR
3631 xarg);
3632 PTRMEM_OK_P (xarg) = 1;
3633 }
3634 }
c8094d83 3635
19420d00 3636 if (TREE_CODE (xarg) == OFFSET_REF)
0cbd7506
MS
3637 {
3638 ptrmem = PTRMEM_OK_P (xarg);
c8094d83 3639
0cbd7506
MS
3640 if (!ptrmem && !flag_ms_extensions
3641 && TREE_CODE (TREE_TYPE (TREE_OPERAND (xarg, 1))) == METHOD_TYPE)
4542128e
NS
3642 {
3643 /* A single non-static member, make sure we don't allow a
0cbd7506 3644 pointer-to-member. */
f293ce4b
RS
3645 xarg = build2 (OFFSET_REF, TREE_TYPE (xarg),
3646 TREE_OPERAND (xarg, 0),
3647 ovl_cons (TREE_OPERAND (xarg, 1), NULL_TREE));
4542128e 3648 PTRMEM_OK_P (xarg) = ptrmem;
c8094d83 3649 }
0cbd7506 3650 }
19420d00 3651 else if (TREE_CODE (xarg) == TARGET_EXPR)
d4ee4d25 3652 warning (0, "taking address of temporary");
d17811fd 3653 exp = build_unary_op (ADDR_EXPR, xarg, 0);
c91a56d2
MS
3654 }
3655
d17811fd 3656 if (processing_template_decl && exp != error_mark_node)
6439fffd
KL
3657 exp = build_min_non_dep (code, exp, orig_expr,
3658 /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE);
3659 if (TREE_CODE (exp) == ADDR_EXPR)
3660 PTRMEM_OK_P (exp) = ptrmem;
19420d00 3661 return exp;
8d08fdba
MS
3662}
3663
78ef5b89
NB
3664/* Like c_common_truthvalue_conversion, but handle pointer-to-member
3665 constants, where a null value is represented by an INTEGER_CST of
3666 -1. */
96d6c610
JM
3667
3668tree
5671bf27 3669cp_truthvalue_conversion (tree expr)
96d6c610
JM
3670{
3671 tree type = TREE_TYPE (expr);
3672 if (TYPE_PTRMEM_P (type))
3673 return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
3674 else
78ef5b89 3675 return c_common_truthvalue_conversion (expr);
96d6c610
JM
3676}
3677
3678/* Just like cp_truthvalue_conversion, but we want a CLEANUP_POINT_EXPR. */
c8094d83 3679
2986ae00 3680tree
5671bf27 3681condition_conversion (tree expr)
2986ae00 3682{
5566b478 3683 tree t;
5156628f 3684 if (processing_template_decl)
5566b478 3685 return expr;
5d73aa63 3686 t = perform_implicit_conversion (boolean_type_node, expr);
0ad28dde 3687 t = fold_build_cleanup_point_expr (boolean_type_node, t);
8ccc31eb 3688 return t;
2986ae00 3689}
c8094d83 3690
7993382e
MM
3691/* Return an ADDR_EXPR giving the address of T. This function
3692 attempts no optimizations or simplifications; it is a low-level
3693 primitive. */
3694
3695tree
3696build_address (tree t)
3697{
3698 tree addr;
3699
3700 if (error_operand_p (t) || !cxx_mark_addressable (t))
3701 return error_mark_node;
3702
92af500d 3703 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (t)), t);
7993382e
MM
3704
3705 return addr;
3706}
3707
3708/* Return a NOP_EXPR converting EXPR to TYPE. */
3709
3710tree
3711build_nop (tree type, tree expr)
3712{
7993382e
MM
3713 if (type == error_mark_node || error_operand_p (expr))
3714 return expr;
6de9cd9a 3715 return build1 (NOP_EXPR, type, expr);
7993382e
MM
3716}
3717
8d08fdba
MS
3718/* C++: Must handle pointers to members.
3719
3720 Perhaps type instantiation should be extended to handle conversion
3721 from aggregates to types we don't yet know we want? (Or are those
3722 cases typically errors which should be reported?)
3723
3724 NOCONVERT nonzero suppresses the default promotions
3725 (such as from short to int). */
e92cc029 3726
8d08fdba 3727tree
acd8e2d0 3728build_unary_op (enum tree_code code, tree xarg, int noconvert)
8d08fdba
MS
3729{
3730 /* No default_conversion here. It causes trouble for ADDR_EXPR. */
926ce8bd
KH
3731 tree arg = xarg;
3732 tree argtype = 0;
d8e178a0 3733 const char *errstring = NULL;
8d08fdba 3734 tree val;
4de67c26 3735 const char *invalid_op_diag;
8d08fdba 3736
b7484fbe 3737 if (arg == error_mark_node)
8d08fdba
MS
3738 return error_mark_node;
3739
4de67c26
JM
3740 if ((invalid_op_diag
3741 = targetm.invalid_unary_op ((code == UNARY_PLUS_EXPR
3742 ? CONVERT_EXPR
3743 : code),
3744 TREE_TYPE (xarg))))
3745 {
3746 error (invalid_op_diag);
3747 return error_mark_node;
3748 }
3749
8d08fdba
MS
3750 switch (code)
3751 {
392e3d51 3752 case UNARY_PLUS_EXPR:
b7484fbe 3753 case NEGATE_EXPR:
8a21aa30
KC
3754 {
3755 int flags = WANT_ARITH | WANT_ENUM;
3756 /* Unary plus (but not unary minus) is allowed on pointers. */
392e3d51 3757 if (code == UNARY_PLUS_EXPR)
8a21aa30
KC
3758 flags |= WANT_POINTER;
3759 arg = build_expr_type_conversion (flags, arg, true);
e99f332f
GB
3760 if (!arg)
3761 errstring = (code == NEGATE_EXPR
3762 ? "wrong type argument to unary minus"
3763 : "wrong type argument to unary plus");
3764 else
3765 {
3766 if (!noconvert && CP_INTEGRAL_TYPE_P (TREE_TYPE (arg)))
3767 arg = perform_integral_promotions (arg);
3768
13a44ee0 3769 /* Make sure the result is not an lvalue: a unary plus or minus
e99f332f 3770 expression is always a rvalue. */
5cc53d4e 3771 arg = rvalue (arg);
e99f332f
GB
3772 }
3773 }
8d08fdba
MS
3774 break;
3775
3776 case BIT_NOT_EXPR:
37c46b43
MS
3777 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3778 {
3779 code = CONJ_EXPR;
3780 if (!noconvert)
3781 arg = default_conversion (arg);
3782 }
3783 else if (!(arg = build_expr_type_conversion (WANT_INT | WANT_ENUM,
b746c5dc 3784 arg, true)))
b7484fbe 3785 errstring = "wrong type argument to bit-complement";
8d08fdba 3786 else if (!noconvert)
0a72704b 3787 arg = perform_integral_promotions (arg);
8d08fdba
MS
3788 break;
3789
3790 case ABS_EXPR:
b746c5dc 3791 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
b7484fbe 3792 errstring = "wrong type argument to abs";
8d08fdba
MS
3793 else if (!noconvert)
3794 arg = default_conversion (arg);
3795 break;
3796
37c46b43
MS
3797 case CONJ_EXPR:
3798 /* Conjugating a real value is a no-op, but allow it anyway. */
b746c5dc 3799 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_ENUM, arg, true)))
37c46b43
MS
3800 errstring = "wrong type argument to conjugation";
3801 else if (!noconvert)
3802 arg = default_conversion (arg);
3803 break;
3804
8d08fdba 3805 case TRUTH_NOT_EXPR:
6cf4d1bc 3806 arg = perform_implicit_conversion (boolean_type_node, arg);
8d08fdba 3807 val = invert_truthvalue (arg);
2986ae00
MS
3808 if (arg != error_mark_node)
3809 return val;
3810 errstring = "in argument to unary !";
8d08fdba
MS
3811 break;
3812
3813 case NOP_EXPR:
3814 break;
c8094d83 3815
37c46b43
MS
3816 case REALPART_EXPR:
3817 if (TREE_CODE (arg) == COMPLEX_CST)
3818 return TREE_REALPART (arg);
3819 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
455f19cb
MM
3820 {
3821 arg = build1 (REALPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3822 return fold_if_not_in_template (arg);
3823 }
37c46b43
MS
3824 else
3825 return arg;
3826
3827 case IMAGPART_EXPR:
3828 if (TREE_CODE (arg) == COMPLEX_CST)
3829 return TREE_IMAGPART (arg);
3830 else if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
455f19cb
MM
3831 {
3832 arg = build1 (IMAGPART_EXPR, TREE_TYPE (TREE_TYPE (arg)), arg);
3833 return fold_if_not_in_template (arg);
3834 }
37c46b43
MS
3835 else
3836 return cp_convert (TREE_TYPE (arg), integer_zero_node);
c8094d83 3837
8d08fdba
MS
3838 case PREINCREMENT_EXPR:
3839 case POSTINCREMENT_EXPR:
3840 case PREDECREMENT_EXPR:
3841 case POSTDECREMENT_EXPR:
3842 /* Handle complex lvalues (when permitted)
3843 by reduction to simpler cases. */
3844
3845 val = unary_complex_lvalue (code, arg);
3846 if (val != 0)
3847 return val;
3848
37c46b43
MS
3849 /* Increment or decrement the real part of the value,
3850 and don't change the imaginary part. */
3851 if (TREE_CODE (TREE_TYPE (arg)) == COMPLEX_TYPE)
3852 {
3853 tree real, imag;
3854
3855 arg = stabilize_reference (arg);
3856 real = build_unary_op (REALPART_EXPR, arg, 1);
3857 imag = build_unary_op (IMAGPART_EXPR, arg, 1);
f293ce4b
RS
3858 return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
3859 build_unary_op (code, real, 1), imag);
37c46b43
MS
3860 }
3861
8d08fdba
MS
3862 /* Report invalid types. */
3863
b7484fbe 3864 if (!(arg = build_expr_type_conversion (WANT_ARITH | WANT_POINTER,
b746c5dc 3865 arg, true)))
8d08fdba
MS
3866 {
3867 if (code == PREINCREMENT_EXPR)
3868 errstring ="no pre-increment operator for type";
3869 else if (code == POSTINCREMENT_EXPR)
3870 errstring ="no post-increment operator for type";
3871 else if (code == PREDECREMENT_EXPR)
3872 errstring ="no pre-decrement operator for type";
3873 else
3874 errstring ="no post-decrement operator for type";
3875 break;
3876 }
3877
3878 /* Report something read-only. */
3879
91063b51 3880 if (CP_TYPE_CONST_P (TREE_TYPE (arg))
8d08fdba
MS
3881 || TREE_READONLY (arg))
3882 readonly_error (arg, ((code == PREINCREMENT_EXPR
3883 || code == POSTINCREMENT_EXPR)
3884 ? "increment" : "decrement"),
3885 0);
3886
3887 {
926ce8bd 3888 tree inc;
8d08fdba
MS
3889 tree result_type = TREE_TYPE (arg);
3890
3891 arg = get_unwidened (arg, 0);
3892 argtype = TREE_TYPE (arg);
3893
3894 /* ARM $5.2.5 last annotation says this should be forbidden. */
3895 if (TREE_CODE (argtype) == ENUMERAL_TYPE)
7e4d7898 3896 pedwarn ("ISO C++ forbids %sing an enum",
8d08fdba
MS
3897 (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
3898 ? "increment" : "decrement");
c8094d83 3899
8d08fdba
MS
3900 /* Compute the increment. */
3901
b7484fbe 3902 if (TREE_CODE (argtype) == POINTER_TYPE)
8d08fdba 3903 {
d0f062fb 3904 tree type = complete_type (TREE_TYPE (argtype));
c8094d83 3905
d0f062fb 3906 if (!COMPLETE_OR_VOID_TYPE_P (type))
a82e1a7d 3907 error ("cannot %s a pointer to incomplete type %qT",
0cbd7506
MS
3908 ((code == PREINCREMENT_EXPR
3909 || code == POSTINCREMENT_EXPR)
3910 ? "increment" : "decrement"), TREE_TYPE (argtype));
e62d5b58 3911 else if ((pedantic || warn_pointer_arith)
a5ac359a 3912 && !TYPE_PTROB_P (argtype))
a82e1a7d 3913 pedwarn ("ISO C++ forbids %sing a pointer of type %qT",
0cbd7506
MS
3914 ((code == PREINCREMENT_EXPR
3915 || code == POSTINCREMENT_EXPR)
3916 ? "increment" : "decrement"), argtype);
ea793912 3917 inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
8d08fdba
MS
3918 }
3919 else
3920 inc = integer_one_node;
3921
37c46b43 3922 inc = cp_convert (argtype, inc);
8d08fdba
MS
3923
3924 /* Handle incrementing a cast-expression. */
3925
3926 switch (TREE_CODE (arg))
3927 {
3928 case NOP_EXPR:
3929 case CONVERT_EXPR:
3930 case FLOAT_EXPR:
3931 case FIX_TRUNC_EXPR:
3932 case FIX_FLOOR_EXPR:
3933 case FIX_ROUND_EXPR:
3934 case FIX_CEIL_EXPR:
3935 {
72b7eeff 3936 tree incremented, modify, value, compound;
f0e01782 3937 if (! lvalue_p (arg) && pedantic)
8251199e 3938 pedwarn ("cast to non-reference type used as lvalue");
8d08fdba
MS
3939 arg = stabilize_reference (arg);
3940 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3941 value = arg;
3942 else
3943 value = save_expr (arg);
f293ce4b
RS
3944 incremented = build2 (((code == PREINCREMENT_EXPR
3945 || code == POSTINCREMENT_EXPR)
3946 ? PLUS_EXPR : MINUS_EXPR),
3947 argtype, value, inc);
72b7eeff 3948
8d08fdba 3949 modify = build_modify_expr (arg, NOP_EXPR, incremented);
f293ce4b
RS
3950 compound = build2 (COMPOUND_EXPR, TREE_TYPE (arg),
3951 modify, value);
72b7eeff 3952
e92cc029 3953 /* Eliminate warning about unused result of + or -. */
6de9cd9a 3954 TREE_NO_WARNING (compound) = 1;
72b7eeff 3955 return compound;
8d08fdba 3956 }
7f85441b
KG
3957
3958 default:
3959 break;
8d08fdba
MS
3960 }
3961
8d08fdba
MS
3962 /* Complain about anything else that is not a true lvalue. */
3963 if (!lvalue_or_else (arg, ((code == PREINCREMENT_EXPR
3964 || code == POSTINCREMENT_EXPR)
5ae9ba3e 3965 ? lv_increment : lv_decrement)))
8d08fdba
MS
3966 return error_mark_node;
3967
b7484fbe
MS
3968 /* Forbid using -- on `bool'. */
3969 if (TREE_TYPE (arg) == boolean_type_node)
3970 {
3971 if (code == POSTDECREMENT_EXPR || code == PREDECREMENT_EXPR)
3972 {
a82e1a7d 3973 error ("invalid use of %<--%> on bool variable %qD", arg);
b7484fbe
MS
3974 return error_mark_node;
3975 }
19552aa5 3976 val = boolean_increment (code, arg);
b7484fbe
MS
3977 }
3978 else
f293ce4b 3979 val = build2 (code, TREE_TYPE (arg), arg, inc);
b7484fbe 3980
8d08fdba 3981 TREE_SIDE_EFFECTS (val) = 1;
37c46b43 3982 return cp_convert (result_type, val);
8d08fdba
MS
3983 }
3984
3985 case ADDR_EXPR:
3986 /* Note that this operation never does default_conversion
3987 regardless of NOCONVERT. */
3988
8cd4c175 3989 argtype = lvalue_type (arg);
a5ac359a
MM
3990
3991 if (TREE_CODE (arg) == OFFSET_REF)
3992 goto offset_ref;
3993
b7484fbe 3994 if (TREE_CODE (argtype) == REFERENCE_TYPE)
8d08fdba 3995 {
6de9cd9a
DN
3996 tree type = build_pointer_type (TREE_TYPE (argtype));
3997 arg = build1 (CONVERT_EXPR, type, arg);
8d08fdba
MS
3998 return arg;
3999 }
35680744 4000 else if (pedantic && DECL_MAIN_P (arg))
a0a33927 4001 /* ARM $3.4 */
a82e1a7d 4002 pedwarn ("ISO C++ forbids taking address of function %<::main%>");
8d08fdba
MS
4003
4004 /* Let &* cancel out to simplify resulting code. */
4005 if (TREE_CODE (arg) == INDIRECT_REF)
4006 {
4ac14744 4007 /* We don't need to have `current_class_ptr' wrapped in a
8d08fdba 4008 NON_LVALUE_EXPR node. */
4ac14744
MS
4009 if (arg == current_class_ref)
4010 return current_class_ptr;
8d08fdba 4011
8d08fdba
MS
4012 arg = TREE_OPERAND (arg, 0);
4013 if (TREE_CODE (TREE_TYPE (arg)) == REFERENCE_TYPE)
4014 {
6de9cd9a
DN
4015 tree type = build_pointer_type (TREE_TYPE (TREE_TYPE (arg)));
4016 arg = build1 (CONVERT_EXPR, type, arg);
8d08fdba 4017 }
5cc53d4e 4018 else
8d08fdba 4019 /* Don't let this be an lvalue. */
5cc53d4e 4020 arg = rvalue (arg);
8d08fdba
MS
4021 return arg;
4022 }
4023
8d08fdba
MS
4024 /* Uninstantiated types are all functions. Taking the
4025 address of a function is a no-op, so just return the
4026 argument. */
4027
315fb5db
NS
4028 gcc_assert (TREE_CODE (arg) != IDENTIFIER_NODE
4029 || !IDENTIFIER_OPNAME_P (arg));
8d08fdba 4030
96d6c610 4031 if (TREE_CODE (arg) == COMPONENT_REF && type_unknown_p (arg)
50ad9642 4032 && !really_overloaded_fn (TREE_OPERAND (arg, 1)))
0cbd7506 4033 {
fbf6f1ba 4034 /* They're trying to take the address of a unique non-static
96d6c610
JM
4035 member function. This is ill-formed (except in MS-land),
4036 but let's try to DTRT.
4037 Note: We only handle unique functions here because we don't
4038 want to complain if there's a static overload; non-unique
4039 cases will be handled by instantiate_type. But we need to
4040 handle this case here to allow casts on the resulting PMF.
4041 We could defer this in non-MS mode, but it's easier to give
4042 a useful error here. */
fbf6f1ba 4043
d219f3ff
KL
4044 /* Inside constant member functions, the `this' pointer
4045 contains an extra const qualifier. TYPE_MAIN_VARIANT
4046 is used here to remove this const from the diagnostics
4047 and the created OFFSET_REF. */
4048 tree base = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (arg, 0)));
50ad9642 4049 tree name = DECL_NAME (get_first_fn (TREE_OPERAND (arg, 1)));
96d6c610
JM
4050
4051 if (! flag_ms_extensions)
4052 {
4053 if (current_class_type
4054 && TREE_OPERAND (arg, 0) == current_class_ref)
4055 /* An expression like &memfn. */
16692dd5
KL
4056 pedwarn ("ISO C++ forbids taking the address of an unqualified"
4057 " or parenthesized non-static member function to form"
a82e1a7d 4058 " a pointer to member function. Say %<&%T::%D%>",
d219f3ff 4059 base, name);
96d6c610 4060 else
16692dd5
KL
4061 pedwarn ("ISO C++ forbids taking the address of a bound member"
4062 " function to form a pointer to member function."
a82e1a7d 4063 " Say %<&%T::%D%>",
d219f3ff 4064 base, name);
96d6c610 4065 }
a5ac359a 4066 arg = build_offset_ref (base, name, /*address_p=*/true);
0cbd7506 4067 }
a5ac359a 4068
c8094d83 4069 offset_ref:
03017874 4070 if (type_unknown_p (arg))
51924768 4071 return build1 (ADDR_EXPR, unknown_type_node, arg);
c8094d83 4072
8d08fdba
MS
4073 /* Handle complex lvalues (when permitted)
4074 by reduction to simpler cases. */
4075 val = unary_complex_lvalue (code, arg);
4076 if (val != 0)
4077 return val;
4078
8d08fdba
MS
4079 switch (TREE_CODE (arg))
4080 {
4081 case NOP_EXPR:
4082 case CONVERT_EXPR:
4083 case FLOAT_EXPR:
4084 case FIX_TRUNC_EXPR:
4085 case FIX_FLOOR_EXPR:
4086 case FIX_ROUND_EXPR:
4087 case FIX_CEIL_EXPR:
f0e01782 4088 if (! lvalue_p (arg) && pedantic)
ddcc7cf6 4089 pedwarn ("ISO C++ forbids taking the address of a cast to a non-lvalue expression");
7f85441b 4090 break;
26bcf8fc
MM
4091
4092 case OVERLOAD:
4093 arg = OVL_CURRENT (arg);
4094 break;
4095
6d05585b
MM
4096 case OFFSET_REF:
4097 /* Turn a reference to a non-static data member into a
4098 pointer-to-member. */
4099 {
4100 tree type;
4101 tree t;
4102
4103 if (!PTRMEM_OK_P (arg))
4104 return build_unary_op (code, arg, 0);
c8094d83 4105
6d05585b
MM
4106 t = TREE_OPERAND (arg, 1);
4107 if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4108 {
4109 error ("cannot create pointer to reference member %qD", t);
4110 return error_mark_node;
4111 }
c8094d83
MS
4112
4113 type = build_ptrmem_type (context_for_name_lookup (t),
6d05585b
MM
4114 TREE_TYPE (t));
4115 t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1));
4116 return t;
4117 }
4118
7f85441b
KG
4119 default:
4120 break;
8d08fdba 4121 }
8d08fdba
MS
4122
4123 /* Allow the address of a constructor if all the elements
4124 are constant. */
dc26f471
JM
4125 if (TREE_CODE (arg) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (arg)
4126 && TREE_CONSTANT (arg))
8d08fdba
MS
4127 ;
4128 /* Anything not already handled and not a true memory reference
4129 is an error. */
b7484fbe
MS
4130 else if (TREE_CODE (argtype) != FUNCTION_TYPE
4131 && TREE_CODE (argtype) != METHOD_TYPE
6439fffd 4132 && TREE_CODE (arg) != OFFSET_REF
5ae9ba3e 4133 && !lvalue_or_else (arg, lv_addressof))
8d08fdba
MS
4134 return error_mark_node;
4135
01240200
MM
4136 if (argtype != error_mark_node)
4137 argtype = build_pointer_type (argtype);
8d08fdba 4138
8d08fdba
MS
4139 {
4140 tree addr;
4141
15077df5
MM
4142 if (TREE_CODE (arg) != COMPONENT_REF
4143 /* Inside a template, we are processing a non-dependent
4144 expression so we can just form an ADDR_EXPR with the
4145 correct type. */
4146 || processing_template_decl)
6439fffd
KL
4147 {
4148 addr = build_address (arg);
4149 if (TREE_CODE (arg) == OFFSET_REF)
4150 PTRMEM_OK_P (addr) = PTRMEM_OK_P (arg);
4151 }
92af500d
NS
4152 else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK)
4153 {
4154 tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1));
4155
4156 /* We can only get here with a single static member
4157 function. */
50bc768d
NS
4158 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
4159 && DECL_STATIC_FUNCTION_P (fn));
92af500d
NS
4160 mark_used (fn);
4161 addr = build_address (fn);
4162 if (TREE_SIDE_EFFECTS (TREE_OPERAND (arg, 0)))
4163 /* Do not lose object's side effects. */
f293ce4b
RS
4164 addr = build2 (COMPOUND_EXPR, TREE_TYPE (addr),
4165 TREE_OPERAND (arg, 0), addr);
92af500d 4166 }
8de9bb0e 4167 else if (DECL_C_BIT_FIELD (TREE_OPERAND (arg, 1)))
c93a26f5 4168 {
a82e1a7d 4169 error ("attempt to take address of bit-field structure member %qD",
c93a26f5
NS
4170 TREE_OPERAND (arg, 1));
4171 return error_mark_node;
4172 }
8de9bb0e 4173 else
eac5ce6c 4174 {
9d9165ef 4175 tree object = TREE_OPERAND (arg, 0);
eac5ce6c 4176 tree field = TREE_OPERAND (arg, 1);
9d9165ef
MM
4177 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4178 (TREE_TYPE (object), decl_type_context (field)));
442c8e31 4179 addr = build_address (arg);
eac5ce6c 4180 }
4ac14744 4181
beb53fb8
JM
4182 if (TREE_CODE (argtype) == POINTER_TYPE
4183 && TREE_CODE (TREE_TYPE (argtype)) == METHOD_TYPE)
4ac14744
MS
4184 {
4185 build_ptrmemfunc_type (argtype);
08e17d9d
MM
4186 addr = build_ptrmemfunc (argtype, addr, 0,
4187 /*c_cast_p=*/false);
4ac14744
MS
4188 }
4189
8d08fdba
MS
4190 return addr;
4191 }
7f85441b
KG
4192
4193 default:
4194 break;
8d08fdba
MS
4195 }
4196
4197 if (!errstring)
4198 {
4199 if (argtype == 0)
4200 argtype = TREE_TYPE (arg);
455f19cb 4201 return fold_if_not_in_template (build1 (code, argtype, arg));
8d08fdba
MS
4202 }
4203
b9d12519 4204 error ("%s", errstring);
8d08fdba
MS
4205 return error_mark_node;
4206}
4207
8d08fdba
MS
4208/* Apply unary lvalue-demanding operator CODE to the expression ARG
4209 for certain kinds of expressions which are not really lvalues
4210 but which we can accept as lvalues.
4211
dfb5c523
MM
4212 If ARG is not a kind of expression we can handle, return
4213 NULL_TREE. */
c8094d83 4214
8d08fdba 4215tree
acd8e2d0 4216unary_complex_lvalue (enum tree_code code, tree arg)
8d08fdba 4217{
dfb5c523
MM
4218 /* Inside a template, making these kinds of adjustments is
4219 pointless; we are only concerned with the type of the
4220 expression. */
4221 if (processing_template_decl)
4222 return NULL_TREE;
4223
8d08fdba
MS
4224 /* Handle (a, b) used as an "lvalue". */
4225 if (TREE_CODE (arg) == COMPOUND_EXPR)
4226 {
4227 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 1), 0);
f293ce4b
RS
4228 return build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4229 TREE_OPERAND (arg, 0), real_result);
8d08fdba
MS
4230 }
4231
4232 /* Handle (a ? b : c) used as an "lvalue". */
e9a25f70
JL
4233 if (TREE_CODE (arg) == COND_EXPR
4234 || TREE_CODE (arg) == MIN_EXPR || TREE_CODE (arg) == MAX_EXPR)
a4443a08
MS
4235 return rationalize_conditional_expr (code, arg);
4236
ae818d3b 4237 /* Handle (a = b), (++a), and (--a) used as an "lvalue". */
e1cd6e56
MS
4238 if (TREE_CODE (arg) == MODIFY_EXPR
4239 || TREE_CODE (arg) == PREINCREMENT_EXPR
4240 || TREE_CODE (arg) == PREDECREMENT_EXPR)
ae818d3b
ER
4241 {
4242 tree lvalue = TREE_OPERAND (arg, 0);
4243 if (TREE_SIDE_EFFECTS (lvalue))
4244 {
4245 lvalue = stabilize_reference (lvalue);
f293ce4b
RS
4246 arg = build2 (TREE_CODE (arg), TREE_TYPE (arg),
4247 lvalue, TREE_OPERAND (arg, 1));
ae818d3b
ER
4248 }
4249 return unary_complex_lvalue
f293ce4b 4250 (code, build2 (COMPOUND_EXPR, TREE_TYPE (lvalue), arg, lvalue));
ae818d3b 4251 }
8d08fdba
MS
4252
4253 if (code != ADDR_EXPR)
4254 return 0;
4255
4256 /* Handle (a = b) used as an "lvalue" for `&'. */
4257 if (TREE_CODE (arg) == MODIFY_EXPR
4258 || TREE_CODE (arg) == INIT_EXPR)
4259 {
4260 tree real_result = build_unary_op (code, TREE_OPERAND (arg, 0), 0);
f293ce4b
RS
4261 arg = build2 (COMPOUND_EXPR, TREE_TYPE (real_result),
4262 arg, real_result);
6de9cd9a 4263 TREE_NO_WARNING (arg) = 1;
faf5394a 4264 return arg;
8d08fdba
MS
4265 }
4266
8d08fdba
MS
4267 if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE
4268 || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE
a5ac359a 4269 || TREE_CODE (arg) == OFFSET_REF)
6d05585b 4270 return NULL_TREE;
c8094d83 4271
8d08fdba
MS
4272 /* We permit compiler to make function calls returning
4273 objects of aggregate type look like lvalues. */
4274 {
4275 tree targ = arg;
4276
4277 if (TREE_CODE (targ) == SAVE_EXPR)
4278 targ = TREE_OPERAND (targ, 0);
4279
4280 if (TREE_CODE (targ) == CALL_EXPR && IS_AGGR_TYPE (TREE_TYPE (targ)))
4281 {
4282 if (TREE_CODE (arg) == SAVE_EXPR)
4283 targ = arg;
4284 else
5566b478 4285 targ = build_cplus_new (TREE_TYPE (arg), arg);
f30432d7 4286 return build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (arg)), targ);
8d08fdba
MS
4287 }
4288
4289 if (TREE_CODE (arg) == SAVE_EXPR && TREE_CODE (targ) == INDIRECT_REF)
f293ce4b 4290 return build3 (SAVE_EXPR, build_pointer_type (TREE_TYPE (arg)),
8d08fdba 4291 TREE_OPERAND (targ, 0), current_function_decl, NULL);
8d08fdba
MS
4292 }
4293
4294 /* Don't let anything else be handled specially. */
4295 return 0;
4296}
8d08fdba
MS
4297\f
4298/* Mark EXP saying that we need to be able to take the
4299 address of it; it should not be allocated in a register.
dffd7eb6 4300 Value is true if successful.
8d08fdba 4301
4ac14744 4302 C++: we do not allow `current_class_ptr' to be addressable. */
8d08fdba 4303
dffd7eb6 4304bool
acd8e2d0 4305cxx_mark_addressable (tree exp)
8d08fdba 4306{
926ce8bd 4307 tree x = exp;
8d08fdba 4308
8d08fdba
MS
4309 while (1)
4310 switch (TREE_CODE (x))
4311 {
4312 case ADDR_EXPR:
4313 case COMPONENT_REF:
4314 case ARRAY_REF:
37c46b43
MS
4315 case REALPART_EXPR:
4316 case IMAGPART_EXPR:
8d08fdba
MS
4317 x = TREE_OPERAND (x, 0);
4318 break;
4319
4320 case PARM_DECL:
4ac14744 4321 if (x == current_class_ptr)
8d08fdba 4322 {
0cbd7506 4323 error ("cannot take the address of %<this%>, which is an rvalue expression");
f4f206f4 4324 TREE_ADDRESSABLE (x) = 1; /* so compiler doesn't die later. */
dffd7eb6 4325 return true;
8d08fdba 4326 }
f4f206f4 4327 /* Fall through. */
aa8dea09 4328
8d08fdba 4329 case VAR_DECL:
8d08fdba
MS
4330 /* Caller should not be trying to mark initialized
4331 constant fields addressable. */
50bc768d
NS
4332 gcc_assert (DECL_LANG_SPECIFIC (x) == 0
4333 || DECL_IN_AGGR_P (x) == 0
4334 || TREE_STATIC (x)
4335 || DECL_EXTERNAL (x));
f4f206f4 4336 /* Fall through. */
8d08fdba
MS
4337
4338 case CONST_DECL:
4339 case RESULT_DECL:
9a3b49ac 4340 if (DECL_REGISTER (x) && !TREE_ADDRESSABLE (x)
1b8d7c9a 4341 && !DECL_ARTIFICIAL (x))
8ef36086
AP
4342 {
4343 if (DECL_HARD_REGISTER (x) != 0)
4344 {
4345 error
4346 ("address of explicit register variable %qD requested", x);
4347 return false;
4348 }
4349 else if (extra_warnings)
4350 warning
d4ee4d25 4351 (0, "address requested for %qD, which is declared %<register%>", x);
8ef36086 4352 }
8d08fdba 4353 TREE_ADDRESSABLE (x) = 1;
dffd7eb6 4354 return true;
8d08fdba
MS
4355
4356 case FUNCTION_DECL:
8d08fdba 4357 TREE_ADDRESSABLE (x) = 1;
dffd7eb6 4358 return true;
8d08fdba 4359
e92cc029
MS
4360 case CONSTRUCTOR:
4361 TREE_ADDRESSABLE (x) = 1;
dffd7eb6 4362 return true;
e92cc029 4363
9a3b49ac
MS
4364 case TARGET_EXPR:
4365 TREE_ADDRESSABLE (x) = 1;
dffd7eb6
NB
4366 cxx_mark_addressable (TREE_OPERAND (x, 0));
4367 return true;
9a3b49ac 4368
8d08fdba 4369 default:
dffd7eb6 4370 return true;
8d08fdba
MS
4371 }
4372}
4373\f
4374/* Build and return a conditional expression IFEXP ? OP1 : OP2. */
4375
4376tree
acd8e2d0 4377build_x_conditional_expr (tree ifexp, tree op1, tree op2)
8d08fdba 4378{
d17811fd
MM
4379 tree orig_ifexp = ifexp;
4380 tree orig_op1 = op1;
4381 tree orig_op2 = op2;
4382 tree expr;
4383
5156628f 4384 if (processing_template_decl)
d17811fd
MM
4385 {
4386 /* The standard says that the expression is type-dependent if
4387 IFEXP is type-dependent, even though the eventual type of the
4388 expression doesn't dependent on IFEXP. */
4389 if (type_dependent_expression_p (ifexp)
18fd68a8
MM
4390 /* As a GNU extension, the middle operand may be omitted. */
4391 || (op1 && type_dependent_expression_p (op1))
d17811fd
MM
4392 || type_dependent_expression_p (op2))
4393 return build_min_nt (COND_EXPR, ifexp, op1, op2);
4394 ifexp = build_non_dependent_expr (ifexp);
18fd68a8
MM
4395 if (op1)
4396 op1 = build_non_dependent_expr (op1);
d17811fd
MM
4397 op2 = build_non_dependent_expr (op2);
4398 }
5566b478 4399
d17811fd
MM
4400 expr = build_conditional_expr (ifexp, op1, op2);
4401 if (processing_template_decl && expr != error_mark_node)
c8094d83 4402 return build_min_non_dep (COND_EXPR, expr,
8e1daa34 4403 orig_ifexp, orig_op1, orig_op2);
d17811fd 4404 return expr;
8d08fdba
MS
4405}
4406\f
c7b62f14 4407/* Given a list of expressions, return a compound expression
04c06002 4408 that performs them all and returns the value of the last of them. */
c7b62f14
NS
4409
4410tree build_x_compound_expr_from_list (tree list, const char *msg)
4411{
4412 tree expr = TREE_VALUE (list);
c8094d83 4413
c7b62f14
NS
4414 if (TREE_CHAIN (list))
4415 {
4416 if (msg)
4417 pedwarn ("%s expression list treated as compound expression", msg);
4418
4419 for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
4420 expr = build_x_compound_expr (expr, TREE_VALUE (list));
4421 }
c8094d83 4422
c7b62f14
NS
4423 return expr;
4424}
4425
4426/* Handle overloading of the ',' operator when needed. */
e92cc029 4427
8d08fdba 4428tree
d17811fd 4429build_x_compound_expr (tree op1, tree op2)
8d08fdba 4430{
8d08fdba 4431 tree result;
d17811fd
MM
4432 tree orig_op1 = op1;
4433 tree orig_op2 = op2;
8d08fdba 4434
5156628f 4435 if (processing_template_decl)
d17811fd
MM
4436 {
4437 if (type_dependent_expression_p (op1)
4438 || type_dependent_expression_p (op2))
4439 return build_min_nt (COMPOUND_EXPR, op1, op2);
4440 op1 = build_non_dependent_expr (op1);
4441 op2 = build_non_dependent_expr (op2);
4442 }
b19b4a78 4443
ec835fb2
MM
4444 result = build_new_op (COMPOUND_EXPR, LOOKUP_NORMAL, op1, op2, NULL_TREE,
4445 /*overloaded_p=*/NULL);
d17811fd 4446 if (!result)
e895113a 4447 result = build_compound_expr (op1, op2);
b19b4a78 4448
d17811fd 4449 if (processing_template_decl && result != error_mark_node)
8e1daa34 4450 return build_min_non_dep (COMPOUND_EXPR, result, orig_op1, orig_op2);
c8094d83 4451
d17811fd 4452 return result;
8d08fdba
MS
4453}
4454
04c06002 4455/* Build a compound expression. */
8d08fdba
MS
4456
4457tree
c7b62f14 4458build_compound_expr (tree lhs, tree rhs)
8d08fdba 4459{
47d4c811 4460 lhs = convert_to_void (lhs, "left-hand operand of comma");
c8094d83 4461
c7b62f14 4462 if (lhs == error_mark_node || rhs == error_mark_node)
66543169 4463 return error_mark_node;
c8094d83 4464
d340e53f
NS
4465 if (TREE_CODE (rhs) == TARGET_EXPR)
4466 {
4467 /* If the rhs is a TARGET_EXPR, then build the compound
0cbd7506 4468 expression inside the target_expr's initializer. This
cd0be382 4469 helps the compiler to eliminate unnecessary temporaries. */
d340e53f 4470 tree init = TREE_OPERAND (rhs, 1);
c8094d83 4471
f293ce4b 4472 init = build2 (COMPOUND_EXPR, TREE_TYPE (init), lhs, init);
d340e53f 4473 TREE_OPERAND (rhs, 1) = init;
c8094d83 4474
d340e53f
NS
4475 return rhs;
4476 }
c8094d83 4477
f293ce4b 4478 return build2 (COMPOUND_EXPR, TREE_TYPE (rhs), lhs, rhs);
8d08fdba
MS
4479}
4480
33c25e5c
MM
4481/* Issue a diagnostic message if casting from SRC_TYPE to DEST_TYPE
4482 casts away constness. DIAG_FN gives the function to call if we
4483 need to issue a diagnostic; if it is NULL, no diagnostic will be
4484 issued. DESCRIPTION explains what operation is taking place. */
3fe18f1d
MM
4485
4486static void
a5ac359a 4487check_for_casting_away_constness (tree src_type, tree dest_type,
eb2de0c0 4488 void (*diag_fn)(const char *, ...) ATTRIBUTE_GCC_CXXDIAG(1,2),
a5ac359a 4489 const char *description)
3fe18f1d 4490{
33c25e5c 4491 if (diag_fn && casts_away_constness (src_type, dest_type))
a82e1a7d 4492 error ("%s from type %qT to type %qT casts away constness",
a5ac359a 4493 description, src_type, dest_type);
3fe18f1d
MM
4494}
4495
08e17d9d
MM
4496/* Convert EXPR (an expression with pointer-to-member type) to TYPE
4497 (another pointer-to-member type in the same hierarchy) and return
4498 the converted expression. If ALLOW_INVERSE_P is permitted, a
4499 pointer-to-derived may be converted to pointer-to-base; otherwise,
4500 only the other direction is permitted. If C_CAST_P is true, this
4501 conversion is taking place as part of a C-style cast. */
4502
c8094d83 4503tree
08e17d9d
MM
4504convert_ptrmem (tree type, tree expr, bool allow_inverse_p,
4505 bool c_cast_p)
4506{
4507 if (TYPE_PTRMEM_P (type))
4508 {
4509 tree delta;
4510
4511 if (TREE_CODE (expr) == PTRMEM_CST)
4512 expr = cplus_expand_constant (expr);
4513 delta = get_delta_difference (TYPE_PTRMEM_CLASS_TYPE (TREE_TYPE (expr)),
c8094d83 4514 TYPE_PTRMEM_CLASS_TYPE (type),
08e17d9d
MM
4515 allow_inverse_p,
4516 c_cast_p);
4517 if (!integer_zerop (delta))
c8094d83 4518 expr = cp_build_binary_op (PLUS_EXPR,
08e17d9d
MM
4519 build_nop (ptrdiff_type_node, expr),
4520 delta);
4521 return build_nop (type, expr);
4522 }
4523 else
c8094d83 4524 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr,
08e17d9d
MM
4525 allow_inverse_p, c_cast_p);
4526}
4527
822971c1
JJ
4528/* If EXPR is an INTEGER_CST and ORIG is an arithmetic constant, return
4529 a version of EXPR that has TREE_OVERFLOW and/or TREE_CONSTANT_OVERFLOW
4530 set iff they are set in ORIG. Otherwise, return EXPR unchanged. */
4531
4532static tree
4533ignore_overflows (tree expr, tree orig)
4534{
4535 if (TREE_CODE (expr) == INTEGER_CST
4536 && CONSTANT_CLASS_P (orig)
4537 && TREE_CODE (orig) != STRING_CST
4538 && (TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig)
4539 || TREE_CONSTANT_OVERFLOW (expr)
4540 != TREE_CONSTANT_OVERFLOW (orig)))
4541 {
4542 if (!TREE_OVERFLOW (orig) && !TREE_CONSTANT_OVERFLOW (orig))
4543 /* Ensure constant sharing. */
4544 expr = build_int_cst_wide (TREE_TYPE (expr),
4545 TREE_INT_CST_LOW (expr),
4546 TREE_INT_CST_HIGH (expr));
4547 else
4548 {
4549 /* Avoid clobbering a shared constant. */
4550 expr = copy_node (expr);
4551 TREE_OVERFLOW (expr) = TREE_OVERFLOW (orig);
4552 TREE_CONSTANT_OVERFLOW (expr)
4553 = TREE_CONSTANT_OVERFLOW (orig);
4554 }
4555 }
4556 return expr;
4557}
4558
33c25e5c
MM
4559/* Perform a static_cast from EXPR to TYPE. When C_CAST_P is true,
4560 this static_cast is being attempted as one of the possible casts
4561 allowed by a C-style cast. (In that case, accessibility of base
4562 classes is not considered, and it is OK to cast away
4563 constness.) Return the result of the cast. *VALID_P is set to
4564 indicate whether or not the cast was valid. */
3fe18f1d 4565
33c25e5c
MM
4566static tree
4567build_static_cast_1 (tree type, tree expr, bool c_cast_p,
4568 bool *valid_p)
a4443a08 4569{
00bb3dad 4570 tree intype;
3fe18f1d 4571 tree result;
33c25e5c 4572 tree orig;
eb2de0c0 4573 void (*diag_fn)(const char*, ...) ATTRIBUTE_GCC_CXXDIAG(1,2);
33c25e5c 4574 const char *desc;
c11b6f21 4575
33c25e5c
MM
4576 /* Assume the cast is valid. */
4577 *valid_p = true;
c11b6f21 4578
3fe18f1d 4579 intype = TREE_TYPE (expr);
c11b6f21 4580
33c25e5c
MM
4581 /* Determine what to do when casting away constness. */
4582 if (c_cast_p)
4583 {
4584 /* C-style casts are allowed to cast away constness. With
c8094d83 4585 WARN_CAST_QUAL, we still want to issue a warning. */
d4ee4d25 4586 diag_fn = warn_cast_qual ? warning0 : NULL;
33c25e5c
MM
4587 desc = "cast";
4588 }
4589 else
4590 {
4591 /* A static_cast may not cast away constness. */
4592 diag_fn = error;
4593 desc = "static_cast";
4594 }
c8094d83 4595
3fe18f1d 4596 /* [expr.static.cast]
c11b6f21 4597
3fe18f1d
MM
4598 An lvalue of type "cv1 B", where B is a class type, can be cast
4599 to type "reference to cv2 D", where D is a class derived (clause
4600 _class.derived_) from B, if a valid standard conversion from
4601 "pointer to D" to "pointer to B" exists (_conv.ptr_), cv2 is the
4602 same cv-qualification as, or greater cv-qualification than, cv1,
4603 and B is not a virtual base class of D. */
0a72704b
MM
4604 /* We check this case before checking the validity of "TYPE t =
4605 EXPR;" below because for this case:
4606
4607 struct B {};
4608 struct D : public B { D(const B&); };
4609 extern B& b;
4610 void f() { static_cast<const D&>(b); }
4611
4612 we want to avoid constructing a new D. The standard is not
4613 completely clear about this issue, but our interpretation is
4614 consistent with other compilers. */
3fe18f1d
MM
4615 if (TREE_CODE (type) == REFERENCE_TYPE
4616 && CLASS_TYPE_P (TREE_TYPE (type))
4617 && CLASS_TYPE_P (intype)
d18a8251 4618 && real_lvalue_p (expr)
3fe18f1d
MM
4619 && DERIVED_FROM_P (intype, TREE_TYPE (type))
4620 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT (intype)),
c8094d83 4621 build_pointer_type (TYPE_MAIN_VARIANT
3fe18f1d 4622 (TREE_TYPE (type))))
33c25e5c
MM
4623 && (c_cast_p
4624 || at_least_as_qualified_p (TREE_TYPE (type), intype)))
c11b6f21 4625 {
33c25e5c
MM
4626 tree base;
4627
385bce06 4628 /* There is a standard conversion from "D*" to "B*" even if "B"
33c25e5c
MM
4629 is ambiguous or inaccessible. If this is really a
4630 static_cast, then we check both for inaccessibility and
4631 ambiguity. However, if this is a static_cast being performed
4632 because the user wrote a C-style cast, then accessibility is
4633 not considered. */
c8094d83
MS
4634 base = lookup_base (TREE_TYPE (type), intype,
4635 c_cast_p ? ba_unique : ba_check,
33c25e5c 4636 NULL);
3fe18f1d 4637
385bce06
MM
4638 /* Convert from "B*" to "D*". This function will check that "B"
4639 is not a virtual base of "D". */
c8094d83 4640 expr = build_base_path (MINUS_EXPR, build_address (expr),
3fe18f1d 4641 base, /*nonnull=*/false);
3a73bcc6
MM
4642 /* Convert the pointer to a reference -- but then remember that
4643 there are no expressions with reference type in C++. */
4644 return convert_from_reference (build_nop (type, expr));
c11b6f21 4645 }
3fe18f1d 4646
33c25e5c
MM
4647 orig = expr;
4648
0a72704b
MM
4649 /* [expr.static.cast]
4650
4651 An expression e can be explicitly converted to a type T using a
4652 static_cast of the form static_cast<T>(e) if the declaration T
4653 t(e);" is well-formed, for some invented temporary variable
4654 t. */
33c25e5c
MM
4655 result = perform_direct_initialization_if_possible (type, expr,
4656 c_cast_p);
0a72704b 4657 if (result)
109e0040
MM
4658 {
4659 result = convert_from_reference (result);
33c25e5c
MM
4660
4661 /* Ignore any integer overflow caused by the cast. */
822971c1
JJ
4662 result = ignore_overflows (result, orig);
4663
109e0040
MM
4664 /* [expr.static.cast]
4665
0cbd7506 4666 If T is a reference type, the result is an lvalue; otherwise,
109e0040 4667 the result is an rvalue. */
5cc53d4e
MM
4668 if (TREE_CODE (type) != REFERENCE_TYPE)
4669 result = rvalue (result);
109e0040
MM
4670 return result;
4671 }
c8094d83 4672
0a72704b
MM
4673 /* [expr.static.cast]
4674
4675 Any expression can be explicitly converted to type cv void. */
4676 if (TREE_CODE (type) == VOID_TYPE)
4677 return convert_to_void (expr, /*implicit=*/NULL);
4678
3fe18f1d
MM
4679 /* [expr.static.cast]
4680
4681 The inverse of any standard conversion sequence (clause _conv_),
4682 other than the lvalue-to-rvalue (_conv.lval_), array-to-pointer
4683 (_conv.array_), function-to-pointer (_conv.func_), and boolean
4684 (_conv.bool_) conversions, can be performed explicitly using
4685 static_cast subject to the restriction that the explicit
4686 conversion does not cast away constness (_expr.const.cast_), and
4687 the following additional rules for specific cases: */
4688 /* For reference, the conversions not excluded are: integral
4689 promotions, floating point promotion, integral conversions,
4690 floating point conversions, floating-integral conversions,
4691 pointer conversions, and pointer to member conversions. */
a10ce2f8 4692 /* DR 128
c8094d83 4693
a10ce2f8
GK
4694 A value of integral _or enumeration_ type can be explicitly
4695 converted to an enumeration type. */
4696 /* The effect of all that is that any conversion between any two
4697 types which are integral, floating, or enumeration types can be
4698 performed. */
4699 if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
4700 && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
33c25e5c 4701 {
33c25e5c
MM
4702 expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);
4703
4704 /* Ignore any integer overflow caused by the cast. */
822971c1 4705 expr = ignore_overflows (expr, orig);
33c25e5c
MM
4706 return expr;
4707 }
4708
3fe18f1d
MM
4709 if (TYPE_PTR_P (type) && TYPE_PTR_P (intype)
4710 && CLASS_TYPE_P (TREE_TYPE (type))
4711 && CLASS_TYPE_P (TREE_TYPE (intype))
c8094d83
MS
4712 && can_convert (build_pointer_type (TYPE_MAIN_VARIANT
4713 (TREE_TYPE (intype))),
4714 build_pointer_type (TYPE_MAIN_VARIANT
3fe18f1d 4715 (TREE_TYPE (type)))))
999cc24c 4716 {
3fe18f1d
MM
4717 tree base;
4718
33c25e5c
MM
4719 if (!c_cast_p)
4720 check_for_casting_away_constness (intype, type, diag_fn, desc);
c8094d83
MS
4721 base = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
4722 c_cast_p ? ba_unique : ba_check,
385bce06 4723 NULL);
3fe18f1d 4724 return build_base_path (MINUS_EXPR, expr, base, /*nonnull=*/false);
999cc24c 4725 }
c8094d83 4726
3fe18f1d
MM
4727 if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4728 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
4729 {
4730 tree c1;
4731 tree c2;
4732 tree t1;
4733 tree t2;
c11b6f21 4734
3fe18f1d
MM
4735 c1 = TYPE_PTRMEM_CLASS_TYPE (intype);
4736 c2 = TYPE_PTRMEM_CLASS_TYPE (type);
4737
4738 if (TYPE_PTRMEM_P (type))
4739 {
c8094d83 4740 t1 = (build_ptrmem_type
3fe18f1d
MM
4741 (c1,
4742 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (intype))));
c8094d83 4743 t2 = (build_ptrmem_type
3fe18f1d
MM
4744 (c2,
4745 TYPE_MAIN_VARIANT (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
4746 }
4747 else
4748 {
4749 t1 = intype;
4750 t2 = type;
4751 }
4752 if (can_convert (t1, t2))
4753 {
33c25e5c 4754 if (!c_cast_p)
c8094d83 4755 check_for_casting_away_constness (intype, type, diag_fn,
08e17d9d
MM
4756 desc);
4757 return convert_ptrmem (type, expr, /*allow_inverse_p=*/1,
4758 c_cast_p);
3fe18f1d
MM
4759 }
4760 }
c8094d83 4761
af7b9902
MM
4762 /* [expr.static.cast]
4763
3fe18f1d
MM
4764 An rvalue of type "pointer to cv void" can be explicitly
4765 converted to a pointer to object type. A value of type pointer
4766 to object converted to "pointer to cv void" and back to the
4767 original pointer type will have its original value. */
c8094d83 4768 if (TREE_CODE (intype) == POINTER_TYPE
3fe18f1d
MM
4769 && VOID_TYPE_P (TREE_TYPE (intype))
4770 && TYPE_PTROB_P (type))
af7b9902 4771 {
33c25e5c
MM
4772 if (!c_cast_p)
4773 check_for_casting_away_constness (intype, type, diag_fn, desc);
3fe18f1d 4774 return build_nop (type, expr);
af7b9902
MM
4775 }
4776
33c25e5c 4777 *valid_p = false;
c11b6f21 4778 return error_mark_node;
a4443a08
MS
4779}
4780
33c25e5c
MM
4781/* Return an expression representing static_cast<TYPE>(EXPR). */
4782
cdf5b885 4783tree
33c25e5c 4784build_static_cast (tree type, tree expr)
a4443a08 4785{
33c25e5c
MM
4786 tree result;
4787 bool valid_p;
c11b6f21
MS
4788
4789 if (type == error_mark_node || expr == error_mark_node)
4790 return error_mark_node;
4791
5156628f 4792 if (processing_template_decl)
5566b478 4793 {
33c25e5c
MM
4794 expr = build_min (STATIC_CAST_EXPR, type, expr);
4795 /* We don't know if it will or will not have side effects. */
4796 TREE_SIDE_EFFECTS (expr) = 1;
e8c66fe0 4797 return convert_from_reference (expr);
5566b478
MS
4798 }
4799
33c25e5c
MM
4800 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4801 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4802 if (TREE_CODE (type) != REFERENCE_TYPE
4803 && TREE_CODE (expr) == NOP_EXPR
4804 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4805 expr = TREE_OPERAND (expr, 0);
c11b6f21 4806
33c25e5c
MM
4807 result = build_static_cast_1 (type, expr, /*c_cast_p=*/false, &valid_p);
4808 if (valid_p)
4809 return result;
4810
c8094d83 4811 error ("invalid static_cast from type %qT to type %qT",
33c25e5c
MM
4812 TREE_TYPE (expr), type);
4813 return error_mark_node;
4814}
4815
4816/* EXPR is an expression with member function or pointer-to-member
4817 function type. TYPE is a pointer type. Converting EXPR to TYPE is
4818 not permitted by ISO C++, but we accept it in some modes. If we
4819 are not in one of those modes, issue a diagnostic. Return the
4820 converted expression. */
4821
4822tree
4823convert_member_func_to_ptr (tree type, tree expr)
4824{
4825 tree intype;
4826 tree decl;
c11b6f21 4827
c11b6f21 4828 intype = TREE_TYPE (expr);
33c25e5c
MM
4829 gcc_assert (TYPE_PTRMEMFUNC_P (intype)
4830 || TREE_CODE (intype) == METHOD_TYPE);
a80e4195 4831
33c25e5c 4832 if (pedantic || warn_pmf2ptr)
c4f73174 4833 pedwarn ("converting from %qT to %qT", intype, type);
c8094d83 4834
33c25e5c
MM
4835 if (TREE_CODE (intype) == METHOD_TYPE)
4836 expr = build_addr_func (expr);
4837 else if (TREE_CODE (expr) == PTRMEM_CST)
4838 expr = build_address (PTRMEM_CST_MEMBER (expr));
4839 else
4840 {
4841 decl = maybe_dummy_object (TYPE_PTRMEM_CLASS_TYPE (intype), 0);
4842 decl = build_address (decl);
4843 expr = get_member_function_from_ptrfunc (&decl, expr);
4844 }
4845
4846 return build_nop (type, expr);
4847}
4848
4849/* Return a representation for a reinterpret_cast from EXPR to TYPE.
4850 If C_CAST_P is true, this reinterpret cast is being done as part of
4851 a C-style cast. If VALID_P is non-NULL, *VALID_P is set to
4852 indicate whether or not reinterpret_cast was valid. */
4853
4854static tree
4855build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
ec7e5618 4856 bool *valid_p)
33c25e5c
MM
4857{
4858 tree intype;
4859
4860 /* Assume the cast is invalid. */
4861 if (valid_p)
4862 *valid_p = true;
4863
4864 if (type == error_mark_node || error_operand_p (expr))
a8c2c492
AP
4865 return error_mark_node;
4866
33c25e5c
MM
4867 intype = TREE_TYPE (expr);
4868
4869 /* [expr.reinterpret.cast]
4870 An lvalue expression of type T1 can be cast to the type
4871 "reference to T2" if an expression of type "pointer to T1" can be
4872 explicitly converted to the type "pointer to T2" using a
4873 reinterpret_cast. */
c11b6f21
MS
4874 if (TREE_CODE (type) == REFERENCE_TYPE)
4875 {
4876 if (! real_lvalue_p (expr))
4877 {
33c25e5c 4878 error ("invalid cast of an rvalue expression of type "
0cbd7506 4879 "%qT to type %qT",
33c25e5c 4880 intype, type);
c11b6f21
MS
4881 return error_mark_node;
4882 }
33c25e5c
MM
4883
4884 /* Warn about a reinterpret_cast from "A*" to "B&" if "A" and
4885 "B" are related class types; the reinterpret_cast does not
4886 adjust the pointer. */
4887 if (TYPE_PTR_P (intype)
4888 && (comptypes (TREE_TYPE (intype), TREE_TYPE (type),
4889 COMPARE_BASE | COMPARE_DERIVED)))
d4ee4d25 4890 warning (0, "casting %qT to %qT does not dereference pointer",
33c25e5c
MM
4891 intype, type);
4892
c11b6f21
MS
4893 expr = build_unary_op (ADDR_EXPR, expr, 0);
4894 if (expr != error_mark_node)
33c25e5c 4895 expr = build_reinterpret_cast_1
ec7e5618 4896 (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
33c25e5c 4897 valid_p);
c11b6f21
MS
4898 if (expr != error_mark_node)
4899 expr = build_indirect_ref (expr, 0);
4900 return expr;
4901 }
8ccc31eb 4902
33c25e5c
MM
4903 /* As a G++ extension, we consider conversions from member
4904 functions, and pointers to member functions to
4905 pointer-to-function and pointer-to-void types. If
4906 -Wno-pmf-conversions has not been specified,
4907 convert_member_func_to_ptr will issue an error message. */
c8094d83 4908 if ((TYPE_PTRMEMFUNC_P (intype)
33c25e5c
MM
4909 || TREE_CODE (intype) == METHOD_TYPE)
4910 && TYPE_PTR_P (type)
4911 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
4912 || VOID_TYPE_P (TREE_TYPE (type))))
4913 return convert_member_func_to_ptr (type, expr);
4914
5acd0bed 4915 /* If the cast is not to a reference type, the lvalue-to-rvalue,
33c25e5c
MM
4916 array-to-pointer, and function-to-pointer conversions are
4917 performed. */
4918 expr = decay_conversion (expr);
c8094d83 4919
33c25e5c
MM
4920 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
4921 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
4922 if (TREE_CODE (expr) == NOP_EXPR
4923 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
4924 expr = TREE_OPERAND (expr, 0);
4925
4926 if (error_operand_p (expr))
4927 return error_mark_node;
4928
4929 intype = TREE_TYPE (expr);
4930
4931 /* [expr.reinterpret.cast]
4932 A pointer can be converted to any integral type large enough to
4933 hold it. */
4934 if (CP_INTEGRAL_TYPE_P (type) && TYPE_PTR_P (intype))
8ccc31eb 4935 {
c11b6f21 4936 if (TYPE_PRECISION (type) < TYPE_PRECISION (intype))
33c25e5c 4937 pedwarn ("cast from %qT to %qT loses precision",
0cbd7506 4938 intype, type);
8ccc31eb 4939 }
33c25e5c
MM
4940 /* [expr.reinterpret.cast]
4941 A value of integral or enumeration type can be explicitly
4942 converted to a pointer. */
4943 else if (TYPE_PTR_P (type) && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))
4944 /* OK */
4945 ;
c11b6f21
MS
4946 else if ((TYPE_PTRFN_P (type) && TYPE_PTRFN_P (intype))
4947 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
8a784e4a 4948 return fold_if_not_in_template (build_nop (type, expr));
c11b6f21
MS
4949 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
4950 || (TYPE_PTROBV_P (type) && TYPE_PTROBV_P (intype)))
8ccc31eb 4951 {
33c25e5c 4952 if (!c_cast_p)
c8094d83 4953 check_for_casting_away_constness (intype, type, error,
33c25e5c
MM
4954 "reinterpret_cast");
4955 /* Warn about possible alignment problems. */
4956 if (STRICT_ALIGNMENT && warn_cast_align
4957 && !VOID_TYPE_P (type)
4958 && TREE_CODE (TREE_TYPE (intype)) != FUNCTION_TYPE
4959 && COMPLETE_TYPE_P (TREE_TYPE (type))
4960 && COMPLETE_TYPE_P (TREE_TYPE (intype))
4961 && TYPE_ALIGN (TREE_TYPE (type)) > TYPE_ALIGN (TREE_TYPE (intype)))
d4ee4d25 4962 warning (0, "cast from %qT to %qT increases required alignment of "
33c25e5c
MM
4963 "target type",
4964 intype, type);
c8094d83 4965
455f19cb 4966 return fold_if_not_in_template (build_nop (type, expr));
8ccc31eb 4967 }
ffb690bd 4968 else if ((TYPE_PTRFN_P (type) && TYPE_PTROBV_P (intype))
a06d48ef 4969 || (TYPE_PTRFN_P (intype) && TYPE_PTROBV_P (type)))
ffb690bd 4970 {
ec7e5618
NS
4971 if (pedantic)
4972 /* Only issue a warning, as we have always supported this
0cbd7506
MS
4973 where possible, and it is necessary in some cases. DR 195
4974 addresses this issue, but as of 2004/10/26 is still in
4975 drafting. */
4976 warning (0, "ISO C++ forbids casting between pointer-to-function and pointer-to-object");
455f19cb 4977 return fold_if_not_in_template (build_nop (type, expr));
ffb690bd 4978 }
08e17d9d
MM
4979 else if (TREE_CODE (type) == VECTOR_TYPE)
4980 return fold_if_not_in_template (convert_to_vector (type, expr));
257d5f32
VR
4981 else if (TREE_CODE (intype) == VECTOR_TYPE)
4982 return fold_if_not_in_template (convert_to_integer (type, expr));
c11b6f21 4983 else
8ccc31eb 4984 {
33c25e5c
MM
4985 if (valid_p)
4986 *valid_p = false;
4987 error ("invalid cast from type %qT to type %qT", intype, type);
8ccc31eb
MS
4988 return error_mark_node;
4989 }
c8094d83 4990
37c46b43 4991 return cp_convert (type, expr);
a4443a08
MS
4992}
4993
cdf5b885 4994tree
33c25e5c 4995build_reinterpret_cast (tree type, tree expr)
a4443a08 4996{
f30432d7
MS
4997 if (type == error_mark_node || expr == error_mark_node)
4998 return error_mark_node;
4999
5156628f 5000 if (processing_template_decl)
e92cc029 5001 {
33c25e5c 5002 tree t = build_min (REINTERPRET_CAST_EXPR, type, expr);
c8094d83 5003
8e1daa34
NS
5004 if (!TREE_SIDE_EFFECTS (t)
5005 && type_dependent_expression_p (expr))
5006 /* There might turn out to be side effects inside expr. */
5007 TREE_SIDE_EFFECTS (t) = 1;
e8c66fe0 5008 return convert_from_reference (t);
e92cc029
MS
5009 }
5010
33c25e5c
MM
5011 return build_reinterpret_cast_1 (type, expr, /*c_cast_p=*/false,
5012 /*valid_p=*/NULL);
5013}
5014
5015/* Perform a const_cast from EXPR to TYPE. If the cast is valid,
5016 return an appropriate expression. Otherwise, return
5017 error_mark_node. If the cast is not valid, and COMPLAIN is true,
5018 then a diagnostic will be issued. If VALID_P is non-NULL, its
5019 value upon return will indicate whether or not the conversion
5020 succeeded. */
5021
5022static tree
5023build_const_cast_1 (tree dst_type, tree expr, bool complain,
5024 bool *valid_p)
5025{
5026 tree src_type;
5027 tree reference_type;
5028
5029 /* Callers are responsible for handling error_mark_node as a
5030 destination type. */
5031 gcc_assert (dst_type != error_mark_node);
5032 /* In a template, callers should be building syntactic
5033 representations of casts, not using this machinery. */
5034 gcc_assert (!processing_template_decl);
5035
5036 /* Assume the conversion is invalid. */
5037 if (valid_p)
5038 *valid_p = false;
5039
5040 if (!POINTER_TYPE_P (dst_type) && !TYPE_PTRMEM_P (dst_type))
5041 {
5042 if (complain)
5043 error ("invalid use of const_cast with type %qT, "
5044 "which is not a pointer, "
5045 "reference, nor a pointer-to-data-member type", dst_type);
3fd91cbd
MM
5046 return error_mark_node;
5047 }
5048
33c25e5c 5049 if (TREE_CODE (TREE_TYPE (dst_type)) == FUNCTION_TYPE)
8ccc31eb 5050 {
33c25e5c
MM
5051 if (complain)
5052 error ("invalid use of const_cast with type %qT, which is a pointer "
5053 "or reference to a function type", dst_type);
5054 return error_mark_node;
8ccc31eb
MS
5055 }
5056
33c25e5c
MM
5057 src_type = TREE_TYPE (expr);
5058 /* Expressions do not really have reference types. */
5059 if (TREE_CODE (src_type) == REFERENCE_TYPE)
5060 src_type = TREE_TYPE (src_type);
5061
5062 /* [expr.const.cast]
5063
5064 An lvalue of type T1 can be explicitly converted to an lvalue of
5065 type T2 using the cast const_cast<T2&> (where T1 and T2 are object
5066 types) if a pointer to T1 can be explicitly converted to the type
5067 pointer to T2 using a const_cast. */
5068 if (TREE_CODE (dst_type) == REFERENCE_TYPE)
8ccc31eb 5069 {
33c25e5c 5070 reference_type = dst_type;
c11b6f21 5071 if (! real_lvalue_p (expr))
8ccc31eb 5072 {
33c25e5c
MM
5073 if (complain)
5074 error ("invalid const_cast of an rvalue of type %qT to type %qT",
5075 src_type, dst_type);
8ccc31eb
MS
5076 return error_mark_node;
5077 }
33c25e5c
MM
5078 dst_type = build_pointer_type (TREE_TYPE (dst_type));
5079 src_type = build_pointer_type (src_type);
5080 }
5081 else
5082 {
5083 reference_type = NULL_TREE;
5084 /* If the destination type is not a reference type, the
5085 lvalue-to-rvalue, array-to-pointer, and function-to-pointer
5086 conversions are performed. */
5087 src_type = type_decays_to (src_type);
5088 if (src_type == error_mark_node)
5089 return error_mark_node;
5090 }
8ccc31eb 5091
33c25e5c
MM
5092 if ((TYPE_PTR_P (src_type) || TYPE_PTRMEM_P (src_type))
5093 && comp_ptr_ttypes_const (dst_type, src_type))
5094 {
5095 if (valid_p)
5096 *valid_p = true;
5097 if (reference_type)
c2840dfb
JM
5098 {
5099 expr = build_unary_op (ADDR_EXPR, expr, 0);
33c25e5c 5100 expr = build_nop (reference_type, expr);
c2840dfb
JM
5101 return convert_from_reference (expr);
5102 }
33c25e5c
MM
5103 else
5104 {
5105 expr = decay_conversion (expr);
5106 /* build_c_cast puts on a NOP_EXPR to make the result not an
5107 lvalue. Strip such NOP_EXPRs if VALUE is being used in
5108 non-lvalue context. */
5109 if (TREE_CODE (expr) == NOP_EXPR
5110 && TREE_TYPE (expr) == TREE_TYPE (TREE_OPERAND (expr, 0)))
5111 expr = TREE_OPERAND (expr, 0);
5112 return build_nop (dst_type, expr);
5113 }
8ccc31eb
MS
5114 }
5115
33c25e5c 5116 if (complain)
c8094d83 5117 error ("invalid const_cast from type %qT to type %qT",
33c25e5c 5118 src_type, dst_type);
c11b6f21 5119 return error_mark_node;
a4443a08
MS
5120}
5121
33c25e5c
MM
5122tree
5123build_const_cast (tree type, tree expr)
5124{
71bd7186 5125 if (type == error_mark_node || error_operand_p (expr))
33c25e5c 5126 return error_mark_node;
6060a796 5127
33c25e5c
MM
5128 if (processing_template_decl)
5129 {
5130 tree t = build_min (CONST_CAST_EXPR, type, expr);
c8094d83 5131
33c25e5c
MM
5132 if (!TREE_SIDE_EFFECTS (t)
5133 && type_dependent_expression_p (expr))
5134 /* There might turn out to be side effects inside expr. */
5135 TREE_SIDE_EFFECTS (t) = 1;
e8c66fe0 5136 return convert_from_reference (t);
33c25e5c
MM
5137 }
5138
5139 return build_const_cast_1 (type, expr, /*complain=*/true,
5140 /*valid_p=*/NULL);
5141}
5142
5143/* Build an expression representing an explicit C-style cast to type
5144 TYPE of expression EXPR. */
8d08fdba
MS
5145
5146tree
acd8e2d0 5147build_c_cast (tree type, tree expr)
8d08fdba 5148{
926ce8bd 5149 tree value = expr;
33c25e5c
MM
5150 tree result;
5151 bool valid_p;
8d08fdba 5152
33c25e5c 5153 if (type == error_mark_node || error_operand_p (expr))
8d08fdba
MS
5154 return error_mark_node;
5155
0949f723
NS
5156 if (processing_template_decl)
5157 {
5158 tree t = build_min (CAST_EXPR, type,
5159 tree_cons (NULL_TREE, value, NULL_TREE));
04c06002 5160 /* We don't know if it will or will not have side effects. */
8e1daa34 5161 TREE_SIDE_EFFECTS (t) = 1;
e8c66fe0 5162 return convert_from_reference (t);
0949f723
NS
5163 }
5164
2e2da467
ZL
5165 /* Casts to a (pointer to a) specific ObjC class (or 'id' or
5166 'Class') should always be retained, because this information aids
5167 in method lookup. */
5168 if (objc_is_object_ptr (type)
5169 && objc_is_object_ptr (TREE_TYPE (expr)))
5170 return build_nop (type, expr);
5171
8d08fdba 5172 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
8ccc31eb
MS
5173 Strip such NOP_EXPRs if VALUE is being used in non-lvalue context. */
5174 if (TREE_CODE (type) != REFERENCE_TYPE
5175 && TREE_CODE (value) == NOP_EXPR
8d08fdba
MS
5176 && TREE_TYPE (value) == TREE_TYPE (TREE_OPERAND (value, 0)))
5177 value = TREE_OPERAND (value, 0);
5178
8d08fdba
MS
5179 if (TREE_CODE (type) == ARRAY_TYPE)
5180 {
5181 /* Allow casting from T1* to T2[] because Cfront allows it.
cab1f180 5182 NIHCL uses it. It is not valid ISO C++ however. */
8d08fdba
MS
5183 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
5184 {
a82e1a7d 5185 pedwarn ("ISO C++ forbids casting to an array type %qT", type);
8d08fdba
MS
5186 type = build_pointer_type (TREE_TYPE (type));
5187 }
5188 else
5189 {
a82e1a7d 5190 error ("ISO C++ forbids casting to an array type %qT", type);
8d08fdba
MS
5191 return error_mark_node;
5192 }
5193 }
5194
a0a33927
MS
5195 if (TREE_CODE (type) == FUNCTION_TYPE
5196 || TREE_CODE (type) == METHOD_TYPE)
5197 {
a82e1a7d 5198 error ("invalid cast to function type %qT", type);
a0a33927
MS
5199 return error_mark_node;
5200 }
5201
33c25e5c
MM
5202 /* A C-style cast can be a const_cast. */
5203 result = build_const_cast_1 (type, value, /*complain=*/false,
5204 &valid_p);
5205 if (valid_p)
5206 return result;
8d08fdba 5207
33c25e5c
MM
5208 /* Or a static cast. */
5209 result = build_static_cast_1 (type, value, /*c_cast_p=*/true,
5210 &valid_p);
5211 /* Or a reinterpret_cast. */
5212 if (!valid_p)
5213 result = build_reinterpret_cast_1 (type, value, /*c_cast_p=*/true,
5214 &valid_p);
5215 /* The static_cast or reinterpret_cast may be followed by a
5216 const_cast. */
c8094d83 5217 if (valid_p
33c25e5c
MM
5218 /* A valid cast may result in errors if, for example, a
5219 conversion to am ambiguous base class is required. */
5220 && !error_operand_p (result))
e6e174e5 5221 {
33c25e5c 5222 tree result_type;
8ccc31eb 5223
33c25e5c
MM
5224 /* Non-class rvalues always have cv-unqualified type. */
5225 if (!CLASS_TYPE_P (type))
5226 type = TYPE_MAIN_VARIANT (type);
5227 result_type = TREE_TYPE (result);
5228 if (!CLASS_TYPE_P (result_type))
5229 result_type = TYPE_MAIN_VARIANT (result_type);
5230 /* If the type of RESULT does not match TYPE, perform a
5231 const_cast to make it match. If the static_cast or
5232 reinterpret_cast succeeded, we will differ by at most
5233 cv-qualification, so the follow-on const_cast is guaranteed
5234 to succeed. */
5235 if (!same_type_p (non_reference (type), non_reference (result_type)))
e6e174e5 5236 {
33c25e5c
MM
5237 result = build_const_cast_1 (type, result, false, &valid_p);
5238 gcc_assert (valid_p);
8d08fdba 5239 }
33c25e5c 5240 return result;
8d08fdba
MS
5241 }
5242
33c25e5c 5243 return error_mark_node;
8d08fdba
MS
5244}
5245\f
8d08fdba
MS
5246/* Build an assignment expression of lvalue LHS from value RHS.
5247 MODIFYCODE is the code for a binary operator that we use
5248 to combine the old value of LHS with RHS to get the new value.
5249 Or else MODIFYCODE is NOP_EXPR meaning do a simple assignment.
5250
e92cc029
MS
5251 C++: If MODIFYCODE is INIT_EXPR, then leave references unbashed. */
5252
8d08fdba 5253tree
acd8e2d0 5254build_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
8d08fdba 5255{
926ce8bd 5256 tree result;
8d08fdba
MS
5257 tree newrhs = rhs;
5258 tree lhstype = TREE_TYPE (lhs);
5259 tree olhstype = lhstype;
60cd3e8b 5260 tree olhs = NULL_TREE;
487a92fe 5261 bool plain_assign = (modifycode == NOP_EXPR);
8d08fdba 5262
8d08fdba 5263 /* Avoid duplicate error messages from operands that had errors. */
bd6dd845 5264 if (lhs == error_mark_node || rhs == error_mark_node)
8d08fdba
MS
5265 return error_mark_node;
5266
8d08fdba 5267 /* Handle control structure constructs used as "lvalues". */
8d08fdba
MS
5268 switch (TREE_CODE (lhs))
5269 {
f4f206f4 5270 /* Handle --foo = 5; as these are valid constructs in C++. */
8d08fdba
MS
5271 case PREDECREMENT_EXPR:
5272 case PREINCREMENT_EXPR:
5273 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
f293ce4b
RS
5274 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5275 stabilize_reference (TREE_OPERAND (lhs, 0)),
5276 TREE_OPERAND (lhs, 1));
5277 return build2 (COMPOUND_EXPR, lhstype,
5278 lhs,
5279 build_modify_expr (TREE_OPERAND (lhs, 0),
5280 modifycode, rhs));
8d08fdba
MS
5281
5282 /* Handle (a, b) used as an "lvalue". */
5283 case COMPOUND_EXPR:
8d08fdba
MS
5284 newrhs = build_modify_expr (TREE_OPERAND (lhs, 1),
5285 modifycode, rhs);
bd6dd845 5286 if (newrhs == error_mark_node)
8d08fdba 5287 return error_mark_node;
f293ce4b
RS
5288 return build2 (COMPOUND_EXPR, lhstype,
5289 TREE_OPERAND (lhs, 0), newrhs);
8d08fdba 5290
a4443a08 5291 case MODIFY_EXPR:
a65cddcf 5292 if (TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0)))
f293ce4b
RS
5293 lhs = build2 (TREE_CODE (lhs), TREE_TYPE (lhs),
5294 stabilize_reference (TREE_OPERAND (lhs, 0)),
5295 TREE_OPERAND (lhs, 1));
a4443a08 5296 newrhs = build_modify_expr (TREE_OPERAND (lhs, 0), modifycode, rhs);
bd6dd845 5297 if (newrhs == error_mark_node)
a4443a08 5298 return error_mark_node;
f293ce4b 5299 return build2 (COMPOUND_EXPR, lhstype, lhs, newrhs);
a4443a08 5300
d211a298
RS
5301 case MIN_EXPR:
5302 case MAX_EXPR:
5303 /* MIN_EXPR and MAX_EXPR are currently only permitted as lvalues,
5304 when neither operand has side-effects. */
5ae9ba3e 5305 if (!lvalue_or_else (lhs, lv_assign))
d211a298
RS
5306 return error_mark_node;
5307
5308 gcc_assert (!TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 0))
5309 && !TREE_SIDE_EFFECTS (TREE_OPERAND (lhs, 1)));
5310
5311 lhs = build3 (COND_EXPR, TREE_TYPE (lhs),
5312 build2 (TREE_CODE (lhs) == MIN_EXPR ? LE_EXPR : GE_EXPR,
5313 boolean_type_node,
5314 TREE_OPERAND (lhs, 0),
5315 TREE_OPERAND (lhs, 1)),
5316 TREE_OPERAND (lhs, 0),
5317 TREE_OPERAND (lhs, 1));
5318 /* Fall through. */
5319
8d08fdba
MS
5320 /* Handle (a ? b : c) used as an "lvalue". */
5321 case COND_EXPR:
8d08fdba
MS
5322 {
5323 /* Produce (a ? (b = rhs) : (c = rhs))
5324 except that the RHS goes through a save-expr
5325 so the code to compute it is only emitted once. */
df39af7d 5326 tree cond;
a77a9a18 5327 tree preeval = NULL_TREE;
df39af7d 5328
a77a9a18 5329 rhs = stabilize_expr (rhs, &preeval);
c8094d83 5330
df39af7d
JM
5331 /* Check this here to avoid odd errors when trying to convert
5332 a throw to the type of the COND_EXPR. */
5ae9ba3e 5333 if (!lvalue_or_else (lhs, lv_assign))
df39af7d
JM
5334 return error_mark_node;
5335
5336 cond = build_conditional_expr
5337 (TREE_OPERAND (lhs, 0),
5338 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5339 TREE_OPERAND (lhs, 1)),
5340 modifycode, rhs),
5341 build_modify_expr (cp_convert (TREE_TYPE (lhs),
5342 TREE_OPERAND (lhs, 2)),
5343 modifycode, rhs));
5344
bd6dd845 5345 if (cond == error_mark_node)
8d08fdba
MS
5346 return cond;
5347 /* Make sure the code to compute the rhs comes out
5348 before the split. */
6de9cd9a 5349 if (preeval)
f293ce4b 5350 cond = build2 (COMPOUND_EXPR, TREE_TYPE (lhs), preeval, cond);
6de9cd9a 5351 return cond;
8d08fdba 5352 }
c8094d83 5353
7f85441b
KG
5354 default:
5355 break;
8d08fdba
MS
5356 }
5357
8d08fdba
MS
5358 if (modifycode == INIT_EXPR)
5359 {
f30efcb7
JM
5360 if (TREE_CODE (rhs) == CONSTRUCTOR)
5361 {
182609b5
JM
5362 if (! same_type_p (TREE_TYPE (rhs), lhstype))
5363 /* Call convert to generate an error; see PR 11063. */
5364 rhs = convert (lhstype, rhs);
f293ce4b 5365 result = build2 (INIT_EXPR, lhstype, lhs, rhs);
f30efcb7
JM
5366 TREE_SIDE_EFFECTS (result) = 1;
5367 return result;
5368 }
5369 else if (! IS_AGGR_TYPE (lhstype))
f4f206f4 5370 /* Do the default thing. */;
db5ae43f 5371 else
8d08fdba 5372 {
4ba126e4
MM
5373 result = build_special_member_call (lhs, complete_ctor_identifier,
5374 build_tree_list (NULL_TREE, rhs),
cad7e87b 5375 lhstype, LOOKUP_NORMAL);
8d08fdba
MS
5376 if (result == NULL_TREE)
5377 return error_mark_node;
5378 return result;
5379 }
5380 }
a56ca899 5381 else
8d08fdba 5382 {
a56ca899
NS
5383 lhs = require_complete_type (lhs);
5384 if (lhs == error_mark_node)
5385 return error_mark_node;
5386
5387 if (modifycode == NOP_EXPR)
c91a56d2 5388 {
a56ca899
NS
5389 /* `operator=' is not an inheritable operator. */
5390 if (! IS_AGGR_TYPE (lhstype))
f4f206f4 5391 /* Do the default thing. */;
a56ca899
NS
5392 else
5393 {
14d22dd6 5394 result = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL,
ec835fb2
MM
5395 lhs, rhs, make_node (NOP_EXPR),
5396 /*overloaded_p=*/NULL);
a56ca899
NS
5397 if (result == NULL_TREE)
5398 return error_mark_node;
5399 return result;
5400 }
5401 lhstype = olhstype;
5402 }
5403 else
5404 {
5405 /* A binary op has been requested. Combine the old LHS
0cbd7506
MS
5406 value with the RHS producing the value we should actually
5407 store into the LHS. */
a56ca899 5408
50bc768d 5409 gcc_assert (!PROMOTES_TO_AGGR_TYPE (lhstype, REFERENCE_TYPE));
a56ca899
NS
5410 lhs = stabilize_reference (lhs);
5411 newrhs = cp_build_binary_op (modifycode, lhs, rhs);
5412 if (newrhs == error_mark_node)
5413 {
a82e1a7d 5414 error (" in evaluation of %<%Q(%#T, %#T)%>", modifycode,
a56ca899
NS
5415 TREE_TYPE (lhs), TREE_TYPE (rhs));
5416 return error_mark_node;
5417 }
c8094d83 5418
a56ca899
NS
5419 /* Now it looks like a plain assignment. */
5420 modifycode = NOP_EXPR;
c91a56d2 5421 }
50bc768d
NS
5422 gcc_assert (TREE_CODE (lhstype) != REFERENCE_TYPE);
5423 gcc_assert (TREE_CODE (TREE_TYPE (newrhs)) != REFERENCE_TYPE);
8d08fdba
MS
5424 }
5425
719f407a 5426 /* The left-hand side must be an lvalue. */
5ae9ba3e 5427 if (!lvalue_or_else (lhs, lv_assign))
8d08fdba
MS
5428 return error_mark_node;
5429
a56ca899
NS
5430 /* Warn about modifying something that is `const'. Don't warn if
5431 this is initialization. */
8d08fdba 5432 if (modifycode != INIT_EXPR
91063b51 5433 && (TREE_READONLY (lhs) || CP_TYPE_CONST_P (lhstype)
69851283
MM
5434 /* Functions are not modifiable, even though they are
5435 lvalues. */
5436 || TREE_CODE (TREE_TYPE (lhs)) == FUNCTION_TYPE
a56ca899
NS
5437 || TREE_CODE (TREE_TYPE (lhs)) == METHOD_TYPE
5438 /* If it's an aggregate and any field is const, then it is
5439 effectively const. */
5552b43c 5440 || (CLASS_TYPE_P (lhstype)
a56ca899 5441 && C_TYPE_FIELDS_READONLY (lhstype))))
8d08fdba
MS
5442 readonly_error (lhs, "assignment", 0);
5443
a56ca899
NS
5444 /* If storing into a structure or union member, it has probably been
5445 given type `int'. Compute the type that would go with the actual
5446 amount of storage the member occupies. */
8d08fdba
MS
5447
5448 if (TREE_CODE (lhs) == COMPONENT_REF
5449 && (TREE_CODE (lhstype) == INTEGER_TYPE
5450 || TREE_CODE (lhstype) == REAL_TYPE
5451 || TREE_CODE (lhstype) == ENUMERAL_TYPE))
a0a33927
MS
5452 {
5453 lhstype = TREE_TYPE (get_unwidened (lhs, 0));
5454
5455 /* If storing in a field that is in actuality a short or narrower
5456 than one, we must store in the field in its actual type. */
5457
5458 if (lhstype != TREE_TYPE (lhs))
5459 {
60cd3e8b
JM
5460 /* Avoid warnings converting integral types back into enums for
5461 enum bit fields. */
5462 if (TREE_CODE (lhstype) == INTEGER_TYPE
5463 && TREE_CODE (olhstype) == ENUMERAL_TYPE)
5464 {
5465 if (TREE_SIDE_EFFECTS (lhs))
5466 lhs = stabilize_reference (lhs);
5467 olhs = lhs;
5468 }
a0a33927
MS
5469 lhs = copy_node (lhs);
5470 TREE_TYPE (lhs) = lhstype;
5471 }
5472 }
8d08fdba 5473
8d08fdba
MS
5474 /* Convert new value to destination type. */
5475
5476 if (TREE_CODE (lhstype) == ARRAY_TYPE)
5477 {
f376e137 5478 int from_array;
c8094d83 5479
985723ce
JM
5480 if (!same_or_base_type_p (TYPE_MAIN_VARIANT (lhstype),
5481 TYPE_MAIN_VARIANT (TREE_TYPE (rhs))))
44a8d0b3 5482 {
a82e1a7d 5483 error ("incompatible types in assignment of %qT to %qT",
985723ce 5484 TREE_TYPE (rhs), lhstype);
44a8d0b3
MS
5485 return error_mark_node;
5486 }
5487
39211cd5 5488 /* Allow array assignment in compiler-generated code. */
a49cfba8 5489 if (! DECL_ARTIFICIAL (current_function_decl))
7e4d7898 5490 pedwarn ("ISO C++ forbids assignment of arrays");
39211cd5 5491
f376e137 5492 from_array = TREE_CODE (TREE_TYPE (newrhs)) == ARRAY_TYPE
0cbd7506 5493 ? 1 + (modifycode != INIT_EXPR): 0;
b84f4651
MM
5494 return build_vec_init (lhs, NULL_TREE, newrhs,
5495 /*explicit_default_init_p=*/false,
5496 from_array);
8d08fdba
MS
5497 }
5498
5499 if (modifycode == INIT_EXPR)
a56ca899
NS
5500 newrhs = convert_for_initialization (lhs, lhstype, newrhs, LOOKUP_NORMAL,
5501 "initialization", NULL_TREE, 0);
8d08fdba
MS
5502 else
5503 {
e92cc029 5504 /* Avoid warnings on enum bit fields. */
8d08fdba
MS
5505 if (TREE_CODE (olhstype) == ENUMERAL_TYPE
5506 && TREE_CODE (lhstype) == INTEGER_TYPE)
5507 {
5508 newrhs = convert_for_assignment (olhstype, newrhs, "assignment",
5509 NULL_TREE, 0);
6060a796 5510 newrhs = convert_force (lhstype, newrhs, 0);
8d08fdba
MS
5511 }
5512 else
5513 newrhs = convert_for_assignment (lhstype, newrhs, "assignment",
b7484fbe
MS
5514 NULL_TREE, 0);
5515 if (TREE_CODE (newrhs) == CALL_EXPR
5516 && TYPE_NEEDS_CONSTRUCTING (lhstype))
5566b478 5517 newrhs = build_cplus_new (lhstype, newrhs);
b7484fbe 5518
e8abc66f 5519 /* Can't initialize directly from a TARGET_EXPR, since that would
07674418
MS
5520 cause the lhs to be constructed twice, and possibly result in
5521 accidental self-initialization. So we force the TARGET_EXPR to be
be99da77 5522 expanded without a target. */
b7484fbe 5523 if (TREE_CODE (newrhs) == TARGET_EXPR)
f293ce4b
RS
5524 newrhs = build2 (COMPOUND_EXPR, TREE_TYPE (newrhs), newrhs,
5525 TREE_OPERAND (newrhs, 0));
8d08fdba
MS
5526 }
5527
bd6dd845 5528 if (newrhs == error_mark_node)
8d08fdba
MS
5529 return error_mark_node;
5530
e58a9aa1
ZL
5531 if (c_dialect_objc () && flag_objc_gc)
5532 {
5533 result = objc_generate_write_barrier (lhs, modifycode, newrhs);
5534
5535 if (result)
5536 return result;
5537 }
5538
f293ce4b
RS
5539 result = build2 (modifycode == NOP_EXPR ? MODIFY_EXPR : INIT_EXPR,
5540 lhstype, lhs, newrhs);
2ee887f2 5541
8d08fdba 5542 TREE_SIDE_EFFECTS (result) = 1;
487a92fe
JM
5543 if (!plain_assign)
5544 TREE_NO_WARNING (result) = 1;
8d08fdba
MS
5545
5546 /* If we got the LHS in a different type for storing in,
5547 convert the result back to the nominal type of LHS
5548 so that the value we return always has the same type
5549 as the LHS argument. */
5550
5551 if (olhstype == TREE_TYPE (result))
5552 return result;
60cd3e8b 5553 if (olhs)
a3203465 5554 {
f293ce4b 5555 result = build2 (COMPOUND_EXPR, olhstype, result, olhs);
6de9cd9a 5556 TREE_NO_WARNING (result) = 1;
a3203465
MS
5557 return result;
5558 }
8d08fdba
MS
5559 return convert_for_assignment (olhstype, result, "assignment",
5560 NULL_TREE, 0);
5561}
5562
5566b478 5563tree
acd8e2d0 5564build_x_modify_expr (tree lhs, enum tree_code modifycode, tree rhs)
5566b478 5565{
5156628f 5566 if (processing_template_decl)
5566b478 5567 return build_min_nt (MODOP_EXPR, lhs,
4dabb379 5568 build_min_nt (modifycode, NULL_TREE, NULL_TREE), rhs);
5566b478
MS
5569
5570 if (modifycode != NOP_EXPR)
5571 {
14d22dd6 5572 tree rval = build_new_op (MODIFY_EXPR, LOOKUP_NORMAL, lhs, rhs,
ec835fb2
MM
5573 make_node (modifycode),
5574 /*overloaded_p=*/NULL);
5566b478 5575 if (rval)
487a92fe
JM
5576 {
5577 TREE_NO_WARNING (rval) = 1;
5578 return rval;
5579 }
5566b478
MS
5580 }
5581 return build_modify_expr (lhs, modifycode, rhs);
5582}
8d08fdba 5583
8d08fdba 5584\f
ddd5a7c1 5585/* Get difference in deltas for different pointer to member function
7b6d72fc 5586 types. Returns an integer constant of type PTRDIFF_TYPE_NODE. If
08e17d9d
MM
5587 the conversion is invalid, the constant is zero. If
5588 ALLOW_INVERSE_P is true, then allow reverse conversions as well.
5589 If C_CAST_P is true this conversion is taking place as part of a
5590 C-style cast.
3927874d
JM
5591
5592 Note that the naming of FROM and TO is kind of backwards; the return
5593 value is what we add to a TO in order to get a FROM. They are named
5594 this way because we call this function to find out how to convert from
5595 a pointer to member of FROM to a pointer to member of TO. */
e92cc029 5596
51c184be 5597static tree
c8094d83 5598get_delta_difference (tree from, tree to,
08e17d9d
MM
5599 bool allow_inverse_p,
5600 bool c_cast_p)
51c184be 5601{
51c184be 5602 tree binfo;
2db1ab2d 5603 base_kind kind;
e8632777
MM
5604 tree result;
5605
5606 /* Assume no conversion is required. */
5607 result = integer_zero_node;
08e17d9d 5608 binfo = lookup_base (to, from, c_cast_p ? ba_unique : ba_check, &kind);
2db1ab2d 5609 if (kind == bk_inaccessible || kind == bk_ambig)
e8632777 5610 error (" in pointer to member function conversion");
f879d298 5611 else if (binfo)
51c184be 5612 {
f879d298 5613 if (kind != bk_via_virtual)
e8632777
MM
5614 result = BINFO_OFFSET (binfo);
5615 else
5616 {
f879d298 5617 tree virt_binfo = binfo_from_vbase (binfo);
c8094d83 5618
e8632777 5619 /* This is a reinterpret cast, we choose to do nothing. */
08e17d9d 5620 if (allow_inverse_p)
d4ee4d25 5621 warning (0, "pointer to member cast via virtual base %qT",
e8632777
MM
5622 BINFO_TYPE (virt_binfo));
5623 else
a82e1a7d 5624 error ("pointer to member conversion via virtual base %qT",
dbbf88d1 5625 BINFO_TYPE (virt_binfo));
e8632777 5626 }
51c184be 5627 }
f879d298
NS
5628 else if (same_type_ignoring_top_level_qualifiers_p (from, to))
5629 /* Pointer to member of incomplete class is permitted*/;
5630 else if (!allow_inverse_p)
5631 {
5632 error_not_base_type (from, to);
5633 error (" in pointer to member conversion");
5634 }
5635 else
5636 {
5637 binfo = lookup_base (from, to, c_cast_p ? ba_unique : ba_check, &kind);
5638 if (binfo)
5639 {
5640 if (kind != bk_via_virtual)
5641 result = size_diffop (size_zero_node, BINFO_OFFSET (binfo));
5642 else
5643 {
5644 /* This is a reinterpret cast, we choose to do nothing. */
5645 tree virt_binfo = binfo_from_vbase (binfo);
c8094d83 5646
f879d298
NS
5647 warning (0, "pointer to member cast via virtual base %qT",
5648 BINFO_TYPE (virt_binfo));
5649 }
5650 }
5651 }
32e02ee0 5652
c8094d83 5653 return fold_if_not_in_template (convert_to_integer (ptrdiff_type_node,
455f19cb 5654 result));
51c184be
MS
5655}
5656
c7e266a6
MM
5657/* Return a constructor for the pointer-to-member-function TYPE using
5658 the other components as specified. */
5659
e08a8f45 5660tree
acd8e2d0 5661build_ptrmemfunc1 (tree type, tree delta, tree pfn)
594740f3 5662{
f78c7bc6 5663 tree u = NULL_TREE;
c7e266a6 5664 tree delta_field;
c7e266a6 5665 tree pfn_field;
4038c495 5666 VEC(constructor_elt, gc) *v;
594740f3 5667
c7e266a6 5668 /* Pull the FIELD_DECLs out of the type. */
1f84ec23
MM
5669 pfn_field = TYPE_FIELDS (type);
5670 delta_field = TREE_CHAIN (pfn_field);
594740f3 5671
c7e266a6
MM
5672 /* Make sure DELTA has the type we want. */
5673 delta = convert_and_check (delta_type_node, delta);
594740f3 5674
c7e266a6 5675 /* Finish creating the initializer. */
4038c495
GB
5676 v = VEC_alloc(constructor_elt, gc, 2);
5677 CONSTRUCTOR_APPEND_ELT(v, pfn_field, pfn);
5678 CONSTRUCTOR_APPEND_ELT(v, delta_field, delta);
5679 u = build_constructor (type, v);
6de9cd9a
DN
5680 TREE_CONSTANT (u) = TREE_CONSTANT (pfn) & TREE_CONSTANT (delta);
5681 TREE_INVARIANT (u) = TREE_INVARIANT (pfn) & TREE_INVARIANT (delta);
530ec96d
MM
5682 TREE_STATIC (u) = (TREE_CONSTANT (u)
5683 && (initializer_constant_valid_p (pfn, TREE_TYPE (pfn))
5684 != NULL_TREE)
c8094d83 5685 && (initializer_constant_valid_p (delta, TREE_TYPE (delta))
530ec96d 5686 != NULL_TREE));
594740f3 5687 return u;
594740f3
MS
5688}
5689
8d08fdba
MS
5690/* Build a constructor for a pointer to member function. It can be
5691 used to initialize global variables, local variable, or used
5692 as a value in expressions. TYPE is the POINTER to METHOD_TYPE we
5693 want to be.
5694
838dfd8a 5695 If FORCE is nonzero, then force this conversion, even if
8d08fdba 5696 we would rather not do it. Usually set when using an explicit
08e17d9d 5697 cast. A C-style cast is being processed iff C_CAST_P is true.
51c184be
MS
5698
5699 Return error_mark_node, if something goes wrong. */
8d08fdba
MS
5700
5701tree
08e17d9d 5702build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p)
8d08fdba 5703{
e08a8f45 5704 tree fn;
7993382e
MM
5705 tree pfn_type;
5706 tree to_type;
5707
5708 if (error_operand_p (pfn))
5709 return error_mark_node;
5710
5711 pfn_type = TREE_TYPE (pfn);
5712 to_type = build_ptrmemfunc_type (type);
b928a651 5713
e92cc029 5714 /* Handle multiple conversions of pointer to member functions. */
7993382e 5715 if (TYPE_PTRMEMFUNC_P (pfn_type))
8d08fdba 5716 {
530ec96d 5717 tree delta = NULL_TREE;
7133357a 5718 tree npfn = NULL_TREE;
1f84ec23 5719 tree n;
594740f3 5720
c8094d83 5721 if (!force
30f86ec3 5722 && !can_convert_arg (to_type, TREE_TYPE (pfn), pfn, LOOKUP_NORMAL))
c8094d83 5723 error ("invalid conversion to type %qT from type %qT",
0cbd7506 5724 to_type, pfn_type);
9ca21c0a 5725
3f2b640a
JM
5726 n = get_delta_difference (TYPE_PTRMEMFUNC_OBJECT_TYPE (pfn_type),
5727 TYPE_PTRMEMFUNC_OBJECT_TYPE (to_type),
08e17d9d
MM
5728 force,
5729 c_cast_p);
3f2b640a 5730
c7e266a6
MM
5731 /* We don't have to do any conversion to convert a
5732 pointer-to-member to its own type. But, we don't want to
5733 just return a PTRMEM_CST if there's an explicit cast; that
5734 cast should make the expression an invalid template argument. */
3f2b640a
JM
5735 if (TREE_CODE (pfn) != PTRMEM_CST)
5736 {
5737 if (same_type_p (to_type, pfn_type))
5738 return pfn;
5739 else if (integer_zerop (n))
5740 return build_reinterpret_cast (to_type, pfn);
5741 }
c7e266a6 5742
7def1251
JM
5743 if (TREE_SIDE_EFFECTS (pfn))
5744 pfn = save_expr (pfn);
5745
530ec96d
MM
5746 /* Obtain the function pointer and the current DELTA. */
5747 if (TREE_CODE (pfn) == PTRMEM_CST)
18ae7f63 5748 expand_ptrmemfunc_cst (pfn, &delta, &npfn);
530ec96d
MM
5749 else
5750 {
50ad9642
MM
5751 npfn = build_ptrmemfunc_access_expr (pfn, pfn_identifier);
5752 delta = build_ptrmemfunc_access_expr (pfn, delta_identifier);
530ec96d
MM
5753 }
5754
3461fba7 5755 /* Just adjust the DELTA field. */
50bc768d
NS
5756 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5757 (TREE_TYPE (delta), ptrdiff_type_node));
cb7fdde2
AO
5758 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta)
5759 n = cp_build_binary_op (LSHIFT_EXPR, n, integer_one_node);
1f84ec23 5760 delta = cp_build_binary_op (PLUS_EXPR, delta, n);
18ae7f63 5761 return build_ptrmemfunc1 (to_type, delta, npfn);
8d08fdba 5762 }
51c184be 5763
e92cc029 5764 /* Handle null pointer to member function conversions. */
51c184be
MS
5765 if (integer_zerop (pfn))
5766 {
faf5394a 5767 pfn = build_c_cast (type, integer_zero_node);
b928a651 5768 return build_ptrmemfunc1 (to_type,
c8094d83 5769 integer_zero_node,
18ae7f63 5770 pfn);
51c184be
MS
5771 }
5772
e6e174e5 5773 if (type_unknown_p (pfn))
c2ea3a40 5774 return instantiate_type (type, pfn, tf_error | tf_warning);
a0a33927 5775
e08a8f45 5776 fn = TREE_OPERAND (pfn, 0);
37048601
NS
5777 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL
5778 /* In a template, we will have preserved the
5779 OFFSET_REF. */
5780 || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF));
b928a651 5781 return make_ptrmem_cst (to_type, fn);
e08a8f45 5782}
8d08fdba 5783
18ae7f63 5784/* Return the DELTA, IDX, PFN, and DELTA2 values for the PTRMEM_CST
fed3cef0
RK
5785 given by CST.
5786
5787 ??? There is no consistency as to the types returned for the above
852dcbdd 5788 values. Some code acts as if it were a sizetype and some as if it were
fed3cef0 5789 integer_type_node. */
8d08fdba 5790
e08a8f45 5791void
acd8e2d0 5792expand_ptrmemfunc_cst (tree cst, tree *delta, tree *pfn)
e08a8f45
MM
5793{
5794 tree type = TREE_TYPE (cst);
5795 tree fn = PTRMEM_CST_MEMBER (cst);
3927874d 5796 tree ptr_class, fn_class;
8d08fdba 5797
50bc768d 5798 gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
3927874d
JM
5799
5800 /* The class that the function belongs to. */
4f1c5b7d 5801 fn_class = DECL_CONTEXT (fn);
3927874d
JM
5802
5803 /* The class that we're creating a pointer to member of. */
5804 ptr_class = TYPE_PTRMEMFUNC_OBJECT_TYPE (type);
5805
5806 /* First, calculate the adjustment to the function's class. */
08e17d9d
MM
5807 *delta = get_delta_difference (fn_class, ptr_class, /*force=*/0,
5808 /*c_cast_p=*/0);
3927874d 5809
e08a8f45 5810 if (!DECL_VIRTUAL_P (fn))
18ae7f63 5811 *pfn = convert (TYPE_PTRMEMFUNC_FN_TYPE (type), build_addr_func (fn));
8d08fdba 5812 else
51c184be 5813 {
3927874d 5814 /* If we're dealing with a virtual function, we have to adjust 'this'
0cbd7506
MS
5815 again, to point to the base which provides the vtable entry for
5816 fn; the call will do the opposite adjustment. */
e93ee644 5817 tree orig_class = DECL_CONTEXT (fn);
3927874d 5818 tree binfo = binfo_or_else (orig_class, fn_class);
455f19cb
MM
5819 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
5820 *delta, BINFO_OFFSET (binfo));
5821 *delta = fold_if_not_in_template (*delta);
3927874d 5822
3461fba7
NS
5823 /* We set PFN to the vtable offset at which the function can be
5824 found, plus one (unless ptrmemfunc_vbit_in_delta, in which
5825 case delta is shifted left, and then incremented). */
cb7fdde2 5826 *pfn = DECL_VINDEX (fn);
455f19cb
MM
5827 *pfn = build2 (MULT_EXPR, integer_type_node, *pfn,
5828 TYPE_SIZE_UNIT (vtable_entry_type));
5829 *pfn = fold_if_not_in_template (*pfn);
cb7fdde2
AO
5830
5831 switch (TARGET_PTRMEMFUNC_VBIT_LOCATION)
5832 {
5833 case ptrmemfunc_vbit_in_pfn:
455f19cb
MM
5834 *pfn = build2 (PLUS_EXPR, integer_type_node, *pfn,
5835 integer_one_node);
5836 *pfn = fold_if_not_in_template (*pfn);
cb7fdde2
AO
5837 break;
5838
5839 case ptrmemfunc_vbit_in_delta:
455f19cb
MM
5840 *delta = build2 (LSHIFT_EXPR, TREE_TYPE (*delta),
5841 *delta, integer_one_node);
5842 *delta = fold_if_not_in_template (*delta);
5843 *delta = build2 (PLUS_EXPR, TREE_TYPE (*delta),
5844 *delta, integer_one_node);
5845 *delta = fold_if_not_in_template (*delta);
cb7fdde2
AO
5846 break;
5847
5848 default:
315fb5db 5849 gcc_unreachable ();
cb7fdde2
AO
5850 }
5851
455f19cb
MM
5852 *pfn = build_nop (TYPE_PTRMEMFUNC_FN_TYPE (type), *pfn);
5853 *pfn = fold_if_not_in_template (*pfn);
e08a8f45
MM
5854 }
5855}
8d08fdba 5856
e08a8f45
MM
5857/* Return an expression for PFN from the pointer-to-member function
5858 given by T. */
5859
5860tree
acd8e2d0 5861pfn_from_ptrmemfunc (tree t)
e08a8f45
MM
5862{
5863 if (TREE_CODE (t) == PTRMEM_CST)
5864 {
5865 tree delta;
e08a8f45 5866 tree pfn;
c8094d83 5867
18ae7f63 5868 expand_ptrmemfunc_cst (t, &delta, &pfn);
e08a8f45
MM
5869 if (pfn)
5870 return pfn;
51c184be 5871 }
8d08fdba 5872
50ad9642 5873 return build_ptrmemfunc_access_expr (t, pfn_identifier);
8d08fdba
MS
5874}
5875
a7a64a77
MM
5876/* Convert value RHS to type TYPE as preparation for an assignment to
5877 an lvalue of type TYPE. ERRTYPE is a string to use in error
5878 messages: "assignment", "return", etc. If FNDECL is non-NULL, we
5879 are doing the conversion in order to pass the PARMNUMth argument of
5880 FNDECL. */
8d08fdba
MS
5881
5882static tree
acd8e2d0
NS
5883convert_for_assignment (tree type, tree rhs,
5884 const char *errtype, tree fndecl, int parmnum)
8d08fdba 5885{
926ce8bd
KH
5886 tree rhstype;
5887 enum tree_code coder;
8d08fdba 5888
8d08fdba
MS
5889 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
5890 if (TREE_CODE (rhs) == NON_LVALUE_EXPR)
5891 rhs = TREE_OPERAND (rhs, 0);
5892
a7a64a77
MM
5893 rhstype = TREE_TYPE (rhs);
5894 coder = TREE_CODE (rhstype);
5895
7d149679 5896 if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
cc27e657 5897 && vector_types_convertible_p (type, rhstype))
7d149679
AH
5898 return convert (type, rhs);
5899
a7a64a77 5900 if (rhs == error_mark_node || rhstype == error_mark_node)
8d08fdba 5901 return error_mark_node;
2c73f9f5 5902 if (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node)
8d08fdba
MS
5903 return error_mark_node;
5904
a7a64a77 5905 /* The RHS of an assignment cannot have void type. */
8d08fdba
MS
5906 if (coder == VOID_TYPE)
5907 {
8251199e 5908 error ("void value not ignored as it ought to be");
8d08fdba
MS
5909 return error_mark_node;
5910 }
8d08fdba 5911
a7a64a77
MM
5912 /* Simplify the RHS if possible. */
5913 if (TREE_CODE (rhs) == CONST_DECL)
5914 rhs = DECL_INITIAL (rhs);
660845bf
ZL
5915
5916 if (c_dialect_objc ())
5917 {
5918 int parmno;
5919 tree rname = fndecl;
5920
5921 if (!strcmp (errtype, "assignment"))
5922 parmno = -1;
5923 else if (!strcmp (errtype, "initialization"))
5924 parmno = -2;
5925 else
5926 {
5927 tree selector = objc_message_selector ();
5928
5929 parmno = parmnum;
5930
5931 if (selector && parmno > 1)
5932 {
5933 rname = selector;
5934 parmno -= 1;
5935 }
5936 }
5937
5938 if (objc_compare_types (type, rhstype, parmno, rname))
5939 return convert (type, rhs);
5940 }
5941
a7a64a77
MM
5942 /* [expr.ass]
5943
5944 The expression is implicitly converted (clause _conv_) to the
72a08131
JM
5945 cv-unqualified type of the left operand.
5946
5947 We allow bad conversions here because by the time we get to this point
5948 we are committed to doing the conversion. If we end up doing a bad
5949 conversion, convert_like will complain. */
5950 if (!can_convert_arg_bad (type, rhstype, rhs))
a7a64a77 5951 {
32facac8 5952 /* When -Wno-pmf-conversions is use, we just silently allow
a7a64a77
MM
5953 conversions from pointers-to-members to plain pointers. If
5954 the conversion doesn't work, cp_convert will complain. */
c8094d83
MS
5955 if (!warn_pmf2ptr
5956 && TYPE_PTR_P (type)
a7a64a77
MM
5957 && TYPE_PTRMEMFUNC_P (rhstype))
5958 rhs = cp_convert (strip_top_quals (type), rhs);
72a08131 5959 else
32facac8
ML
5960 {
5961 /* If the right-hand side has unknown type, then it is an
5962 overloaded function. Call instantiate_type to get error
5963 messages. */
5964 if (rhstype == unknown_type_node)
c2ea3a40 5965 instantiate_type (type, rhs, tf_error | tf_warning);
32facac8 5966 else if (fndecl)
a82e1a7d 5967 error ("cannot convert %qT to %qT for argument %qP to %qD",
0cbd7506 5968 rhstype, type, parmnum, fndecl);
32facac8 5969 else
a82e1a7d 5970 error ("cannot convert %qT to %qT in %s", rhstype, type, errtype);
32facac8
ML
5971 return error_mark_node;
5972 }
51c184be 5973 }
104f8784
KG
5974 if (warn_missing_format_attribute)
5975 {
5976 const enum tree_code codel = TREE_CODE (type);
5977 if ((codel == POINTER_TYPE || codel == REFERENCE_TYPE)
5978 && coder == codel
5979 && check_missing_format_attribute (type, rhstype))
5980 warning (OPT_Wmissing_format_attribute,
5981 "%s might be a candidate for a format attribute",
5982 errtype);
5983 }
5984
4143af33 5985 return perform_implicit_conversion (strip_top_quals (type), rhs);
8d08fdba
MS
5986}
5987
56ae6d77 5988/* Convert RHS to be of type TYPE.
838dfd8a 5989 If EXP is nonzero, it is the target of the initialization.
8d08fdba
MS
5990 ERRTYPE is a string to use in error messages.
5991
5992 Two major differences between the behavior of
5993 `convert_for_assignment' and `convert_for_initialization'
5994 are that references are bashed in the former, while
5995 copied in the latter, and aggregates are assigned in
5996 the former (operator=) while initialized in the
5997 latter (X(X&)).
5998
5999 If using constructor make sure no conversion operator exists, if one does
878cd289
MS
6000 exist, an ambiguity exists.
6001
6002 If flags doesn't include LOOKUP_COMPLAIN, don't complain about anything. */
e92cc029 6003
8d08fdba 6004tree
acd8e2d0
NS
6005convert_for_initialization (tree exp, tree type, tree rhs, int flags,
6006 const char *errtype, tree fndecl, int parmnum)
8d08fdba 6007{
926ce8bd
KH
6008 enum tree_code codel = TREE_CODE (type);
6009 tree rhstype;
6010 enum tree_code coder;
8d08fdba
MS
6011
6012 /* build_c_cast puts on a NOP_EXPR to make the result not an lvalue.
6013 Strip such NOP_EXPRs, since RHS is used in non-lvalue context. */
6014 if (TREE_CODE (rhs) == NOP_EXPR
a0a33927
MS
6015 && TREE_TYPE (rhs) == TREE_TYPE (TREE_OPERAND (rhs, 0))
6016 && codel != REFERENCE_TYPE)
8d08fdba
MS
6017 rhs = TREE_OPERAND (rhs, 0);
6018
6019 if (rhs == error_mark_node
6020 || (TREE_CODE (rhs) == TREE_LIST && TREE_VALUE (rhs) == error_mark_node))
6021 return error_mark_node;
6022
8d08fdba 6023 if ((TREE_CODE (TREE_TYPE (rhs)) == ARRAY_TYPE
8ccc31eb
MS
6024 && TREE_CODE (type) != ARRAY_TYPE
6025 && (TREE_CODE (type) != REFERENCE_TYPE
6026 || TREE_CODE (TREE_TYPE (type)) != ARRAY_TYPE))
59e76fc6
JM
6027 || (TREE_CODE (TREE_TYPE (rhs)) == FUNCTION_TYPE
6028 && (TREE_CODE (type) != REFERENCE_TYPE
6029 || TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE))
8d08fdba 6030 || TREE_CODE (TREE_TYPE (rhs)) == METHOD_TYPE)
0a72704b 6031 rhs = decay_conversion (rhs);
8d08fdba
MS
6032
6033 rhstype = TREE_TYPE (rhs);
6034 coder = TREE_CODE (rhstype);
6035
8d08fdba
MS
6036 if (coder == ERROR_MARK)
6037 return error_mark_node;
6038
8d08fdba
MS
6039 /* We accept references to incomplete types, so we can
6040 return here before checking if RHS is of complete type. */
c8094d83 6041
8d08fdba 6042 if (codel == REFERENCE_TYPE)
2986ae00
MS
6043 {
6044 /* This should eventually happen in convert_arguments. */
a703fb38 6045 int savew = 0, savee = 0;
2986ae00
MS
6046
6047 if (fndecl)
6048 savew = warningcount, savee = errorcount;
7e99327d
MM
6049 rhs = initialize_reference (type, rhs, /*decl=*/NULL_TREE,
6050 /*cleanup=*/NULL);
2986ae00
MS
6051 if (fndecl)
6052 {
6053 if (warningcount > savew)
dee15844 6054 warning (0, "in passing argument %P of %q+D", parmnum, fndecl);
2986ae00 6055 else if (errorcount > savee)
dee15844 6056 error ("in passing argument %P of %q+D", parmnum, fndecl);
2986ae00
MS
6057 }
6058 return rhs;
c8094d83 6059 }
8d08fdba 6060
66543169
NS
6061 if (exp != 0)
6062 exp = require_complete_type (exp);
8d08fdba
MS
6063 if (exp == error_mark_node)
6064 return error_mark_node;
6065
ee76b931 6066 rhstype = non_reference (rhstype);
8d08fdba 6067
6467930b
MS
6068 type = complete_type (type);
6069
7bae46f4 6070 if (IS_AGGR_TYPE (type))
277294d7 6071 return ocp_convert (type, rhs, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
8d08fdba 6072
8d08fdba
MS
6073 return convert_for_assignment (type, rhs, errtype, fndecl, parmnum);
6074}
6075\f
efee38a9 6076/* If RETVAL is the address of, or a reference to, a local variable or
34cd5ae7 6077 temporary give an appropriate warning. */
8d08fdba 6078
efee38a9 6079static void
acd8e2d0 6080maybe_warn_about_returning_address_of_local (tree retval)
efee38a9
MM
6081{
6082 tree valtype = TREE_TYPE (DECL_RESULT (current_function_decl));
2bfa73e4 6083 tree whats_returned = retval;
8d08fdba 6084
2bfa73e4 6085 for (;;)
efee38a9 6086 {
efee38a9 6087 if (TREE_CODE (whats_returned) == COMPOUND_EXPR)
2bfa73e4
BS
6088 whats_returned = TREE_OPERAND (whats_returned, 1);
6089 else if (TREE_CODE (whats_returned) == CONVERT_EXPR
6090 || TREE_CODE (whats_returned) == NON_LVALUE_EXPR
6091 || TREE_CODE (whats_returned) == NOP_EXPR)
efee38a9 6092 whats_returned = TREE_OPERAND (whats_returned, 0);
2bfa73e4
BS
6093 else
6094 break;
6095 }
6096
6097 if (TREE_CODE (whats_returned) != ADDR_EXPR)
6098 return;
c8094d83 6099 whats_returned = TREE_OPERAND (whats_returned, 0);
2bfa73e4
BS
6100
6101 if (TREE_CODE (valtype) == REFERENCE_TYPE)
6102 {
6103 if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR
6104 || TREE_CODE (whats_returned) == TARGET_EXPR)
efee38a9 6105 {
d4ee4d25 6106 warning (0, "returning reference to temporary");
2bfa73e4 6107 return;
efee38a9 6108 }
c8094d83 6109 if (TREE_CODE (whats_returned) == VAR_DECL
2bfa73e4
BS
6110 && DECL_NAME (whats_returned)
6111 && TEMP_NAME_P (DECL_NAME (whats_returned)))
efee38a9 6112 {
d4ee4d25 6113 warning (0, "reference to non-lvalue returned");
2bfa73e4 6114 return;
efee38a9
MM
6115 }
6116 }
efee38a9 6117
a2f1f4c3 6118 if (DECL_P (whats_returned)
2bfa73e4
BS
6119 && DECL_NAME (whats_returned)
6120 && DECL_FUNCTION_SCOPE_P (whats_returned)
6121 && !(TREE_STATIC (whats_returned)
6122 || TREE_PUBLIC (whats_returned)))
6123 {
6124 if (TREE_CODE (valtype) == REFERENCE_TYPE)
dee15844
JM
6125 warning (0, "reference to local variable %q+D returned",
6126 whats_returned);
2bfa73e4 6127 else
dee15844
JM
6128 warning (0, "address of local variable %q+D returned",
6129 whats_returned);
2bfa73e4 6130 return;
efee38a9
MM
6131 }
6132}
6133
0e339752 6134/* Check that returning RETVAL from the current function is valid.
efee38a9
MM
6135 Return an expression explicitly showing all conversions required to
6136 change RETVAL into the function return type, and to assign it to
0c9b182b
JJ
6137 the DECL_RESULT for the function. Set *NO_WARNING to true if
6138 code reaches end of non-void function warning shouldn't be issued
6139 on this RETURN_EXPR. */
efee38a9
MM
6140
6141tree
0c9b182b 6142check_return_expr (tree retval, bool *no_warning)
8d08fdba 6143{
efee38a9
MM
6144 tree result;
6145 /* The type actually returned by the function, after any
6146 promotions. */
6147 tree valtype;
6148 int fn_returns_value_p;
6149
0c9b182b
JJ
6150 *no_warning = false;
6151
efee38a9
MM
6152 /* A `volatile' function is one that isn't supposed to return, ever.
6153 (This is a G++ extension, used to get better code for functions
6154 that call the `volatile' function.) */
8d08fdba 6155 if (TREE_THIS_VOLATILE (current_function_decl))
d4ee4d25 6156 warning (0, "function declared %<noreturn%> has a %<return%> statement");
8d08fdba 6157
efee38a9 6158 /* Check for various simple errors. */
a0de9d20 6159 if (DECL_DESTRUCTOR_P (current_function_decl))
8d08fdba 6160 {
1c2c08a5 6161 if (retval)
8251199e 6162 error ("returning a value from a destructor");
efee38a9 6163 return NULL_TREE;
1c2c08a5 6164 }
90418208 6165 else if (DECL_CONSTRUCTOR_P (current_function_decl))
0dde4175 6166 {
90418208
JM
6167 if (in_function_try_handler)
6168 /* If a return statement appears in a handler of the
c6002625 6169 function-try-block of a constructor, the program is ill-formed. */
90418208
JM
6170 error ("cannot return from a handler of a function-try-block of a constructor");
6171 else if (retval)
6172 /* You can't return a value from a constructor. */
6173 error ("returning a value from a constructor");
6174 return NULL_TREE;
efee38a9 6175 }
efee38a9 6176
efc7052d
JM
6177 if (processing_template_decl)
6178 {
6179 current_function_returns_value = 1;
6180 return retval;
6181 }
c8094d83 6182
efee38a9
MM
6183 /* When no explicit return-value is given in a function with a named
6184 return value, the named return value is used. */
6185 result = DECL_RESULT (current_function_decl);
6186 valtype = TREE_TYPE (result);
50bc768d 6187 gcc_assert (valtype != NULL_TREE);
b72801e2 6188 fn_returns_value_p = !VOID_TYPE_P (valtype);
efee38a9
MM
6189 if (!retval && DECL_NAME (result) && fn_returns_value_p)
6190 retval = result;
6191
6192 /* Check for a return statement with no return value in a function
6193 that's supposed to return a value. */
6194 if (!retval && fn_returns_value_p)
6195 {
9e637a26 6196 pedwarn ("return-statement with no value, in function returning %qT",
c8a209ca 6197 valtype);
efee38a9
MM
6198 /* Clear this, so finish_function won't say that we reach the
6199 end of a non-void function (which we don't, we gave a
6200 return!). */
6201 current_function_returns_null = 0;
0c9b182b
JJ
6202 /* And signal caller that TREE_NO_WARNING should be set on the
6203 RETURN_EXPR to avoid control reaches end of non-void function
6204 warnings in tree-cfg.c. */
6205 *no_warning = true;
efee38a9
MM
6206 }
6207 /* Check for a return statement with a value in a function that
6208 isn't supposed to return a value. */
6209 else if (retval && !fn_returns_value_p)
c8094d83 6210 {
b72801e2 6211 if (VOID_TYPE_P (TREE_TYPE (retval)))
efee38a9
MM
6212 /* You can return a `void' value from a function of `void'
6213 type. In that case, we have to evaluate the expression for
6214 its side-effects. */
6215 finish_expr_stmt (retval);
6216 else
b0e3f7ec 6217 pedwarn ("return-statement with a value, in function "
0cbd7506 6218 "returning 'void'");
efee38a9
MM
6219
6220 current_function_returns_null = 1;
6221
6222 /* There's really no value to return, after all. */
6223 return NULL_TREE;
0dde4175 6224 }
efee38a9
MM
6225 else if (!retval)
6226 /* Remember that this function can sometimes return without a
6227 value. */
6228 current_function_returns_null = 1;
90418208
JM
6229 else
6230 /* Remember that this function did return a value. */
6231 current_function_returns_value = 1;
1c2c08a5 6232
276318a5 6233 /* Check for erroneous operands -- but after giving ourselves a
5ae9ba3e
MM
6234 chance to provide an error about returning a value from a void
6235 function. */
6236 if (error_operand_p (retval))
6237 {
6238 current_function_return_value = error_mark_node;
6239 return error_mark_node;
6240 }
6241
7f477e81 6242 /* Only operator new(...) throw(), can return NULL [expr.new/13]. */
596ea4e5
AS
6243 if ((DECL_OVERLOADED_OPERATOR_P (current_function_decl) == NEW_EXPR
6244 || DECL_OVERLOADED_OPERATOR_P (current_function_decl) == VEC_NEW_EXPR)
7f477e81 6245 && !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
708cae97 6246 && ! flag_check_new
7f477e81 6247 && null_ptr_cst_p (retval))
d4ee4d25 6248 warning (0, "%<operator new%> must not return NULL unless it is "
0cbd7506 6249 "declared %<throw()%> (or -fcheck-new is in effect)");
8d08fdba 6250
824b9a4c 6251 /* Effective C++ rule 15. See also start_function. */
eb448459 6252 if (warn_ecpp
47293da3
GB
6253 && DECL_NAME (current_function_decl) == ansi_assopname(NOP_EXPR))
6254 {
6255 bool warn = true;
6256
6257 /* The function return type must be a reference to the current
6258 class. */
6259 if (TREE_CODE (valtype) == REFERENCE_TYPE
6260 && same_type_ignoring_top_level_qualifiers_p
6261 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
6262 {
6263 /* Returning '*this' is obviously OK. */
6264 if (retval == current_class_ref)
6265 warn = false;
6266 /* If we are calling a function whose return type is the same of
6267 the current class reference, it is ok. */
6268 else if (TREE_CODE (retval) == INDIRECT_REF
6269 && TREE_CODE (TREE_OPERAND (retval, 0)) == CALL_EXPR)
616adc47 6270 warn = false;
47293da3
GB
6271 }
6272
6273 if (warn)
d4ee4d25 6274 warning (0, "%<operator=%> should return a reference to %<*this%>");
47293da3 6275 }
824b9a4c 6276
07b2f2fd
JM
6277 /* The fabled Named Return Value optimization, as per [class.copy]/15:
6278
6279 [...] For a function with a class return type, if the expression
6280 in the return statement is the name of a local object, and the cv-
6281 unqualified type of the local object is the same as the function
6282 return type, an implementation is permitted to omit creating the tem-
6283 porary object to hold the function return value [...]
6284
6285 So, if this is a value-returning function that always returns the same
6286 local variable, remember it.
0d97bf4c
JM
6287
6288 It might be nice to be more flexible, and choose the first suitable
6289 variable even if the function sometimes returns something else, but
6290 then we run the risk of clobbering the variable we chose if the other
6291 returned expression uses the chosen variable somehow. And people expect
07b2f2fd
JM
6292 this restriction, anyway. (jason 2000-11-19)
6293
324f9dfb 6294 See finish_function and finalize_nrv for the rest of this optimization. */
0d97bf4c 6295
01f9e964 6296 if (fn_returns_value_p && flag_elide_constructors)
0d97bf4c
JM
6297 {
6298 if (retval != NULL_TREE
6299 && (current_function_return_value == NULL_TREE
6300 || current_function_return_value == retval)
6301 && TREE_CODE (retval) == VAR_DECL
6302 && DECL_CONTEXT (retval) == current_function_decl
6303 && ! TREE_STATIC (retval)
01f9e964 6304 && (DECL_ALIGN (retval)
07b2f2fd
JM
6305 >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
6306 && same_type_p ((TYPE_MAIN_VARIANT
6307 (TREE_TYPE (retval))),
6308 (TYPE_MAIN_VARIANT
6309 (TREE_TYPE (TREE_TYPE (current_function_decl))))))
0d97bf4c
JM
6310 current_function_return_value = retval;
6311 else
6312 current_function_return_value = error_mark_node;
6313 }
6314
efee38a9
MM
6315 /* We don't need to do any conversions when there's nothing being
6316 returned. */
5ae9ba3e
MM
6317 if (!retval)
6318 return NULL_TREE;
efee38a9
MM
6319
6320 /* Do any required conversions. */
6321 if (retval == result || DECL_CONSTRUCTOR_P (current_function_decl))
6322 /* No conversions are required. */
6323 ;
8d08fdba
MS
6324 else
6325 {
efee38a9 6326 /* The type the function is declared to return. */
cce2be43
JM
6327 tree functype = TREE_TYPE (TREE_TYPE (current_function_decl));
6328
6329 /* First convert the value to the function's return type, then
6330 to the type of return value's location to handle the
0cbd7506 6331 case that functype is smaller than the valtype. */
c1bc6829 6332 retval = convert_for_initialization
cce2be43 6333 (NULL_TREE, functype, retval, LOOKUP_NORMAL|LOOKUP_ONLYCONVERTING,
c1bc6829 6334 "return", NULL_TREE, 0);
cce2be43
JM
6335 retval = convert (valtype, retval);
6336
efee38a9 6337 /* If the conversion failed, treat this just like `return;'. */
691c003d 6338 if (retval == error_mark_node)
90418208 6339 return retval;
02531345 6340 /* We can't initialize a register from a AGGR_INIT_EXPR. */
c1bc6829
JM
6341 else if (! current_function_returns_struct
6342 && TREE_CODE (retval) == TARGET_EXPR
02531345 6343 && TREE_CODE (TREE_OPERAND (retval, 1)) == AGGR_INIT_EXPR)
f293ce4b
RS
6344 retval = build2 (COMPOUND_EXPR, TREE_TYPE (retval), retval,
6345 TREE_OPERAND (retval, 0));
efee38a9
MM
6346 else
6347 maybe_warn_about_returning_address_of_local (retval);
8d08fdba 6348 }
c8094d83 6349
efee38a9 6350 /* Actually copy the value returned into the appropriate location. */
691c003d 6351 if (retval && retval != result)
f293ce4b 6352 retval = build2 (INIT_EXPR, TREE_TYPE (result), result, retval);
b88c08b6 6353
efee38a9
MM
6354 return retval;
6355}
6356
8d08fdba 6357\f
838dfd8a 6358/* Returns nonzero if the pointer-type FROM can be converted to the
ceab47eb 6359 pointer-type TO via a qualification conversion. If CONSTP is -1,
838dfd8a 6360 then we return nonzero if the pointers are similar, and the
ceab47eb
MM
6361 cv-qualification signature of FROM is a proper subset of that of TO.
6362
6363 If CONSTP is positive, then all outer pointers have been
6364 const-qualified. */
e92cc029 6365
bd6dd845 6366static int
acd8e2d0 6367comp_ptr_ttypes_real (tree to, tree from, int constp)
a0a33927 6368{
a5ac359a 6369 bool to_more_cv_qualified = false;
ceab47eb 6370
a0a33927
MS
6371 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6372 {
6373 if (TREE_CODE (to) != TREE_CODE (from))
6374 return 0;
6375
d11ad92e 6376 if (TREE_CODE (from) == OFFSET_TYPE
b7a78333
MM
6377 && !same_type_p (TYPE_OFFSET_BASETYPE (from),
6378 TYPE_OFFSET_BASETYPE (to)))
6379 return 0;
d11ad92e 6380
f30432d7
MS
6381 /* Const and volatile mean something different for function types,
6382 so the usual checks are not appropriate. */
6383 if (TREE_CODE (to) != FUNCTION_TYPE && TREE_CODE (to) != METHOD_TYPE)
6384 {
660845bf
ZL
6385 /* In Objective-C++, some types may have been 'volatilized' by
6386 the compiler for EH; when comparing them here, the volatile
6387 qualification must be ignored. */
6388 bool objc_quals_match = objc_type_quals_match (to, from);
6389
6390 if (!at_least_as_qualified_p (to, from) && !objc_quals_match)
02020185 6391 return 0;
a0a33927 6392
660845bf 6393 if (!at_least_as_qualified_p (from, to) && !objc_quals_match)
02020185 6394 {
ceab47eb
MM
6395 if (constp == 0)
6396 return 0;
a5ac359a 6397 to_more_cv_qualified = true;
ceab47eb
MM
6398 }
6399
6400 if (constp > 0)
6401 constp &= TYPE_READONLY (to);
f30432d7 6402 }
a0a33927 6403
ae0b7dfc 6404 if (TREE_CODE (to) != POINTER_TYPE && !TYPE_PTRMEM_P (to))
8de9bb0e
NS
6405 return ((constp >= 0 || to_more_cv_qualified)
6406 && same_type_ignoring_top_level_qualifiers_p (to, from));
a0a33927
MS
6407 }
6408}
6409
8de9bb0e
NS
6410/* When comparing, say, char ** to char const **, this function takes
6411 the 'char *' and 'char const *'. Do not pass non-pointer/reference
6412 types to this function. */
e92cc029 6413
a0a33927 6414int
acd8e2d0 6415comp_ptr_ttypes (tree to, tree from)
a0a33927
MS
6416{
6417 return comp_ptr_ttypes_real (to, from, 1);
6418}
d11ad92e
MS
6419
6420/* Returns 1 if to and from are (possibly multi-level) pointers to the same
6421 type or inheritance-related types, regardless of cv-quals. */
6422
6423int
acd8e2d0 6424ptr_reasonably_similar (tree to, tree from)
d11ad92e
MS
6425{
6426 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6427 {
72a08131
JM
6428 /* Any target type is similar enough to void. */
6429 if (TREE_CODE (to) == VOID_TYPE
6430 || TREE_CODE (from) == VOID_TYPE)
6431 return 1;
6432
d11ad92e
MS
6433 if (TREE_CODE (to) != TREE_CODE (from))
6434 return 0;
6435
6436 if (TREE_CODE (from) == OFFSET_TYPE
6437 && comptypes (TYPE_OFFSET_BASETYPE (to),
c8094d83 6438 TYPE_OFFSET_BASETYPE (from),
c8a209ca 6439 COMPARE_BASE | COMPARE_DERIVED))
d11ad92e
MS
6440 continue;
6441
d70b8c3a
PB
6442 if (TREE_CODE (to) == VECTOR_TYPE
6443 && vector_types_convertible_p (to, from))
6444 return 1;
6445
8a2b77e7
JM
6446 if (TREE_CODE (to) == INTEGER_TYPE
6447 && TYPE_PRECISION (to) == TYPE_PRECISION (from))
6448 return 1;
6449
6450 if (TREE_CODE (to) == FUNCTION_TYPE)
6451 return 1;
6452
d11ad92e
MS
6453 if (TREE_CODE (to) != POINTER_TYPE)
6454 return comptypes
c8094d83 6455 (TYPE_MAIN_VARIANT (to), TYPE_MAIN_VARIANT (from),
c8a209ca 6456 COMPARE_BASE | COMPARE_DERIVED);
d11ad92e
MS
6457 }
6458}
c11b6f21 6459
34b5375f
MM
6460/* Return true if TO and FROM (both of which are POINTER_TYPEs or
6461 pointer-to-member types) are the same, ignoring cv-qualification at
6462 all levels. */
c11b6f21 6463
34b5375f 6464bool
acd8e2d0 6465comp_ptr_ttypes_const (tree to, tree from)
c11b6f21
MS
6466{
6467 for (; ; to = TREE_TYPE (to), from = TREE_TYPE (from))
6468 {
6469 if (TREE_CODE (to) != TREE_CODE (from))
34b5375f 6470 return false;
c11b6f21
MS
6471
6472 if (TREE_CODE (from) == OFFSET_TYPE
3bfdc719
MM
6473 && same_type_p (TYPE_OFFSET_BASETYPE (from),
6474 TYPE_OFFSET_BASETYPE (to)))
c11b6f21
MS
6475 continue;
6476
6477 if (TREE_CODE (to) != POINTER_TYPE)
9edc3913 6478 return same_type_ignoring_top_level_qualifiers_p (to, from);
c11b6f21
MS
6479 }
6480}
6481
89d684bb
BM
6482/* Returns the type qualifiers for this type, including the qualifiers on the
6483 elements for an array type. */
27778b73
MM
6484
6485int
acd8e2d0 6486cp_type_quals (tree type)
27778b73 6487{
38da6039 6488 type = strip_array_types (type);
328de7c2
MM
6489 if (type == error_mark_node)
6490 return TYPE_UNQUALIFIED;
38da6039 6491 return TYPE_QUALS (type);
91063b51 6492}
a7a7710d 6493
f4f206f4 6494/* Returns nonzero if the TYPE contains a mutable member. */
a7a7710d 6495
acd8e2d0
NS
6496bool
6497cp_has_mutable_p (tree type)
a7a7710d 6498{
38da6039 6499 type = strip_array_types (type);
a7a7710d
NS
6500
6501 return CLASS_TYPE_P (type) && CLASSTYPE_HAS_MUTABLE (type);
6502}
af7b9902 6503
9804209d
DG
6504/* Apply the TYPE_QUALS to the new DECL. */
6505void
6506cp_apply_type_quals_to_decl (int type_quals, tree decl)
6507{
6508 tree type = TREE_TYPE (decl);
6509
6510 if (type == error_mark_node)
6511 return;
6512
c8094d83 6513 if (TREE_CODE (type) == FUNCTION_TYPE
9804209d
DG
6514 && type_quals != TYPE_UNQUALIFIED)
6515 {
6516 /* This was an error in C++98 (cv-qualifiers cannot be added to
0cbd7506
MS
6517 a function type), but DR 295 makes the code well-formed by
6518 dropping the extra qualifiers. */
9804209d 6519 if (pedantic)
0cbd7506
MS
6520 {
6521 tree bad_type = build_qualified_type (type, type_quals);
6522 pedwarn ("ignoring %qV qualifiers added to function type %qT",
6523 bad_type, type);
6524 }
9804209d
DG
6525
6526 TREE_TYPE (decl) = TYPE_MAIN_VARIANT (type);
6527 return;
6528 }
6529
67935995
MM
6530 /* Avoid setting TREE_READONLY incorrectly. */
6531 if (/* If the object has a constructor, the constructor may modify
6532 the object. */
6533 TYPE_NEEDS_CONSTRUCTING (type)
6534 /* If the type isn't complete, we don't know yet if it will need
6535 constructing. */
c8094d83 6536 || !COMPLETE_TYPE_P (type)
67935995
MM
6537 /* If the type has a mutable component, that component might be
6538 modified. */
6539 || TYPE_HAS_MUTABLE_P (type))
6540 type_quals &= ~TYPE_QUAL_CONST;
6541
9804209d
DG
6542 c_apply_type_quals_to_decl (type_quals, decl);
6543}
6544
af7b9902 6545/* Subroutine of casts_away_constness. Make T1 and T2 point at
33c25e5c 6546 exemplar types such that casting T1 to T2 is casting away constness
af7b9902
MM
6547 if and only if there is no implicit conversion from T1 to T2. */
6548
6549static void
acd8e2d0 6550casts_away_constness_r (tree *t1, tree *t2)
af7b9902
MM
6551{
6552 int quals1;
6553 int quals2;
6554
6555 /* [expr.const.cast]
6556
6557 For multi-level pointer to members and multi-level mixed pointers
6558 and pointers to members (conv.qual), the "member" aspect of a
6559 pointer to member level is ignored when determining if a const
6560 cv-qualifier has been cast away. */
af7b9902
MM
6561 /* [expr.const.cast]
6562
6563 For two pointer types:
6564
0cbd7506
MS
6565 X1 is T1cv1,1 * ... cv1,N * where T1 is not a pointer type
6566 X2 is T2cv2,1 * ... cv2,M * where T2 is not a pointer type
6567 K is min(N,M)
af7b9902
MM
6568
6569 casting from X1 to X2 casts away constness if, for a non-pointer
6570 type T there does not exist an implicit conversion (clause
6571 _conv_) from:
6572
0cbd7506 6573 Tcv1,(N-K+1) * cv1,(N-K+2) * ... cv1,N *
c8094d83 6574
af7b9902
MM
6575 to
6576
0cbd7506 6577 Tcv2,(M-K+1) * cv2,(M-K+2) * ... cv2,M *. */
dad732fa
MM
6578 if ((!TYPE_PTR_P (*t1) && !TYPE_PTRMEM_P (*t1))
6579 || (!TYPE_PTR_P (*t2) && !TYPE_PTRMEM_P (*t2)))
af7b9902
MM
6580 {
6581 *t1 = cp_build_qualified_type (void_type_node,
89d684bb 6582 cp_type_quals (*t1));
af7b9902 6583 *t2 = cp_build_qualified_type (void_type_node,
89d684bb 6584 cp_type_quals (*t2));
af7b9902
MM
6585 return;
6586 }
c8094d83 6587
89d684bb
BM
6588 quals1 = cp_type_quals (*t1);
6589 quals2 = cp_type_quals (*t2);
dad732fa
MM
6590
6591 if (TYPE_PTRMEM_P (*t1))
6592 *t1 = TYPE_PTRMEM_POINTED_TO_TYPE (*t1);
6593 else
6594 *t1 = TREE_TYPE (*t1);
6595 if (TYPE_PTRMEM_P (*t2))
6596 *t2 = TYPE_PTRMEM_POINTED_TO_TYPE (*t2);
6597 else
6598 *t2 = TREE_TYPE (*t2);
6599
af7b9902
MM
6600 casts_away_constness_r (t1, t2);
6601 *t1 = build_pointer_type (*t1);
6602 *t2 = build_pointer_type (*t2);
6603 *t1 = cp_build_qualified_type (*t1, quals1);
6604 *t2 = cp_build_qualified_type (*t2, quals2);
6605}
6606
838dfd8a 6607/* Returns nonzero if casting from TYPE1 to TYPE2 casts away
af7b9902
MM
6608 constness. */
6609
acd8e2d0
NS
6610static bool
6611casts_away_constness (tree t1, tree t2)
af7b9902
MM
6612{
6613 if (TREE_CODE (t2) == REFERENCE_TYPE)
6614 {
6615 /* [expr.const.cast]
c8094d83 6616
af7b9902
MM
6617 Casting from an lvalue of type T1 to an lvalue of type T2
6618 using a reference cast casts away constness if a cast from an
6619 rvalue of type "pointer to T1" to the type "pointer to T2"
6620 casts away constness. */
acd8e2d0 6621 t1 = (TREE_CODE (t1) == REFERENCE_TYPE ? TREE_TYPE (t1) : t1);
af7b9902
MM
6622 return casts_away_constness (build_pointer_type (t1),
6623 build_pointer_type (TREE_TYPE (t2)));
6624 }
6625
6626 if (TYPE_PTRMEM_P (t1) && TYPE_PTRMEM_P (t2))
6627 /* [expr.const.cast]
c8094d83 6628
af7b9902
MM
6629 Casting from an rvalue of type "pointer to data member of X
6630 of type T1" to the type "pointer to data member of Y of type
6631 T2" casts away constness if a cast from an rvalue of type
aba649ba 6632 "pointer to T1" to the type "pointer to T2" casts away
af7b9902 6633 constness. */
3e0b4710 6634 return casts_away_constness
a5ac359a
MM
6635 (build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t1)),
6636 build_pointer_type (TYPE_PTRMEM_POINTED_TO_TYPE (t2)));
af7b9902
MM
6637
6638 /* Casting away constness is only something that makes sense for
6639 pointer or reference types. */
c8094d83 6640 if (TREE_CODE (t1) != POINTER_TYPE
af7b9902 6641 || TREE_CODE (t2) != POINTER_TYPE)
acd8e2d0 6642 return false;
af7b9902
MM
6643
6644 /* Top-level qualifiers don't matter. */
6645 t1 = TYPE_MAIN_VARIANT (t1);
6646 t2 = TYPE_MAIN_VARIANT (t2);
6647 casts_away_constness_r (&t1, &t2);
6648 if (!can_convert (t2, t1))
acd8e2d0 6649 return true;
af7b9902 6650
acd8e2d0 6651 return false;
af7b9902 6652}
6816f040 6653
ee76b931
MM
6654/* If T is a REFERENCE_TYPE return the type to which T refers.
6655 Otherwise, return T itself. */
6656
6657tree
6658non_reference (tree t)
6659{
6660 if (TREE_CODE (t) == REFERENCE_TYPE)
6661 t = TREE_TYPE (t);
6662 return t;
6663}
37dc0d8d
JM
6664
6665
6666/* Return nonzero if REF is an lvalue valid for this language;
6667 otherwise, print an error message and return zero. USE says
6668 how the lvalue is being used and so selects the error message. */
6669
6670int
6671lvalue_or_else (tree ref, enum lvalue_use use)
6672{
6673 int win = lvalue_p (ref);
6674
6675 if (!win)
6676 lvalue_error (use);
6677
6678 return win;
6679}