diff options
author | Marek Polacek <polacek@redhat.com> | 2014-12-01 15:37:55 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2014-12-01 15:37:55 +0000 |
commit | 7d1f4ae5f155c0656ef53d7692bb81b424c28220 (patch) | |
tree | f5e772a5db0e1bb4fe04aba925539a5ef99d36fb /gcc/ubsan.c | |
parent | 0b274c179f478df449d66bd0707cb9aa05dcafed (diff) | |
download | gcc-7d1f4ae5f155c0656ef53d7692bb81b424c28220.zip gcc-7d1f4ae5f155c0656ef53d7692bb81b424c28220.tar.gz gcc-7d1f4ae5f155c0656ef53d7692bb81b424c28220.tar.bz2 |
re PR tree-optimization/64121 (ICE: SSA corruption with -O -fsanitize=undefined)
PR sanitizer/64121
* ubsan.c (instrument_object_size): Stop searching if the base
occurs in abnormal phi.
* c-c++-common/ubsan/pr64121.c: New test.
Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r218222
Diffstat (limited to 'gcc/ubsan.c')
-rw-r--r-- | gcc/ubsan.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ubsan.c b/gcc/ubsan.c index cff0982..fb5f104 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -1563,7 +1563,14 @@ instrument_object_size (gimple_stmt_iterator *gsi, bool is_lhs) && POINTER_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (def_stmt)))) || (is_gimple_assign (def_stmt) && gimple_assign_rhs_code (def_stmt) == POINTER_PLUS_EXPR)) - base = gimple_assign_rhs1 (def_stmt); + { + tree rhs1 = gimple_assign_rhs1 (def_stmt); + if (TREE_CODE (rhs1) == SSA_NAME + && SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs1)) + break; + else + base = rhs1; + } else break; } |