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