diff options
author | Daniel Berlin <dberlin@dberlin.org> | 2007-08-27 14:18:36 +0000 |
---|---|---|
committer | Daniel Berlin <dberlin@gcc.gnu.org> | 2007-08-27 14:18:36 +0000 |
commit | 11df3da358dd7a2b946004bee03a9bad6bd875a5 (patch) | |
tree | b3f35f56863b101cfcb0e6c890ab06e52b5ca5e9 /gcc | |
parent | 62d75179760ebc60b025194c86ae0b5ee3695fe0 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr33173.c | 102 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr26421.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa-alias.c | 2 |
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; |