Index: cp/ChangeLog

2005-03-24  Geoffrey Keating  <geoffk@apple.com>

	* typeck.c (build_static_cast_1): Allow scalar_cast between
	any integral, floating, or enumeration type.

Index: testsuite/ChangeLog
2005-03-24  Geoffrey Keating  <geoffk@apple.com>

	* g++.dg/expr/cast3.C: New.

From-SVN: r97019
This commit is contained in:
Geoffrey Keating 2005-03-24 23:33:56 +00:00 committed by Geoffrey Keating
parent a9f15d8302
commit a10ce2f8ed
4 changed files with 40 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2005-03-24 Geoffrey Keating <geoffk@apple.com>
* typeck.c (build_static_cast_1): Allow scalar_cast between
any integral, floating, or enumeration type.
2005-03-24 Steven Bosscher <stevenb@suse.de>
* typeck.c (comptypes): First determine if the types are compatible

View File

@ -4624,13 +4624,15 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p,
promotions, floating point promotion, integral conversions,
floating point conversions, floating-integral conversions,
pointer conversions, and pointer to member conversions. */
if ((ARITHMETIC_TYPE_P (type) && ARITHMETIC_TYPE_P (intype))
/* DR 128
A value of integral _or enumeration_ type can be explicitly
converted to an enumeration type. */
|| (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
&& INTEGRAL_OR_ENUMERATION_TYPE_P (intype)))
/* DR 128
A value of integral _or enumeration_ type can be explicitly
converted to an enumeration type. */
/* The effect of all that is that any conversion between any two
types which are integral, floating, or enumeration types can be
performed. */
if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
&& (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype)))
{
expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL);

View File

@ -1,3 +1,7 @@
2005-03-24 Geoffrey Keating <geoffk@apple.com>
* g++.dg/expr/cast3.C: New.
2005-03-24 David Edelsohn <edelsohn@gnu.org>
* gcc.c-torture/execute/20020720-1.x: XFAIL for all powerpc and

View File

@ -0,0 +1,22 @@
// { dg-do compile }
enum MyState
{
QUIT = 0,
START,
STOP,
PAUSE
};
double GetDouble()
{
return 1.0;
}
int main()
{
MyState the_state;
the_state = (MyState)GetDouble(); // { dg-bogus "invalid cast" }
return 0;
}