c-typeck.c (build_c_cast): Fold constant variables into initial values.
authorJan Hubicka <hubicka@gcc.gnu.org>
Sun, 16 Feb 2003 22:10:10 +0000 (22:10 +0000)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 16 Feb 2003 22:10:10 +0000 (22:10 +0000)
* 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

gcc/ChangeLog
gcc/c-typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20030216-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c90-const-expr-3.c
gcc/testsuite/gcc.dg/c99-const-expr-3.c

index 3b6101264353e052e6b1536bc2cce802eda0d337..6fc6b3996f8f2be073109a88296df1bc8c3e3feb 100644 (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.
index bbd94a044fafba5b26f9bffa148d13e638f7b882..f3b6bb96fbce821339a9fe4976c12991206ad8c3 100644 (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.  */
index 39436e8d9eecc81cd21b1b0431ea1f98c1ca3b14..0356de92d986845cbec61b3a3022e84a467aa61d 100644 (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
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 (file)
index 0000000..2153bfd
--- /dev/null
@@ -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;
+}
index 987284360d8662e4934d57e8b747d6d99b3516f5..4a0eb105ef503253a40c82feddeede20a176f617 100644 (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 *-*-* } } */
 }
index 7490f62a4ab48ea40827bd5ade169b6bd0389b74..096825eb8f5785757aaa9cebb99b2b1553ddeb04 100644 (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 *-*-* } } */
 }