]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/cvt.c
Implement N4514, C++ Extensions for Transactional Memory.
[thirdparty/gcc.git] / gcc / cp / cvt.c
CommitLineData
8d08fdba 1/* Language-level data type conversion for GNU C++.
5624e564 2 Copyright (C) 1987-2015 Free Software Foundation, Inc.
8d08fdba
MS
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
4
f5adbb8d 5This file is part of GCC.
8d08fdba 6
f5adbb8d 7GCC is free software; you can redistribute it and/or modify
8d08fdba 8it under the terms of the GNU General Public License as published by
e77f031d 9the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
10any later version.
11
f5adbb8d 12GCC is distributed in the hope that it will be useful,
8d08fdba
MS
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
e77f031d
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
8d08fdba
MS
20
21
3fd5abcf 22/* This file contains the functions for converting C++ expressions
8d08fdba
MS
23 to different data types. The only entry point is `convert'.
24 Every language front end must have a `convert' function
25 but what kind of conversions it does will depend on the language. */
26
27#include "config.h"
8d052bc7 28#include "system.h"
4977bab6
ZW
29#include "coretypes.h"
30#include "tm.h"
40e23961 31#include "alias.h"
8d08fdba 32#include "tree.h"
d8a2d370 33#include "stor-layout.h"
8d08fdba
MS
34#include "flags.h"
35#include "cp-tree.h"
f25a2b52 36#include "intl.h"
8d08fdba 37#include "convert.h"
ddaed37e 38#include "decl.h"
4de67c26 39#include "target.h"
e92cc029 40
4b978f96
PC
41static tree cp_convert_to_pointer (tree, tree, tsubst_flags_t);
42static tree convert_to_pointer_force (tree, tree, tsubst_flags_t);
ae00383b 43static tree build_type_conversion (tree, tree);
4b978f96 44static tree build_up_reference (tree, tree, int, tree, tsubst_flags_t);
76545796 45static void diagnose_ref_binding (location_t, tree, tree, tree);
49c249e1 46
8d08fdba
MS
47/* Change of width--truncation and extension of integers or reals--
48 is represented with NOP_EXPR. Proper functioning of many things
49 assumes that no other conversions can be NOP_EXPRs.
50
51 Conversion between integer and pointer is represented with CONVERT_EXPR.
52 Converting integer to real uses FLOAT_EXPR
53 and real to integer uses FIX_TRUNC_EXPR.
54
55 Here is a list of all the functions that assume that widening and
56 narrowing is always done with a NOP_EXPR:
57 In convert.c, convert_to_integer.
58 In c-typeck.c, build_binary_op_nodefault (boolean ops),
0cbd7506 59 and c_common_truthvalue_conversion.
8d08fdba
MS
60 In expr.c: expand_expr, for operands of a MULT_EXPR.
61 In fold-const.c: fold.
62 In tree.c: get_narrower and get_unwidened.
63
64 C++: in multiple-inheritance, converting between pointers may involve
65 adjusting them by a delta stored within the class definition. */
66\f
67/* Subroutines of `convert'. */
68
8d08fdba
MS
69/* if converting pointer to pointer
70 if dealing with classes, check for derived->base or vice versa
71 else if dealing with method pointers, delegate
72 else convert blindly
73 else if converting class, pass off to build_type_conversion
6e03b280 74 else try C-style pointer conversion. */
e92cc029 75
8d08fdba 76static tree
4b978f96 77cp_convert_to_pointer (tree type, tree expr, tsubst_flags_t complain)
8d08fdba 78{
926ce8bd
KH
79 tree intype = TREE_TYPE (expr);
80 enum tree_code form;
31bcaa20 81 tree rval;
8400e75e 82 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
5a3c9cf2 83
0c482362
AP
84 if (intype == error_mark_node)
85 return error_mark_node;
71851aaa 86
9e1e64ec 87 if (MAYBE_CLASS_TYPE_P (intype))
e92cc029 88 {
e92cc029 89 intype = complete_type (intype);
d0f062fb 90 if (!COMPLETE_TYPE_P (intype))
e92cc029 91 {
4b978f96
PC
92 if (complain & tf_error)
93 error_at (loc, "can%'t convert from incomplete type %qT to %qT",
94 intype, type);
e92cc029
MS
95 return error_mark_node;
96 }
97
7993382e 98 rval = build_type_conversion (type, expr);
e92cc029
MS
99 if (rval)
100 {
4b978f96
PC
101 if ((complain & tf_error)
102 && rval == error_mark_node)
5a3c9cf2
PC
103 error_at (loc, "conversion of %qE from %qT to %qT is ambiguous",
104 expr, intype, type);
e92cc029
MS
105 return rval;
106 }
107 }
108
faf5394a 109 /* Handle anachronistic conversions from (::*)() to cv void* or (*)(). */
50e10fa8 110 if (TYPE_PTR_P (type)
9a3b49ac 111 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
b72801e2 112 || VOID_TYPE_P (TREE_TYPE (type))))
9a3b49ac 113 {
33c25e5c
MM
114 if (TYPE_PTRMEMFUNC_P (intype)
115 || TREE_CODE (intype) == METHOD_TYPE)
4b978f96 116 return convert_member_func_to_ptr (type, expr, complain);
50e10fa8 117 if (TYPE_PTR_P (TREE_TYPE (expr)))
d6b4ea85 118 return build_nop (type, expr);
9a3b49ac
MS
119 intype = TREE_TYPE (expr);
120 }
121
c87978aa
JM
122 if (expr == error_mark_node)
123 return error_mark_node;
124
71851aaa
MS
125 form = TREE_CODE (intype);
126
d8f8dca1 127 if (POINTER_TYPE_P (intype))
8d08fdba
MS
128 {
129 intype = TYPE_MAIN_VARIANT (intype);
130
131 if (TYPE_MAIN_VARIANT (type) != intype
50e10fa8 132 && TYPE_PTR_P (type)
8d08fdba 133 && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE
9e1e64ec
PC
134 && MAYBE_CLASS_TYPE_P (TREE_TYPE (type))
135 && MAYBE_CLASS_TYPE_P (TREE_TYPE (intype))
338d90b8 136 && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE)
8d08fdba
MS
137 {
138 enum tree_code code = PLUS_EXPR;
338d90b8 139 tree binfo;
7993382e
MM
140 tree intype_class;
141 tree type_class;
142 bool same_p;
338d90b8 143
7993382e
MM
144 intype_class = TREE_TYPE (intype);
145 type_class = TREE_TYPE (type);
146
c8094d83 147 same_p = same_type_p (TYPE_MAIN_VARIANT (intype_class),
7993382e
MM
148 TYPE_MAIN_VARIANT (type_class));
149 binfo = NULL_TREE;
00a17e31 150 /* Try derived to base conversion. */
7993382e 151 if (!same_p)
22854930
PC
152 binfo = lookup_base (intype_class, type_class, ba_check,
153 NULL, complain);
7993382e 154 if (!same_p && !binfo)
8d08fdba 155 {
00a17e31 156 /* Try base to derived conversion. */
22854930
PC
157 binfo = lookup_base (type_class, intype_class, ba_check,
158 NULL, complain);
8d08fdba
MS
159 code = MINUS_EXPR;
160 }
338d90b8
NS
161 if (binfo == error_mark_node)
162 return error_mark_node;
7993382e 163 if (binfo || same_p)
8d08fdba 164 {
7993382e 165 if (binfo)
4b978f96 166 expr = build_base_path (code, expr, binfo, 0, complain);
00a17e31 167 /* Add any qualifier conversions. */
7993382e 168 return build_nop (type, expr);
8d08fdba
MS
169 }
170 }
8d08fdba 171
a5ac359a 172 if (TYPE_PTRMEMFUNC_P (type))
28cbf42c 173 {
4b978f96
PC
174 if (complain & tf_error)
175 error_at (loc, "cannot convert %qE from type %qT to type %qT",
176 expr, intype, type);
a5ac359a
MM
177 return error_mark_node;
178 }
b928a651 179
a5ac359a
MM
180 return build_nop (type, expr);
181 }
66b1156a 182 else if ((TYPE_PTRDATAMEM_P (type) && TYPE_PTRDATAMEM_P (intype))
6e03b280
OW
183 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
184 return convert_ptrmem (type, expr, /*allow_inverse_p=*/false,
4b978f96 185 /*c_cast_p=*/false, complain);
d8f8dca1
MM
186 else if (TYPE_PTRMEMFUNC_P (intype))
187 {
d6b4ea85
MM
188 if (!warn_pmf2ptr)
189 {
190 if (TREE_CODE (expr) == PTRMEM_CST)
4b978f96
PC
191 return cp_convert_to_pointer (type, PTRMEM_CST_MEMBER (expr),
192 complain);
d6b4ea85
MM
193 else if (TREE_CODE (expr) == OFFSET_REF)
194 {
195 tree object = TREE_OPERAND (expr, 0);
196 return get_member_function_from_ptrfunc (&object,
89fcabaf 197 TREE_OPERAND (expr, 1),
4b978f96 198 complain);
d6b4ea85
MM
199 }
200 }
bc51de9c
PC
201 if (complain & tf_error)
202 error_at (loc, "cannot convert %qE from type %qT to type %qT",
203 expr, intype, type);
d8f8dca1
MM
204 return error_mark_node;
205 }
8d08fdba 206
33c2474d 207 if (null_ptr_cst_p (expr))
8d08fdba 208 {
d8f8dca1 209 if (TYPE_PTRMEMFUNC_P (type))
08e17d9d 210 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
4b978f96 211 /*c_cast_p=*/false, complain);
cd8ed629 212
f61af651
PC
213 if (complain & tf_warning)
214 maybe_warn_zero_as_null_pointer_constant (expr, loc);
215
e3692e02
PC
216 /* A NULL pointer-to-data-member is represented by -1, not by
217 zero. */
218 tree val = (TYPE_PTRDATAMEM_P (type)
219 ? build_int_cst_type (type, -1)
220 : build_int_cst (type, 0));
221
222 return (TREE_SIDE_EFFECTS (expr)
223 ? build2 (COMPOUND_EXPR, type, expr, val) : val);
8d08fdba 224 }
66b1156a 225 else if (TYPE_PTRMEM_P (type) && INTEGRAL_CODE_P (form))
201fbb7f 226 {
4b978f96
PC
227 if (complain & tf_error)
228 error_at (loc, "invalid conversion from %qT to %qT", intype, type);
201fbb7f
GDR
229 return error_mark_node;
230 }
8d08fdba 231
2986ae00 232 if (INTEGRAL_CODE_P (form))
8d08fdba 233 {
f5963e61 234 if (TYPE_PRECISION (intype) == POINTER_SIZE)
8d08fdba 235 return build1 (CONVERT_EXPR, type, expr);
4b978f96
PC
236 expr = cp_convert (c_common_type_for_size (POINTER_SIZE, 0), expr,
237 complain);
8dc2b103
NS
238 /* Modes may be different but sizes should be the same. There
239 is supposed to be some integral type that is the same width
240 as a pointer. */
241 gcc_assert (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (expr)))
242 == GET_MODE_SIZE (TYPE_MODE (type)));
c8094d83 243
8d08fdba
MS
244 return convert_to_pointer (type, expr);
245 }
246
e6e174e5 247 if (type_unknown_p (expr))
4b978f96 248 return instantiate_type (type, expr, complain);
e6e174e5 249
4b978f96
PC
250 if (complain & tf_error)
251 error_at (loc, "cannot convert %qE from type %qT to type %qT",
252 expr, intype, type);
8d08fdba
MS
253 return error_mark_node;
254}
255
256/* Like convert, except permit conversions to take place which
257 are not normally allowed due to access restrictions
258 (such as conversion from sub-type to private super-type). */
e92cc029 259
8d08fdba 260static tree
4b978f96 261convert_to_pointer_force (tree type, tree expr, tsubst_flags_t complain)
8d08fdba 262{
926ce8bd
KH
263 tree intype = TREE_TYPE (expr);
264 enum tree_code form = TREE_CODE (intype);
c8094d83 265
8d08fdba
MS
266 if (form == POINTER_TYPE)
267 {
268 intype = TYPE_MAIN_VARIANT (intype);
269
270 if (TYPE_MAIN_VARIANT (type) != intype
271 && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE
9e1e64ec
PC
272 && MAYBE_CLASS_TYPE_P (TREE_TYPE (type))
273 && MAYBE_CLASS_TYPE_P (TREE_TYPE (intype))
8d08fdba
MS
274 && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE)
275 {
276 enum tree_code code = PLUS_EXPR;
338d90b8
NS
277 tree binfo;
278
279 binfo = lookup_base (TREE_TYPE (intype), TREE_TYPE (type),
22854930 280 ba_unique, NULL, complain);
338d90b8 281 if (!binfo)
8d08fdba 282 {
338d90b8 283 binfo = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
22854930 284 ba_unique, NULL, complain);
338d90b8 285 code = MINUS_EXPR;
8d08fdba 286 }
338d90b8
NS
287 if (binfo == error_mark_node)
288 return error_mark_node;
289 if (binfo)
8d08fdba 290 {
4b978f96 291 expr = build_base_path (code, expr, binfo, 0, complain);
0cbd7506
MS
292 if (expr == error_mark_node)
293 return error_mark_node;
00a17e31 294 /* Add any qualifier conversions. */
338d90b8
NS
295 if (!same_type_p (TREE_TYPE (TREE_TYPE (expr)),
296 TREE_TYPE (type)))
7993382e 297 expr = build_nop (type, expr);
338d90b8 298 return expr;
8d08fdba 299 }
8d08fdba 300 }
8d08fdba
MS
301 }
302
4b978f96 303 return cp_convert_to_pointer (type, expr, complain);
8d08fdba
MS
304}
305
306/* We are passing something to a function which requires a reference.
307 The type we are interested in is in TYPE. The initial
308 value we have to begin with is in ARG.
309
310 FLAGS controls how we manage access checking.
08ac397c
JM
311 DIRECT_BIND in FLAGS controls how any temporaries are generated.
312 If DIRECT_BIND is set, DECL is the reference we're binding to. */
e92cc029 313
8d08fdba 314static tree
4b978f96
PC
315build_up_reference (tree type, tree arg, int flags, tree decl,
316 tsubst_flags_t complain)
8d08fdba 317{
eb66be0e 318 tree rval;
8926095f 319 tree argtype = TREE_TYPE (arg);
8d08fdba 320 tree target_type = TREE_TYPE (type);
8d08fdba 321
50bc768d 322 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
8d08fdba 323
eb66be0e 324 if ((flags & DIRECT_BIND) && ! real_lvalue_p (arg))
8d08fdba 325 {
08ac397c
JM
326 /* Create a new temporary variable. We can't just use a TARGET_EXPR
327 here because it needs to live as long as DECL. */
eb66be0e 328 tree targ = arg;
08ac397c 329
efd7ad5c 330 arg = make_temporary_var_for_ref_to_temp (decl, target_type);
8d1e67c6
MM
331
332 /* Process the initializer for the declaration. */
9a3b49ac 333 DECL_INITIAL (arg) = targ;
d174af6c 334 cp_finish_decl (arg, targ, /*init_const_expr_p=*/false, NULL_TREE,
c37dc68e 335 LOOKUP_ONLYCONVERTING|DIRECT_BIND);
e349ee73 336 }
eb66be0e 337 else if (!(flags & DIRECT_BIND) && ! lvalue_p (arg))
81bd268c 338 return get_target_expr_sfinae (arg, complain);
e349ee73 339
08ac397c 340 /* If we had a way to wrap this up, and say, if we ever needed its
d2e5ee5c
MS
341 address, transform all occurrences of the register, into a memory
342 reference we could win better. */
81bd268c 343 rval = cp_build_addr_expr (arg, complain);
162bc98d
JM
344 if (rval == error_mark_node)
345 return error_mark_node;
346
6633d636
MS
347 if ((flags & LOOKUP_PROTECT)
348 && TYPE_MAIN_VARIANT (argtype) != TYPE_MAIN_VARIANT (target_type)
9e1e64ec
PC
349 && MAYBE_CLASS_TYPE_P (argtype)
350 && MAYBE_CLASS_TYPE_P (target_type))
6633d636 351 {
2db1ab2d 352 /* We go through lookup_base for the access control. */
22854930
PC
353 tree binfo = lookup_base (argtype, target_type, ba_check,
354 NULL, complain);
6633d636
MS
355 if (binfo == error_mark_node)
356 return error_mark_node;
357 if (binfo == NULL_TREE)
358 return error_not_base_type (target_type, argtype);
4b978f96 359 rval = build_base_path (PLUS_EXPR, rval, binfo, 1, complain);
6633d636 360 }
eb66be0e
MS
361 else
362 rval
4b978f96
PC
363 = convert_to_pointer_force (build_pointer_type (target_type),
364 rval, complain);
7993382e 365 return build_nop (type, rval);
8d08fdba
MS
366}
367
08aead78
NS
368/* Subroutine of convert_to_reference. REFTYPE is the target reference type.
369 INTYPE is the original rvalue type and DECL is an optional _DECL node
370 for diagnostics.
c8094d83 371
08aead78
NS
372 [dcl.init.ref] says that if an rvalue is used to
373 initialize a reference, then the reference must be to a
374 non-volatile const type. */
375
376static void
76545796 377diagnose_ref_binding (location_t loc, tree reftype, tree intype, tree decl)
08aead78
NS
378{
379 tree ttl = TREE_TYPE (reftype);
c8094d83 380
08aead78
NS
381 if (!CP_TYPE_CONST_NON_VOLATILE_P (ttl))
382 {
383 const char *msg;
384
385 if (CP_TYPE_VOLATILE_P (ttl) && decl)
f25a2b52
SZ
386 msg = G_("initialization of volatile reference type %q#T from "
387 "rvalue of type %qT");
08aead78 388 else if (CP_TYPE_VOLATILE_P (ttl))
f25a2b52
SZ
389 msg = G_("conversion to volatile reference type %q#T "
390 "from rvalue of type %qT");
08aead78 391 else if (decl)
f25a2b52
SZ
392 msg = G_("initialization of non-const reference type %q#T from "
393 "rvalue of type %qT");
08aead78 394 else
f25a2b52
SZ
395 msg = G_("conversion to non-const reference type %q#T from "
396 "rvalue of type %qT");
08aead78 397
5a3c9cf2 398 permerror (loc, msg, reftype, intype);
08aead78
NS
399 }
400}
401
8d08fdba
MS
402/* For C++: Only need to do one-level references, but cannot
403 get tripped up on signed/unsigned differences.
404
a4443a08
MS
405 DECL is either NULL_TREE or the _DECL node for a reference that is being
406 initialized. It can be error_mark_node if we don't know the _DECL but
407 we know it's an initialization. */
8d08fdba 408
8d08fdba 409tree
b746c5dc 410convert_to_reference (tree reftype, tree expr, int convtype,
4b978f96 411 int flags, tree decl, tsubst_flags_t complain)
8d08fdba 412{
926ce8bd
KH
413 tree type = TYPE_MAIN_VARIANT (TREE_TYPE (reftype));
414 tree intype;
8d08fdba 415 tree rval = NULL_TREE;
8ccc31eb 416 tree rval_as_conversion = NULL_TREE;
a5ac359a 417 bool can_convert_intype_to_type;
8400e75e 418 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
8ccc31eb 419
c8094d83 420 if (TREE_CODE (type) == FUNCTION_TYPE
2303a079 421 && TREE_TYPE (expr) == unknown_type_node)
b40e334f 422 expr = instantiate_type (type, expr, complain);
a723baf1
MM
423
424 if (expr == error_mark_node)
425 return error_mark_node;
426
427 intype = TREE_TYPE (expr);
e6e174e5 428
50bc768d 429 gcc_assert (TREE_CODE (intype) != REFERENCE_TYPE);
d149fba0 430 gcc_assert (TREE_CODE (reftype) == REFERENCE_TYPE);
8d08fdba 431
8d08fdba
MS
432 intype = TYPE_MAIN_VARIANT (intype);
433
53db1bc0 434 can_convert_intype_to_type = can_convert_standard (type, intype, complain);
b40e334f 435
a5ac359a 436 if (!can_convert_intype_to_type
9e1e64ec 437 && (convtype & CONV_IMPLICIT) && MAYBE_CLASS_TYPE_P (intype)
8ccc31eb
MS
438 && ! (flags & LOOKUP_NO_CONVERSION))
439 {
440 /* Look for a user-defined conversion to lvalue that we can use. */
441
277294d7 442 rval_as_conversion
7993382e 443 = build_type_conversion (reftype, expr);
8ccc31eb
MS
444
445 if (rval_as_conversion && rval_as_conversion != error_mark_node
446 && real_lvalue_p (rval_as_conversion))
447 {
448 expr = rval_as_conversion;
449 rval_as_conversion = NULL_TREE;
450 intype = type;
a5ac359a 451 can_convert_intype_to_type = 1;
8ccc31eb
MS
452 }
453 }
454
53db1bc0
JM
455 if (((convtype & CONV_STATIC)
456 && can_convert_standard (intype, type, complain))
a5ac359a 457 || ((convtype & CONV_IMPLICIT) && can_convert_intype_to_type))
8d08fdba 458 {
4b978f96
PC
459 {
460 tree ttl = TREE_TYPE (reftype);
461 tree ttr = lvalue_type (expr);
8d08fdba 462
76545796 463 if ((complain & tf_error)
4b978f96 464 && ! real_lvalue_p (expr))
76545796 465 diagnose_ref_binding (loc, reftype, intype, decl);
c8094d83 466
4b978f96
PC
467 if (! (convtype & CONV_CONST)
468 && !at_least_as_qualified_p (ttl, ttr))
469 {
470 if (complain & tf_error)
471 permerror (loc, "conversion from %qT to %qT discards qualifiers",
472 ttr, reftype);
473 else
474 return error_mark_node;
475 }
476 }
8926095f 477
4b978f96 478 return build_up_reference (reftype, expr, flags, decl, complain);
8d08fdba 479 }
21474714 480 else if ((convtype & CONV_REINTERPRET) && lvalue_p (expr))
8926095f
MS
481 {
482 /* When casting an lvalue to a reference type, just convert into
483 a pointer to the new type and deference it. This is allowed
a28e3c7f 484 by San Diego WP section 5.2.9 paragraph 12, though perhaps it
8926095f 485 should be done directly (jason). (int &)ri ---> *(int*)&ri */
a28e3c7f 486
59be0cdd 487 /* B* bp; A& ar = (A&)bp; is valid, but it's probably not what they
0cbd7506 488 meant. */
4b978f96 489 if ((complain & tf_warning)
50e10fa8 490 && TYPE_PTR_P (intype)
96d84882
PB
491 && (comptypes (TREE_TYPE (intype), type,
492 COMPARE_BASE | COMPARE_DERIVED)))
5a3c9cf2
PC
493 warning_at (loc, 0, "casting %qT to %qT does not dereference pointer",
494 intype, reftype);
c8094d83 495
4b978f96 496 rval = cp_build_addr_expr (expr, complain);
8926095f 497 if (rval != error_mark_node)
3c215895 498 rval = convert_force (build_pointer_type (TREE_TYPE (reftype)),
4b978f96 499 rval, 0, complain);
8926095f 500 if (rval != error_mark_node)
7177d104 501 rval = build1 (NOP_EXPR, reftype, rval);
8926095f 502 }
277294d7 503 else
faf5394a
MS
504 {
505 rval = convert_for_initialization (NULL_TREE, type, expr, flags,
4b978f96 506 ICR_CONVERTING, 0, 0, complain);
09ad2917
DD
507 if (rval == NULL_TREE || rval == error_mark_node)
508 return rval;
76545796
PC
509 if (complain & tf_error)
510 diagnose_ref_binding (loc, reftype, intype, decl);
4b978f96 511 rval = build_up_reference (reftype, rval, flags, decl, complain);
faf5394a 512 }
8d08fdba
MS
513
514 if (rval)
515 {
e92cc029 516 /* If we found a way to convert earlier, then use it. */
8d08fdba
MS
517 return rval;
518 }
519
4b978f96 520 if (complain & tf_error)
5a3c9cf2 521 error_at (loc, "cannot convert type %qT to type %qT", intype, reftype);
878cd289 522
8d08fdba
MS
523 return error_mark_node;
524}
525
526/* We are using a reference VAL for its value. Bash that reference all the
e92cc029
MS
527 way down to its lowest form. */
528
8d08fdba 529tree
b746c5dc 530convert_from_reference (tree val)
8d08fdba 531{
4e3f6d85
JM
532 if (TREE_TYPE (val)
533 && TREE_CODE (TREE_TYPE (val)) == REFERENCE_TYPE)
db24eb1f 534 {
cd41d410 535 tree t = TREE_TYPE (TREE_TYPE (val));
db24eb1f 536 tree ref = build1 (INDIRECT_REF, t, val);
c8094d83 537
e3ae330d 538 mark_exp_read (val);
db24eb1f
NS
539 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
540 so that we get the proper error message if the result is used
541 to assign to. Also, &* is supposed to be a no-op. */
542 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
543 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
544 TREE_SIDE_EFFECTS (ref)
545 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (val));
db24eb1f
NS
546 val = ref;
547 }
c8094d83 548
8d08fdba
MS
549 return val;
550}
f7b9026e
JM
551
552/* Really perform an lvalue-to-rvalue conversion, including copying an
553 argument of class type into a temporary. */
554
555tree
574cfaa4 556force_rvalue (tree expr, tsubst_flags_t complain)
f7b9026e 557{
574cfaa4
JM
558 tree type = TREE_TYPE (expr);
559 if (MAYBE_CLASS_TYPE_P (type) && TREE_CODE (expr) != TARGET_EXPR)
560 {
9771b263 561 vec<tree, va_gc> *args = make_tree_vector_single (expr);
574cfaa4
JM
562 expr = build_special_member_call (NULL_TREE, complete_ctor_identifier,
563 &args, type, LOOKUP_NORMAL, complain);
564 release_tree_vector (args);
565 expr = build_cplus_new (type, expr, complain);
566 }
f7b9026e 567 else
89fcabaf 568 expr = decay_conversion (expr, complain);
f7b9026e
JM
569
570 return expr;
571}
9771799c 572
8d08fdba 573\f
9e115cec
JM
574/* If EXPR and ORIG are INTEGER_CSTs, return a version of EXPR that has
575 TREE_OVERFLOW set only if it is set in ORIG. Otherwise, return EXPR
576 unchanged. */
577
578static tree
579ignore_overflows (tree expr, tree orig)
580{
581 if (TREE_CODE (expr) == INTEGER_CST
582 && TREE_CODE (orig) == INTEGER_CST
583 && TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig))
584 {
585 gcc_assert (!TREE_OVERFLOW (orig));
586 /* Ensure constant sharing. */
807e902e 587 expr = wide_int_to_tree (TREE_TYPE (expr), expr);
9e115cec
JM
588 }
589 return expr;
590}
591
592/* Fold away simple conversions, but make sure TREE_OVERFLOW is set
593 properly. */
9771799c
JM
594
595tree
596cp_fold_convert (tree type, tree expr)
597{
fb899e32
JM
598 tree conv;
599 if (TREE_TYPE (expr) == type)
600 conv = expr;
601 else if (TREE_CODE (expr) == PTRMEM_CST)
602 {
603 /* Avoid wrapping a PTRMEM_CST in NOP_EXPR. */
604 conv = copy_node (expr);
605 TREE_TYPE (conv) = type;
606 }
607 else
608 {
609 conv = fold_convert (type, expr);
610 conv = ignore_overflows (conv, expr);
611 }
9e115cec 612 return conv;
9771799c
JM
613}
614
37c46b43
MS
615/* C++ conversions, preference to static cast conversions. */
616
617tree
4b978f96 618cp_convert (tree type, tree expr, tsubst_flags_t complain)
37c46b43 619{
4b978f96 620 return ocp_convert (type, expr, CONV_OLD_CONVERT, LOOKUP_NORMAL, complain);
37c46b43
MS
621}
622
07231d4f
MLI
623/* C++ equivalent of convert_and_check but using cp_convert as the
624 conversion function.
625
626 Convert EXPR to TYPE, warning about conversion problems with constants.
627 Invoke this function on every expression that is converted implicitly,
628 i.e. because of language rules and not because of an explicit cast. */
629
630tree
4b978f96 631cp_convert_and_check (tree type, tree expr, tsubst_flags_t complain)
07231d4f
MLI
632{
633 tree result;
634
635 if (TREE_TYPE (expr) == type)
636 return expr;
637
4b978f96 638 result = cp_convert (type, expr, complain);
07231d4f 639
4b978f96 640 if ((complain & tf_warning)
da834cfc
JM
641 && c_inhibit_evaluation_warnings == 0)
642 {
643 tree folded = maybe_constant_value (expr);
644 tree stripped = folded;
d2504d68
PC
645 tree folded_result
646 = folded != expr ? cp_convert (type, folded, complain) : result;
da834cfc
JM
647
648 /* maybe_constant_value wraps an INTEGER_CST with TREE_OVERFLOW in a
649 NOP_EXPR so that it isn't TREE_CONSTANT anymore. */
650 STRIP_NOPS (stripped);
651
652 if (!TREE_OVERFLOW_P (stripped)
653 && folded_result != error_mark_node)
68fca595
MP
654 warnings_for_convert_and_check (input_location, type, folded,
655 folded_result);
da834cfc 656 }
07231d4f
MLI
657
658 return result;
659}
660
878cd289
MS
661/* Conversion...
662
663 FLAGS indicates how we should behave. */
664
8d08fdba 665tree
4b978f96
PC
666ocp_convert (tree type, tree expr, int convtype, int flags,
667 tsubst_flags_t complain)
8d08fdba 668{
926ce8bd
KH
669 tree e = expr;
670 enum tree_code code = TREE_CODE (type);
4de67c26 671 const char *invalid_conv_diag;
40449a90 672 tree e1;
8400e75e 673 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
8d08fdba 674
a5ac359a 675 if (error_operand_p (e) || type == error_mark_node)
8d08fdba 676 return error_mark_node;
a4443a08 677
5d73aa63
MM
678 complete_type (type);
679 complete_type (TREE_TYPE (expr));
680
4de67c26
JM
681 if ((invalid_conv_diag
682 = targetm.invalid_conversion (TREE_TYPE (expr), type)))
683 {
4b978f96
PC
684 if (complain & tf_error)
685 error (invalid_conv_diag);
4de67c26
JM
686 return error_mark_node;
687 }
688
fa2200cb 689 /* FIXME remove when moving to c_fully_fold model. */
9783ae5a
PP
690 if (!CLASS_TYPE_P (type))
691 e = scalar_constant_value (e);
88274c4d
JM
692 if (error_operand_p (e))
693 return error_mark_node;
9c0d0367 694
9e1e64ec 695 if (MAYBE_CLASS_TYPE_P (type) && (convtype & CONV_FORCE_TEMP))
8ccc31eb 696 /* We need a new temporary; don't take this shortcut. */;
0fcedd9c 697 else if (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (e)))
01240200 698 {
3bfdc719 699 if (same_type_p (type, TREE_TYPE (e)))
01240200
MM
700 /* The call to fold will not always remove the NOP_EXPR as
701 might be expected, since if one of the types is a typedef;
34cd5ae7 702 the comparison in fold is just equality of pointers, not a
96d84882 703 call to comptypes. We don't call fold in this case because
953360c8
MM
704 that can result in infinite recursion; fold will call
705 convert, which will call ocp_convert, etc. */
706 return e;
a04678ca 707 /* For complex data types, we need to perform componentwise
0cbd7506 708 conversion. */
a04678ca 709 else if (TREE_CODE (type) == COMPLEX_TYPE)
0cbd7506 710 return fold_if_not_in_template (convert_to_complex (type, e));
b55b02ea 711 else if (VECTOR_TYPE_P (type))
d5a1053a 712 return fold_if_not_in_template (convert_to_vector (type, e));
4e8dca1c
JM
713 else if (TREE_CODE (e) == TARGET_EXPR)
714 {
715 /* Don't build a NOP_EXPR of class type. Instead, change the
0fcedd9c 716 type of the temporary. */
4e8dca1c
JM
717 TREE_TYPE (e) = TREE_TYPE (TARGET_EXPR_SLOT (e)) = type;
718 return e;
719 }
01240200 720 else
8dc2b103
NS
721 {
722 /* We shouldn't be treating objects of ADDRESSABLE type as
723 rvalues. */
724 gcc_assert (!TREE_ADDRESSABLE (type));
455f19cb 725 return fold_if_not_in_template (build_nop (type, e));
8dc2b103 726 }
01240200
MM
727 }
728
40449a90
SL
729 e1 = targetm.convert_to_type (type, e);
730 if (e1)
731 return e1;
732
a4443a08 733 if (code == VOID_TYPE && (convtype & CONV_STATIC))
848b92e1 734 {
4b978f96 735 e = convert_to_void (e, ICV_CAST, complain);
66543169 736 return e;
848b92e1 737 }
a4443a08 738
2986ae00 739 if (INTEGRAL_CODE_P (code))
8d08fdba 740 {
f0e01782 741 tree intype = TREE_TYPE (e);
9e115cec 742 tree converted;
b13e752f
MLI
743
744 if (TREE_CODE (type) == ENUMERAL_TYPE)
745 {
746 /* enum = enum, enum = int, enum = float, (enum)pointer are all
747 errors. */
748 if (((INTEGRAL_OR_ENUMERATION_TYPE_P (intype)
0cbd7506 749 || TREE_CODE (intype) == REAL_TYPE)
b6ab6892 750 && ! (convtype & CONV_STATIC))
50e10fa8 751 || TYPE_PTR_P (intype))
b13e752f 752 {
4b978f96 753 if (complain & tf_error)
5a3c9cf2 754 permerror (loc, "conversion from %q#T to %q#T", intype, type);
4b978f96 755 else
b13e752f
MLI
756 return error_mark_node;
757 }
758
759 /* [expr.static.cast]
760
761 8. A value of integral or enumeration type can be explicitly
762 converted to an enumeration type. The value is unchanged if
763 the original value is within the range of the enumeration
764 values. Otherwise, the resulting enumeration value is
765 unspecified. */
4b978f96 766 if ((complain & tf_warning)
8d0d1915 767 && TREE_CODE (e) == INTEGER_CST
0ffc4683 768 && ENUM_UNDERLYING_TYPE (type)
8d0d1915 769 && !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
5a3c9cf2
PC
770 warning_at (loc, OPT_Wconversion,
771 "the result of the conversion is unspecified because "
772 "%qE is outside the range of type %qT",
773 expr, type);
8d08fdba 774 }
9e1e64ec 775 if (MAYBE_CLASS_TYPE_P (intype))
8d08fdba
MS
776 {
777 tree rval;
7993382e 778 rval = build_type_conversion (type, e);
00595019
MS
779 if (rval)
780 return rval;
4b978f96 781 if (complain & tf_error)
5a3c9cf2 782 error_at (loc, "%q#T used where a %qT was expected", intype, type);
8d08fdba
MS
783 return error_mark_node;
784 }
2986ae00 785 if (code == BOOLEAN_TYPE)
1ee44b26 786 {
50e10fa8 787 if (VOID_TYPE_P (intype))
5a3c9cf2 788 {
4b978f96
PC
789 if (complain & tf_error)
790 error_at (loc,
791 "could not convert %qE from %<void%> to %<bool%>",
792 expr);
5a3c9cf2
PC
793 return error_mark_node;
794 }
795
1ee44b26
JM
796 /* We can't implicitly convert a scoped enum to bool, so convert
797 to the underlying type first. */
798 if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC))
55b13820 799 e = build_nop (ENUM_UNDERLYING_TYPE (intype), e);
1ee44b26
JM
800 return cp_truthvalue_conversion (e);
801 }
1998463c 802
9e115cec
JM
803 converted = fold_if_not_in_template (convert_to_integer (type, e));
804
805 /* Ignore any integer overflow caused by the conversion. */
806 return ignore_overflows (converted, e);
8d08fdba 807 }
5116acc6 808 if (NULLPTR_TYPE_P (type) && e && null_ptr_cst_p (e))
30b07d03
PC
809 {
810 if (complain & tf_warning)
811 maybe_warn_zero_as_null_pointer_constant (e, loc);
812 return nullptr_node;
813 }
66b1156a 814 if (POINTER_TYPE_P (type) || TYPE_PTRMEM_P (type))
4b978f96 815 return fold_if_not_in_template (cp_convert_to_pointer (type, e, complain));
bb37c4a5 816 if (code == VECTOR_TYPE)
037cc9c5
FJ
817 {
818 tree in_vtype = TREE_TYPE (e);
9e1e64ec 819 if (MAYBE_CLASS_TYPE_P (in_vtype))
037cc9c5
FJ
820 {
821 tree ret_val;
822 ret_val = build_type_conversion (type, e);
0cbd7506
MS
823 if (ret_val)
824 return ret_val;
4b978f96
PC
825 if (complain & tf_error)
826 error_at (loc, "%q#T used where a %qT was expected",
827 in_vtype, type);
0cbd7506 828 return error_mark_node;
037cc9c5 829 }
455f19cb 830 return fold_if_not_in_template (convert_to_vector (type, e));
037cc9c5 831 }
37c46b43 832 if (code == REAL_TYPE || code == COMPLEX_TYPE)
8d08fdba 833 {
9e1e64ec 834 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (e)))
8d08fdba
MS
835 {
836 tree rval;
7993382e 837 rval = build_type_conversion (type, e);
8d08fdba
MS
838 if (rval)
839 return rval;
4b978f96
PC
840 else if (complain & tf_error)
841 error_at (loc,
842 "%q#T used where a floating point value was expected",
843 TREE_TYPE (e));
8d08fdba 844 }
37c46b43 845 if (code == REAL_TYPE)
455f19cb 846 return fold_if_not_in_template (convert_to_real (type, e));
37c46b43 847 else if (code == COMPLEX_TYPE)
455f19cb 848 return fold_if_not_in_template (convert_to_complex (type, e));
8d08fdba
MS
849 }
850
851 /* New C++ semantics: since assignment is now based on
852 memberwise copying, if the rhs type is derived from the
853 lhs type, then we may still do a conversion. */
9e1e64ec 854 if (RECORD_OR_UNION_CODE_P (code))
8d08fdba
MS
855 {
856 tree dtype = TREE_TYPE (e);
db5ae43f 857 tree ctor = NULL_TREE;
8d08fdba 858
8d08fdba
MS
859 dtype = TYPE_MAIN_VARIANT (dtype);
860
8d08fdba
MS
861 /* Conversion between aggregate types. New C++ semantics allow
862 objects of derived type to be cast to objects of base type.
863 Old semantics only allowed this between pointers.
864
865 There may be some ambiguity between using a constructor
866 vs. using a type conversion operator when both apply. */
867
277294d7 868 ctor = e;
faf5394a 869
81bd268c 870 if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
a7a64a77 871 return error_mark_node;
59e76fc6 872
09357846 873 if (BRACE_ENCLOSED_INITIALIZER_P (ctor))
4b978f96 874 ctor = perform_implicit_conversion (type, ctor, complain);
09357846
JM
875 else if ((flags & LOOKUP_ONLYCONVERTING)
876 && ! (CLASS_TYPE_P (dtype) && DERIVED_FROM_P (type, dtype)))
62c154ed
JM
877 /* For copy-initialization, first we create a temp of the proper type
878 with a user-defined conversion sequence, then we direct-initialize
879 the target with the temp (see [dcl.init]). */
4b978f96 880 ctor = build_user_type_conversion (type, ctor, flags, complain);
5e818b93 881 else
c166b898 882 {
9771b263 883 vec<tree, va_gc> *ctor_vec = make_tree_vector_single (ctor);
c166b898
ILT
884 ctor = build_special_member_call (NULL_TREE,
885 complete_ctor_identifier,
886 &ctor_vec,
4b978f96 887 type, flags, complain);
c166b898
ILT
888 release_tree_vector (ctor_vec);
889 }
277294d7 890 if (ctor)
4b978f96 891 return build_cplus_new (type, ctor, complain);
8d08fdba
MS
892 }
893
4b978f96 894 if (complain & tf_error)
111a28c2
DS
895 {
896 /* If the conversion failed and expr was an invalid use of pointer to
897 member function, try to report a meaningful error. */
d3ea4c06 898 if (invalid_nonstatic_memfn_p (loc, expr, complain))
111a28c2
DS
899 /* We displayed the error message. */;
900 else
5a3c9cf2
PC
901 error_at (loc, "conversion from %qT to non-scalar type %qT requested",
902 TREE_TYPE (expr), type);
111a28c2 903 }
8d08fdba
MS
904 return error_mark_node;
905}
906
02cac427
NS
907/* When an expression is used in a void context, its value is discarded and
908 no lvalue-rvalue and similar conversions happen [expr.static.cast/4,
909 stmt.expr/1, expr.comma/1]. This permits dereferencing an incomplete type
910 in a void context. The C++ standard does not define what an `access' to an
cd0be382 911 object is, but there is reason to believe that it is the lvalue to rvalue
02cac427
NS
912 conversion -- if it were not, `*&*p = 1' would violate [expr]/4 in that it
913 accesses `*p' not to calculate the value to be stored. But, dcl.type.cv/8
914 indicates that volatile semantics should be the same between C and C++
915 where ever possible. C leaves it implementation defined as to what
916 constitutes an access to a volatile. So, we interpret `*vp' as a read of
917 the volatile object `vp' points to, unless that is an incomplete type. For
918 volatile references we do not do this interpretation, because that would
919 make it impossible to ignore the reference return value from functions. We
920 issue warnings in the confusing cases.
c8094d83 921
ebeb2c24
SZ
922 The IMPLICIT is ICV_CAST when the user is explicitly converting an expression
923 to void via a cast. If an expression is being implicitly converted, IMPLICIT
924 indicates the context of the implicit conversion. */
02cac427
NS
925
926tree
ebeb2c24 927convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain)
02cac427 928{
8400e75e 929 location_t loc = EXPR_LOC_OR_LOC (expr, input_location);
5a3c9cf2 930
c8094d83 931 if (expr == error_mark_node
07c88314
MM
932 || TREE_TYPE (expr) == error_mark_node)
933 return error_mark_node;
056928b2 934
ebeb2c24 935 if (implicit == ICV_CAST)
9fc8dacc
JJ
936 mark_exp_read (expr);
937 else
938 {
939 tree exprv = expr;
940
941 while (TREE_CODE (exprv) == COMPOUND_EXPR)
942 exprv = TREE_OPERAND (exprv, 1);
d84686d1
JJ
943 if (DECL_P (exprv)
944 || handled_component_p (exprv)
591cb3cf 945 || INDIRECT_REF_P (exprv))
9fc8dacc
JJ
946 /* Expr is not being 'used' here, otherwise we whould have
947 called mark_{rl}value_use use here, which would have in turn
948 called mark_exp_read. Rather, we call mark_exp_read directly
949 to avoid some warnings when
950 -Wunused-but-set-{variable,parameter} is in effect. */
951 mark_exp_read (exprv);
952 }
056928b2 953
02cac427
NS
954 if (!TREE_TYPE (expr))
955 return expr;
d3ea4c06 956 if (invalid_nonstatic_memfn_p (loc, expr, complain))
c8b2e872 957 return error_mark_node;
9f4faeae
MM
958 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
959 {
5ade1ed2 960 if (complain & tf_error)
5a3c9cf2 961 error_at (loc, "pseudo-destructor is not called");
9f4faeae
MM
962 return error_mark_node;
963 }
b72801e2 964 if (VOID_TYPE_P (TREE_TYPE (expr)))
02cac427
NS
965 return expr;
966 switch (TREE_CODE (expr))
967 {
968 case COND_EXPR:
969 {
0cbd7506
MS
970 /* The two parts of a cond expr might be separate lvalues. */
971 tree op1 = TREE_OPERAND (expr,1);
972 tree op2 = TREE_OPERAND (expr,2);
cb8384a3
JM
973 bool side_effects = ((op1 && TREE_SIDE_EFFECTS (op1))
974 || TREE_SIDE_EFFECTS (op2));
ebeb2c24 975 tree new_op1, new_op2;
cb8384a3 976 new_op1 = NULL_TREE;
ebeb2c24
SZ
977 if (implicit != ICV_CAST && !side_effects)
978 {
cb8384a3
JM
979 if (op1)
980 new_op1 = convert_to_void (op1, ICV_SECOND_OF_COND, complain);
ebeb2c24
SZ
981 new_op2 = convert_to_void (op2, ICV_THIRD_OF_COND, complain);
982 }
983 else
984 {
cb8384a3
JM
985 if (op1)
986 new_op1 = convert_to_void (op1, ICV_CAST, complain);
ebeb2c24
SZ
987 new_op2 = convert_to_void (op2, ICV_CAST, complain);
988 }
c8094d83 989
cb8384a3 990 expr = build3 (COND_EXPR, TREE_TYPE (new_op2),
f293ce4b 991 TREE_OPERAND (expr, 0), new_op1, new_op2);
0cbd7506 992 break;
02cac427 993 }
c8094d83 994
02cac427
NS
995 case COMPOUND_EXPR:
996 {
0cbd7506
MS
997 /* The second part of a compound expr contains the value. */
998 tree op1 = TREE_OPERAND (expr,1);
ebeb2c24
SZ
999 tree new_op1;
1000 if (implicit != ICV_CAST && !TREE_NO_WARNING (expr))
1001 new_op1 = convert_to_void (op1, ICV_RIGHT_OF_COMMA, complain);
1002 else
1003 new_op1 = convert_to_void (op1, ICV_CAST, complain);
c8094d83 1004
0cbd7506 1005 if (new_op1 != op1)
9a52d09b 1006 {
f293ce4b
RS
1007 tree t = build2 (COMPOUND_EXPR, TREE_TYPE (new_op1),
1008 TREE_OPERAND (expr, 0), new_op1);
9a52d09b
MM
1009 expr = t;
1010 }
1011
0cbd7506 1012 break;
02cac427 1013 }
c8094d83 1014
02cac427
NS
1015 case NON_LVALUE_EXPR:
1016 case NOP_EXPR:
00a17e31 1017 /* These have already decayed to rvalue. */
02cac427 1018 break;
c8094d83 1019
f4f206f4 1020 case CALL_EXPR: /* We have a special meaning for volatile void fn(). */
02cac427 1021 break;
c8094d83 1022
02cac427
NS
1023 case INDIRECT_REF:
1024 {
0cbd7506
MS
1025 tree type = TREE_TYPE (expr);
1026 int is_reference = TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
1027 == REFERENCE_TYPE;
1028 int is_volatile = TYPE_VOLATILE (type);
1029 int is_complete = COMPLETE_TYPE_P (complete_type (type));
1030
bed02d89 1031 /* Can't load the value if we don't know the type. */
0cbd7506 1032 if (is_volatile && !is_complete)
5ade1ed2
DG
1033 {
1034 if (complain & tf_warning)
ebeb2c24
SZ
1035 switch (implicit)
1036 {
1037 case ICV_CAST:
5a3c9cf2 1038 warning_at (loc, 0, "conversion to void will not access "
ebeb2c24
SZ
1039 "object of incomplete type %qT", type);
1040 break;
1041 case ICV_SECOND_OF_COND:
5a3c9cf2 1042 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1043 "incomplete type %qT in second operand "
1044 "of conditional expression", type);
1045 break;
1046 case ICV_THIRD_OF_COND:
5a3c9cf2 1047 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1048 "incomplete type %qT in third operand "
1049 "of conditional expression", type);
1050 break;
1051 case ICV_RIGHT_OF_COMMA:
5a3c9cf2 1052 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1053 "incomplete type %qT in right operand of "
1054 "comma operator", type);
1055 break;
1056 case ICV_LEFT_OF_COMMA:
5a3c9cf2 1057 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1058 "incomplete type %qT in left operand of "
1059 "comma operator", type);
1060 break;
1061 case ICV_STATEMENT:
5a3c9cf2 1062 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1063 "incomplete type %qT in statement", type);
1064 break;
1065 case ICV_THIRD_IN_FOR:
5a3c9cf2 1066 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1067 "incomplete type %qT in for increment "
1068 "expression", type);
1069 break;
1070 default:
1071 gcc_unreachable ();
1072 }
5ade1ed2 1073 }
bed02d89
JM
1074 /* Don't load the value if this is an implicit dereference, or if
1075 the type needs to be handled by ctors/dtors. */
ebeb2c24 1076 else if (is_volatile && is_reference)
5ade1ed2
DG
1077 {
1078 if (complain & tf_warning)
ebeb2c24
SZ
1079 switch (implicit)
1080 {
1081 case ICV_CAST:
5a3c9cf2 1082 warning_at (loc, 0, "conversion to void will not access "
ebeb2c24
SZ
1083 "object of type %qT", type);
1084 break;
1085 case ICV_SECOND_OF_COND:
5a3c9cf2
PC
1086 warning_at (loc, 0, "implicit dereference will not access "
1087 "object of type %qT in second operand of "
ebeb2c24
SZ
1088 "conditional expression", type);
1089 break;
1090 case ICV_THIRD_OF_COND:
5a3c9cf2
PC
1091 warning_at (loc, 0, "implicit dereference will not access "
1092 "object of type %qT in third operand of "
ebeb2c24
SZ
1093 "conditional expression", type);
1094 break;
1095 case ICV_RIGHT_OF_COMMA:
5a3c9cf2
PC
1096 warning_at (loc, 0, "implicit dereference will not access "
1097 "object of type %qT in right operand of "
ebeb2c24
SZ
1098 "comma operator", type);
1099 break;
1100 case ICV_LEFT_OF_COMMA:
5a3c9cf2
PC
1101 warning_at (loc, 0, "implicit dereference will not access "
1102 "object of type %qT in left operand of comma "
1103 "operator", type);
ebeb2c24
SZ
1104 break;
1105 case ICV_STATEMENT:
5a3c9cf2
PC
1106 warning_at (loc, 0, "implicit dereference will not access "
1107 "object of type %qT in statement", type);
ebeb2c24
SZ
1108 break;
1109 case ICV_THIRD_IN_FOR:
5a3c9cf2
PC
1110 warning_at (loc, 0, "implicit dereference will not access "
1111 "object of type %qT in for increment expression",
1112 type);
ebeb2c24
SZ
1113 break;
1114 default:
1115 gcc_unreachable ();
1116 }
5ade1ed2 1117 }
ebeb2c24
SZ
1118 else if (is_volatile && TREE_ADDRESSABLE (type))
1119 {
1120 if (complain & tf_warning)
1121 switch (implicit)
1122 {
1123 case ICV_CAST:
5a3c9cf2 1124 warning_at (loc, 0, "conversion to void will not access "
ebeb2c24 1125 "object of non-trivially-copyable type %qT",
5a3c9cf2 1126 type);
ebeb2c24
SZ
1127 break;
1128 case ICV_SECOND_OF_COND:
5a3c9cf2 1129 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1130 "non-trivially-copyable type %qT in second "
1131 "operand of conditional expression", type);
1132 break;
1133 case ICV_THIRD_OF_COND:
5a3c9cf2 1134 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1135 "non-trivially-copyable type %qT in third "
1136 "operand of conditional expression", type);
1137 break;
1138 case ICV_RIGHT_OF_COMMA:
5a3c9cf2 1139 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1140 "non-trivially-copyable type %qT in right "
1141 "operand of comma operator", type);
1142 break;
1143 case ICV_LEFT_OF_COMMA:
5a3c9cf2 1144 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1145 "non-trivially-copyable type %qT in left "
1146 "operand of comma operator", type);
1147 break;
1148 case ICV_STATEMENT:
5a3c9cf2 1149 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24 1150 "non-trivially-copyable type %qT in statement",
5a3c9cf2 1151 type);
ebeb2c24
SZ
1152 break;
1153 case ICV_THIRD_IN_FOR:
5a3c9cf2 1154 warning_at (loc, 0, "indirection will not access object of "
ebeb2c24
SZ
1155 "non-trivially-copyable type %qT in for "
1156 "increment expression", type);
1157 break;
1158 default:
1159 gcc_unreachable ();
1160 }
1161 }
bed02d89 1162 if (is_reference || !is_volatile || !is_complete || TREE_ADDRESSABLE (type))
041d7a27
LCW
1163 {
1164 /* Emit a warning (if enabled) when the "effect-less" INDIRECT_REF
1165 operation is stripped off. Note that we don't warn about
1166 - an expression with TREE_NO_WARNING set. (For an example of
1167 such expressions, see build_over_call in call.c.)
1168 - automatic dereferencing of references, since the user cannot
fd4116f4 1169 control it. (See also warn_if_unused_value() in c-common.c.) */
041d7a27 1170 if (warn_unused_value
ebeb2c24 1171 && implicit != ICV_CAST
041d7a27
LCW
1172 && (complain & tf_warning)
1173 && !TREE_NO_WARNING (expr)
1174 && !is_reference)
5a3c9cf2 1175 warning_at (loc, OPT_Wunused_value, "value computed is not used");
041d7a27
LCW
1176 expr = TREE_OPERAND (expr, 0);
1177 }
0cbd7506
MS
1178
1179 break;
02cac427 1180 }
c8094d83 1181
02cac427
NS
1182 case VAR_DECL:
1183 {
0cbd7506
MS
1184 /* External variables might be incomplete. */
1185 tree type = TREE_TYPE (expr);
1186 int is_complete = COMPLETE_TYPE_P (complete_type (type));
1187
5ade1ed2 1188 if (TYPE_VOLATILE (type) && !is_complete && (complain & tf_warning))
ebeb2c24
SZ
1189 switch (implicit)
1190 {
1191 case ICV_CAST:
5a3c9cf2 1192 warning_at (loc, 0, "conversion to void will not access "
ebeb2c24
SZ
1193 "object %qE of incomplete type %qT", expr, type);
1194 break;
1195 case ICV_SECOND_OF_COND:
5a3c9cf2
PC
1196 warning_at (loc, 0, "variable %qE of incomplete type %qT will "
1197 "not be accessed in second operand of "
ebeb2c24
SZ
1198 "conditional expression", expr, type);
1199 break;
1200 case ICV_THIRD_OF_COND:
5a3c9cf2
PC
1201 warning_at (loc, 0, "variable %qE of incomplete type %qT will "
1202 "not be accessed in third operand of "
ebeb2c24
SZ
1203 "conditional expression", expr, type);
1204 break;
1205 case ICV_RIGHT_OF_COMMA:
5a3c9cf2
PC
1206 warning_at (loc, 0, "variable %qE of incomplete type %qT will "
1207 "not be accessed in right operand of comma operator",
1208 expr, type);
ebeb2c24
SZ
1209 break;
1210 case ICV_LEFT_OF_COMMA:
5a3c9cf2
PC
1211 warning_at (loc, 0, "variable %qE of incomplete type %qT will "
1212 "not be accessed in left operand of comma operator",
1213 expr, type);
ebeb2c24
SZ
1214 break;
1215 case ICV_STATEMENT:
5a3c9cf2
PC
1216 warning_at (loc, 0, "variable %qE of incomplete type %qT will "
1217 "not be accessed in statement", expr, type);
ebeb2c24
SZ
1218 break;
1219 case ICV_THIRD_IN_FOR:
5a3c9cf2
PC
1220 warning_at (loc, 0, "variable %qE of incomplete type %qT will "
1221 "not be accessed in for increment expression",
1222 expr, type);
ebeb2c24
SZ
1223 break;
1224 default:
1225 gcc_unreachable ();
1226 }
1227
0cbd7506 1228 break;
02cac427 1229 }
2bdb0643 1230
c08cd4c1
JM
1231 case TARGET_EXPR:
1232 /* Don't bother with the temporary object returned from a function if
1233 we don't use it and don't need to destroy it. We'll still
1234 allocate space for it in expand_call or declare_return_variable,
1235 but we don't need to track it through all the tree phases. */
5de1a1eb 1236 if (TARGET_EXPR_IMPLICIT_P (expr)
c08cd4c1
JM
1237 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (expr)))
1238 {
1239 tree init = TARGET_EXPR_INITIAL (expr);
1240 if (TREE_CODE (init) == AGGR_INIT_EXPR
1241 && !AGGR_INIT_VIA_CTOR_P (init))
1242 {
5039610b 1243 tree fn = AGGR_INIT_EXPR_FN (init);
db3927fb
AH
1244 expr = build_call_array_loc (input_location,
1245 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
1246 fn,
1247 aggr_init_expr_nargs (init),
1248 AGGR_INIT_EXPR_ARGP (init));
c08cd4c1
JM
1249 }
1250 }
1251 break;
1252
02cac427
NS
1253 default:;
1254 }
ccb05613 1255 expr = resolve_nondeduced_context (expr);
02cac427
NS
1256 {
1257 tree probe = expr;
c8094d83 1258
02cac427
NS
1259 if (TREE_CODE (probe) == ADDR_EXPR)
1260 probe = TREE_OPERAND (expr, 0);
96d6c610
JM
1261 if (type_unknown_p (probe))
1262 {
1263 /* [over.over] enumerates the places where we can take the address
1264 of an overloaded function, and this is not one of them. */
5ade1ed2 1265 if (complain & tf_error)
ebeb2c24
SZ
1266 switch (implicit)
1267 {
1268 case ICV_CAST:
5a3c9cf2
PC
1269 error_at (loc, "conversion to void "
1270 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1271 break;
1272 case ICV_SECOND_OF_COND:
5a3c9cf2
PC
1273 error_at (loc, "second operand of conditional expression "
1274 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1275 break;
1276 case ICV_THIRD_OF_COND:
5a3c9cf2
PC
1277 error_at (loc, "third operand of conditional expression "
1278 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1279 break;
1280 case ICV_RIGHT_OF_COMMA:
5a3c9cf2
PC
1281 error_at (loc, "right operand of comma operator "
1282 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1283 break;
1284 case ICV_LEFT_OF_COMMA:
5a3c9cf2
PC
1285 error_at (loc, "left operand of comma operator "
1286 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1287 break;
1288 case ICV_STATEMENT:
5a3c9cf2
PC
1289 error_at (loc, "statement "
1290 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1291 break;
1292 case ICV_THIRD_IN_FOR:
5a3c9cf2
PC
1293 error_at (loc, "for increment expression "
1294 "cannot resolve address of overloaded function");
ebeb2c24
SZ
1295 break;
1296 }
5ade1ed2
DG
1297 else
1298 return error_mark_node;
632f2871 1299 expr = void_node;
96d6c610 1300 }
ebeb2c24 1301 else if (implicit != ICV_CAST && probe == expr && is_overloaded_fn (probe))
05f8c2d5
JM
1302 {
1303 /* Only warn when there is no &. */
5ade1ed2 1304 if (complain & tf_warning)
ebeb2c24
SZ
1305 switch (implicit)
1306 {
1307 case ICV_SECOND_OF_COND:
5a3c9cf2
PC
1308 warning_at (loc, OPT_Waddress,
1309 "second operand of conditional expression "
1310 "is a reference, not call, to function %qE", expr);
ebeb2c24
SZ
1311 break;
1312 case ICV_THIRD_OF_COND:
5a3c9cf2
PC
1313 warning_at (loc, OPT_Waddress,
1314 "third operand of conditional expression "
1315 "is a reference, not call, to function %qE", expr);
ebeb2c24
SZ
1316 break;
1317 case ICV_RIGHT_OF_COMMA:
5a3c9cf2
PC
1318 warning_at (loc, OPT_Waddress,
1319 "right operand of comma operator "
1320 "is a reference, not call, to function %qE", expr);
ebeb2c24
SZ
1321 break;
1322 case ICV_LEFT_OF_COMMA:
5a3c9cf2
PC
1323 warning_at (loc, OPT_Waddress,
1324 "left operand of comma operator "
1325 "is a reference, not call, to function %qE", expr);
ebeb2c24
SZ
1326 break;
1327 case ICV_STATEMENT:
5a3c9cf2
PC
1328 warning_at (loc, OPT_Waddress,
1329 "statement is a reference, not call, to function %qE",
1330 expr);
ebeb2c24
SZ
1331 break;
1332 case ICV_THIRD_IN_FOR:
5a3c9cf2
PC
1333 warning_at (loc, OPT_Waddress,
1334 "for increment expression "
1335 "is a reference, not call, to function %qE", expr);
ebeb2c24
SZ
1336 break;
1337 default:
1338 gcc_unreachable ();
1339 }
1340
05f8c2d5
JM
1341 if (TREE_CODE (expr) == COMPONENT_REF)
1342 expr = TREE_OPERAND (expr, 0);
1343 }
02cac427 1344 }
c8094d83 1345
b72801e2 1346 if (expr != error_mark_node && !VOID_TYPE_P (TREE_TYPE (expr)))
02cac427 1347 {
ebeb2c24 1348 if (implicit != ICV_CAST
55792875
ILT
1349 && warn_unused_value
1350 && !TREE_NO_WARNING (expr)
1351 && !processing_template_decl)
dfb5c523
MM
1352 {
1353 /* The middle end does not warn about expressions that have
1354 been explicitly cast to void, so we must do so here. */
5ade1ed2
DG
1355 if (!TREE_SIDE_EFFECTS (expr)) {
1356 if (complain & tf_warning)
ebeb2c24
SZ
1357 switch (implicit)
1358 {
1359 case ICV_SECOND_OF_COND:
5a3c9cf2
PC
1360 warning_at (loc, OPT_Wunused_value,
1361 "second operand of conditional expression "
1362 "has no effect");
ebeb2c24
SZ
1363 break;
1364 case ICV_THIRD_OF_COND:
5a3c9cf2
PC
1365 warning_at (loc, OPT_Wunused_value,
1366 "third operand of conditional expression "
1367 "has no effect");
ebeb2c24
SZ
1368 break;
1369 case ICV_RIGHT_OF_COMMA:
5a3c9cf2
PC
1370 warning_at (loc, OPT_Wunused_value,
1371 "right operand of comma operator has no effect");
ebeb2c24
SZ
1372 break;
1373 case ICV_LEFT_OF_COMMA:
5a3c9cf2
PC
1374 warning_at (loc, OPT_Wunused_value,
1375 "left operand of comma operator has no effect");
ebeb2c24
SZ
1376 break;
1377 case ICV_STATEMENT:
5a3c9cf2
PC
1378 warning_at (loc, OPT_Wunused_value,
1379 "statement has no effect");
ebeb2c24
SZ
1380 break;
1381 case ICV_THIRD_IN_FOR:
5a3c9cf2
PC
1382 warning_at (loc, OPT_Wunused_value,
1383 "for increment expression has no effect");
ebeb2c24
SZ
1384 break;
1385 default:
1386 gcc_unreachable ();
1387 }
5ade1ed2 1388 }
c8094d83
MS
1389 else
1390 {
dfb5c523
MM
1391 tree e;
1392 enum tree_code code;
be93747e 1393 enum tree_code_class tclass;
c8094d83 1394
dfb5c523
MM
1395 e = expr;
1396 /* We might like to warn about (say) "(int) f()", as the
1397 cast has no effect, but the compiler itself will
1398 generate implicit conversions under some
cc29fd59 1399 circumstances. (For example a block copy will be
dfb5c523
MM
1400 turned into a call to "__builtin_memcpy", with a
1401 conversion of the return value to an appropriate
1402 type.) So, to avoid false positives, we strip
d9fa1233
MM
1403 conversions. Do not use STRIP_NOPs because it will
1404 not strip conversions to "void", as that is not a
1405 mode-preserving conversion. */
1406 while (TREE_CODE (e) == NOP_EXPR)
1407 e = TREE_OPERAND (e, 0);
dfb5c523
MM
1408
1409 code = TREE_CODE (e);
be93747e
KG
1410 tclass = TREE_CODE_CLASS (code);
1411 if ((tclass == tcc_comparison
1412 || tclass == tcc_unary
1413 || (tclass == tcc_binary
dfb5c523
MM
1414 && !(code == MODIFY_EXPR
1415 || code == INIT_EXPR
1416 || code == PREDECREMENT_EXPR
1417 || code == PREINCREMENT_EXPR
1418 || code == POSTDECREMENT_EXPR
5c67ba02
MG
1419 || code == POSTINCREMENT_EXPR))
1420 || code == VEC_PERM_EXPR
1421 || code == VEC_COND_EXPR)
5ade1ed2 1422 && (complain & tf_warning))
5a3c9cf2 1423 warning_at (loc, OPT_Wunused_value, "value computed is not used");
dfb5c523
MM
1424 }
1425 }
e895113a 1426 expr = build1 (CONVERT_EXPR, void_type_node, expr);
02cac427 1427 }
ccbe00a4 1428 if (! TREE_SIDE_EFFECTS (expr))
632f2871 1429 expr = void_node;
02cac427
NS
1430 return expr;
1431}
1432
a4443a08
MS
1433/* Create an expression whose value is that of EXPR,
1434 converted to type TYPE. The TREE_TYPE of the value
1435 is always TYPE. This function implements all reasonable
1436 conversions; callers should filter out those that are
37c46b43
MS
1437 not permitted by the language being compiled.
1438
1439 Most of this routine is from build_reinterpret_cast.
1440
3b426391 1441 The back end cannot call cp_convert (what was convert) because
37c46b43
MS
1442 conversions to/from basetypes may involve memory references
1443 (vbases) and adding or subtracting small values (multiple
1444 inheritance), but it calls convert from the constant folding code
7dfa399d 1445 on subtrees of already built trees after it has ripped them apart.
37c46b43
MS
1446
1447 Also, if we ever support range variables, we'll probably also have to
1448 do a little bit more work. */
a4443a08
MS
1449
1450tree
b746c5dc 1451convert (tree type, tree expr)
a4443a08 1452{
37c46b43
MS
1453 tree intype;
1454
1455 if (type == error_mark_node || expr == error_mark_node)
1456 return error_mark_node;
1457
37c46b43
MS
1458 intype = TREE_TYPE (expr);
1459
6633d636 1460 if (POINTER_TYPE_P (type) && POINTER_TYPE_P (intype))
8a784e4a 1461 return fold_if_not_in_template (build_nop (type, expr));
37c46b43
MS
1462
1463 return ocp_convert (type, expr, CONV_OLD_CONVERT,
4b978f96
PC
1464 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION,
1465 tf_warning_or_error);
a4443a08
MS
1466}
1467
37c46b43 1468/* Like cp_convert, except permit conversions to take place which
8d08fdba
MS
1469 are not normally allowed due to access restrictions
1470 (such as conversion from sub-type to private super-type). */
e92cc029 1471
8d08fdba 1472tree
4b978f96 1473convert_force (tree type, tree expr, int convtype, tsubst_flags_t complain)
8d08fdba 1474{
926ce8bd
KH
1475 tree e = expr;
1476 enum tree_code code = TREE_CODE (type);
8d08fdba
MS
1477
1478 if (code == REFERENCE_TYPE)
c8094d83 1479 return (fold_if_not_in_template
4b978f96
PC
1480 (convert_to_reference (type, e, CONV_C_CAST, 0,
1481 NULL_TREE, complain)));
8d08fdba
MS
1482
1483 if (code == POINTER_TYPE)
4b978f96
PC
1484 return fold_if_not_in_template (convert_to_pointer_force (type, e,
1485 complain));
8d08fdba 1486
51c184be 1487 /* From typeck.c convert_for_assignment */
50e10fa8 1488 if (((TYPE_PTR_P (TREE_TYPE (e)) && TREE_CODE (e) == ADDR_EXPR
8d08fdba 1489 && TREE_CODE (TREE_TYPE (TREE_TYPE (e))) == METHOD_TYPE)
51c184be
MS
1490 || integer_zerop (e)
1491 || TYPE_PTRMEMFUNC_P (TREE_TYPE (e)))
8d08fdba 1492 && TYPE_PTRMEMFUNC_P (type))
08e17d9d
MM
1493 /* compatible pointer to member functions. */
1494 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), e, 1,
4b978f96 1495 /*c_cast_p=*/1, complain);
6060a796 1496
4b978f96 1497 return ocp_convert (type, e, CONV_C_CAST|convtype, LOOKUP_NORMAL, complain);
8d08fdba
MS
1498}
1499
8d08fdba
MS
1500/* Convert an aggregate EXPR to type XTYPE. If a conversion
1501 exists, return the attempted conversion. This may
1502 return ERROR_MARK_NODE if the conversion is not
1503 allowed (references private members, etc).
1504 If no conversion exists, NULL_TREE is returned.
1505
f30432d7
MS
1506 FIXME: Ambiguity checking is wrong. Should choose one by the implicit
1507 object parameter, or by the second standard conversion sequence if
1508 that doesn't do it. This will probably wait for an overloading rewrite.
1509 (jason 8/9/95) */
8d08fdba 1510
ae00383b 1511static tree
7993382e 1512build_type_conversion (tree xtype, tree expr)
8d08fdba
MS
1513{
1514 /* C++: check to see if we can convert this aggregate type
e1cd6e56 1515 into the required type. */
b40e334f
PC
1516 return build_user_type_conversion (xtype, expr, LOOKUP_NORMAL,
1517 tf_warning_or_error);
8d08fdba
MS
1518}
1519
b7484fbe
MS
1520/* Convert the given EXPR to one of a group of types suitable for use in an
1521 expression. DESIRES is a combination of various WANT_* flags (q.v.)
b746c5dc 1522 which indicates which types are suitable. If COMPLAIN is true, complain
b7484fbe 1523 about ambiguity; otherwise, the caller will deal with it. */
8d08fdba 1524
b7484fbe 1525tree
b746c5dc 1526build_expr_type_conversion (int desires, tree expr, bool complain)
8d08fdba 1527{
b7484fbe 1528 tree basetype = TREE_TYPE (expr);
b370501f 1529 tree conv = NULL_TREE;
02020185 1530 tree winner = NULL_TREE;
8d08fdba 1531
c8094d83
MS
1532 if (expr == null_node
1533 && (desires & WANT_INT)
03d0f4af 1534 && !(desires & WANT_NULL))
70dc395a
DS
1535 {
1536 source_location loc =
1537 expansion_point_location_if_in_system_header (input_location);
1538
1539 warning_at (loc, OPT_Wconversion_null,
1540 "converting NULL to non-pointer type");
1541 }
c8094d83 1542
07c88314
MM
1543 if (basetype == error_mark_node)
1544 return error_mark_node;
1545
9e1e64ec 1546 if (! MAYBE_CLASS_TYPE_P (basetype))
02020185
JM
1547 switch (TREE_CODE (basetype))
1548 {
1549 case INTEGER_TYPE:
03d0f4af 1550 if ((desires & WANT_NULL) && null_ptr_cst_p (expr))
02020185
JM
1551 return expr;
1552 /* else fall through... */
1553
1554 case BOOLEAN_TYPE:
1555 return (desires & WANT_INT) ? expr : NULL_TREE;
1556 case ENUMERAL_TYPE:
1557 return (desires & WANT_ENUM) ? expr : NULL_TREE;
1558 case REAL_TYPE:
1559 return (desires & WANT_FLOAT) ? expr : NULL_TREE;
1560 case POINTER_TYPE:
1561 return (desires & WANT_POINTER) ? expr : NULL_TREE;
c8094d83 1562
02020185
JM
1563 case FUNCTION_TYPE:
1564 case ARRAY_TYPE:
89fcabaf
PC
1565 return (desires & WANT_POINTER) ? decay_conversion (expr,
1566 tf_warning_or_error)
0cbd7506 1567 : NULL_TREE;
4576ceaf 1568
1ff6b2c8 1569 case COMPLEX_TYPE:
4576ceaf 1570 case VECTOR_TYPE:
1ff6b2c8 1571 if ((desires & WANT_VECTOR_OR_COMPLEX) == 0)
4576ceaf
JJ
1572 return NULL_TREE;
1573 switch (TREE_CODE (TREE_TYPE (basetype)))
1574 {
1575 case INTEGER_TYPE:
1576 case BOOLEAN_TYPE:
1577 return (desires & WANT_INT) ? expr : NULL_TREE;
1578 case ENUMERAL_TYPE:
1579 return (desires & WANT_ENUM) ? expr : NULL_TREE;
1580 case REAL_TYPE:
1581 return (desires & WANT_FLOAT) ? expr : NULL_TREE;
1582 default:
1583 return NULL_TREE;
1584 }
1585
02020185
JM
1586 default:
1587 return NULL_TREE;
1588 }
1589
1590 /* The code for conversions from class type is currently only used for
1591 delete expressions. Other expressions are handled by build_new_op. */
309714d4 1592 if (!complete_type_or_maybe_complain (basetype, expr, complain))
29f4ceab
GB
1593 return error_mark_node;
1594 if (!TYPE_HAS_CONVERSION (basetype))
02020185
JM
1595 return NULL_TREE;
1596
9c7d5cae 1597 for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv))
02020185
JM
1598 {
1599 int win = 0;
1600 tree candidate;
1601 tree cand = TREE_VALUE (conv);
a5cf630e 1602 cand = OVL_CURRENT (cand);
02020185
JM
1603
1604 if (winner && winner == cand)
1605 continue;
1606
e57d93c6
JM
1607 if (DECL_NONCONVERTING_P (cand))
1608 continue;
1609
ee76b931 1610 candidate = non_reference (TREE_TYPE (TREE_TYPE (cand)));
02020185
JM
1611
1612 switch (TREE_CODE (candidate))
1613 {
1614 case BOOLEAN_TYPE:
1615 case INTEGER_TYPE:
1616 win = (desires & WANT_INT); break;
1617 case ENUMERAL_TYPE:
1618 win = (desires & WANT_ENUM); break;
1619 case REAL_TYPE:
1620 win = (desires & WANT_FLOAT); break;
1621 case POINTER_TYPE:
1622 win = (desires & WANT_POINTER); break;
1623
1ff6b2c8 1624 case COMPLEX_TYPE:
4576ceaf 1625 case VECTOR_TYPE:
1ff6b2c8 1626 if ((desires & WANT_VECTOR_OR_COMPLEX) == 0)
4576ceaf
JJ
1627 break;
1628 switch (TREE_CODE (TREE_TYPE (candidate)))
1629 {
1630 case BOOLEAN_TYPE:
1631 case INTEGER_TYPE:
1632 win = (desires & WANT_INT); break;
1633 case ENUMERAL_TYPE:
1634 win = (desires & WANT_ENUM); break;
1635 case REAL_TYPE:
1636 win = (desires & WANT_FLOAT); break;
1637 default:
1638 break;
1639 }
1640 break;
1641
02020185 1642 default:
c5918c21
JM
1643 /* A wildcard could be instantiated to match any desired
1644 type, but we can't deduce the template argument. */
1645 if (WILDCARD_TYPE_P (candidate))
1646 win = true;
02020185
JM
1647 break;
1648 }
1649
1650 if (win)
1651 {
c5918c21
JM
1652 if (TREE_CODE (cand) == TEMPLATE_DECL)
1653 {
1654 if (complain)
1655 error ("default type conversion can't deduce template"
1656 " argument for %qD", cand);
1657 return error_mark_node;
1658 }
1659
02020185
JM
1660 if (winner)
1661 {
ca45eca1
JM
1662 tree winner_type
1663 = non_reference (TREE_TYPE (TREE_TYPE (winner)));
1664
1665 if (!same_type_ignoring_top_level_qualifiers_p (winner_type,
1666 candidate))
02020185 1667 {
ca45eca1
JM
1668 if (complain)
1669 {
1670 error ("ambiguous default type conversion from %qT",
1671 basetype);
2d45625f
PC
1672 inform (input_location,
1673 " candidate conversions include %qD and %qD",
1674 winner, cand);
ca45eca1
JM
1675 }
1676 return error_mark_node;
02020185 1677 }
02020185 1678 }
ca45eca1
JM
1679
1680 winner = cand;
02020185
JM
1681 }
1682 }
b7484fbe 1683
02020185
JM
1684 if (winner)
1685 {
ee76b931 1686 tree type = non_reference (TREE_TYPE (TREE_TYPE (winner)));
b40e334f
PC
1687 return build_user_type_conversion (type, expr, LOOKUP_NORMAL,
1688 tf_warning_or_error);
8d08fdba 1689 }
b7484fbe 1690
3c215895 1691 return NULL_TREE;
8d08fdba 1692}
39211cd5 1693
e92cc029
MS
1694/* Implements integral promotion (4.1) and float->double promotion. */
1695
39211cd5 1696tree
b746c5dc 1697type_promotes_to (tree type)
39211cd5 1698{
40449a90
SL
1699 tree promoted_type;
1700
f30432d7
MS
1701 if (type == error_mark_node)
1702 return error_mark_node;
1703
39211cd5 1704 type = TYPE_MAIN_VARIANT (type);
2986ae00 1705
40449a90
SL
1706 /* Check for promotions of target-defined types first. */
1707 promoted_type = targetm.promoted_type (type);
1708 if (promoted_type)
1709 return promoted_type;
1710
2986ae00
MS
1711 /* bool always promotes to int (not unsigned), even if it's the same
1712 size. */
66be89f0 1713 if (TREE_CODE (type) == BOOLEAN_TYPE)
2986ae00
MS
1714 type = integer_type_node;
1715
1716 /* Normally convert enums to int, but convert wide enums to something
62984918
JM
1717 wider. Scoped enums don't promote, but pretend they do for backward
1718 ABI bug compatibility wrt varargs. */
2986ae00 1719 else if (TREE_CODE (type) == ENUMERAL_TYPE
b6baa67d
KVH
1720 || type == char16_type_node
1721 || type == char32_type_node
2986ae00 1722 || type == wchar_type_node)
cf2ac46f
JM
1723 {
1724 int precision = MAX (TYPE_PRECISION (type),
1725 TYPE_PRECISION (integer_type_node));
b0c48229 1726 tree totype = c_common_type_for_size (precision, 0);
62984918
JM
1727 tree prom = type;
1728 if (TREE_CODE (prom) == ENUMERAL_TYPE)
1729 prom = ENUM_UNDERLYING_TYPE (prom);
1730 if (TYPE_UNSIGNED (prom)
1731 && ! int_fits_type_p (TYPE_MAX_VALUE (prom), totype))
1732 prom = c_common_type_for_size (precision, 1);
1733 else
1734 prom = totype;
967444bb 1735 if (SCOPED_ENUM_P (type))
62984918
JM
1736 {
1737 if (abi_version_crosses (6)
1738 && TYPE_MODE (prom) != TYPE_MODE (type))
1739 warning (OPT_Wabi, "scoped enum %qT passed through ... as "
1740 "%qT before -fabi-version=6, %qT after",
1741 type, prom, ENUM_UNDERLYING_TYPE (type));
1742 if (!abi_version_at_least (6))
1743 type = prom;
1744 }
cf2ac46f 1745 else
62984918 1746 type = prom;
cf2ac46f 1747 }
d72040f5 1748 else if (c_promoting_integer_type_p (type))
39211cd5 1749 {
3d4683cb 1750 /* Retain unsignedness if really not getting bigger. */
8df83eae 1751 if (TYPE_UNSIGNED (type)
3d4683cb 1752 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
39211cd5
MS
1753 type = unsigned_type_node;
1754 else
1755 type = integer_type_node;
1756 }
1757 else if (type == float_type_node)
1758 type = double_type_node;
c8094d83 1759
0a72704b 1760 return type;
39211cd5 1761}
75650646 1762
75650646
MM
1763/* The routines below this point are carefully written to conform to
1764 the standard. They use the same terminology, and follow the rules
1765 closely. Although they are used only in pt.c at the moment, they
1766 should presumably be used everywhere in the future. */
1767
e1467ff2
MM
1768/* Attempt to perform qualification conversions on EXPR to convert it
1769 to TYPE. Return the resulting expression, or error_mark_node if
1770 the conversion was impossible. */
1771
c8094d83 1772tree
b746c5dc 1773perform_qualification_conversions (tree type, tree expr)
75650646 1774{
a5ac359a
MM
1775 tree expr_type;
1776
1777 expr_type = TREE_TYPE (expr);
1778
6f25cb35
MM
1779 if (same_type_p (type, expr_type))
1780 return expr;
1781 else if (TYPE_PTR_P (type) && TYPE_PTR_P (expr_type)
1782 && comp_ptr_ttypes (TREE_TYPE (type), TREE_TYPE (expr_type)))
a5ac359a 1783 return build_nop (type, expr);
66b1156a 1784 else if (TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (expr_type)
a5ac359a
MM
1785 && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
1786 TYPE_PTRMEM_CLASS_TYPE (expr_type))
1787 && comp_ptr_ttypes (TYPE_PTRMEM_POINTED_TO_TYPE (type),
1788 TYPE_PTRMEM_POINTED_TO_TYPE (expr_type)))
1789 return build_nop (type, expr);
e1467ff2
MM
1790 else
1791 return error_mark_node;
75650646 1792}
b8fd7909
JM
1793
1794/* True iff T is a transaction-safe function type. */
1795
1796bool
1797tx_safe_fn_type_p (tree t)
1798{
1799 if (TREE_CODE (t) != FUNCTION_TYPE
1800 && TREE_CODE (t) != METHOD_TYPE)
1801 return false;
1802 return !!lookup_attribute ("transaction_safe", TYPE_ATTRIBUTES (t));
1803}
1804
1805/* Return the transaction-unsafe variant of transaction-safe function type
1806 T. */
1807
1808tree
1809tx_unsafe_fn_variant (tree t)
1810{
1811 gcc_assert (tx_safe_fn_type_p (t));
1812 tree attrs = remove_attribute ("transaction_safe",
1813 TYPE_ATTRIBUTES (t));
1814 return cp_build_type_attribute_variant (t, attrs);
1815}
1816
1817/* Return true iff FROM can convert to TO by a transaction-safety
1818 conversion. */
1819
1820bool
1821can_convert_tx_safety (tree to, tree from)
1822{
1823 return (flag_tm && tx_safe_fn_type_p (from)
1824 && same_type_p (to, tx_unsafe_fn_variant (from)));
1825}