1 /* Language-level data type conversion for GNU C++.
2 Copyright (C) 1987-1988, 1992-1999 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
23 /* This file contains the functions for converting C expressions
24 to different data types. The only entry point is `convert'.
25 Every language front end must have a `convert' function
26 but what kind of conversions it does will depend on the language. */
37 static tree cp_convert_to_pointer PROTO((tree, tree));
38 static tree convert_to_pointer_force PROTO((tree, tree));
39 static tree build_up_reference PROTO((tree, tree, int));
41 /* Change of width--truncation and extension of integers or reals--
42 is represented with NOP_EXPR. Proper functioning of many things
43 assumes that no other conversions can be NOP_EXPRs.
45 Conversion between integer and pointer is represented with CONVERT_EXPR.
46 Converting integer to real uses FLOAT_EXPR
47 and real to integer uses FIX_TRUNC_EXPR.
49 Here is a list of all the functions that assume that widening and
50 narrowing is always done with a NOP_EXPR:
51 In convert.c, convert_to_integer.
52 In c-typeck.c, build_binary_op_nodefault (boolean ops),
53 and truthvalue_conversion.
54 In expr.c: expand_expr, for operands of a MULT_EXPR.
55 In fold-const.c: fold.
56 In tree.c: get_narrower and get_unwidened.
58 C++: in multiple-inheritance, converting between pointers may involve
59 adjusting them by a delta stored within the class definition. */
61 /* Subroutines of `convert'. */
63 /* if converting pointer to pointer
64 if dealing with classes, check for derived->base or vice versa
65 else if dealing with method pointers, delegate
67 else if converting class, pass off to build_type_conversion
68 else try C-style pointer conversion */
71 cp_convert_to_pointer (type, expr)
74 register tree intype = TREE_TYPE (expr);
75 register enum tree_code form;
78 if (IS_AGGR_TYPE (intype))
80 intype = complete_type (intype);
81 if (TYPE_SIZE (intype) == NULL_TREE)
83 cp_error ("can't convert from incomplete type `%T' to `%T'",
85 return error_mark_node;
88 rval = build_type_conversion (type, expr, 1);
91 if (rval == error_mark_node)
92 cp_error ("conversion of `%E' from `%T' to `%T' is ambiguous",
98 /* Handle anachronistic conversions from (::*)() to cv void* or (*)(). */
99 if (TREE_CODE (type) == POINTER_TYPE
100 && (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE
101 || TYPE_MAIN_VARIANT (TREE_TYPE (type)) == void_type_node))
103 /* Allow an implicit this pointer for pointer to member
105 if (TYPE_PTRMEMFUNC_P (intype))
107 tree fntype = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (intype));
108 tree decl = maybe_dummy_object (TYPE_METHOD_BASETYPE (fntype), 0);
109 expr = build (OFFSET_REF, fntype, decl, expr);
112 if (TREE_CODE (expr) == OFFSET_REF
113 && TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
114 expr = resolve_offset_ref (expr);
115 if (TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE)
116 expr = build_addr_func (expr);
117 if (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE)
119 if (TREE_CODE (TREE_TYPE (TREE_TYPE (expr))) == METHOD_TYPE)
120 if (pedantic || warn_pmf2ptr)
121 cp_pedwarn ("converting from `%T' to `%T'", TREE_TYPE (expr),
123 return build1 (NOP_EXPR, type, expr);
125 intype = TREE_TYPE (expr);
128 form = TREE_CODE (intype);
130 if (POINTER_TYPE_P (intype))
132 intype = TYPE_MAIN_VARIANT (intype);
134 if (TYPE_MAIN_VARIANT (type) != intype
135 && TREE_CODE (type) == POINTER_TYPE
136 && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE
137 && IS_AGGR_TYPE (TREE_TYPE (type))
138 && IS_AGGR_TYPE (TREE_TYPE (intype))
139 && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE
140 /* If EXPR is NULL, then we don't need to do any arithmetic
145 The null pointer value is converted to the null pointer
146 value of the destination type. */
147 && !integer_zerop (expr))
149 enum tree_code code = PLUS_EXPR;
150 tree binfo = get_binfo (TREE_TYPE (type), TREE_TYPE (intype), 1);
151 if (binfo == error_mark_node)
152 return error_mark_node;
153 if (binfo == NULL_TREE)
155 binfo = get_binfo (TREE_TYPE (intype), TREE_TYPE (type), 1);
156 if (binfo == error_mark_node)
157 return error_mark_node;
162 if (TYPE_USES_VIRTUAL_BASECLASSES (TREE_TYPE (type))
163 || TYPE_USES_VIRTUAL_BASECLASSES (TREE_TYPE (intype))
164 || ! BINFO_OFFSET_ZEROP (binfo))
166 /* Need to get the path we took. */
169 if (code == PLUS_EXPR)
170 get_base_distance (TREE_TYPE (type), TREE_TYPE (intype),
173 get_base_distance (TREE_TYPE (intype), TREE_TYPE (type),
175 return build_vbase_path (code, type, expr, path, 0);
180 if (TYPE_PTRMEM_P (type) && TYPE_PTRMEM_P (intype))
187 b1 = TYPE_OFFSET_BASETYPE (TREE_TYPE (type));
188 b2 = TYPE_OFFSET_BASETYPE (TREE_TYPE (intype));
189 binfo = get_binfo (b2, b1, 1);
191 if (binfo == NULL_TREE)
193 binfo = get_binfo (b1, b2, 1);
199 if (binfo == error_mark_node)
200 return error_mark_node;
202 if (binfo_from_vbase (binfo))
204 cp_error ("conversion to `%T' from pointer to member of virtual base `%T'",
206 return error_mark_node;
209 if (TREE_CODE (expr) == PTRMEM_CST)
210 expr = cplus_expand_constant (expr);
212 if (binfo && ! TREE_VIA_VIRTUAL (binfo))
213 expr = size_binop (code, expr, BINFO_OFFSET (binfo));
215 else if (TYPE_PTRMEMFUNC_P (type))
217 cp_error ("cannot convert `%E' from type `%T' to type `%T'",
219 return error_mark_node;
222 rval = build1 (NOP_EXPR, type, expr);
223 TREE_CONSTANT (rval) = TREE_CONSTANT (expr);
226 else if (TYPE_PTRMEMFUNC_P (type) && TYPE_PTRMEMFUNC_P (intype))
227 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0);
228 else if (TYPE_PTRMEMFUNC_P (intype))
230 cp_error ("cannot convert `%E' from type `%T' to type `%T'",
232 return error_mark_node;
235 my_friendly_assert (form != OFFSET_TYPE, 186);
237 if (integer_zerop (expr))
239 if (TYPE_PTRMEMFUNC_P (type))
240 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0);
241 expr = build_int_2 (0, 0);
242 TREE_TYPE (expr) = type;
246 if (INTEGRAL_CODE_P (form))
248 if (TYPE_PRECISION (intype) == POINTER_SIZE)
249 return build1 (CONVERT_EXPR, type, expr);
250 expr = cp_convert (type_for_size (POINTER_SIZE, 0), expr);
251 /* Modes may be different but sizes should be the same. */
252 if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (expr)))
253 != GET_MODE_SIZE (TYPE_MODE (type)))
254 /* There is supposed to be some integral type
255 that is the same width as a pointer. */
257 return convert_to_pointer (type, expr);
260 if (type_unknown_p (expr))
261 return instantiate_type (type, expr, 1);
263 cp_error ("cannot convert `%E' from type `%T' to type `%T'",
265 return error_mark_node;
268 /* Like convert, except permit conversions to take place which
269 are not normally allowed due to access restrictions
270 (such as conversion from sub-type to private super-type). */
273 convert_to_pointer_force (type, expr)
276 register tree intype = TREE_TYPE (expr);
277 register enum tree_code form = TREE_CODE (intype);
279 if (integer_zerop (expr))
281 expr = build_int_2 (0, 0);
282 TREE_TYPE (expr) = type;
286 if (form == POINTER_TYPE)
288 intype = TYPE_MAIN_VARIANT (intype);
290 if (TYPE_MAIN_VARIANT (type) != intype
291 && TREE_CODE (TREE_TYPE (type)) == RECORD_TYPE
292 && IS_AGGR_TYPE (TREE_TYPE (type))
293 && IS_AGGR_TYPE (TREE_TYPE (intype))
294 && TREE_CODE (TREE_TYPE (intype)) == RECORD_TYPE)
296 enum tree_code code = PLUS_EXPR;
298 int distance = get_base_distance (TREE_TYPE (type),
299 TREE_TYPE (intype), 0, &path);
303 cp_error ("type `%T' is ambiguous baseclass of `%s'",
305 TYPE_NAME_STRING (TREE_TYPE (intype)));
306 return error_mark_node;
310 distance = get_base_distance (TREE_TYPE (intype),
311 TREE_TYPE (type), 0, &path);
315 /* Doesn't need any special help from us. */
316 return build1 (NOP_EXPR, type, expr);
320 return build_vbase_path (code, type, expr, path, 0);
324 return cp_convert_to_pointer (type, expr);
327 /* We are passing something to a function which requires a reference.
328 The type we are interested in is in TYPE. The initial
329 value we have to begin with is in ARG.
331 FLAGS controls how we manage access checking.
332 DIRECT_BIND in FLAGS controls how any temporaries are generated. */
335 build_up_reference (type, arg, flags)
340 tree argtype = TREE_TYPE (arg);
341 tree target_type = TREE_TYPE (type);
342 tree stmt_expr = NULL_TREE;
344 my_friendly_assert (TREE_CODE (type) == REFERENCE_TYPE, 187);
346 if ((flags & DIRECT_BIND) && ! real_lvalue_p (arg))
348 /* Create a new temporary variable. */
350 if (toplevel_bindings_p ())
351 arg = get_temp_name (argtype, 1);
354 arg = pushdecl (build_decl (VAR_DECL, NULL_TREE, argtype));
355 DECL_ARTIFICIAL (arg) = 1;
358 /* Process the initializer for the declaration. */
359 DECL_INITIAL (arg) = targ;
360 cp_finish_decl (arg, targ, NULL_TREE, 0,
361 LOOKUP_ONLYCONVERTING|DIRECT_BIND);
363 else if (!(flags & DIRECT_BIND) && ! lvalue_p (arg))
365 tree slot = build_decl (VAR_DECL, NULL_TREE, argtype);
366 DECL_ARTIFICIAL (slot) = 1;
367 arg = build (TARGET_EXPR, argtype, slot, arg, NULL_TREE, NULL_TREE);
368 TREE_SIDE_EFFECTS (arg) = 1;
371 /* If we had a way to wrap this up, and say, if we ever needed it's
372 address, transform all occurrences of the register, into a memory
373 reference we could win better. */
374 rval = build_unary_op (ADDR_EXPR, arg, 1);
375 if (rval == error_mark_node)
376 return error_mark_node;
378 if ((flags & LOOKUP_PROTECT)
379 && TYPE_MAIN_VARIANT (argtype) != TYPE_MAIN_VARIANT (target_type)
380 && IS_AGGR_TYPE (argtype)
381 && IS_AGGR_TYPE (target_type))
383 /* We go through get_binfo for the access control. */
384 tree binfo = get_binfo (target_type, argtype, 1);
385 if (binfo == error_mark_node)
386 return error_mark_node;
387 if (binfo == NULL_TREE)
388 return error_not_base_type (target_type, argtype);
389 rval = convert_pointer_to_real (binfo, rval);
393 = convert_to_pointer_force (build_pointer_type (target_type), rval);
394 rval = build1 (NOP_EXPR, type, rval);
395 TREE_CONSTANT (rval) = TREE_CONSTANT (TREE_OPERAND (rval, 0));
397 /* If we created and initialized a new temporary variable, add the
398 representation of that initialization to the RVAL. */
400 rval = build (COMPOUND_EXPR, TREE_TYPE (rval), stmt_expr, rval);
402 /* And return the result. */
406 /* For C++: Only need to do one-level references, but cannot
407 get tripped up on signed/unsigned differences.
409 DECL is either NULL_TREE or the _DECL node for a reference that is being
410 initialized. It can be error_mark_node if we don't know the _DECL but
411 we know it's an initialization. */
414 convert_to_reference (reftype, expr, convtype, flags, decl)
419 register tree type = TYPE_MAIN_VARIANT (TREE_TYPE (reftype));
420 register tree intype = TREE_TYPE (expr);
421 tree rval = NULL_TREE;
422 tree rval_as_conversion = NULL_TREE;
425 if (TREE_CODE (type) == FUNCTION_TYPE && intype == unknown_type_node)
427 expr = instantiate_type (type, expr,
428 (flags & LOOKUP_COMPLAIN) != 0);
429 if (expr == error_mark_node)
430 return error_mark_node;
432 intype = TREE_TYPE (expr);
435 if (TREE_CODE (intype) == REFERENCE_TYPE)
436 my_friendly_abort (364);
438 intype = TYPE_MAIN_VARIANT (intype);
440 i = comp_target_types (type, intype, 0);
442 if (i <= 0 && (convtype & CONV_IMPLICIT) && IS_AGGR_TYPE (intype)
443 && ! (flags & LOOKUP_NO_CONVERSION))
445 /* Look for a user-defined conversion to lvalue that we can use. */
448 = build_type_conversion (reftype, expr, 1);
450 if (rval_as_conversion && rval_as_conversion != error_mark_node
451 && real_lvalue_p (rval_as_conversion))
453 expr = rval_as_conversion;
454 rval_as_conversion = NULL_TREE;
460 if (((convtype & CONV_STATIC) && i == -1)
461 || ((convtype & CONV_IMPLICIT) && i == 1))
463 if (flags & LOOKUP_COMPLAIN)
465 tree ttl = TREE_TYPE (reftype);
466 tree ttr = lvalue_type (expr);
468 /* [dcl.init.ref] says that if an rvalue is used to
469 initialize a reference, then the reference must be to a
470 non-volatile const type. */
471 if (! real_lvalue_p (expr)
472 && !CP_TYPE_CONST_NON_VOLATILE_P (ttl))
476 if (CP_TYPE_VOLATILE_P (ttl) && decl)
477 msg = "initialization of volatile reference type `%#T'";
478 else if (CP_TYPE_VOLATILE_P (ttl))
479 msg = "conversion to volatile reference type `%#T'";
481 msg = "initialization of non-const reference type `%#T'";
483 msg = "conversion to non-const reference type `%#T'";
485 cp_pedwarn (msg, reftype);
486 cp_pedwarn ("from rvalue of type `%T'", intype);
488 else if (! (convtype & CONV_CONST)
489 && !at_least_as_qualified_p (ttl, ttr))
490 cp_pedwarn ("conversion from `%T' to `%T' discards qualifiers",
494 return build_up_reference (reftype, expr, flags);
496 else if ((convtype & CONV_REINTERPRET) && lvalue_p (expr))
498 /* When casting an lvalue to a reference type, just convert into
499 a pointer to the new type and deference it. This is allowed
500 by San Diego WP section 5.2.9 paragraph 12, though perhaps it
501 should be done directly (jason). (int &)ri ---> *(int*)&ri */
503 /* B* bp; A& ar = (A&)bp; is valid, but it's probably not what they
505 if (TREE_CODE (intype) == POINTER_TYPE
506 && (comptypes (TREE_TYPE (intype), type,
507 COMPARE_BASE | COMPARE_RELAXED )))
508 cp_warning ("casting `%T' to `%T' does not dereference pointer",
511 rval = build_unary_op (ADDR_EXPR, expr, 0);
512 if (rval != error_mark_node)
513 rval = convert_force (build_pointer_type (TREE_TYPE (reftype)),
515 if (rval != error_mark_node)
516 rval = build1 (NOP_EXPR, reftype, rval);
520 rval = convert_for_initialization (NULL_TREE, type, expr, flags,
522 if (rval == NULL_TREE || rval == error_mark_node)
524 rval = build_up_reference (reftype, rval, flags);
526 if (rval && ! CP_TYPE_CONST_P (TREE_TYPE (reftype)))
527 cp_pedwarn ("initializing non-const `%T' with `%T' will use a temporary",
533 /* If we found a way to convert earlier, then use it. */
537 my_friendly_assert (TREE_CODE (intype) != OFFSET_TYPE, 189);
539 if (flags & LOOKUP_COMPLAIN)
540 cp_error ("cannot convert type `%T' to type `%T'", intype, reftype);
542 if (flags & LOOKUP_SPECULATIVELY)
545 return error_mark_node;
548 /* We are using a reference VAL for its value. Bash that reference all the
549 way down to its lowest form. */
552 convert_from_reference (val)
555 tree type = TREE_TYPE (val);
557 if (TREE_CODE (type) == OFFSET_TYPE)
558 type = TREE_TYPE (type);
559 if (TREE_CODE (type) == REFERENCE_TYPE)
560 return build_indirect_ref (val, NULL_PTR);
564 /* Call this when we know (for any reason) that expr is not, in fact,
565 zero. This routine is like convert_pointer_to, but it pays
566 attention to which specific instance of what type we want to
567 convert to. This routine should eventually become
568 convert_to_pointer after all references to convert_to_pointer
572 convert_pointer_to_real (binfo, expr)
575 register tree intype = TREE_TYPE (expr);
579 if (intype == error_mark_node)
580 return error_mark_node;
582 if (TREE_CODE (binfo) == TREE_VEC)
583 type = BINFO_TYPE (binfo);
584 else if (IS_AGGR_TYPE (binfo))
594 ptr_type = cp_build_qualified_type (type,
595 CP_TYPE_QUALS (TREE_TYPE (intype)));
596 ptr_type = build_pointer_type (ptr_type);
597 if (same_type_p (ptr_type, TYPE_MAIN_VARIANT (intype)))
600 my_friendly_assert (!integer_zerop (expr), 191);
602 intype = TYPE_MAIN_VARIANT (TREE_TYPE (intype));
603 if (TREE_CODE (type) == RECORD_TYPE
604 && TREE_CODE (intype) == RECORD_TYPE
609 = get_base_distance (binfo, intype, 0, &path);
611 /* This function shouldn't be called with unqualified arguments
612 but if it is, give them an error message that they can read. */
615 cp_error ("cannot convert a pointer of type `%T' to a pointer of type `%T'",
619 cp_error ("because `%T' is an ambiguous base class", type);
620 return error_mark_node;
623 return build_vbase_path (PLUS_EXPR, ptr_type, expr, path, 1);
625 rval = build1 (NOP_EXPR, ptr_type,
626 TREE_CODE (expr) == NOP_EXPR ? TREE_OPERAND (expr, 0) : expr);
627 TREE_CONSTANT (rval) = TREE_CONSTANT (expr);
631 /* Call this when we know (for any reason) that expr is
632 not, in fact, zero. This routine gets a type out of the first
633 argument and uses it to search for the type to convert to. If there
634 is more than one instance of that type in the expr, the conversion is
635 ambiguous. This routine should eventually go away, and all
636 callers should use convert_to_pointer_real. */
639 convert_pointer_to (binfo, expr)
644 if (TREE_CODE (binfo) == TREE_VEC)
645 type = BINFO_TYPE (binfo);
646 else if (IS_AGGR_TYPE (binfo))
650 return convert_pointer_to_real (type, expr);
653 /* C++ conversions, preference to static cast conversions. */
656 cp_convert (type, expr)
659 return ocp_convert (type, expr, CONV_OLD_CONVERT, LOOKUP_NORMAL);
664 FLAGS indicates how we should behave. */
667 ocp_convert (type, expr, convtype, flags)
671 register tree e = expr;
672 register enum tree_code code = TREE_CODE (type);
674 if (e == error_mark_node
675 || TREE_TYPE (e) == error_mark_node)
676 return error_mark_node;
678 if (TREE_READONLY_DECL_P (e))
679 e = decl_constant_value (e);
681 if (IS_AGGR_TYPE (type) && (convtype & CONV_FORCE_TEMP)
682 /* Some internal structures (vtable_entry_type, sigtbl_ptr_type)
683 don't go through finish_struct, so they don't have the synthesized
684 constructors. So don't force a temporary. */
685 && TYPE_HAS_CONSTRUCTOR (type))
686 /* We need a new temporary; don't take this shortcut. */;
687 else if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (e)))
689 if (same_type_p (type, TREE_TYPE (e)))
690 /* The call to fold will not always remove the NOP_EXPR as
691 might be expected, since if one of the types is a typedef;
692 the comparsion in fold is just equality of pointers, not a
693 call to comptypes. We don't call fold in this case because
694 that can result in infinite recursion; fold will call
695 convert, which will call ocp_convert, etc. */
698 return fold (build1 (NOP_EXPR, type, e));
701 if (code == VOID_TYPE && (convtype & CONV_STATIC))
703 e = convert_to_void (e, /*implicit=*/NULL);
707 /* Just convert to the type of the member. */
708 if (code == OFFSET_TYPE)
710 type = TREE_TYPE (type);
711 code = TREE_CODE (type);
714 if (TREE_CODE (e) == OFFSET_REF)
715 e = resolve_offset_ref (e);
717 if (INTEGRAL_CODE_P (code))
719 tree intype = TREE_TYPE (e);
720 /* enum = enum, enum = int, enum = float, (enum)pointer are all
722 if (TREE_CODE (type) == ENUMERAL_TYPE
723 && ((ARITHMETIC_TYPE_P (intype) && ! (convtype & CONV_STATIC))
724 || (TREE_CODE (intype) == POINTER_TYPE)))
726 cp_pedwarn ("conversion from `%#T' to `%#T'", intype, type);
728 if (flag_pedantic_errors)
729 return error_mark_node;
731 if (IS_AGGR_TYPE (intype))
734 rval = build_type_conversion (type, e, 1);
737 if (flags & LOOKUP_COMPLAIN)
738 cp_error ("`%#T' used where a `%T' was expected", intype, type);
739 if (flags & LOOKUP_SPECULATIVELY)
741 return error_mark_node;
743 if (code == BOOLEAN_TYPE)
745 /* Common Ada/Pascal programmer's mistake. We always warn
746 about this since it is so bad. */
747 if (TREE_CODE (expr) == FUNCTION_DECL)
748 cp_warning ("the address of `%D', will always be `true'", expr);
749 return truthvalue_conversion (e);
751 return fold (convert_to_integer (type, e));
753 if (code == POINTER_TYPE || code == REFERENCE_TYPE
754 || TYPE_PTRMEMFUNC_P (type))
755 return fold (cp_convert_to_pointer (type, e));
756 if (code == REAL_TYPE || code == COMPLEX_TYPE)
758 if (IS_AGGR_TYPE (TREE_TYPE (e)))
761 rval = build_type_conversion (type, e, 1);
765 if (flags & LOOKUP_COMPLAIN)
766 cp_error ("`%#T' used where a floating point value was expected",
769 if (code == REAL_TYPE)
770 return fold (convert_to_real (type, e));
771 else if (code == COMPLEX_TYPE)
772 return fold (convert_to_complex (type, e));
775 /* New C++ semantics: since assignment is now based on
776 memberwise copying, if the rhs type is derived from the
777 lhs type, then we may still do a conversion. */
778 if (IS_AGGR_TYPE_CODE (code))
780 tree dtype = TREE_TYPE (e);
781 tree ctor = NULL_TREE;
783 dtype = TYPE_MAIN_VARIANT (dtype);
785 /* Conversion between aggregate types. New C++ semantics allow
786 objects of derived type to be cast to objects of base type.
787 Old semantics only allowed this between pointers.
789 There may be some ambiguity between using a constructor
790 vs. using a type conversion operator when both apply. */
794 if (abstract_virtuals_error (NULL_TREE, type))
795 return error_mark_node;
797 if ((flags & LOOKUP_ONLYCONVERTING)
798 && ! (IS_AGGR_TYPE (dtype) && DERIVED_FROM_P (type, dtype)))
799 /* For copy-initialization, first we create a temp of the proper type
800 with a user-defined conversion sequence, then we direct-initialize
801 the target with the temp (see [dcl.init]). */
802 ctor = build_user_type_conversion (type, ctor, flags);
804 ctor = build_method_call (NULL_TREE, ctor_identifier,
805 build_expr_list (NULL_TREE, ctor),
806 TYPE_BINFO (type), flags);
808 return build_cplus_new (type, ctor);
811 /* If TYPE or TREE_TYPE (E) is not on the permanent_obstack,
812 then it won't be hashed and hence compare as not equal,
814 if (code == ARRAY_TYPE
815 && TREE_TYPE (TREE_TYPE (e)) == TREE_TYPE (type)
816 && index_type_equal (TYPE_DOMAIN (TREE_TYPE (e)), TYPE_DOMAIN (type)))
819 if (flags & LOOKUP_COMPLAIN)
820 cp_error ("conversion from `%T' to non-scalar type `%T' requested",
821 TREE_TYPE (expr), type);
822 if (flags & LOOKUP_SPECULATIVELY)
824 return error_mark_node;
827 /* When an expression is used in a void context, its value is discarded and
828 no lvalue-rvalue and similar conversions happen [expr.static.cast/4,
829 stmt.expr/1, expr.comma/1]. This permits dereferencing an incomplete type
830 in a void context. The C++ standard does not define what an `access' to an
831 object is, but there is reason to beleive that it is the lvalue to rvalue
832 conversion -- if it were not, `*&*p = 1' would violate [expr]/4 in that it
833 accesses `*p' not to calculate the value to be stored. But, dcl.type.cv/8
834 indicates that volatile semantics should be the same between C and C++
835 where ever possible. C leaves it implementation defined as to what
836 constitutes an access to a volatile. So, we interpret `*vp' as a read of
837 the volatile object `vp' points to, unless that is an incomplete type. For
838 volatile references we do not do this interpretation, because that would
839 make it impossible to ignore the reference return value from functions. We
840 issue warnings in the confusing cases.
842 IMPLICIT is tells us the context of an implicit void conversion. */
845 convert_to_void (expr, implicit)
847 const char *implicit;
849 if (expr == error_mark_node)
851 if (!TREE_TYPE (expr))
853 if (same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (expr)), void_type_node))
855 switch (TREE_CODE (expr))
859 /* The two parts of a cond expr might be separate lvalues. */
860 tree op1 = TREE_OPERAND (expr,1);
861 tree op2 = TREE_OPERAND (expr,2);
862 tree new_op1 = convert_to_void (op1, implicit);
863 tree new_op2 = convert_to_void (op2, implicit);
865 if (new_op1 != op1 || new_op2 != op2)
866 expr = build (COND_EXPR,
867 implicit ? TREE_TYPE (expr) : void_type_node,
868 TREE_OPERAND (expr, 0), new_op1, new_op2);
874 /* The second part of a compound expr contains the value. */
875 tree op1 = TREE_OPERAND (expr,1);
876 tree new_op1 = convert_to_void (op1, implicit);
879 expr = build (COMPOUND_EXPR, TREE_TYPE (new_op1),
880 TREE_OPERAND (expr, 0), new_op1);
884 case NON_LVALUE_EXPR:
886 /* These have already decayed to rvalue. */
889 case CALL_EXPR: /* we have a special meaning for volatile void fn() */
894 tree type = TREE_TYPE (expr);
895 int is_reference = TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
897 int is_volatile = TYPE_VOLATILE (type);
898 int is_complete = TYPE_SIZE (complete_type (type)) != NULL_TREE;
900 if (is_volatile && !is_complete)
901 cp_warning ("object of incomplete type `%T' will not be accessed in %s",
902 type, implicit ? implicit : "void context");
903 else if (is_reference && is_volatile)
904 cp_warning ("object of type `%T' will not be accessed in %s",
905 TREE_TYPE (TREE_OPERAND (expr, 0)),
906 implicit ? implicit : "void context");
907 if (is_reference || !is_volatile || !is_complete)
908 expr = TREE_OPERAND (expr, 0);
915 /* External variables might be incomplete. */
916 tree type = TREE_TYPE (expr);
917 int is_complete = TYPE_SIZE (complete_type (type)) != NULL_TREE;
919 if (TYPE_VOLATILE (type) && !is_complete)
920 cp_warning ("object `%E' of incomplete type `%T' will not be accessed in %s",
921 expr, type, implicit ? implicit : "void context");
930 if (TREE_CODE (probe) == ADDR_EXPR)
931 probe = TREE_OPERAND (expr, 0);
932 if (!is_overloaded_fn (probe))
934 else if (really_overloaded_fn (probe))
936 /* [over.over] enumerates the places where we can take the address
937 of an overloaded function, and this is not one of them. */
938 cp_pedwarn ("%s has no context for overloaded function name `%E'",
939 implicit ? implicit : "void cast", expr);
941 else if (implicit && probe == expr)
942 /* Only warn when there is no &. */
943 cp_warning ("%s is a reference, not call, to function `%E'",
947 if (expr != error_mark_node
948 && !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (expr)), void_type_node))
950 /* FIXME: This is where we should check for expressions with no
951 effects. At the moment we do that in both build_x_component_expr
952 and expand_expr_stmt -- inconsistently too. For the moment
953 leave implicit void conversions unadorned so that expand_expr_stmt
954 has a chance of detecting some of the cases. */
956 expr = build1 (CONVERT_EXPR, void_type_node, expr);
961 /* Create an expression whose value is that of EXPR,
962 converted to type TYPE. The TREE_TYPE of the value
963 is always TYPE. This function implements all reasonable
964 conversions; callers should filter out those that are
965 not permitted by the language being compiled.
967 Most of this routine is from build_reinterpret_cast.
969 The backend cannot call cp_convert (what was convert) because
970 conversions to/from basetypes may involve memory references
971 (vbases) and adding or subtracting small values (multiple
972 inheritance), but it calls convert from the constant folding code
973 on subtrees of already build trees after it has ripped them apart.
975 Also, if we ever support range variables, we'll probably also have to
976 do a little bit more work. */
984 if (type == error_mark_node || expr == error_mark_node)
985 return error_mark_node;
987 intype = TREE_TYPE (expr);
989 if (POINTER_TYPE_P (type) && POINTER_TYPE_P (intype))
991 if (TREE_READONLY_DECL_P (expr))
992 expr = decl_constant_value (expr);
993 return fold (build1 (NOP_EXPR, type, expr));
996 return ocp_convert (type, expr, CONV_OLD_CONVERT,
997 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
1000 /* Like cp_convert, except permit conversions to take place which
1001 are not normally allowed due to access restrictions
1002 (such as conversion from sub-type to private super-type). */
1005 convert_force (type, expr, convtype)
1010 register tree e = expr;
1011 register enum tree_code code = TREE_CODE (type);
1013 if (code == REFERENCE_TYPE)
1014 return fold (convert_to_reference (type, e, CONV_C_CAST, LOOKUP_COMPLAIN,
1016 else if (TREE_CODE (TREE_TYPE (e)) == REFERENCE_TYPE)
1017 e = convert_from_reference (e);
1019 if (code == POINTER_TYPE)
1020 return fold (convert_to_pointer_force (type, e));
1022 /* From typeck.c convert_for_assignment */
1023 if (((TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE && TREE_CODE (e) == ADDR_EXPR
1024 && TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE
1025 && TREE_CODE (TREE_TYPE (TREE_TYPE (e))) == METHOD_TYPE)
1026 || integer_zerop (e)
1027 || TYPE_PTRMEMFUNC_P (TREE_TYPE (e)))
1028 && TYPE_PTRMEMFUNC_P (type))
1030 /* compatible pointer to member functions. */
1031 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), e, 1);
1034 return ocp_convert (type, e, CONV_C_CAST|convtype, LOOKUP_NORMAL);
1037 /* Convert an aggregate EXPR to type XTYPE. If a conversion
1038 exists, return the attempted conversion. This may
1039 return ERROR_MARK_NODE if the conversion is not
1040 allowed (references private members, etc).
1041 If no conversion exists, NULL_TREE is returned.
1043 If (FOR_SURE & 1) is non-zero, then we allow this type conversion
1044 to take place immediately. Otherwise, we build a SAVE_EXPR
1045 which can be evaluated if the results are ever needed.
1047 Changes to this functions should be mirrored in user_harshness.
1049 FIXME: Ambiguity checking is wrong. Should choose one by the implicit
1050 object parameter, or by the second standard conversion sequence if
1051 that doesn't do it. This will probably wait for an overloading rewrite.
1055 build_type_conversion (xtype, expr, for_sure)
1059 /* C++: check to see if we can convert this aggregate type
1060 into the required type. */
1061 return build_user_type_conversion
1062 (xtype, expr, for_sure ? LOOKUP_NORMAL : 0);
1065 /* Convert the given EXPR to one of a group of types suitable for use in an
1066 expression. DESIRES is a combination of various WANT_* flags (q.v.)
1067 which indicates which types are suitable. If COMPLAIN is 1, complain
1068 about ambiguity; otherwise, the caller will deal with it. */
1071 build_expr_type_conversion (desires, expr, complain)
1076 tree basetype = TREE_TYPE (expr);
1077 tree conv = NULL_TREE;
1078 tree winner = NULL_TREE;
1080 if (expr == null_node
1081 && (desires & WANT_INT)
1082 && !(desires & WANT_NULL))
1083 cp_warning ("converting NULL to non-pointer type");
1085 if (TREE_CODE (expr) == OFFSET_REF)
1086 expr = resolve_offset_ref (expr);
1087 expr = convert_from_reference (expr);
1088 basetype = TREE_TYPE (expr);
1090 if (! IS_AGGR_TYPE (basetype))
1091 switch (TREE_CODE (basetype))
1094 if ((desires & WANT_NULL) && null_ptr_cst_p (expr))
1096 /* else fall through... */
1099 return (desires & WANT_INT) ? expr : NULL_TREE;
1101 return (desires & WANT_ENUM) ? expr : NULL_TREE;
1103 return (desires & WANT_FLOAT) ? expr : NULL_TREE;
1105 return (desires & WANT_POINTER) ? expr : NULL_TREE;
1109 return (desires & WANT_POINTER) ? default_conversion (expr)
1115 /* The code for conversions from class type is currently only used for
1116 delete expressions. Other expressions are handled by build_new_op. */
1118 if (! TYPE_HAS_CONVERSION (basetype))
1121 for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv))
1125 tree cand = TREE_VALUE (conv);
1127 if (winner && winner == cand)
1130 candidate = TREE_TYPE (TREE_TYPE (cand));
1131 if (TREE_CODE (candidate) == REFERENCE_TYPE)
1132 candidate = TREE_TYPE (candidate);
1134 switch (TREE_CODE (candidate))
1138 win = (desires & WANT_INT); break;
1140 win = (desires & WANT_ENUM); break;
1142 win = (desires & WANT_FLOAT); break;
1144 win = (desires & WANT_POINTER); break;
1156 cp_error ("ambiguous default type conversion from `%T'",
1158 cp_error (" candidate conversions include `%D' and `%D'",
1161 return error_mark_node;
1170 tree type = TREE_TYPE (TREE_TYPE (winner));
1171 if (TREE_CODE (type) == REFERENCE_TYPE)
1172 type = TREE_TYPE (type);
1173 return build_user_type_conversion (type, expr, LOOKUP_NORMAL);
1179 /* Implements integral promotion (4.1) and float->double promotion. */
1182 type_promotes_to (type)
1187 if (type == error_mark_node)
1188 return error_mark_node;
1190 type_quals = CP_TYPE_QUALS (type);
1191 type = TYPE_MAIN_VARIANT (type);
1193 /* bool always promotes to int (not unsigned), even if it's the same
1195 if (type == boolean_type_node)
1196 type = integer_type_node;
1198 /* Normally convert enums to int, but convert wide enums to something
1200 else if (TREE_CODE (type) == ENUMERAL_TYPE
1201 || type == wchar_type_node)
1203 int precision = MAX (TYPE_PRECISION (type),
1204 TYPE_PRECISION (integer_type_node));
1205 tree totype = type_for_size (precision, 0);
1206 if (TREE_UNSIGNED (type)
1207 && ! int_fits_type_p (TYPE_MAX_VALUE (type), totype))
1208 type = type_for_size (precision, 1);
1212 else if (C_PROMOTING_INTEGER_TYPE_P (type))
1214 /* Retain unsignedness if really not getting bigger. */
1215 if (TREE_UNSIGNED (type)
1216 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1217 type = unsigned_type_node;
1219 type = integer_type_node;
1221 else if (type == float_type_node)
1222 type = double_type_node;
1224 return cp_build_qualified_type (type, type_quals);
1227 /* The routines below this point are carefully written to conform to
1228 the standard. They use the same terminology, and follow the rules
1229 closely. Although they are used only in pt.c at the moment, they
1230 should presumably be used everywhere in the future. */
1232 /* Attempt to perform qualification conversions on EXPR to convert it
1233 to TYPE. Return the resulting expression, or error_mark_node if
1234 the conversion was impossible. */
1237 perform_qualification_conversions (type, expr)
1241 if (TREE_CODE (type) == POINTER_TYPE
1242 && TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE
1243 && comp_ptr_ttypes (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (expr))))
1244 return build1 (NOP_EXPR, type, expr);
1246 return error_mark_node;