aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2007-08-27 14:18:36 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2007-08-27 14:18:36 +0000
commit11df3da358dd7a2b946004bee03a9bad6bd875a5 (patch)
treeb3f35f56863b101cfcb0e6c890ab06e52b5ca5e9 /gcc
parent62d75179760ebc60b025194c86ae0b5ee3695fe0 (diff)
downloadgcc-11df3da358dd7a2b946004bee03a9bad6bd875a5.zip
gcc-11df3da358dd7a2b946004bee03a9bad6bd875a5.tar.gz
gcc-11df3da358dd7a2b946004bee03a9bad6bd875a5.tar.bz2
re PR tree-optimization/33173 (ICE in set_uids_in_ptset, at tree-ssa-structalias.c:4704)
2007-08-27 Daniel Berlin <dberlin@dberlin.org> Fix PR tree-optimization/33173 * tree-ssa-alias.c (find_used_portions): Fix reversed test. From-SVN: r127834
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr33173.c102
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr26421.c2
-rw-r--r--gcc/tree-ssa-alias.c2
5 files changed, 115 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91d1bfa..ab630ad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2007-08-27 Daniel Berlin <dberlin@dberlin.org>
+
+ Fix PR tree-optimization/33173
+ * tree-ssa-alias.c (find_used_portions): Fix reversed test.
+
2007-08-27 H.J. Lu <hongjiu.lu@intel.com>
PR target/31385
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 301693a..a153024 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2007-08-27 Daniel Berlin <dberlin@dberlin.org>
+
+ PR tree-optimization/33173
+
+ * gcc.c-torture/compile/pr33173.c: New.
+
2007-08-27 H.J. Lu <hongjiu.lu@intel.com>
PR target/31385
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr33173.c b/gcc/testsuite/gcc.c-torture/compile/pr33173.c
new file mode 100644
index 0000000..503c7af
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr33173.c
@@ -0,0 +1,102 @@
+typedef long unsigned int size_t;
+typedef struct
+{
+}
+_G_fpos_t;
+extern int printf (__const char *__restrict __format, ...);
+extern size_t strlen (__const char *__s) __attribute__ ((__nothrow__))
+ __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+typedef struct rend_service_descriptor_t
+{
+ int patchlevel;
+ char status_tag[32];
+}
+tor_version_t;
+test_dir_format (void)
+{
+ tor_version_t ver1;
+ {
+ long v2 = (long) (ver1.patchlevel);
+ }
+ {
+ const char *v1 = (""), *v2 = (ver1.status_tag);
+ if (!__extension__ (
+ {
+ size_t __s1_len, __s2_len;
+ (__builtin_constant_p (v1)
+ && (__s1_len = strlen (v1), __s2_len =
+ (!((size_t) (const void *) ((v1) + 1) -
+ (size_t) (const void *) (v1) == 1)
+ || __s1_len >= 4)
+ &&
+ (!((size_t) (const void *) ((v2) + 1) -
+ (size_t) (const void *) (v2) == 1)
+ || __s2_len >= 4)) ? __builtin_strcmp (v1,
+ v2)
+ : (__builtin_constant_p (v1)
+ && ((size_t) (const void *) ((v1) + 1) -
+ __s1_len < 4) ? (__builtin_constant_p (v2)
+ &&
+ ((size_t) (const void *)
+ (size_t) (const void
+ *) (v2) ==
+ 1) ? __builtin_strcmp (v1,
+ v2)
+ : (__extension__ (
+ {
+ __const
+ char
+ *__s2
+ =
+ (__const
+ char
+ *)
+ (v2);
+ register
+ __result
+ =
+ (((__const unsigned char *) (__const char *) (v1))[0] - __s2[0]); if (__s1_len > 0 && __result == 0)
+ {
+ }
+ __result;}
+ ))):
+ (__builtin_constant_p (v2)
+ && ((size_t) (const void *) ((v2) + 1) -
+ __s2_len < 4) ? (__builtin_constant_p (v1)
+ && ((size_t) (const void *)
+ 1) ?
+ __builtin_strcmp (v1,
+ v2)
+ : (__extension__ (
+ {
+ __const
+ char
+ *__s1
+ =
+ (__const
+ char
+ *)
+ (__const
+ *)
+ (v1);
+ register
+ __result
+ =
+ ((__const unsigned char *) (__const char *) (v2))[0]; if (__s2_len > 0 && __result == 0)
+ {
+ if
+ (__s2_len
+ ==
+ 0)
+ {
+ }
+ }
+ __result;}
+ ))): __builtin_strcmp (v1,
+ v2))));}
+ ))
+ {
+ printf (".");
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr26421.c b/gcc/testsuite/gcc.dg/tree-ssa/pr26421.c
index d2d99ba..ef5bc6a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr26421.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr26421.c
@@ -16,5 +16,5 @@ int foo(void)
return a.i;
}
-/* { dg-final { scan-tree-dump-times "VDEF" 2 "salias" } } */
+/* { dg-final { scan-tree-dump-times "VDEF" 4 "salias" } } */
/* { dg-final { cleanup-tree-dump "salias" } } */
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 103a023..2dc2351 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -3967,7 +3967,7 @@ find_used_portions (tree *tp, int *walk_subtrees, void *lhs_p)
for (i = 0; i < nargs; i++)
{
tree *arg = &CALL_EXPR_ARG (*tp, i);
- if (TREE_CODE (*arg) != ADDR_EXPR)
+ if (TREE_CODE (*arg) == ADDR_EXPR)
find_used_portions (arg, walk_subtrees, NULL);
}
*walk_subtrees = 0;