aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2017-06-27 11:38:31 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2017-06-27 11:38:31 +0000
commit786c6d10af3386f348d676a27b3d7f195dff9700 (patch)
tree2670fd407e46eafafd3a3af8ae838408bbda43f0 /gcc
parent1e7df2e63a369ffcc658dd5e1e3d57dabaa017c2 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/ubsan/pr81223.c12
-rw-r--r--gcc/ubsan.c3
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);
}