diff options
author | Marek Polacek <polacek@redhat.com> | 2017-06-27 11:38:31 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2017-06-27 11:38:31 +0000 |
commit | 786c6d10af3386f348d676a27b3d7f195dff9700 (patch) | |
tree | 2670fd407e46eafafd3a3af8ae838408bbda43f0 /gcc | |
parent | 1e7df2e63a369ffcc658dd5e1e3d57dabaa017c2 (diff) | |
download | gcc-786c6d10af3386f348d676a27b3d7f195dff9700.zip gcc-786c6d10af3386f348d676a27b3d7f195dff9700.tar.gz gcc-786c6d10af3386f348d676a27b3d7f195dff9700.tar.bz2 |
re PR sanitizer/81223 (ICE in instrument_null at gcc/ubsan.c:1230)
PR sanitizer/81223
* ubsan.c (instrument_null): Check get_base_address's result for null.
* gcc.dg/ubsan/pr81223.c: New test.
From-SVN: r249687
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/ubsan/pr81223.c | 12 | ||||
-rw-r--r-- | gcc/ubsan.c | 3 |
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 665e0b5..f9e0019 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-06-27 Marek Polacek <polacek@redhat.com> + + PR sanitizer/81223 + * ubsan.c (instrument_null): Check get_base_address's result for null. + 2017-06-27 Marc Glisse <marc.glisse@inria.fr> * match.pd ((A+-B)+(C-A), (A+B)-(A-C)): New transformations. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7364606..98faa11 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-06-27 Marek Polacek <polacek@redhat.com> + + PR sanitizer/81223 + * gcc.dg/ubsan/pr81223.c: New test. + 2017-06-27 Marc Glisse <marc.glisse@inria.fr> * gcc.dg/tree-ssa/assoc-1.c: New file. diff --git a/gcc/testsuite/gcc.dg/ubsan/pr81223.c b/gcc/testsuite/gcc.dg/ubsan/pr81223.c new file mode 100644 index 0000000..e7aff52 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr81223.c @@ -0,0 +1,12 @@ +/* PR sanitizer/81223 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=undefined" } */ + +void bar (); + +void +foo (int x) +{ + struct S { char a[x]; } v; + bar (v); +} diff --git a/gcc/ubsan.c b/gcc/ubsan.c index c7a06ef..bd0588b 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -1228,7 +1228,8 @@ instrument_null (gimple_stmt_iterator gsi, tree t, bool is_lhs) if (TREE_CODE (t) == ADDR_EXPR) t = TREE_OPERAND (t, 0); tree base = get_base_address (t); - if (TREE_CODE (base) == MEM_REF + if (base != NULL_TREE + && TREE_CODE (base) == MEM_REF && TREE_CODE (TREE_OPERAND (base, 0)) == SSA_NAME) instrument_mem_ref (t, base, &gsi, is_lhs); } |