diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b6101264353e052e6b1536bc2cce802eda0d337..6fc6b3996f8f2be073109a88296df1bc8c3e3feb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index bbd94a044fafba5b26f9bffa148d13e638f7b882..f3b6bb96fbce821339a9fe4976c12991206ad8c3 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 39436e8d9eecc81cd21b1b0431ea1f98c1ca3b14..0356de92d986845cbec61b3a3022e84a467aa61d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.c-torture/execute/20030216-1.c b/gcc/testsuite/gcc.c-torture/execute/20030216-1.c new file mode 100644 index 0000000000000000000000000000000000000000..2153bfdd71fea508aeedf55a285924c4d304cf8b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20030216-1.c @@ -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; +} diff --git a/gcc/testsuite/gcc.dg/c90-const-expr-3.c b/gcc/testsuite/gcc.dg/c90-const-expr-3.c index 987284360d8662e4934d57e8b747d6d99b3516f5..4a0eb105ef503253a40c82feddeede20a176f617 100644 --- a/gcc/testsuite/gcc.dg/c90-const-expr-3.c +++ b/gcc/testsuite/gcc.dg/c90-const-expr-3.c @@ -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 *-*-* } } */ } diff --git a/gcc/testsuite/gcc.dg/c99-const-expr-3.c b/gcc/testsuite/gcc.dg/c99-const-expr-3.c index 7490f62a4ab48ea40827bd5ade169b6bd0389b74..096825eb8f5785757aaa9cebb99b2b1553ddeb04 100644 --- a/gcc/testsuite/gcc.dg/c99-const-expr-3.c +++ b/gcc/testsuite/gcc.dg/c99-const-expr-3.c @@ -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 *-*-* } } */ }