diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr88792.c | 32 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 2 |
4 files changed, 44 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf6d682..a0276f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-01-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/88792 + * tree-ssa-pre.c (get_representative_for): Do not return a + value-number here. + 2019-01-10 Jakub Jelinek <jakub@redhat.com> PR middle-end/84877 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 157c37d..ef231a2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/88792 + * gcc.dg/torture/pr88792.c: New testcase. + 2019-01-10 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/86322 diff --git a/gcc/testsuite/gcc.dg/torture/pr88792.c b/gcc/testsuite/gcc.dg/torture/pr88792.c new file mode 100644 index 0000000..e7f8fc0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr88792.c @@ -0,0 +1,32 @@ +/* { dg-do run } */ + +int one = 1; + +char +__attribute__((noipa)) +foo(char v) +{ + int modec; + + if (one) + { + modec = ((v < 'A' || v > 'Z') ? v : v + ('a' - 'A')); + if (modec != 't' && modec != 'c' && modec != 'g') + modec = 0; + } + else + modec = 'g'; + + return modec; +} + +int main(int argc, char **argv) +{ + char c = 't'; + int r = foo (c); + + if (r != c) + __builtin_abort (); + + return 0; +} diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index a37eff6..3f38371 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -1262,7 +1262,7 @@ get_representative_for (const pre_expr e, basic_block b = NULL) switch (e->kind) { case NAME: - return VN_INFO (PRE_EXPR_NAME (e))->valnum; + return PRE_EXPR_NAME (e); case CONSTANT: return PRE_EXPR_CONSTANT (e); case NARY: |