diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-05-04 21:52:33 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-05-04 21:52:33 +0200 |
commit | 100c8e9e9d896bbfd6d92b8ac7ab506d0090829b (patch) | |
tree | 84db2409acab690605ecd708b51fa26e9e7a8c22 /gcc/ubsan.c | |
parent | 2f4eb706df3bf10b82f571b0910df14317d1ff27 (diff) | |
download | gcc-100c8e9e9d896bbfd6d92b8ac7ab506d0090829b.zip gcc-100c8e9e9d896bbfd6d92b8ac7ab506d0090829b.tar.gz gcc-100c8e9e9d896bbfd6d92b8ac7ab506d0090829b.tar.bz2 |
re PR middle-end/65984 (ICE: definition in block 4 does not dominate use in block 2 with -fnon-call-exceptions -fsanitize=enum)
PR tree-optimization/65984
* ubsan.c: Include tree-cfg.h.
(instrument_bool_enum_load): Use stmt_ends_bb_p instead of
stmt_could_throw_p test, rename can_throw variable to ends_bb.
* c-c++-common/ubsan/pr65984.c: New test.
From-SVN: r222775
Diffstat (limited to 'gcc/ubsan.c')
-rw-r--r-- | gcc/ubsan.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 701e9f2..96536c5 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -87,6 +87,7 @@ along with GCC; see the file COPYING3. If not see #include "builtins.h" #include "tree-object-size.h" #include "tree-eh.h" +#include "tree-cfg.h" /* Map from a tree to a VAR_DECL tree. */ @@ -1420,7 +1421,7 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi) || TREE_CODE (gimple_assign_lhs (stmt)) != SSA_NAME) return; - bool can_throw = stmt_could_throw_p (stmt); + bool ends_bb = stmt_ends_bb_p (stmt); location_t loc = gimple_location (stmt); tree lhs = gimple_assign_lhs (stmt); tree ptype = build_pointer_type (TREE_TYPE (rhs)); @@ -1432,7 +1433,7 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi) tree mem = build2 (MEM_REF, utype, gimple_assign_lhs (g), build_int_cst (atype, 0)); tree urhs = make_ssa_name (utype); - if (can_throw) + if (ends_bb) { gimple_assign_set_lhs (stmt, urhs); g = gimple_build_assign (lhs, NOP_EXPR, urhs); @@ -1469,7 +1470,7 @@ instrument_bool_enum_load (gimple_stmt_iterator *gsi) gimple_set_location (g, loc); gsi_insert_after (gsi, g, GSI_NEW_STMT); - if (!can_throw) + if (!ends_bb) { gimple_assign_set_rhs_with_ops (&gsi2, NOP_EXPR, urhs); update_stmt (stmt); |