c-typeck.c (build_c_cast): Fold constant variables into initial values.

* c-typeck.c (build_c_cast):  Fold constant variables into
	initial values.

	* gcc.dg/c90-const-expr-3.c (DZERO): New static variable
	(foo): Add few extra tests
	* gcc.dg/c99-const-expr-3.c: Likewise.
	* gcc.c-torture/execute/20030216-1.c: New.

From-SVN: r62987
This commit is contained in:
Jan Hubicka 2003-02-16 22:10:10 +00:00
parent 35113fde34
commit 096daf41db
6 changed files with 38 additions and 1 deletions

View File

@ -1,3 +1,8 @@
Sun Feb 16 23:07:52 CET 2003 Jan Hubicka <jh@suse.cz>
* c-typeck.c (build_c_cast): Fold constant variables into
initial values.
2003-02-16 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* doc/install.texi (Specific): Fix link for m68k-att-sysv.

View File

@ -3765,8 +3765,11 @@ build_c_cast (type, expr)
get_alias_set (TREE_TYPE (type))))
warning ("dereferencing type-punned pointer will break strict-aliasing rules");
}
ovalue = value;
/* Replace a nonvolatile const static variable with its value. */
if (optimize && TREE_CODE (value) == VAR_DECL)
value = decl_constant_value (value);
value = convert (type, value);
/* Ignore any integer overflow caused by the cast. */

View File

@ -1,3 +1,10 @@
Sun Feb 16 23:08:19 CET 2003 Jan HUbicka <jh@suse.cz>
* gcc.dg/c90-const-expr-3.c (DZERO): New static variable
(foo): Add few extra tests
* gcc.dg/c99-const-expr-3.c: Likewise.
* gcc.c-torture/execute/20030216-1.c: New.
2003-02-16 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/9459

View File

@ -0,0 +1,10 @@
void link_error (void);
const double one=1.0;
main ()
{
#ifdef __OPTIMIZE__
if ((int) one != 1)
link_error ();
#endif
return 0;
}

View File

@ -6,6 +6,7 @@
to give the correct behavior to conforming programs. */
static const int ZERO = 0;
static const double DZERO = 0;
int *a;
int b;
@ -36,4 +37,9 @@ foo (void)
ASSERT_NOT_NPC ((char) ZERO);
ASSERT_NPC ((int) 0);
ASSERT_NOT_NPC ((int) ZERO);
ASSERT_NPC ((int) 0.0);
ASSERT_NOT_NPC ((int) DZERO);
ASSERT_NOT_NPC ((int) +0.0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
ASSERT_NOT_NPC ((int) (0.0+0.0)); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
ASSERT_NOT_NPC ((int) (double)0.0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
}

View File

@ -6,6 +6,7 @@
to give the correct behavior to conforming programs. */
static const int ZERO = 0;
static const double DZERO = 0;
int *a;
int b;
@ -36,4 +37,9 @@ foo (void)
ASSERT_NOT_NPC ((char) ZERO);
ASSERT_NPC ((int) 0);
ASSERT_NOT_NPC ((int) ZERO);
ASSERT_NPC ((int) 0.0);
ASSERT_NOT_NPC ((int) DZERO);
ASSERT_NOT_NPC ((int) +0.0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
ASSERT_NOT_NPC ((int) (0.0+0.0)); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
ASSERT_NOT_NPC ((int) (double)0.0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
}