vrp_prop: Use dom_walker for -Warray-bounds (PR tree-optimization/83312)
commitf367d7d74d71b529287db30b769bfa399f57afb0
authordmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 14 Dec 2017 17:15:39 +0000 (14 17:15 +0000)
committerdmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 14 Dec 2017 17:15:39 +0000 (14 17:15 +0000)
tree7d33437a2b214b3948aaf13e6a38a38a5cc1a739
parentdb27256ba7e76c7793585dcd1dea1b0613779e57
vrp_prop: Use dom_walker for -Warray-bounds (PR tree-optimization/83312)

gcc/ChangeLog:
PR tree-optimization/83312
* domwalk.h (dom_walker::dom_walker): Fix typo in comment.
* tree-cfg.c (find_taken_edge): Update to handle NULL_TREE for
"val" param, and to cope with arbitrary basic blocks.
(find_taken_edge_cond_expr): Add "cond_stmt" param and use it to
handle NULL_TREE for "val", dropping "bb" param.
(find_taken_edge_switch_expr): Make "switch_stmt" param const and
drop "bb" param.  Handle NULL_TREE for "val".
(find_case_label_for_value): Make "switch_stmt" param const.
* tree-vrp.c (class check_array_bounds_dom_walker): New subclass
of dom_walker.
(vrp_prop::check_all_array_refs): Reimplement as...
(check_array_bounds_dom_walker::before_dom_children): ...this new
vfunc.  Replace linear search through BB block list, excluding
those with non-executable in-edges via dominator walk.

gcc/testsuite/ChangeLog:
PR tree-optimization/83312
* gcc.dg/pr83312.c: New test case.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@255649 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/domwalk.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr83312.c [new file with mode: 0644]
gcc/tree-cfg.c
gcc/tree-vrp.c