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,
361 LOOKUP_ONLYCONVERTING|DIRECT_BIND);
363 else if (!(flags & DIRECT_BIND) && ! lvalue_p (arg))
364 return get_target_expr (arg);
366 /* If we had a way to wrap this up, and say, if we ever needed it's
367 address, transform all occurrences of the register, into a memory
368 reference we could win better. */
369 rval = build_unary_op (ADDR_EXPR, arg, 1);
370 if (rval == error_mark_node)
371 return error_mark_node;
373 if ((flags & LOOKUP_PROTECT)
374 && TYPE_MAIN_VARIANT (argtype) != TYPE_MAIN_VARIANT (target_type)
375 && IS_AGGR_TYPE (argtype)
376 && IS_AGGR_TYPE (target_type))
378 /* We go through get_binfo for the access control. */
379 tree binfo = get_binfo (target_type, argtype, 1);
380 if (binfo == error_mark_node)
381 return error_mark_node;
382 if (binfo == NULL_TREE)
383 return error_not_base_type (target_type, argtype);
384 rval = convert_pointer_to_real (binfo, rval);
388 = convert_to_pointer_force (build_pointer_type (target_type), rval);
389 rval = build1 (NOP_EXPR, type, rval);
390 TREE_CONSTANT (rval) = TREE_CONSTANT (TREE_OPERAND (rval, 0));
392 /* If we created and initialized a new temporary variable, add the
393 representation of that initialization to the RVAL. */
395 rval = build (COMPOUND_EXPR, TREE_TYPE (rval), stmt_expr, rval);
397 /* And return the result. */
401 /* For C++: Only need to do one-level references, but cannot
402 get tripped up on signed/unsigned differences.
404 DECL is either NULL_TREE or the _DECL node for a reference that is being
405 initialized. It can be error_mark_node if we don't know the _DECL but
406 we know it's an initialization. */
409 convert_to_reference (reftype, expr, convtype, flags, decl)
414 register tree type = TYPE_MAIN_VARIANT (TREE_TYPE (reftype));
415 register tree intype = TREE_TYPE (expr);
416 tree rval = NULL_TREE;
417 tree rval_as_conversion = NULL_TREE;
420 if (TREE_CODE (type) == FUNCTION_TYPE && intype == unknown_type_node)
422 expr = instantiate_type (type, expr,
423 (flags & LOOKUP_COMPLAIN) != 0);
424 if (expr == error_mark_node)
425 return error_mark_node;
427 intype = TREE_TYPE (expr);
430 if (TREE_CODE (intype) == REFERENCE_TYPE)
431 my_friendly_abort (364);
433 intype = TYPE_MAIN_VARIANT (intype);
435 i = comp_target_types (type, intype, 0);
437 if (i <= 0 && (convtype & CONV_IMPLICIT) && IS_AGGR_TYPE (intype)
438 && ! (flags & LOOKUP_NO_CONVERSION))
440 /* Look for a user-defined conversion to lvalue that we can use. */
443 = build_type_conversion (reftype, expr, 1);
445 if (rval_as_conversion && rval_as_conversion != error_mark_node
446 && real_lvalue_p (rval_as_conversion))
448 expr = rval_as_conversion;
449 rval_as_conversion = NULL_TREE;
455 if (((convtype & CONV_STATIC) && i == -1)
456 || ((convtype & CONV_IMPLICIT) && i == 1))
458 if (flags & LOOKUP_COMPLAIN)
460 tree ttl = TREE_TYPE (reftype);
461 tree ttr = lvalue_type (expr);
463 /* [dcl.init.ref] says that if an rvalue is used to
464 initialize a reference, then the reference must be to a
465 non-volatile const type. */
466 if (! real_lvalue_p (expr)
467 && !CP_TYPE_CONST_NON_VOLATILE_P (ttl))
471 if (CP_TYPE_VOLATILE_P (ttl) && decl)
472 msg = "initialization of volatile reference type `%#T'";
473 else if (CP_TYPE_VOLATILE_P (ttl))
474 msg = "conversion to volatile reference type `%#T'";
476 msg = "initialization of non-const reference type `%#T'";
478 msg = "conversion to non-const reference type `%#T'";
480 cp_pedwarn (msg, reftype);
481 cp_pedwarn ("from rvalue of type `%T'", intype);
483 else if (! (convtype & CONV_CONST)
484 && !at_least_as_qualified_p (ttl, ttr))
485 cp_pedwarn ("conversion from `%T' to `%T' discards qualifiers",
489 return build_up_reference (reftype, expr, flags);
491 else if ((convtype & CONV_REINTERPRET) && lvalue_p (expr))
493 /* When casting an lvalue to a reference type, just convert into
494 a pointer to the new type and deference it. This is allowed
495 by San Diego WP section 5.2.9 paragraph 12, though perhaps it
496 should be done directly (jason). (int &)ri ---> *(int*)&ri */
498 /* B* bp; A& ar = (A&)bp; is valid, but it's probably not what they
500 if (TREE_CODE (intype) == POINTER_TYPE
501 && (comptypes (TREE_TYPE (intype), type,
502 COMPARE_BASE | COMPARE_RELAXED )))
503 cp_warning ("casting `%T' to `%T' does not dereference pointer",
506 rval = build_unary_op (ADDR_EXPR, expr, 0);
507 if (rval != error_mark_node)
508 rval = convert_force (build_pointer_type (TREE_TYPE (reftype)),
510 if (rval != error_mark_node)
511 rval = build1 (NOP_EXPR, reftype, rval);
515 rval = convert_for_initialization (NULL_TREE, type, expr, flags,
517 if (rval == NULL_TREE || rval == error_mark_node)
519 rval = build_up_reference (reftype, rval, flags);
521 if (rval && ! CP_TYPE_CONST_P (TREE_TYPE (reftype)))
522 cp_pedwarn ("initializing non-const `%T' with `%T' will use a temporary",
528 /* If we found a way to convert earlier, then use it. */
532 my_friendly_assert (TREE_CODE (intype) != OFFSET_TYPE, 189);
534 if (flags & LOOKUP_COMPLAIN)
535 cp_error ("cannot convert type `%T' to type `%T'", intype, reftype);
537 if (flags & LOOKUP_SPECULATIVELY)
540 return error_mark_node;
543 /* We are using a reference VAL for its value. Bash that reference all the
544 way down to its lowest form. */
547 convert_from_reference (val)
550 tree type = TREE_TYPE (val);
552 if (TREE_CODE (type) == OFFSET_TYPE)
553 type = TREE_TYPE (type);
554 if (TREE_CODE (type) == REFERENCE_TYPE)
555 return build_indirect_ref (val, NULL_PTR);
559 /* Call this when we know (for any reason) that expr is not, in fact,
560 zero. This routine is like convert_pointer_to, but it pays
561 attention to which specific instance of what type we want to
562 convert to. This routine should eventually become
563 convert_to_pointer after all references to convert_to_pointer
567 convert_pointer_to_real (binfo, expr)
570 register tree intype = TREE_TYPE (expr);
574 if (intype == error_mark_node)
575 return error_mark_node;
577 if (TREE_CODE (binfo) == TREE_VEC)
578 type = BINFO_TYPE (binfo);
579 else if (IS_AGGR_TYPE (binfo))
589 ptr_type = cp_build_qualified_type (type,
590 CP_TYPE_QUALS (TREE_TYPE (intype)));
591 ptr_type = build_pointer_type (ptr_type);
592 if (same_type_p (ptr_type, TYPE_MAIN_VARIANT (intype)))
595 my_friendly_assert (!integer_zerop (expr), 191);
597 intype = TYPE_MAIN_VARIANT (TREE_TYPE (intype));
598 if (TREE_CODE (type) == RECORD_TYPE
599 && TREE_CODE (intype) == RECORD_TYPE
604 = get_base_distance (binfo, intype, 0, &path);
606 /* This function shouldn't be called with unqualified arguments
607 but if it is, give them an error message that they can read. */
610 cp_error ("cannot convert a pointer of type `%T' to a pointer of type `%T'",
614 cp_error ("because `%T' is an ambiguous base class", type);
615 return error_mark_node;
618 return build_vbase_path (PLUS_EXPR, ptr_type, expr, path, 1);
620 rval = build1 (NOP_EXPR, ptr_type,
621 TREE_CODE (expr) == NOP_EXPR ? TREE_OPERAND (expr, 0) : expr);
622 TREE_CONSTANT (rval) = TREE_CONSTANT (expr);
626 /* Call this when we know (for any reason) that expr is
627 not, in fact, zero. This routine gets a type out of the first
628 argument and uses it to search for the type to convert to. If there
629 is more than one instance of that type in the expr, the conversion is
630 ambiguous. This routine should eventually go away, and all
631 callers should use convert_to_pointer_real. */
634 convert_pointer_to (binfo, expr)
639 if (TREE_CODE (binfo) == TREE_VEC)
640 type = BINFO_TYPE (binfo);
641 else if (IS_AGGR_TYPE (binfo))
645 return convert_pointer_to_real (type, expr);
648 /* C++ conversions, preference to static cast conversions. */
651 cp_convert (type, expr)
654 return ocp_convert (type, expr, CONV_OLD_CONVERT, LOOKUP_NORMAL);
659 FLAGS indicates how we should behave. */
662 ocp_convert (type, expr, convtype, flags)
666 register tree e = expr;
667 register enum tree_code code = TREE_CODE (type);
669 if (e == error_mark_node
670 || TREE_TYPE (e) == error_mark_node)
671 return error_mark_node;
673 complete_type (type);
674 complete_type (TREE_TYPE (expr));
676 if (TREE_READONLY_DECL_P (e))
677 e = decl_constant_value (e);
679 if (IS_AGGR_TYPE (type) && (convtype & CONV_FORCE_TEMP)
680 /* Some internal structures (vtable_entry_type, sigtbl_ptr_type)
681 don't go through finish_struct, so they don't have the synthesized
682 constructors. So don't force a temporary. */
683 && TYPE_HAS_CONSTRUCTOR (type))
684 /* We need a new temporary; don't take this shortcut. */;
685 else if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (e)))
687 if (same_type_p (type, TREE_TYPE (e)))
688 /* The call to fold will not always remove the NOP_EXPR as
689 might be expected, since if one of the types is a typedef;
690 the comparsion in fold is just equality of pointers, not a
691 call to comptypes. We don't call fold in this case because
692 that can result in infinite recursion; fold will call
693 convert, which will call ocp_convert, etc. */
696 return fold (build1 (NOP_EXPR, type, e));
699 if (code == VOID_TYPE && (convtype & CONV_STATIC))
701 e = convert_to_void (e, /*implicit=*/NULL);
705 /* Just convert to the type of the member. */
706 if (code == OFFSET_TYPE)
708 type = TREE_TYPE (type);
709 code = TREE_CODE (type);
712 if (TREE_CODE (e) == OFFSET_REF)
713 e = resolve_offset_ref (e);
715 if (INTEGRAL_CODE_P (code))
717 tree intype = TREE_TYPE (e);
718 /* enum = enum, enum = int, enum = float, (enum)pointer are all
720 if (TREE_CODE (type) == ENUMERAL_TYPE
721 && ((ARITHMETIC_TYPE_P (intype) && ! (convtype & CONV_STATIC))
722 || (TREE_CODE (intype) == POINTER_TYPE)))
724 cp_pedwarn ("conversion from `%#T' to `%#T'", intype, type);
726 if (flag_pedantic_errors)
727 return error_mark_node;
729 if (IS_AGGR_TYPE (intype))
732 rval = build_type_conversion (type, e, 1);
735 if (flags & LOOKUP_COMPLAIN)
736 cp_error ("`%#T' used where a `%T' was expected", intype, type);
737 if (flags & LOOKUP_SPECULATIVELY)
739 return error_mark_node;
741 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)
749 else if (TREE_CODE (expr) == ADDR_EXPR
750 && TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL)
751 fn = TREE_OPERAND (expr, 0);
753 cp_warning ("the address of `%D', will always be `true'", fn);
754 return truthvalue_conversion (e);
756 return fold (convert_to_integer (type, e));
758 if (code == POINTER_TYPE || code == REFERENCE_TYPE
759 || TYPE_PTRMEMFUNC_P (type))
760 return fold (cp_convert_to_pointer (type, e));
761 if (code == REAL_TYPE || code == COMPLEX_TYPE)
763 if (IS_AGGR_TYPE (TREE_TYPE (e)))
766 rval = build_type_conversion (type, e, 1);
770 if (flags & LOOKUP_COMPLAIN)
771 cp_error ("`%#T' used where a floating point value was expected",
774 if (code == REAL_TYPE)
775 return fold (convert_to_real (type, e));
776 else if (code == COMPLEX_TYPE)
777 return fold (convert_to_complex (type, e));
780 /* New C++ semantics: since assignment is now based on
781 memberwise copying, if the rhs type is derived from the
782 lhs type, then we may still do a conversion. */
783 if (IS_AGGR_TYPE_CODE (code))
785 tree dtype = TREE_TYPE (e);
786 tree ctor = NULL_TREE;
788 dtype = TYPE_MAIN_VARIANT (dtype);
790 /* Conversion between aggregate types. New C++ semantics allow
791 objects of derived type to be cast to objects of base type.
792 Old semantics only allowed this between pointers.
794 There may be some ambiguity between using a constructor
795 vs. using a type conversion operator when both apply. */
799 if (abstract_virtuals_error (NULL_TREE, type))
800 return error_mark_node;
802 if ((flags & LOOKUP_ONLYCONVERTING)
803 && ! (IS_AGGR_TYPE (dtype) && DERIVED_FROM_P (type, dtype)))
804 /* For copy-initialization, first we create a temp of the proper type
805 with a user-defined conversion sequence, then we direct-initialize
806 the target with the temp (see [dcl.init]). */
807 ctor = build_user_type_conversion (type, ctor, flags);
809 ctor = build_method_call (NULL_TREE, ctor_identifier,
810 build_expr_list (NULL_TREE, ctor),
811 TYPE_BINFO (type), flags);
813 return build_cplus_new (type, ctor);
816 /* If TYPE or TREE_TYPE (E) is not on the permanent_obstack,
817 then it won't be hashed and hence compare as not equal,
819 if (code == ARRAY_TYPE
820 && TREE_TYPE (TREE_TYPE (e)) == TREE_TYPE (type)
821 && index_type_equal (TYPE_DOMAIN (TREE_TYPE (e)), TYPE_DOMAIN (type)))
824 if (flags & LOOKUP_COMPLAIN)
825 cp_error ("conversion from `%T' to non-scalar type `%T' requested",
826 TREE_TYPE (expr), type);
827 if (flags & LOOKUP_SPECULATIVELY)
829 return error_mark_node;
832 /* When an expression is used in a void context, its value is discarded and
833 no lvalue-rvalue and similar conversions happen [expr.static.cast/4,
834 stmt.expr/1, expr.comma/1]. This permits dereferencing an incomplete type
835 in a void context. The C++ standard does not define what an `access' to an
836 object is, but there is reason to beleive that it is the lvalue to rvalue
837 conversion -- if it were not, `*&*p = 1' would violate [expr]/4 in that it
838 accesses `*p' not to calculate the value to be stored. But, dcl.type.cv/8
839 indicates that volatile semantics should be the same between C and C++
840 where ever possible. C leaves it implementation defined as to what
841 constitutes an access to a volatile. So, we interpret `*vp' as a read of
842 the volatile object `vp' points to, unless that is an incomplete type. For
843 volatile references we do not do this interpretation, because that would
844 make it impossible to ignore the reference return value from functions. We
845 issue warnings in the confusing cases.
847 IMPLICIT is tells us the context of an implicit void conversion. */
850 convert_to_void (expr, implicit)
852 const char *implicit;
854 if (expr == error_mark_node)
856 if (!TREE_TYPE (expr))
858 if (same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (expr)), void_type_node))
860 switch (TREE_CODE (expr))
864 /* The two parts of a cond expr might be separate lvalues. */
865 tree op1 = TREE_OPERAND (expr,1);
866 tree op2 = TREE_OPERAND (expr,2);
867 tree new_op1 = convert_to_void (op1, implicit);
868 tree new_op2 = convert_to_void (op2, implicit);
870 if (new_op1 != op1 || new_op2 != op2)
871 expr = build (COND_EXPR,
872 implicit ? TREE_TYPE (expr) : void_type_node,
873 TREE_OPERAND (expr, 0), new_op1, new_op2);
879 /* The second part of a compound expr contains the value. */
880 tree op1 = TREE_OPERAND (expr,1);
881 tree new_op1 = convert_to_void (op1, implicit);
884 expr = build (COMPOUND_EXPR, TREE_TYPE (new_op1),
885 TREE_OPERAND (expr, 0), new_op1);
889 case NON_LVALUE_EXPR:
891 /* These have already decayed to rvalue. */
894 case CALL_EXPR: /* we have a special meaning for volatile void fn() */
899 tree type = TREE_TYPE (expr);
900 int is_reference = TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
902 int is_volatile = TYPE_VOLATILE (type);
903 int is_complete = TYPE_SIZE (complete_type (type)) != NULL_TREE;
905 if (is_volatile && !is_complete)
906 cp_warning ("object of incomplete type `%T' will not be accessed in %s",
907 type, implicit ? implicit : "void context");
908 else if (is_reference && is_volatile)
909 cp_warning ("object of type `%T' will not be accessed in %s",
910 TREE_TYPE (TREE_OPERAND (expr, 0)),
911 implicit ? implicit : "void context");
912 if (is_reference || !is_volatile || !is_complete)
913 expr = TREE_OPERAND (expr, 0);
920 /* External variables might be incomplete. */
921 tree type = TREE_TYPE (expr);
922 int is_complete = TYPE_SIZE (complete_type (type)) != NULL_TREE;
924 if (TYPE_VOLATILE (type) && !is_complete)
925 cp_warning ("object `%E' of incomplete type `%T' will not be accessed in %s",
926 expr, type, implicit ? implicit : "void context");
935 if (TREE_CODE (probe) == ADDR_EXPR)
936 probe = TREE_OPERAND (expr, 0);
937 if (!is_overloaded_fn (probe))
939 else if (really_overloaded_fn (probe))
941 /* [over.over] enumerates the places where we can take the address
942 of an overloaded function, and this is not one of them. */
943 cp_pedwarn ("%s has no context for overloaded function name `%E'",
944 implicit ? implicit : "void cast", expr);
946 else if (implicit && probe == expr)
947 /* Only warn when there is no &. */
948 cp_warning ("%s is a reference, not call, to function `%E'",
952 if (expr != error_mark_node
953 && !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (expr)), void_type_node))
955 /* FIXME: This is where we should check for expressions with no
956 effects. At the moment we do that in both build_x_component_expr
957 and expand_expr_stmt -- inconsistently too. For the moment
958 leave implicit void conversions unadorned so that expand_expr_stmt
959 has a chance of detecting some of the cases. */
961 expr = build1 (CONVERT_EXPR, void_type_node, expr);
966 /* Create an expression whose value is that of EXPR,
967 converted to type TYPE. The TREE_TYPE of the value
968 is always TYPE. This function implements all reasonable
969 conversions; callers should filter out those that are
970 not permitted by the language being compiled.
972 Most of this routine is from build_reinterpret_cast.
974 The backend cannot call cp_convert (what was convert) because
975 conversions to/from basetypes may involve memory references
976 (vbases) and adding or subtracting small values (multiple
977 inheritance), but it calls convert from the constant folding code
978 on subtrees of already build trees after it has ripped them apart.
980 Also, if we ever support range variables, we'll probably also have to
981 do a little bit more work. */
989 if (type == error_mark_node || expr == error_mark_node)
990 return error_mark_node;
992 intype = TREE_TYPE (expr);
994 if (POINTER_TYPE_P (type) && POINTER_TYPE_P (intype))
996 if (TREE_READONLY_DECL_P (expr))
997 expr = decl_constant_value (expr);
998 return fold (build1 (NOP_EXPR, type, expr));
1001 return ocp_convert (type, expr, CONV_OLD_CONVERT,
1002 LOOKUP_NORMAL|LOOKUP_NO_CONVERSION);
1005 /* Like cp_convert, except permit conversions to take place which
1006 are not normally allowed due to access restrictions
1007 (such as conversion from sub-type to private super-type). */
1010 convert_force (type, expr, convtype)
1015 register tree e = expr;
1016 register enum tree_code code = TREE_CODE (type);
1018 if (code == REFERENCE_TYPE)
1019 return fold (convert_to_reference (type, e, CONV_C_CAST, LOOKUP_COMPLAIN,
1021 else if (TREE_CODE (TREE_TYPE (e)) == REFERENCE_TYPE)
1022 e = convert_from_reference (e);
1024 if (code == POINTER_TYPE)
1025 return fold (convert_to_pointer_force (type, e));
1027 /* From typeck.c convert_for_assignment */
1028 if (((TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE && TREE_CODE (e) == ADDR_EXPR
1029 && TREE_CODE (TREE_TYPE (e)) == POINTER_TYPE
1030 && TREE_CODE (TREE_TYPE (TREE_TYPE (e))) == METHOD_TYPE)
1031 || integer_zerop (e)
1032 || TYPE_PTRMEMFUNC_P (TREE_TYPE (e)))
1033 && TYPE_PTRMEMFUNC_P (type))
1035 /* compatible pointer to member functions. */
1036 return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), e, 1);
1039 return ocp_convert (type, e, CONV_C_CAST|convtype, LOOKUP_NORMAL);
1042 /* Convert an aggregate EXPR to type XTYPE. If a conversion
1043 exists, return the attempted conversion. This may
1044 return ERROR_MARK_NODE if the conversion is not
1045 allowed (references private members, etc).
1046 If no conversion exists, NULL_TREE is returned.
1048 If (FOR_SURE & 1) is non-zero, then we allow this type conversion
1049 to take place immediately. Otherwise, we build a SAVE_EXPR
1050 which can be evaluated if the results are ever needed.
1052 Changes to this functions should be mirrored in user_harshness.
1054 FIXME: Ambiguity checking is wrong. Should choose one by the implicit
1055 object parameter, or by the second standard conversion sequence if
1056 that doesn't do it. This will probably wait for an overloading rewrite.
1060 build_type_conversion (xtype, expr, for_sure)
1064 /* C++: check to see if we can convert this aggregate type
1065 into the required type. */
1066 return build_user_type_conversion
1067 (xtype, expr, for_sure ? LOOKUP_NORMAL : 0);
1070 /* Convert the given EXPR to one of a group of types suitable for use in an
1071 expression. DESIRES is a combination of various WANT_* flags (q.v.)
1072 which indicates which types are suitable. If COMPLAIN is 1, complain
1073 about ambiguity; otherwise, the caller will deal with it. */
1076 build_expr_type_conversion (desires, expr, complain)
1081 tree basetype = TREE_TYPE (expr);
1082 tree conv = NULL_TREE;
1083 tree winner = NULL_TREE;
1085 if (expr == null_node
1086 && (desires & WANT_INT)
1087 && !(desires & WANT_NULL))
1088 cp_warning ("converting NULL to non-pointer type");
1090 if (TREE_CODE (expr) == OFFSET_REF)
1091 expr = resolve_offset_ref (expr);
1092 expr = convert_from_reference (expr);
1093 basetype = TREE_TYPE (expr);
1095 if (! IS_AGGR_TYPE (basetype))
1096 switch (TREE_CODE (basetype))
1099 if ((desires & WANT_NULL) && null_ptr_cst_p (expr))
1101 /* else fall through... */
1104 return (desires & WANT_INT) ? expr : NULL_TREE;
1106 return (desires & WANT_ENUM) ? expr : NULL_TREE;
1108 return (desires & WANT_FLOAT) ? expr : NULL_TREE;
1110 return (desires & WANT_POINTER) ? expr : NULL_TREE;
1114 return (desires & WANT_POINTER) ? default_conversion (expr)
1120 /* The code for conversions from class type is currently only used for
1121 delete expressions. Other expressions are handled by build_new_op. */
1123 if (! TYPE_HAS_CONVERSION (basetype))
1126 for (conv = lookup_conversions (basetype); conv; conv = TREE_CHAIN (conv))
1130 tree cand = TREE_VALUE (conv);
1132 if (winner && winner == cand)
1135 candidate = TREE_TYPE (TREE_TYPE (cand));
1136 if (TREE_CODE (candidate) == REFERENCE_TYPE)
1137 candidate = TREE_TYPE (candidate);
1139 switch (TREE_CODE (candidate))
1143 win = (desires & WANT_INT); break;
1145 win = (desires & WANT_ENUM); break;
1147 win = (desires & WANT_FLOAT); break;
1149 win = (desires & WANT_POINTER); break;
1161 cp_error ("ambiguous default type conversion from `%T'",
1163 cp_error (" candidate conversions include `%D' and `%D'",
1166 return error_mark_node;
1175 tree type = TREE_TYPE (TREE_TYPE (winner));
1176 if (TREE_CODE (type) == REFERENCE_TYPE)
1177 type = TREE_TYPE (type);
1178 return build_user_type_conversion (type, expr, LOOKUP_NORMAL);
1184 /* Implements integral promotion (4.1) and float->double promotion. */
1187 type_promotes_to (type)
1192 if (type == error_mark_node)
1193 return error_mark_node;
1195 type_quals = CP_TYPE_QUALS (type);
1196 type = TYPE_MAIN_VARIANT (type);
1198 /* bool always promotes to int (not unsigned), even if it's the same
1200 if (type == boolean_type_node)
1201 type = integer_type_node;
1203 /* Normally convert enums to int, but convert wide enums to something
1205 else if (TREE_CODE (type) == ENUMERAL_TYPE
1206 || type == wchar_type_node)
1208 int precision = MAX (TYPE_PRECISION (type),
1209 TYPE_PRECISION (integer_type_node));
1210 tree totype = type_for_size (precision, 0);
1211 if (TREE_UNSIGNED (type)
1212 && ! int_fits_type_p (TYPE_MAX_VALUE (type), totype))
1213 type = type_for_size (precision, 1);
1217 else if (C_PROMOTING_INTEGER_TYPE_P (type))
1219 /* Retain unsignedness if really not getting bigger. */
1220 if (TREE_UNSIGNED (type)
1221 && TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node))
1222 type = unsigned_type_node;
1224 type = integer_type_node;
1226 else if (type == float_type_node)
1227 type = double_type_node;
1229 return cp_build_qualified_type (type, type_quals);
1232 /* The routines below this point are carefully written to conform to
1233 the standard. They use the same terminology, and follow the rules
1234 closely. Although they are used only in pt.c at the moment, they
1235 should presumably be used everywhere in the future. */
1237 /* Attempt to perform qualification conversions on EXPR to convert it
1238 to TYPE. Return the resulting expression, or error_mark_node if
1239 the conversion was impossible. */
1242 perform_qualification_conversions (type, expr)
1246 if (TREE_CODE (type) == POINTER_TYPE
1247 && TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE
1248 && comp_ptr_ttypes (TREE_TYPE (type), TREE_TYPE (TREE_TYPE (expr))))
1249 return build1 (NOP_EXPR, type, expr);
1251 return error_mark_node;