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