diff options
author | Jeff Law <law@redhat.com> | 2016-06-02 23:20:16 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2016-06-02 23:20:16 -0600 |
commit | 47b8392308f4122cb327d351e0f2f34e1b4960bc (patch) | |
tree | 552b67807d742a98724357b02a30d29d4fd9703d /gcc | |
parent | e96e5f4611803e2c67410f0ad99a9b1261704720 (diff) | |
download | gcc-47b8392308f4122cb327d351e0f2f34e1b4960bc.zip gcc-47b8392308f4122cb327d351e0f2f34e1b4960bc.tar.gz gcc-47b8392308f4122cb327d351e0f2f34e1b4960bc.tar.bz2 |
re PR tree-optimization/71328 (ice in verify_jump_thread)
PR tree-optimization/71328
* tree-ssa-threadupdate.c (duplicate_thread_path): Fix off-by-one
error when checking for a jump back onto the copied path. */
PR tree-optimization/71328
* gcc.c-torture/compile/pr71328.c: New test.
From-SVN: r237052
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr71328.c | 16 | ||||
-rw-r--r-- | gcc/tree-ssa-threadupdate.c | 4 |
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2a0951b..2c6f6b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-06-02 Jeff Law <law@redhat.com> + + PR tree-optimization/71328 + * tree-ssa-threadupdate.c (duplicate_thread_path): Fix off-by-one + error when checking for a jump back onto the copied path. */ + 2016-06-02 David Malcolm <dmalcolm@redhat.com> * config/microblaze/microblaze.c (get_branch_target): Add return diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9f7da16..263d91b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-06-02 Jeff Law <law@redhat.com> + + PR tree-optimization/71328 + * gcc.c-torture/compile/pr71328.c: New test. + 2016-06-02 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/52393 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr71328.c b/gcc/testsuite/gcc.c-torture/compile/pr71328.c new file mode 100644 index 0000000..aa384e8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr71328.c @@ -0,0 +1,16 @@ + + +int a, b, c; +void fn1() { + unsigned char d = 3; + if (d > 11) + lbl_596: + c = 0; + while (!d) + b = b; + unsigned char e = e || d; + d = e; + if (a) + d = d || a; + goto lbl_596; +} diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c index 620948c..1ff007a 100644 --- a/gcc/tree-ssa-threadupdate.c +++ b/gcc/tree-ssa-threadupdate.c @@ -2298,11 +2298,11 @@ duplicate_thread_path (edge entry, edge exit, } /* Special case the last block on the path: make sure that it does not - jump back on the copied path. */ + jump back on the copied path, including back to itself. */ if (i + 1 == n_region) { FOR_EACH_EDGE (e, ei, bb->succs) - if (bb_in_bbs (e->dest, region_copy, n_region - 1)) + if (bb_in_bbs (e->dest, region_copy, n_region)) { basic_block orig = get_bb_original (e->dest); if (orig) |