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