]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/cvt.c
2011-04-26 Thomas Koenig <tkoenig@gcc.gnu.org>
[thirdparty/gcc.git] / gcc / cp / cvt.c
CommitLineData
471086d6 1/* Language-level data type conversion for GNU C++.
107c7f39 2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
b2af2a93 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
aa139c3f 4 Free Software Foundation, Inc.
471086d6 5 Hacked by Michael Tiemann (tiemann@cygnus.com)
6
6f0d25a6 7This file is part of GCC.
471086d6 8
6f0d25a6 9GCC is free software; you can redistribute it and/or modify
471086d6 10it under the terms of the GNU General Public License as published by
aa139c3f 11the Free Software Foundation; either version 3, or (at your option)
471086d6 12any later version.
13
6f0d25a6 14GCC is distributed in the hope that it will be useful,
471086d6 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
aa139c3f 20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
471086d6 22
23
af86cc06 24/* This file contains the functions for converting C++ expressions
471086d6 25 to different data types. The only entry point is `convert'.
26 Every language front end must have a `convert' function
27 but what kind of conversions it does will depend on the language. */
28
29#include "config.h"
b3ef7553 30#include "system.h"
805e22b2 31#include "coretypes.h"
32#include "tm.h"
471086d6 33#include "tree.h"
34#include "flags.h"
35#include "cp-tree.h"
ca82e026 36#include "intl.h"
471086d6 37#include "convert.h"
2e8226f7 38#include "decl.h"
7a979707 39#include "target.h"
96624a9e 40
e5ead12a 41static tree cp_convert_to_pointer (tree, tree);
35771a9a 42static tree convert_to_pointer_force (tree, tree);
ef9571e5 43static tree build_type_conversion (tree, tree);
35771a9a 44static tree build_up_reference (tree, tree, int, tree);
45static void warn_ref_binding (tree, tree, tree);
71ccdfff 46
471086d6 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),
653e5405 59 and c_common_truthvalue_conversion.
471086d6 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
471086d6 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
e5ead12a 74 else try C-style pointer conversion. */
96624a9e 75
471086d6 76static tree
e5ead12a 77cp_convert_to_pointer (tree type, tree expr)
471086d6 78{
cd16867a 79 tree intype = TREE_TYPE (expr);
80 enum tree_code form;
f82eeb87 81 tree rval;
8bf328bf 82 if (intype == error_mark_node)
83 return error_mark_node;
74002e1d 84
95397ff9 85 if (MAYBE_CLASS_TYPE_P (intype))
96624a9e 86 {
96624a9e 87 intype = complete_type (intype);
4b72716d 88 if (!COMPLETE_TYPE_P (intype))
96624a9e 89 {
bf776685 90 error ("can%'t convert from incomplete type %qT to %qT",
653e5405 91 intype, type);
96624a9e 92 return error_mark_node;
93 }
94
8999978b 95 rval = build_type_conversion (type, expr);
96624a9e 96 if (rval)
97 {
98 if (rval == error_mark_node)
0a25aad6 99 error ("conversion of %qE from %qT to %qT is ambiguous",
653e5405 100 expr, intype, type);
96624a9e 101 return rval;
102 }
103 }
104
860740a7 105 /* Handle anachronistic conversions from (::*)() to cv void* or (*)(). */
38281c46 106 if (TREE_CODE (type) == POINTER_TYPE
107 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
e3cfe3ce 108 || VOID_TYPE_P (TREE_TYPE (type))))
38281c46 109 {
6ab399e8 110 if (TYPE_PTRMEMFUNC_P (intype)
111 || TREE_CODE (intype) == METHOD_TYPE)
112 return convert_member_func_to_ptr (type, expr);
a63bc44c 113 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
114 return build_nop (type, expr);
38281c46 115 intype = TREE_TYPE (expr);
116 }
117
311e42bc 118 if (expr == error_mark_node)
119 return error_mark_node;
120
74002e1d 121 form = TREE_CODE (intype);
122
2b77484d 123 if (POINTER_TYPE_P (intype))
471086d6 124 {
125 intype = TYPE_MAIN_VARIANT (intype);
126
127 if (TYPE_MAIN_VARIANT (type) != intype
2b77484d 128 && TREE_CODE (type) == POINTER_TYPE
471086d6 129 && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE
95397ff9 130 && MAYBE_CLASS_TYPE_P (TREE_TYPE (type))
131 && MAYBE_CLASS_TYPE_P (TREE_TYPE (intype))
4a2680fc 132 && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE)
471086d6 133 {
134 enum tree_code code = PLUS_EXPR;
4a2680fc 135 tree binfo;
8999978b 136 tree intype_class;
137 tree type_class;
138 bool same_p;
4a2680fc 139
8999978b 140 intype_class = TREE_TYPE (intype);
141 type_class = TREE_TYPE (type);
142
9031d10b 143 same_p = same_type_p (TYPE_MAIN_VARIANT (intype_class),
8999978b 144 TYPE_MAIN_VARIANT (type_class));
145 binfo = NULL_TREE;
c0af329c 146 /* Try derived to base conversion. */
8999978b 147 if (!same_p)
148 binfo = lookup_base (intype_class, type_class, ba_check, NULL);
149 if (!same_p && !binfo)
471086d6 150 {
c0af329c 151 /* Try base to derived conversion. */
8999978b 152 binfo = lookup_base (type_class, intype_class, ba_check, NULL);
471086d6 153 code = MINUS_EXPR;
154 }
4a2680fc 155 if (binfo == error_mark_node)
156 return error_mark_node;
8999978b 157 if (binfo || same_p)
471086d6 158 {
8999978b 159 if (binfo)
160 expr = build_base_path (code, expr, binfo, 0);
c0af329c 161 /* Add any qualifier conversions. */
8999978b 162 return build_nop (type, expr);
471086d6 163 }
164 }
471086d6 165
1bc16cab 166 if (TYPE_PTRMEMFUNC_P (type))
bea7d742 167 {
0a25aad6 168 error ("cannot convert %qE from type %qT to type %qT",
653e5405 169 expr, intype, type);
1bc16cab 170 return error_mark_node;
171 }
a17aefa2 172
1bc16cab 173 return build_nop (type, expr);
174 }
e5ead12a 175 else if ((TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
176 || (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype)))
177 return convert_ptrmem (type, expr, /*allow_inverse_p=*/false,
85132186 178 /*c_cast_p=*/false, tf_warning_or_error);
2b77484d 179 else if (TYPE_PTRMEMFUNC_P (intype))
180 {
a63bc44c 181 if (!warn_pmf2ptr)
182 {
183 if (TREE_CODE (expr) == PTRMEM_CST)
184 return cp_convert_to_pointer (type,
e5ead12a 185 PTRMEM_CST_MEMBER (expr));
a63bc44c 186 else if (TREE_CODE (expr) == OFFSET_REF)
187 {
188 tree object = TREE_OPERAND (expr, 0);
189 return get_member_function_from_ptrfunc (&object,
190 TREE_OPERAND (expr, 1));
191 }
192 }
0a25aad6 193 error ("cannot convert %qE from type %qT to type %qT",
653e5405 194 expr, intype, type);
2b77484d 195 return error_mark_node;
196 }
471086d6 197
ef434176 198 if (null_ptr_cst_p (expr))
471086d6 199 {
2b77484d 200 if (TYPE_PTRMEMFUNC_P (type))
cb02169c 201 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
85132186 202 /*c_cast_p=*/false, tf_warning_or_error);
ad63a0fc 203
606b494c 204 if (TYPE_PTRMEM_P (type))
7c446c95 205 {
206 /* A NULL pointer-to-member is represented by -1, not by
207 zero. */
697bbc3f 208 expr = build_int_cst_type (type, -1);
7c446c95 209 }
ad63a0fc 210 else
7016c612 211 expr = build_int_cst (type, 0);
9031d10b 212
471086d6 213 return expr;
214 }
1bc16cab 215 else if (TYPE_PTR_TO_MEMBER_P (type) && INTEGRAL_CODE_P (form))
de1f960a 216 {
0a25aad6 217 error ("invalid conversion from %qT to %qT", intype, type);
de1f960a 218 return error_mark_node;
219 }
471086d6 220
bb0726a1 221 if (INTEGRAL_CODE_P (form))
471086d6 222 {
c5aa1e92 223 if (TYPE_PRECISION (intype) == POINTER_SIZE)
471086d6 224 return build1 (CONVERT_EXPR, type, expr);
771d21fa 225 expr = cp_convert (c_common_type_for_size (POINTER_SIZE, 0), expr);
092b1d6f 226 /* Modes may be different but sizes should be the same. There
227 is supposed to be some integral type that is the same width
228 as a pointer. */
229 gcc_assert (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (expr)))
230 == GET_MODE_SIZE (TYPE_MODE (type)));
9031d10b 231
471086d6 232 return convert_to_pointer (type, expr);
233 }
234
cc4d0855 235 if (type_unknown_p (expr))
0fbca5e8 236 return instantiate_type (type, expr, tf_warning_or_error);
cc4d0855 237
0a25aad6 238 error ("cannot convert %qE from type %qT to type %qT",
653e5405 239 expr, intype, type);
471086d6 240 return error_mark_node;
241}
242
243/* Like convert, except permit conversions to take place which
244 are not normally allowed due to access restrictions
245 (such as conversion from sub-type to private super-type). */
96624a9e 246
471086d6 247static tree
35771a9a 248convert_to_pointer_force (tree type, tree expr)
471086d6 249{
cd16867a 250 tree intype = TREE_TYPE (expr);
251 enum tree_code form = TREE_CODE (intype);
9031d10b 252
471086d6 253 if (form == POINTER_TYPE)
254 {
255 intype = TYPE_MAIN_VARIANT (intype);
256
257 if (TYPE_MAIN_VARIANT (type) != intype
258 && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE
95397ff9 259 && MAYBE_CLASS_TYPE_P (TREE_TYPE (type))
260 && MAYBE_CLASS_TYPE_P (TREE_TYPE (intype))
471086d6 261 && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE)
262 {
263 enum tree_code code = PLUS_EXPR;
4a2680fc 264 tree binfo;
265
266 binfo = lookup_base (TREE_TYPE (intype), TREE_TYPE (type),
ada40935 267 ba_unique, NULL);
4a2680fc 268 if (!binfo)
471086d6 269 {
4a2680fc 270 binfo = lookup_base (TREE_TYPE (type), TREE_TYPE (intype),
ada40935 271 ba_unique, NULL);
4a2680fc 272 code = MINUS_EXPR;
471086d6 273 }
4a2680fc 274 if (binfo == error_mark_node)
275 return error_mark_node;
276 if (binfo)
471086d6 277 {
4a2680fc 278 expr = build_base_path (code, expr, binfo, 0);
653e5405 279 if (expr == error_mark_node)
280 return error_mark_node;
c0af329c 281 /* Add any qualifier conversions. */
4a2680fc 282 if (!same_type_p (TREE_TYPE (TREE_TYPE (expr)),
283 TREE_TYPE (type)))
8999978b 284 expr = build_nop (type, expr);
4a2680fc 285 return expr;
471086d6 286 }
471086d6 287 }
471086d6 288 }
289
e5ead12a 290 return cp_convert_to_pointer (type, expr);
471086d6 291}
292
293/* We are passing something to a function which requires a reference.
294 The type we are interested in is in TYPE. The initial
295 value we have to begin with is in ARG.
296
297 FLAGS controls how we manage access checking.
ca106ab1 298 DIRECT_BIND in FLAGS controls how any temporaries are generated.
299 If DIRECT_BIND is set, DECL is the reference we're binding to. */
96624a9e 300
471086d6 301static tree
35771a9a 302build_up_reference (tree type, tree arg, int flags, tree decl)
471086d6 303{
c76251c1 304 tree rval;
0543e7a9 305 tree argtype = TREE_TYPE (arg);
471086d6 306 tree target_type = TREE_TYPE (type);
471086d6 307
b4df430b 308 gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
471086d6 309
c76251c1 310 if ((flags & DIRECT_BIND) && ! real_lvalue_p (arg))
471086d6 311 {
ca106ab1 312 /* Create a new temporary variable. We can't just use a TARGET_EXPR
313 here because it needs to live as long as DECL. */
c76251c1 314 tree targ = arg;
ca106ab1 315
5ab1aaca 316 arg = make_temporary_var_for_ref_to_temp (decl, target_type);
c23ebfdd 317
318 /* Process the initializer for the declaration. */
38281c46 319 DECL_INITIAL (arg) = targ;
d91303a6 320 cp_finish_decl (arg, targ, /*init_const_expr_p=*/false, NULL_TREE,
011310f7 321 LOOKUP_ONLYCONVERTING|DIRECT_BIND);
1ad432f2 322 }
c76251c1 323 else if (!(flags & DIRECT_BIND) && ! lvalue_p (arg))
1d8e4310 324 return get_target_expr (arg);
1ad432f2 325
ca106ab1 326 /* If we had a way to wrap this up, and say, if we ever needed its
b0df6589 327 address, transform all occurrences of the register, into a memory
328 reference we could win better. */
d6fbd579 329 rval = cp_build_addr_expr (arg, tf_warning_or_error);
15e55420 330 if (rval == error_mark_node)
331 return error_mark_node;
332
6686e84d 333 if ((flags & LOOKUP_PROTECT)
334 && TYPE_MAIN_VARIANT (argtype) != TYPE_MAIN_VARIANT (target_type)
95397ff9 335 && MAYBE_CLASS_TYPE_P (argtype)
336 && MAYBE_CLASS_TYPE_P (target_type))
6686e84d 337 {
7e6960e0 338 /* We go through lookup_base for the access control. */
4a2680fc 339 tree binfo = lookup_base (argtype, target_type, ba_check, NULL);
6686e84d 340 if (binfo == error_mark_node)
341 return error_mark_node;
342 if (binfo == NULL_TREE)
343 return error_not_base_type (target_type, argtype);
4a2680fc 344 rval = build_base_path (PLUS_EXPR, rval, binfo, 1);
6686e84d 345 }
c76251c1 346 else
347 rval
348 = convert_to_pointer_force (build_pointer_type (target_type), rval);
8999978b 349 return build_nop (type, rval);
471086d6 350}
351
519ba62c 352/* Subroutine of convert_to_reference. REFTYPE is the target reference type.
353 INTYPE is the original rvalue type and DECL is an optional _DECL node
354 for diagnostics.
9031d10b 355
519ba62c 356 [dcl.init.ref] says that if an rvalue is used to
357 initialize a reference, then the reference must be to a
358 non-volatile const type. */
359
360static void
35771a9a 361warn_ref_binding (tree reftype, tree intype, tree decl)
519ba62c 362{
363 tree ttl = TREE_TYPE (reftype);
9031d10b 364
519ba62c 365 if (!CP_TYPE_CONST_NON_VOLATILE_P (ttl))
366 {
367 const char *msg;
368
369 if (CP_TYPE_VOLATILE_P (ttl) && decl)
ca82e026 370 msg = G_("initialization of volatile reference type %q#T from "
371 "rvalue of type %qT");
519ba62c 372 else if (CP_TYPE_VOLATILE_P (ttl))
ca82e026 373 msg = G_("conversion to volatile reference type %q#T "
374 "from rvalue of type %qT");
519ba62c 375 else if (decl)
ca82e026 376 msg = G_("initialization of non-const reference type %q#T from "
377 "rvalue of type %qT");
519ba62c 378 else
ca82e026 379 msg = G_("conversion to non-const reference type %q#T from "
380 "rvalue of type %qT");
519ba62c 381
2b9e3597 382 permerror (input_location, msg, reftype, intype);
519ba62c 383 }
384}
385
471086d6 386/* For C++: Only need to do one-level references, but cannot
387 get tripped up on signed/unsigned differences.
388
d81e00a4 389 DECL is either NULL_TREE or the _DECL node for a reference that is being
390 initialized. It can be error_mark_node if we don't know the _DECL but
391 we know it's an initialization. */
471086d6 392
471086d6 393tree
35771a9a 394convert_to_reference (tree reftype, tree expr, int convtype,
653e5405 395 int flags, tree decl)
471086d6 396{
cd16867a 397 tree type = TYPE_MAIN_VARIANT (TREE_TYPE (reftype));
398 tree intype;
471086d6 399 tree rval = NULL_TREE;
1a3f833b 400 tree rval_as_conversion = NULL_TREE;
1bc16cab 401 bool can_convert_intype_to_type;
1a3f833b 402
9031d10b 403 if (TREE_CODE (type) == FUNCTION_TYPE
d32df6a6 404 && TREE_TYPE (expr) == unknown_type_node)
9031d10b 405 expr = instantiate_type (type, expr,
0a3b29ad 406 (flags & LOOKUP_COMPLAIN)
0fbca5e8 407 ? tf_warning_or_error : tf_none);
0a3b29ad 408
409 if (expr == error_mark_node)
410 return error_mark_node;
411
412 intype = TREE_TYPE (expr);
cc4d0855 413
b4df430b 414 gcc_assert (TREE_CODE (intype) != REFERENCE_TYPE);
ab12ed55 415 gcc_assert (TREE_CODE (reftype) == REFERENCE_TYPE);
471086d6 416
471086d6 417 intype = TYPE_MAIN_VARIANT (intype);
418
1bc16cab 419 can_convert_intype_to_type = can_convert (type, intype);
420 if (!can_convert_intype_to_type
95397ff9 421 && (convtype & CONV_IMPLICIT) && MAYBE_CLASS_TYPE_P (intype)
1a3f833b 422 && ! (flags & LOOKUP_NO_CONVERSION))
423 {
424 /* Look for a user-defined conversion to lvalue that we can use. */
425
0a4be248 426 rval_as_conversion
8999978b 427 = build_type_conversion (reftype, expr);
1a3f833b 428
429 if (rval_as_conversion && rval_as_conversion != error_mark_node
430 && real_lvalue_p (rval_as_conversion))
431 {
432 expr = rval_as_conversion;
433 rval_as_conversion = NULL_TREE;
434 intype = type;
1bc16cab 435 can_convert_intype_to_type = 1;
1a3f833b 436 }
437 }
438
1bc16cab 439 if (((convtype & CONV_STATIC) && can_convert (intype, type))
440 || ((convtype & CONV_IMPLICIT) && can_convert_intype_to_type))
471086d6 441 {
471086d6 442 if (flags & LOOKUP_COMPLAIN)
443 {
bc3887cf 444 tree ttl = TREE_TYPE (reftype);
cb0ba4ec 445 tree ttr = lvalue_type (expr);
471086d6 446
519ba62c 447 if (! real_lvalue_p (expr))
448 warn_ref_binding (reftype, intype, decl);
9031d10b 449
519ba62c 450 if (! (convtype & CONV_CONST)
3e04bd45 451 && !at_least_as_qualified_p (ttl, ttr))
2b9e3597 452 permerror (input_location, "conversion from %qT to %qT discards qualifiers",
07317e69 453 ttr, reftype);
0543e7a9 454 }
455
ca106ab1 456 return build_up_reference (reftype, expr, flags, decl);
471086d6 457 }
c07b1ad1 458 else if ((convtype & CONV_REINTERPRET) && lvalue_p (expr))
0543e7a9 459 {
460 /* When casting an lvalue to a reference type, just convert into
461 a pointer to the new type and deference it. This is allowed
e581f478 462 by San Diego WP section 5.2.9 paragraph 12, though perhaps it
0543e7a9 463 should be done directly (jason). (int &)ri ---> *(int*)&ri */
e581f478 464
3748625f 465 /* B* bp; A& ar = (A&)bp; is valid, but it's probably not what they
653e5405 466 meant. */
1a3f833b 467 if (TREE_CODE (intype) == POINTER_TYPE
a09db423 468 && (comptypes (TREE_TYPE (intype), type,
469 COMPARE_BASE | COMPARE_DERIVED)))
c3ceba8e 470 warning (0, "casting %qT to %qT does not dereference pointer",
00952d10 471 intype, reftype);
9031d10b 472
d6fbd579 473 rval = cp_build_addr_expr (expr, tf_warning_or_error);
0543e7a9 474 if (rval != error_mark_node)
985e9ee0 475 rval = convert_force (build_pointer_type (TREE_TYPE (reftype)),
476 rval, 0);
0543e7a9 477 if (rval != error_mark_node)
b0722fac 478 rval = build1 (NOP_EXPR, reftype, rval);
0543e7a9 479 }
0a4be248 480 else
860740a7 481 {
482 rval = convert_for_initialization (NULL_TREE, type, expr, flags,
183407ee 483 ICR_CONVERTING, 0, 0,
ebd21de4 484 tf_warning_or_error);
a66fe4cb 485 if (rval == NULL_TREE || rval == error_mark_node)
486 return rval;
519ba62c 487 warn_ref_binding (reftype, intype, decl);
ca106ab1 488 rval = build_up_reference (reftype, rval, flags, decl);
860740a7 489 }
471086d6 490
491 if (rval)
492 {
96624a9e 493 /* If we found a way to convert earlier, then use it. */
471086d6 494 return rval;
495 }
496
b248d3f7 497 if (flags & LOOKUP_COMPLAIN)
0a25aad6 498 error ("cannot convert type %qT to type %qT", intype, reftype);
b248d3f7 499
471086d6 500 return error_mark_node;
501}
502
503/* We are using a reference VAL for its value. Bash that reference all the
96624a9e 504 way down to its lowest form. */
505
471086d6 506tree
35771a9a 507convert_from_reference (tree val)
471086d6 508{
73bdcca2 509 if (TREE_TYPE (val)
510 && TREE_CODE (TREE_TYPE (val)) == REFERENCE_TYPE)
729f89ff 511 {
2fb61329 512 tree t = TREE_TYPE (TREE_TYPE (val));
729f89ff 513 tree ref = build1 (INDIRECT_REF, t, val);
9031d10b 514
3d37a176 515 mark_exp_read (val);
729f89ff 516 /* We *must* set TREE_READONLY when dereferencing a pointer to const,
517 so that we get the proper error message if the result is used
518 to assign to. Also, &* is supposed to be a no-op. */
519 TREE_READONLY (ref) = CP_TYPE_CONST_P (t);
520 TREE_THIS_VOLATILE (ref) = CP_TYPE_VOLATILE_P (t);
521 TREE_SIDE_EFFECTS (ref)
522 = (TREE_THIS_VOLATILE (ref) || TREE_SIDE_EFFECTS (val));
523 REFERENCE_REF_P (ref) = 1;
524 val = ref;
525 }
9031d10b 526
471086d6 527 return val;
528}
e5dab226 529
530/* Really perform an lvalue-to-rvalue conversion, including copying an
531 argument of class type into a temporary. */
532
533tree
534force_rvalue (tree expr)
535{
95397ff9 536 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (expr)) && TREE_CODE (expr) != TARGET_EXPR)
e5dab226 537 expr = ocp_convert (TREE_TYPE (expr), expr,
538 CONV_IMPLICIT|CONV_FORCE_TEMP, LOOKUP_NORMAL);
539 else
540 expr = decay_conversion (expr);
541
542 return expr;
543}
f5220369 544
471086d6 545\f
a1f05651 546/* If EXPR and ORIG are INTEGER_CSTs, return a version of EXPR that has
547 TREE_OVERFLOW set only if it is set in ORIG. Otherwise, return EXPR
548 unchanged. */
549
550static tree
551ignore_overflows (tree expr, tree orig)
552{
553 if (TREE_CODE (expr) == INTEGER_CST
554 && TREE_CODE (orig) == INTEGER_CST
555 && TREE_OVERFLOW (expr) != TREE_OVERFLOW (orig))
556 {
557 gcc_assert (!TREE_OVERFLOW (orig));
558 /* Ensure constant sharing. */
559 expr = build_int_cst_wide (TREE_TYPE (expr),
560 TREE_INT_CST_LOW (expr),
561 TREE_INT_CST_HIGH (expr));
562 }
563 return expr;
564}
565
566/* Fold away simple conversions, but make sure TREE_OVERFLOW is set
567 properly. */
f5220369 568
569tree
570cp_fold_convert (tree type, tree expr)
571{
a1f05651 572 tree conv = fold_convert (type, expr);
573 conv = ignore_overflows (conv, expr);
574 return conv;
f5220369 575}
576
c4a8ac95 577/* C++ conversions, preference to static cast conversions. */
578
579tree
35771a9a 580cp_convert (tree type, tree expr)
c4a8ac95 581{
582 return ocp_convert (type, expr, CONV_OLD_CONVERT, LOOKUP_NORMAL);
583}
584
59dd8856 585/* C++ equivalent of convert_and_check but using cp_convert as the
586 conversion function.
587
588 Convert EXPR to TYPE, warning about conversion problems with constants.
589 Invoke this function on every expression that is converted implicitly,
590 i.e. because of language rules and not because of an explicit cast. */
591
592tree
593cp_convert_and_check (tree type, tree expr)
594{
595 tree result;
596
597 if (TREE_TYPE (expr) == type)
598 return expr;
599
600 result = cp_convert (type, expr);
601
48d94ede 602 if (c_inhibit_evaluation_warnings == 0
603 && !TREE_OVERFLOW_P (expr)
604 && result != error_mark_node)
59dd8856 605 warnings_for_convert_and_check (type, expr, result);
606
607 return result;
608}
609
b248d3f7 610/* Conversion...
611
612 FLAGS indicates how we should behave. */
613
471086d6 614tree
35771a9a 615ocp_convert (tree type, tree expr, int convtype, int flags)
471086d6 616{
cd16867a 617 tree e = expr;
618 enum tree_code code = TREE_CODE (type);
7a979707 619 const char *invalid_conv_diag;
2b3c93a3 620 tree e1;
471086d6 621
1bc16cab 622 if (error_operand_p (e) || type == error_mark_node)
471086d6 623 return error_mark_node;
d81e00a4 624
5b592939 625 complete_type (type);
626 complete_type (TREE_TYPE (expr));
627
7a979707 628 if ((invalid_conv_diag
629 = targetm.invalid_conversion (TREE_TYPE (expr), type)))
630 {
631 error (invalid_conv_diag);
632 return error_mark_node;
633 }
634
ce984e5e 635 /* FIXME remove when moving to c_fully_fold model. */
636 /* FIXME do we still need this test? */
637 if (!CLASS_TYPE_P (type))
638 e = integral_constant_value (e);
7a00f939 639 if (error_operand_p (e))
640 return error_mark_node;
7745052b 641
95397ff9 642 if (MAYBE_CLASS_TYPE_P (type) && (convtype & CONV_FORCE_TEMP))
1a3f833b 643 /* We need a new temporary; don't take this shortcut. */;
930e8175 644 else if (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (e)))
ca23ec64 645 {
daf9ff67 646 if (same_type_p (type, TREE_TYPE (e)))
ca23ec64 647 /* The call to fold will not always remove the NOP_EXPR as
648 might be expected, since if one of the types is a typedef;
755edffd 649 the comparison in fold is just equality of pointers, not a
a09db423 650 call to comptypes. We don't call fold in this case because
f699c174 651 that can result in infinite recursion; fold will call
652 convert, which will call ocp_convert, etc. */
653 return e;
372e0e29 654 /* For complex data types, we need to perform componentwise
653e5405 655 conversion. */
372e0e29 656 else if (TREE_CODE (type) == COMPLEX_TYPE)
653e5405 657 return fold_if_not_in_template (convert_to_complex (type, e));
bdb2219e 658 else if (TREE_CODE (e) == TARGET_EXPR)
659 {
660 /* Don't build a NOP_EXPR of class type. Instead, change the
930e8175 661 type of the temporary. */
bdb2219e 662 TREE_TYPE (e) = TREE_TYPE (TARGET_EXPR_SLOT (e)) = type;
663 return e;
664 }
ca23ec64 665 else
092b1d6f 666 {
667 /* We shouldn't be treating objects of ADDRESSABLE type as
668 rvalues. */
669 gcc_assert (!TREE_ADDRESSABLE (type));
5d7ed6c7 670 return fold_if_not_in_template (build_nop (type, e));
092b1d6f 671 }
ca23ec64 672 }
673
2b3c93a3 674 e1 = targetm.convert_to_type (type, e);
675 if (e1)
676 return e1;
677
d81e00a4 678 if (code == VOID_TYPE && (convtype & CONV_STATIC))
95b2ac55 679 {
dab3247a 680 e = convert_to_void (e, ICV_CAST, tf_warning_or_error);
aeef2be5 681 return e;
95b2ac55 682 }
d81e00a4 683
bb0726a1 684 if (INTEGRAL_CODE_P (code))
471086d6 685 {
617abf06 686 tree intype = TREE_TYPE (e);
a1f05651 687 tree converted;
384590d4 688
689 if (TREE_CODE (type) == ENUMERAL_TYPE)
690 {
691 /* enum = enum, enum = int, enum = float, (enum)pointer are all
692 errors. */
693 if (((INTEGRAL_OR_ENUMERATION_TYPE_P (intype)
653e5405 694 || TREE_CODE (intype) == REAL_TYPE)
b312a686 695 && ! (convtype & CONV_STATIC))
384590d4 696 || TREE_CODE (intype) == POINTER_TYPE)
697 {
698 if (flags & LOOKUP_COMPLAIN)
2b9e3597 699 permerror (input_location, "conversion from %q#T to %q#T", intype, type);
471086d6 700
384590d4 701 if (!flag_permissive)
702 return error_mark_node;
703 }
704
705 /* [expr.static.cast]
706
707 8. A value of integral or enumeration type can be explicitly
708 converted to an enumeration type. The value is unchanged if
709 the original value is within the range of the enumeration
710 values. Otherwise, the resulting enumeration value is
711 unspecified. */
bb9c1a09 712 if (TREE_CODE (expr) == INTEGER_CST
713 && !int_fits_type_p (expr, ENUM_UNDERLYING_TYPE (type)))
384590d4 714 warning (OPT_Wconversion,
715 "the result of the conversion is unspecified because "
716 "%qE is outside the range of type %qT",
717 expr, type);
471086d6 718 }
95397ff9 719 if (MAYBE_CLASS_TYPE_P (intype))
471086d6 720 {
721 tree rval;
8999978b 722 rval = build_type_conversion (type, e);
6495357a 723 if (rval)
724 return rval;
b248d3f7 725 if (flags & LOOKUP_COMPLAIN)
0a25aad6 726 error ("%q#T used where a %qT was expected", intype, type);
471086d6 727 return error_mark_node;
728 }
bb0726a1 729 if (code == BOOLEAN_TYPE)
f8913d47 730 {
731 /* We can't implicitly convert a scoped enum to bool, so convert
732 to the underlying type first. */
733 if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC))
172fff7b 734 e = build_nop (ENUM_UNDERLYING_TYPE (intype), e);
f8913d47 735 return cp_truthvalue_conversion (e);
736 }
ce871053 737
a1f05651 738 converted = fold_if_not_in_template (convert_to_integer (type, e));
739
740 /* Ignore any integer overflow caused by the conversion. */
741 return ignore_overflows (converted, e);
471086d6 742 }
c7ca48ea 743 if (NULLPTR_TYPE_P (type) && e && null_ptr_cst_p (e))
6fe11077 744 return nullptr_node;
1bc16cab 745 if (POINTER_TYPE_P (type) || TYPE_PTR_TO_MEMBER_P (type))
e5ead12a 746 return fold_if_not_in_template (cp_convert_to_pointer (type, e));
684b9d79 747 if (code == VECTOR_TYPE)
c37ff371 748 {
749 tree in_vtype = TREE_TYPE (e);
95397ff9 750 if (MAYBE_CLASS_TYPE_P (in_vtype))
c37ff371 751 {
752 tree ret_val;
753 ret_val = build_type_conversion (type, e);
653e5405 754 if (ret_val)
755 return ret_val;
756 if (flags & LOOKUP_COMPLAIN)
757 error ("%q#T used where a %qT was expected", in_vtype, type);
758 return error_mark_node;
c37ff371 759 }
5d7ed6c7 760 return fold_if_not_in_template (convert_to_vector (type, e));
c37ff371 761 }
c4a8ac95 762 if (code == REAL_TYPE || code == COMPLEX_TYPE)
471086d6 763 {
95397ff9 764 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (e)))
471086d6 765 {
766 tree rval;
8999978b 767 rval = build_type_conversion (type, e);
471086d6 768 if (rval)
769 return rval;
770 else
b248d3f7 771 if (flags & LOOKUP_COMPLAIN)
0a25aad6 772 error ("%q#T used where a floating point value was expected",
b248d3f7 773 TREE_TYPE (e));
471086d6 774 }
c4a8ac95 775 if (code == REAL_TYPE)
5d7ed6c7 776 return fold_if_not_in_template (convert_to_real (type, e));
c4a8ac95 777 else if (code == COMPLEX_TYPE)
5d7ed6c7 778 return fold_if_not_in_template (convert_to_complex (type, e));
471086d6 779 }
780
781 /* New C++ semantics: since assignment is now based on
782 memberwise copying, if the rhs type is derived from the
783 lhs type, then we may still do a conversion. */
95397ff9 784 if (RECORD_OR_UNION_CODE_P (code))
471086d6 785 {
786 tree dtype = TREE_TYPE (e);
c25194fd 787 tree ctor = NULL_TREE;
471086d6 788
471086d6 789 dtype = TYPE_MAIN_VARIANT (dtype);
790
471086d6 791 /* Conversion between aggregate types. New C++ semantics allow
792 objects of derived type to be cast to objects of base type.
793 Old semantics only allowed this between pointers.
794
795 There may be some ambiguity between using a constructor
796 vs. using a type conversion operator when both apply. */
797
0a4be248 798 ctor = e;
860740a7 799
8c18e707 800 if (abstract_virtuals_error (NULL_TREE, type))
801 return error_mark_node;
6cbb4197 802
f82f1250 803 if (BRACE_ENCLOSED_INITIALIZER_P (ctor))
804 ctor = perform_implicit_conversion (type, ctor, tf_warning_or_error);
805 else if ((flags & LOOKUP_ONLYCONVERTING)
806 && ! (CLASS_TYPE_P (dtype) && DERIVED_FROM_P (type, dtype)))
fce73460 807 /* For copy-initialization, first we create a temp of the proper type
808 with a user-defined conversion sequence, then we direct-initialize
809 the target with the temp (see [dcl.init]). */
810 ctor = build_user_type_conversion (type, ctor, flags);
3eb89cd8 811 else
f352a3fb 812 {
813 VEC(tree,gc) *ctor_vec = make_tree_vector_single (ctor);
814 ctor = build_special_member_call (NULL_TREE,
815 complete_ctor_identifier,
816 &ctor_vec,
817 type, flags,
818 tf_warning_or_error);
819 release_tree_vector (ctor_vec);
820 }
0a4be248 821 if (ctor)
3d4bed93 822 return build_cplus_new (type, ctor, tf_warning_or_error);
471086d6 823 }
824
b248d3f7 825 if (flags & LOOKUP_COMPLAIN)
a7cc1549 826 {
827 /* If the conversion failed and expr was an invalid use of pointer to
828 member function, try to report a meaningful error. */
829 if (invalid_nonstatic_memfn_p (expr, tf_warning_or_error))
830 /* We displayed the error message. */;
831 else
832 error ("conversion from %qT to non-scalar type %qT requested",
833 TREE_TYPE (expr), type);
834 }
471086d6 835 return error_mark_node;
836}
837
b1a8d4ce 838/* When an expression is used in a void context, its value is discarded and
839 no lvalue-rvalue and similar conversions happen [expr.static.cast/4,
840 stmt.expr/1, expr.comma/1]. This permits dereferencing an incomplete type
841 in a void context. The C++ standard does not define what an `access' to an
63eff20d 842 object is, but there is reason to believe that it is the lvalue to rvalue
b1a8d4ce 843 conversion -- if it were not, `*&*p = 1' would violate [expr]/4 in that it
844 accesses `*p' not to calculate the value to be stored. But, dcl.type.cv/8
845 indicates that volatile semantics should be the same between C and C++
846 where ever possible. C leaves it implementation defined as to what
847 constitutes an access to a volatile. So, we interpret `*vp' as a read of
848 the volatile object `vp' points to, unless that is an incomplete type. For
849 volatile references we do not do this interpretation, because that would
850 make it impossible to ignore the reference return value from functions. We
851 issue warnings in the confusing cases.
9031d10b 852
dab3247a 853 The IMPLICIT is ICV_CAST when the user is explicitly converting an expression
854 to void via a cast. If an expression is being implicitly converted, IMPLICIT
855 indicates the context of the implicit conversion. */
b1a8d4ce 856
857tree
dab3247a 858convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain)
b1a8d4ce 859{
9031d10b 860 if (expr == error_mark_node
3d411d73 861 || TREE_TYPE (expr) == error_mark_node)
862 return error_mark_node;
b2af2a93 863
dab3247a 864 if (implicit == ICV_CAST)
f94341bb 865 mark_exp_read (expr);
866 else
867 {
868 tree exprv = expr;
869
870 while (TREE_CODE (exprv) == COMPOUND_EXPR)
871 exprv = TREE_OPERAND (exprv, 1);
0388391d 872 if (DECL_P (exprv)
873 || handled_component_p (exprv)
874 || TREE_CODE (exprv) == INDIRECT_REF)
f94341bb 875 /* Expr is not being 'used' here, otherwise we whould have
876 called mark_{rl}value_use use here, which would have in turn
877 called mark_exp_read. Rather, we call mark_exp_read directly
878 to avoid some warnings when
879 -Wunused-but-set-{variable,parameter} is in effect. */
880 mark_exp_read (exprv);
881 }
b2af2a93 882
b1a8d4ce 883 if (!TREE_TYPE (expr))
884 return expr;
ebd21de4 885 if (invalid_nonstatic_memfn_p (expr, complain))
334f6ce1 886 return error_mark_node;
ed36f1cf 887 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
888 {
ebd21de4 889 if (complain & tf_error)
890 error ("pseudo-destructor is not called");
ed36f1cf 891 return error_mark_node;
892 }
e3cfe3ce 893 if (VOID_TYPE_P (TREE_TYPE (expr)))
b1a8d4ce 894 return expr;
895 switch (TREE_CODE (expr))
896 {
897 case COND_EXPR:
898 {
653e5405 899 /* The two parts of a cond expr might be separate lvalues. */
900 tree op1 = TREE_OPERAND (expr,1);
901 tree op2 = TREE_OPERAND (expr,2);
527facbb 902 bool side_effects = ((op1 && TREE_SIDE_EFFECTS (op1))
903 || TREE_SIDE_EFFECTS (op2));
dab3247a 904 tree new_op1, new_op2;
527facbb 905 new_op1 = NULL_TREE;
dab3247a 906 if (implicit != ICV_CAST && !side_effects)
907 {
527facbb 908 if (op1)
909 new_op1 = convert_to_void (op1, ICV_SECOND_OF_COND, complain);
dab3247a 910 new_op2 = convert_to_void (op2, ICV_THIRD_OF_COND, complain);
911 }
912 else
913 {
527facbb 914 if (op1)
915 new_op1 = convert_to_void (op1, ICV_CAST, complain);
dab3247a 916 new_op2 = convert_to_void (op2, ICV_CAST, complain);
917 }
9031d10b 918
527facbb 919 expr = build3 (COND_EXPR, TREE_TYPE (new_op2),
831d52a2 920 TREE_OPERAND (expr, 0), new_op1, new_op2);
653e5405 921 break;
b1a8d4ce 922 }
9031d10b 923
b1a8d4ce 924 case COMPOUND_EXPR:
925 {
653e5405 926 /* The second part of a compound expr contains the value. */
927 tree op1 = TREE_OPERAND (expr,1);
dab3247a 928 tree new_op1;
929 if (implicit != ICV_CAST && !TREE_NO_WARNING (expr))
930 new_op1 = convert_to_void (op1, ICV_RIGHT_OF_COMMA, complain);
931 else
932 new_op1 = convert_to_void (op1, ICV_CAST, complain);
9031d10b 933
653e5405 934 if (new_op1 != op1)
e907a2e9 935 {
831d52a2 936 tree t = build2 (COMPOUND_EXPR, TREE_TYPE (new_op1),
937 TREE_OPERAND (expr, 0), new_op1);
e907a2e9 938 expr = t;
939 }
940
653e5405 941 break;
b1a8d4ce 942 }
9031d10b 943
b1a8d4ce 944 case NON_LVALUE_EXPR:
945 case NOP_EXPR:
c0af329c 946 /* These have already decayed to rvalue. */
b1a8d4ce 947 break;
9031d10b 948
331bc0ad 949 case CALL_EXPR: /* We have a special meaning for volatile void fn(). */
b1a8d4ce 950 break;
9031d10b 951
b1a8d4ce 952 case INDIRECT_REF:
953 {
653e5405 954 tree type = TREE_TYPE (expr);
955 int is_reference = TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
956 == REFERENCE_TYPE;
957 int is_volatile = TYPE_VOLATILE (type);
958 int is_complete = COMPLETE_TYPE_P (complete_type (type));
959
dc02da7f 960 /* Can't load the value if we don't know the type. */
653e5405 961 if (is_volatile && !is_complete)
ebd21de4 962 {
963 if (complain & tf_warning)
dab3247a 964 switch (implicit)
965 {
966 case ICV_CAST:
967 warning (0, "conversion to void will not access "
968 "object of incomplete type %qT", type);
969 break;
970 case ICV_SECOND_OF_COND:
971 warning (0, "indirection will not access object of "
972 "incomplete type %qT in second operand "
973 "of conditional expression", type);
974 break;
975 case ICV_THIRD_OF_COND:
976 warning (0, "indirection will not access object of "
977 "incomplete type %qT in third operand "
978 "of conditional expression", type);
979 break;
980 case ICV_RIGHT_OF_COMMA:
981 warning (0, "indirection will not access object of "
982 "incomplete type %qT in right operand of "
983 "comma operator", type);
984 break;
985 case ICV_LEFT_OF_COMMA:
986 warning (0, "indirection will not access object of "
987 "incomplete type %qT in left operand of "
988 "comma operator", type);
989 break;
990 case ICV_STATEMENT:
991 warning (0, "indirection will not access object of "
992 "incomplete type %qT in statement", type);
993 break;
994 case ICV_THIRD_IN_FOR:
995 warning (0, "indirection will not access object of "
996 "incomplete type %qT in for increment "
997 "expression", type);
998 break;
999 default:
1000 gcc_unreachable ();
1001 }
ebd21de4 1002 }
dc02da7f 1003 /* Don't load the value if this is an implicit dereference, or if
1004 the type needs to be handled by ctors/dtors. */
dab3247a 1005 else if (is_volatile && is_reference)
ebd21de4 1006 {
1007 if (complain & tf_warning)
dab3247a 1008 switch (implicit)
1009 {
1010 case ICV_CAST:
1011 warning (0, "conversion to void will not access "
1012 "object of type %qT", type);
1013 break;
1014 case ICV_SECOND_OF_COND:
1015 warning (0, "implicit dereference will not access object "
1016 "of type %qT in second operand of "
1017 "conditional expression", type);
1018 break;
1019 case ICV_THIRD_OF_COND:
1020 warning (0, "implicit dereference will not access object "
1021 "of type %qT in third operand of "
1022 "conditional expression", type);
1023 break;
1024 case ICV_RIGHT_OF_COMMA:
1025 warning (0, "implicit dereference will not access object "
1026 "of type %qT in right operand of "
1027 "comma operator", type);
1028 break;
1029 case ICV_LEFT_OF_COMMA:
1030 warning (0, "implicit dereference will not access object "
1031 "of type %qT in left operand of comma operator",
1032 type);
1033 break;
1034 case ICV_STATEMENT:
1035 warning (0, "implicit dereference will not access object "
1036 "of type %qT in statement", type);
1037 break;
1038 case ICV_THIRD_IN_FOR:
1039 warning (0, "implicit dereference will not access object "
1040 "of type %qT in for increment expression",
1041 type);
1042 break;
1043 default:
1044 gcc_unreachable ();
1045 }
ebd21de4 1046 }
dab3247a 1047 else if (is_volatile && TREE_ADDRESSABLE (type))
1048 {
1049 if (complain & tf_warning)
1050 switch (implicit)
1051 {
1052 case ICV_CAST:
1053 warning (0, "conversion to void will not access "
1054 "object of non-trivially-copyable type %qT",
1055 type);
1056 break;
1057 case ICV_SECOND_OF_COND:
1058 warning (0, "indirection will not access object of "
1059 "non-trivially-copyable type %qT in second "
1060 "operand of conditional expression", type);
1061 break;
1062 case ICV_THIRD_OF_COND:
1063 warning (0, "indirection will not access object of "
1064 "non-trivially-copyable type %qT in third "
1065 "operand of conditional expression", type);
1066 break;
1067 case ICV_RIGHT_OF_COMMA:
1068 warning (0, "indirection will not access object of "
1069 "non-trivially-copyable type %qT in right "
1070 "operand of comma operator", type);
1071 break;
1072 case ICV_LEFT_OF_COMMA:
1073 warning (0, "indirection will not access object of "
1074 "non-trivially-copyable type %qT in left "
1075 "operand of comma operator", type);
1076 break;
1077 case ICV_STATEMENT:
1078 warning (0, "indirection will not access object of "
1079 "non-trivially-copyable type %qT in statement",
1080 type);
1081 break;
1082 case ICV_THIRD_IN_FOR:
1083 warning (0, "indirection will not access object of "
1084 "non-trivially-copyable type %qT in for "
1085 "increment expression", type);
1086 break;
1087 default:
1088 gcc_unreachable ();
1089 }
1090 }
dc02da7f 1091 if (is_reference || !is_volatile || !is_complete || TREE_ADDRESSABLE (type))
a4d4030b 1092 {
1093 /* Emit a warning (if enabled) when the "effect-less" INDIRECT_REF
1094 operation is stripped off. Note that we don't warn about
1095 - an expression with TREE_NO_WARNING set. (For an example of
1096 such expressions, see build_over_call in call.c.)
1097 - automatic dereferencing of references, since the user cannot
1098 control it. (See also warn_if_unused_value() in stmt.c.) */
1099 if (warn_unused_value
dab3247a 1100 && implicit != ICV_CAST
a4d4030b 1101 && (complain & tf_warning)
1102 && !TREE_NO_WARNING (expr)
1103 && !is_reference)
1104 warning (OPT_Wunused_value, "value computed is not used");
1105 expr = TREE_OPERAND (expr, 0);
1106 }
653e5405 1107
1108 break;
b1a8d4ce 1109 }
9031d10b 1110
b1a8d4ce 1111 case VAR_DECL:
1112 {
653e5405 1113 /* External variables might be incomplete. */
1114 tree type = TREE_TYPE (expr);
1115 int is_complete = COMPLETE_TYPE_P (complete_type (type));
1116
ebd21de4 1117 if (TYPE_VOLATILE (type) && !is_complete && (complain & tf_warning))
dab3247a 1118 switch (implicit)
1119 {
1120 case ICV_CAST:
1121 warning (0, "conversion to void will not access "
1122 "object %qE of incomplete type %qT", expr, type);
1123 break;
1124 case ICV_SECOND_OF_COND:
1125 warning (0, "variable %qE of incomplete type %qT will not "
1126 "be accessed in second operand of "
1127 "conditional expression", expr, type);
1128 break;
1129 case ICV_THIRD_OF_COND:
1130 warning (0, "variable %qE of incomplete type %qT will not "
1131 "be accessed in third operand of "
1132 "conditional expression", expr, type);
1133 break;
1134 case ICV_RIGHT_OF_COMMA:
1135 warning (0, "variable %qE of incomplete type %qT will not "
1136 "be accessed in right operand of comma operator",
1137 expr, type);
1138 break;
1139 case ICV_LEFT_OF_COMMA:
1140 warning (0, "variable %qE of incomplete type %qT will not "
1141 "be accessed in left operand of comma operator",
1142 expr, type);
1143 break;
1144 case ICV_STATEMENT:
1145 warning (0, "variable %qE of incomplete type %qT will not "
1146 "be accessed in statement", expr, type);
1147 break;
1148 case ICV_THIRD_IN_FOR:
1149 warning (0, "variable %qE of incomplete type %qT will not "
1150 "be accessed in for increment expression",
1151 expr, type);
1152 break;
1153 default:
1154 gcc_unreachable ();
1155 }
1156
653e5405 1157 break;
b1a8d4ce 1158 }
d9f88785 1159
25b3017b 1160 case TARGET_EXPR:
1161 /* Don't bother with the temporary object returned from a function if
1162 we don't use it and don't need to destroy it. We'll still
1163 allocate space for it in expand_call or declare_return_variable,
1164 but we don't need to track it through all the tree phases. */
67bb1301 1165 if (TARGET_EXPR_IMPLICIT_P (expr)
25b3017b 1166 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (expr)))
1167 {
1168 tree init = TARGET_EXPR_INITIAL (expr);
1169 if (TREE_CODE (init) == AGGR_INIT_EXPR
1170 && !AGGR_INIT_VIA_CTOR_P (init))
1171 {
c2f47e15 1172 tree fn = AGGR_INIT_EXPR_FN (init);
389dd41b 1173 expr = build_call_array_loc (input_location,
1174 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
1175 fn,
1176 aggr_init_expr_nargs (init),
1177 AGGR_INIT_EXPR_ARGP (init));
25b3017b 1178 }
1179 }
1180 break;
1181
b1a8d4ce 1182 default:;
1183 }
eebd67e7 1184 expr = resolve_nondeduced_context (expr);
b1a8d4ce 1185 {
1186 tree probe = expr;
9031d10b 1187
b1a8d4ce 1188 if (TREE_CODE (probe) == ADDR_EXPR)
1189 probe = TREE_OPERAND (expr, 0);
2e0e6579 1190 if (type_unknown_p (probe))
1191 {
1192 /* [over.over] enumerates the places where we can take the address
1193 of an overloaded function, and this is not one of them. */
ebd21de4 1194 if (complain & tf_error)
dab3247a 1195 switch (implicit)
1196 {
1197 case ICV_CAST:
1198 error ("conversion to void "
1199 "cannot resolve address of overloaded function");
1200 break;
1201 case ICV_SECOND_OF_COND:
1202 error ("second operand of conditional expression "
1203 "cannot resolve address of overloaded function");
1204 break;
1205 case ICV_THIRD_OF_COND:
1206 error ("third operand of conditional expression "
1207 "cannot resolve address of overloaded function");
1208 break;
1209 case ICV_RIGHT_OF_COMMA:
1210 error ("right operand of comma operator "
1211 "cannot resolve address of overloaded function");
1212 break;
1213 case ICV_LEFT_OF_COMMA:
1214 error ("left operand of comma operator "
1215 "cannot resolve address of overloaded function");
1216 break;
1217 case ICV_STATEMENT:
1218 error ("statement "
1219 "cannot resolve address of overloaded function");
1220 break;
1221 case ICV_THIRD_IN_FOR:
1222 error ("for increment expression "
1223 "cannot resolve address of overloaded function");
1224 break;
1225 }
ebd21de4 1226 else
1227 return error_mark_node;
ea720917 1228 expr = void_zero_node;
2e0e6579 1229 }
dab3247a 1230 else if (implicit != ICV_CAST && probe == expr && is_overloaded_fn (probe))
2056769e 1231 {
1232 /* Only warn when there is no &. */
ebd21de4 1233 if (complain & tf_warning)
dab3247a 1234 switch (implicit)
1235 {
1236 case ICV_SECOND_OF_COND:
1237 warning (OPT_Waddress,
1238 "second operand of conditional expression "
1239 "is a reference, not call, to function %qE", expr);
1240 break;
1241 case ICV_THIRD_OF_COND:
1242 warning (OPT_Waddress,
1243 "third operand of conditional expression "
1244 "is a reference, not call, to function %qE", expr);
1245 break;
1246 case ICV_RIGHT_OF_COMMA:
1247 warning (OPT_Waddress,
1248 "right operand of comma operator "
1249 "is a reference, not call, to function %qE", expr);
1250 break;
1251 case ICV_LEFT_OF_COMMA:
1252 warning (OPT_Waddress,
1253 "left operand of comma operator "
1254 "is a reference, not call, to function %qE", expr);
1255 break;
1256 case ICV_STATEMENT:
1257 warning (OPT_Waddress,
1258 "statement is a reference, not call, to function %qE",
1259 expr);
1260 break;
1261 case ICV_THIRD_IN_FOR:
1262 warning (OPT_Waddress,
1263 "for increment expression "
1264 "is a reference, not call, to function %qE", expr);
1265 break;
1266 default:
1267 gcc_unreachable ();
1268 }
1269
2056769e 1270 if (TREE_CODE (expr) == COMPONENT_REF)
1271 expr = TREE_OPERAND (expr, 0);
1272 }
b1a8d4ce 1273 }
9031d10b 1274
e3cfe3ce 1275 if (expr != error_mark_node && !VOID_TYPE_P (TREE_TYPE (expr)))
b1a8d4ce 1276 {
dab3247a 1277 if (implicit != ICV_CAST
5e2a4133 1278 && warn_unused_value
1279 && !TREE_NO_WARNING (expr)
1280 && !processing_template_decl)
1fe46df1 1281 {
1282 /* The middle end does not warn about expressions that have
1283 been explicitly cast to void, so we must do so here. */
ebd21de4 1284 if (!TREE_SIDE_EFFECTS (expr)) {
1285 if (complain & tf_warning)
dab3247a 1286 switch (implicit)
1287 {
1288 case ICV_SECOND_OF_COND:
1289 warning (OPT_Wunused_value,
1290 "second operand of conditional expression has no effect");
1291 break;
1292 case ICV_THIRD_OF_COND:
1293 warning (OPT_Wunused_value,
1294 "third operand of conditional expression has no effect");
1295 break;
1296 case ICV_RIGHT_OF_COMMA:
1297 warning (OPT_Wunused_value,
1298 "right operand of comma operator has no effect");
1299 break;
1300 case ICV_LEFT_OF_COMMA:
1301 warning (OPT_Wunused_value,
1302 "left operand of comma operator has no effect");
1303 break;
1304 case ICV_STATEMENT:
1305 warning (OPT_Wunused_value,
1306 "statement has no effect");
1307 break;
1308 case ICV_THIRD_IN_FOR:
1309 warning (OPT_Wunused_value,
1310 "for increment expression has no effect");
1311 break;
1312 default:
1313 gcc_unreachable ();
1314 }
ebd21de4 1315 }
9031d10b 1316 else
1317 {
1fe46df1 1318 tree e;
1319 enum tree_code code;
607a5d68 1320 enum tree_code_class tclass;
9031d10b 1321
1fe46df1 1322 e = expr;
1323 /* We might like to warn about (say) "(int) f()", as the
1324 cast has no effect, but the compiler itself will
1325 generate implicit conversions under some
324d8f2d 1326 circumstances. (For example a block copy will be
1fe46df1 1327 turned into a call to "__builtin_memcpy", with a
1328 conversion of the return value to an appropriate
1329 type.) So, to avoid false positives, we strip
416ce344 1330 conversions. Do not use STRIP_NOPs because it will
1331 not strip conversions to "void", as that is not a
1332 mode-preserving conversion. */
1333 while (TREE_CODE (e) == NOP_EXPR)
1334 e = TREE_OPERAND (e, 0);
1fe46df1 1335
1336 code = TREE_CODE (e);
607a5d68 1337 tclass = TREE_CODE_CLASS (code);
1338 if ((tclass == tcc_comparison
1339 || tclass == tcc_unary
1340 || (tclass == tcc_binary
1fe46df1 1341 && !(code == MODIFY_EXPR
1342 || code == INIT_EXPR
1343 || code == PREDECREMENT_EXPR
1344 || code == PREINCREMENT_EXPR
1345 || code == POSTDECREMENT_EXPR
1346 || code == POSTINCREMENT_EXPR)))
ebd21de4 1347 && (complain & tf_warning))
ced7c954 1348 warning (OPT_Wunused_value, "value computed is not used");
1fe46df1 1349 }
1350 }
00fa9079 1351 expr = build1 (CONVERT_EXPR, void_type_node, expr);
b1a8d4ce 1352 }
de5ad4cb 1353 if (! TREE_SIDE_EFFECTS (expr))
1354 expr = void_zero_node;
b1a8d4ce 1355 return expr;
1356}
1357
d81e00a4 1358/* Create an expression whose value is that of EXPR,
1359 converted to type TYPE. The TREE_TYPE of the value
1360 is always TYPE. This function implements all reasonable
1361 conversions; callers should filter out those that are
c4a8ac95 1362 not permitted by the language being compiled.
1363
1364 Most of this routine is from build_reinterpret_cast.
1365
a17c2a3a 1366 The back end cannot call cp_convert (what was convert) because
c4a8ac95 1367 conversions to/from basetypes may involve memory references
1368 (vbases) and adding or subtracting small values (multiple
1369 inheritance), but it calls convert from the constant folding code
e0aa5007 1370 on subtrees of already built trees after it has ripped them apart.
c4a8ac95 1371
1372 Also, if we ever support range variables, we'll probably also have to
1373 do a little bit more work. */
d81e00a4 1374
1375tree
35771a9a 1376convert (tree type, tree expr)
d81e00a4 1377{
c4a8ac95 1378 tree intype;
1379
1380 if (type == error_mark_node || expr == error_mark_node)
1381 return error_mark_node;
1382
c4a8ac95 1383 intype = TREE_TYPE (expr);
1384
6686e84d 1385 if (POINTER_TYPE_P (type) && POINTER_TYPE_P (intype))
13f0eb20 1386 return fold_if_not_in_template (build_nop (type, expr));
c4a8ac95 1387
1388 return ocp_convert (type, expr, CONV_OLD_CONVERT,
1389 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
d81e00a4 1390}
1391
c4a8ac95 1392/* Like cp_convert, except permit conversions to take place which
471086d6 1393 are not normally allowed due to access restrictions
1394 (such as conversion from sub-type to private super-type). */
96624a9e 1395
471086d6 1396tree
35771a9a 1397convert_force (tree type, tree expr, int convtype)
471086d6 1398{
cd16867a 1399 tree e = expr;
1400 enum tree_code code = TREE_CODE (type);
471086d6 1401
1402 if (code == REFERENCE_TYPE)
9031d10b 1403 return (fold_if_not_in_template
5d7ed6c7 1404 (convert_to_reference (type, e, CONV_C_CAST, LOOKUP_COMPLAIN,
1405 NULL_TREE)));
471086d6 1406
1407 if (code == POINTER_TYPE)
5d7ed6c7 1408 return fold_if_not_in_template (convert_to_pointer_force (type, e));
471086d6 1409
ac9386a0 1410 /* From typeck.c convert_for_assignment */
471086d6 1411 if (((TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE && TREE_CODE (e) == ADDR_EXPR
1412 && TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE
1413 && TREE_CODE (TREE_TYPE (TREE_TYPE (e))) == METHOD_TYPE)
ac9386a0 1414 || integer_zerop (e)
1415 || TYPE_PTRMEMFUNC_P (TREE_TYPE (e)))
471086d6 1416 && TYPE_PTRMEMFUNC_P (type))
cb02169c 1417 /* compatible pointer to member functions. */
1418 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), e, 1,
85132186 1419 /*c_cast_p=*/1, tf_warning_or_error);
a74e8896 1420
c4a8ac95 1421 return ocp_convert (type, e, CONV_C_CAST|convtype, LOOKUP_NORMAL);
471086d6 1422}
1423
471086d6 1424/* Convert an aggregate EXPR to type XTYPE. If a conversion
1425 exists, return the attempted conversion. This may
1426 return ERROR_MARK_NODE if the conversion is not
1427 allowed (references private members, etc).
1428 If no conversion exists, NULL_TREE is returned.
1429
ce28ee2e 1430 FIXME: Ambiguity checking is wrong. Should choose one by the implicit
1431 object parameter, or by the second standard conversion sequence if
1432 that doesn't do it. This will probably wait for an overloading rewrite.
1433 (jason 8/9/95) */
471086d6 1434
ef9571e5 1435static tree
8999978b 1436build_type_conversion (tree xtype, tree expr)
471086d6 1437{
1438 /* C++: check to see if we can convert this aggregate type
bcf789d7 1439 into the required type. */
8999978b 1440 return build_user_type_conversion (xtype, expr, LOOKUP_NORMAL);
471086d6 1441}
1442
1e66592c 1443/* Convert the given EXPR to one of a group of types suitable for use in an
1444 expression. DESIRES is a combination of various WANT_* flags (q.v.)
35771a9a 1445 which indicates which types are suitable. If COMPLAIN is true, complain
1e66592c 1446 about ambiguity; otherwise, the caller will deal with it. */
471086d6 1447
1e66592c 1448tree
35771a9a 1449build_expr_type_conversion (int desires, tree expr, bool complain)
471086d6 1450{
1e66592c 1451 tree basetype = TREE_TYPE (expr);
6a44e72e 1452 tree conv = NULL_TREE;
bdd152ce 1453 tree winner = NULL_TREE;
471086d6 1454
9031d10b 1455 if (expr == null_node
1456 && (desires & WANT_INT)
954885ed 1457 && !(desires & WANT_NULL))
8296fdaa 1458 warning_at (input_location, OPT_Wconversion_null,
1459 "converting NULL to non-pointer type");
9031d10b 1460
ce28ee2e 1461 basetype = TREE_TYPE (expr);
471086d6 1462
3d411d73 1463 if (basetype == error_mark_node)
1464 return error_mark_node;
1465
95397ff9 1466 if (! MAYBE_CLASS_TYPE_P (basetype))
bdd152ce 1467 switch (TREE_CODE (basetype))
1468 {
1469 case INTEGER_TYPE:
954885ed 1470 if ((desires & WANT_NULL) && null_ptr_cst_p (expr))
bdd152ce 1471 return expr;
1472 /* else fall through... */
1473
1474 case BOOLEAN_TYPE:
1475 return (desires & WANT_INT) ? expr : NULL_TREE;
1476 case ENUMERAL_TYPE:
1477 return (desires & WANT_ENUM) ? expr : NULL_TREE;
1478 case REAL_TYPE:
1479 return (desires & WANT_FLOAT) ? expr : NULL_TREE;
1480 case POINTER_TYPE:
1481 return (desires & WANT_POINTER) ? expr : NULL_TREE;
9031d10b 1482
bdd152ce 1483 case FUNCTION_TYPE:
1484 case ARRAY_TYPE:
a681799d 1485 return (desires & WANT_POINTER) ? decay_conversion (expr)
653e5405 1486 : NULL_TREE;
96ec9e30 1487
64ec1ad6 1488 case COMPLEX_TYPE:
96ec9e30 1489 case VECTOR_TYPE:
64ec1ad6 1490 if ((desires & WANT_VECTOR_OR_COMPLEX) == 0)
96ec9e30 1491 return NULL_TREE;
1492 switch (TREE_CODE (TREE_TYPE (basetype)))
1493 {
1494 case INTEGER_TYPE:
1495 case BOOLEAN_TYPE:
1496 return (desires & WANT_INT) ? expr : NULL_TREE;
1497 case ENUMERAL_TYPE:
1498 return (desires & WANT_ENUM) ? expr : NULL_TREE;
1499 case REAL_TYPE:
1500 return (desires & WANT_FLOAT) ? expr : NULL_TREE;
1501 default:
1502 return NULL_TREE;
1503 }
1504
bdd152ce 1505 default:
1506 return NULL_TREE;
1507 }
1508
1509 /* The code for conversions from class type is currently only used for
1510 delete expressions. Other expressions are handled by build_new_op. */
a5f2d620 1511 if (!complete_type_or_maybe_complain (basetype, expr, complain))
f8182e08 1512 return error_mark_node;
1513 if (!TYPE_HAS_CONVERSION (basetype))
bdd152ce 1514 return NULL_TREE;
1515
9960d752 1516 for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv))
bdd152ce 1517 {
1518 int win = 0;
1519 tree candidate;
1520 tree cand = TREE_VALUE (conv);
c1ca2f12 1521 cand = OVL_CURRENT (cand);
bdd152ce 1522
1523 if (winner && winner == cand)
1524 continue;
1525
cf7aa2e5 1526 if (DECL_NONCONVERTING_P (cand))
1527 continue;
1528
ef4534a3 1529 candidate = non_reference (TREE_TYPE (TREE_TYPE (cand)));
bdd152ce 1530
1531 switch (TREE_CODE (candidate))
1532 {
1533 case BOOLEAN_TYPE:
1534 case INTEGER_TYPE:
1535 win = (desires & WANT_INT); break;
1536 case ENUMERAL_TYPE:
1537 win = (desires & WANT_ENUM); break;
1538 case REAL_TYPE:
1539 win = (desires & WANT_FLOAT); break;
1540 case POINTER_TYPE:
1541 win = (desires & WANT_POINTER); break;
1542
64ec1ad6 1543 case COMPLEX_TYPE:
96ec9e30 1544 case VECTOR_TYPE:
64ec1ad6 1545 if ((desires & WANT_VECTOR_OR_COMPLEX) == 0)
96ec9e30 1546 break;
1547 switch (TREE_CODE (TREE_TYPE (candidate)))
1548 {
1549 case BOOLEAN_TYPE:
1550 case INTEGER_TYPE:
1551 win = (desires & WANT_INT); break;
1552 case ENUMERAL_TYPE:
1553 win = (desires & WANT_ENUM); break;
1554 case REAL_TYPE:
1555 win = (desires & WANT_FLOAT); break;
1556 default:
1557 break;
1558 }
1559 break;
1560
bdd152ce 1561 default:
1562 break;
1563 }
1564
1565 if (win)
1566 {
1567 if (winner)
1568 {
1569 if (complain)
1570 {
0a25aad6 1571 error ("ambiguous default type conversion from %qT",
653e5405 1572 basetype);
0a25aad6 1573 error (" candidate conversions include %qD and %qD",
653e5405 1574 winner, cand);
bdd152ce 1575 }
1576 return error_mark_node;
1577 }
1578 else
1579 winner = cand;
1580 }
1581 }
1e66592c 1582
bdd152ce 1583 if (winner)
1584 {
ef4534a3 1585 tree type = non_reference (TREE_TYPE (TREE_TYPE (winner)));
bdd152ce 1586 return build_user_type_conversion (type, expr, LOOKUP_NORMAL);
471086d6 1587 }
1e66592c 1588
985e9ee0 1589 return NULL_TREE;
471086d6 1590}
bc3887cf 1591
96624a9e 1592/* Implements integral promotion (4.1) and float->double promotion. */
1593
bc3887cf 1594tree
35771a9a 1595type_promotes_to (tree type)
bc3887cf 1596{
2b3c93a3 1597 tree promoted_type;
1598
ce28ee2e 1599 if (type == error_mark_node)
1600 return error_mark_node;
1601
bc3887cf 1602 type = TYPE_MAIN_VARIANT (type);
bb0726a1 1603
2b3c93a3 1604 /* Check for promotions of target-defined types first. */
1605 promoted_type = targetm.promoted_type (type);
1606 if (promoted_type)
1607 return promoted_type;
1608
bb0726a1 1609 /* bool always promotes to int (not unsigned), even if it's the same
1610 size. */
9e1a8234 1611 if (TREE_CODE (type) == BOOLEAN_TYPE)
bb0726a1 1612 type = integer_type_node;
1613
1614 /* Normally convert enums to int, but convert wide enums to something
1615 wider. */
1616 else if (TREE_CODE (type) == ENUMERAL_TYPE
924bbf02 1617 || type == char16_type_node
1618 || type == char32_type_node
bb0726a1 1619 || type == wchar_type_node)
6c9497b1 1620 {
1621 int precision = MAX (TYPE_PRECISION (type),
1622 TYPE_PRECISION (integer_type_node));
771d21fa 1623 tree totype = c_common_type_for_size (precision, 0);
bb9c1a09 1624 if (TREE_CODE (type) == ENUMERAL_TYPE)
1625 type = ENUM_UNDERLYING_TYPE (type);
78a8ed03 1626 if (TYPE_UNSIGNED (type)
6c9497b1 1627 && ! int_fits_type_p (TYPE_MAX_VALUE (type), totype))
771d21fa 1628 type = c_common_type_for_size (precision, 1);
6c9497b1 1629 else
1630 type = totype;
1631 }
d7aeef06 1632 else if (c_promoting_integer_type_p (type))
bc3887cf 1633 {
d0acef9e 1634 /* Retain unsignedness if really not getting bigger. */
78a8ed03 1635 if (TYPE_UNSIGNED (type)
d0acef9e 1636 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
bc3887cf 1637 type = unsigned_type_node;
1638 else
1639 type = integer_type_node;
1640 }
1641 else if (type == float_type_node)
1642 type = double_type_node;
9031d10b 1643
a681799d 1644 return type;
bc3887cf 1645}
668ae905 1646
668ae905 1647/* The routines below this point are carefully written to conform to
1648 the standard. They use the same terminology, and follow the rules
1649 closely. Although they are used only in pt.c at the moment, they
1650 should presumably be used everywhere in the future. */
1651
1146f179 1652/* Attempt to perform qualification conversions on EXPR to convert it
1653 to TYPE. Return the resulting expression, or error_mark_node if
1654 the conversion was impossible. */
1655
9031d10b 1656tree
35771a9a 1657perform_qualification_conversions (tree type, tree expr)
668ae905 1658{
1bc16cab 1659 tree expr_type;
1660
1661 expr_type = TREE_TYPE (expr);
1662
3b087710 1663 if (same_type_p (type, expr_type))
1664 return expr;
1665 else if (TYPE_PTR_P (type) && TYPE_PTR_P (expr_type)
1666 && comp_ptr_ttypes (TREE_TYPE (type), TREE_TYPE (expr_type)))
1bc16cab 1667 return build_nop (type, expr);
1668 else if (TYPE_PTR_TO_MEMBER_P (type)
1669 && TYPE_PTR_TO_MEMBER_P (expr_type)
1670 && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
1671 TYPE_PTRMEM_CLASS_TYPE (expr_type))
1672 && comp_ptr_ttypes (TYPE_PTRMEM_POINTED_TO_TYPE (type),
1673 TYPE_PTRMEM_POINTED_TO_TYPE (expr_type)))
1674 return build_nop (type, expr);
1146f179 1675 else
1676 return error_mark_node;
668ae905 1677}