re PR middle-end/27498 (fold does not fold reads from constant static strings)
authorDirk Mueller <dmueller@suse.de>
Tue, 9 May 2006 14:16:50 +0000 (14:16 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 9 May 2006 14:16:50 +0000 (14:16 +0000)
2006-05-09  Dirk Mueller  <dmueller@suse.de>
Richard Guenther  <rguenther@suse.de>

PR middle-end/27498
* fold-const.c (fold_read_from_constant_string): Relax check
for matching types to matching modes.

* gcc.dg/tree-ssa/pr27498.c: New testcase.

Co-Authored-By: Richard Guenther <rguenther@suse.de>
From-SVN: r113651

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr27498.c [new file with mode: 0644]

index c1896d9d9b1b9f740900e1173e577ae0527df412..b7840c4a28fa493c4c98342ac267b4b8cc11bf9c 100644 (file)
@@ -1,3 +1,10 @@
+2006-05-09  Dirk Mueller  <dmueller@suse.de>
+       Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/27498
+       * fold-const.c (fold_read_from_constant_string): Relax check
+       for matching types to matching modes.
+
 2006-05-09  Zdenek Dvorak <dvorakz@suse.cz>
 
        PR rtl-optimization/27335
index 567168276e19762e41ff781985da1873cb3ae6be..26e53c0c32ccf940636e233a5cfdd071ab353813 100644 (file)
@@ -12220,7 +12220,7 @@ fold_read_from_constant_string (tree exp)
        }
 
       if (string
-         && TREE_TYPE (exp) == TREE_TYPE (TREE_TYPE (string))
+         && TYPE_MODE (TREE_TYPE (exp)) == TYPE_MODE (TREE_TYPE (TREE_TYPE (string)))
          && TREE_CODE (string) == STRING_CST
          && TREE_CODE (index) == INTEGER_CST
          && compare_tree_int (index, TREE_STRING_LENGTH (string)) < 0
index a3f49f7974c3f1717aa04c528d9b3e8143e198bc..9eff9f48d4060c493ee36c6b2b62a7aae37dc236 100644 (file)
@@ -1,3 +1,9 @@
+2006-05-09  Dirk Mueller  <dmueller@suse.de>
+       Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/27498
+       * gcc.dg/tree-ssa/pr27498.c: New testcase.
+
 2006-05-09  Zdenek Dvorak <dvorakz@suse.cz>
 
        PR rtl-optimization/27335
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr27498.c b/gcc/testsuite/gcc.dg/tree-ssa/pr27498.c
new file mode 100644 (file)
index 0000000..75d3d4b
--- /dev/null
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+
+void zconfdump(void)
+{
+  char *p, *p2;
+  for (p2 = p; p2; )
+    {
+      char __a0, __a1, __a2;
+      __a0 = ((__const char *) ("\"\\"))[0];
+      if (__a0)
+        return;
+    }
+}
+
+/* { dg-final { scan-tree-dump-not "goto" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */