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