aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/asan.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/asan/pr80168.c12
-rw-r--r--gcc/ubsan.c2
5 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8dcd897..f2f40b8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2017-03-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/80168
+ * asan.c (instrument_derefs): Copy over last operand from
+ original COMPONENT_REF to the new COMPONENT_REF with
+ DECL_BIT_FIELD_REPRESENTATIVE.
+ * ubsan.c (instrument_object_size): Likewise.
+
2017-03-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/80170
diff --git a/gcc/asan.c b/gcc/asan.c
index a13679d..f1098cb 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1868,7 +1868,8 @@ instrument_derefs (gimple_stmt_iterator *iter, tree t,
tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1));
instrument_derefs (iter, build3 (COMPONENT_REF, TREE_TYPE (repr),
TREE_OPERAND (t, 0), repr,
- NULL_TREE), location, is_store);
+ TREE_OPERAND (t, 2)),
+ location, is_store);
return;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0b04afe..3a8e22e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-27 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/80168
+ * gcc.dg/asan/pr80168.c: New test.
+
2017-03-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/80170
diff --git a/gcc/testsuite/gcc.dg/asan/pr80168.c b/gcc/testsuite/gcc.dg/asan/pr80168.c
new file mode 100644
index 0000000..de23345
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/asan/pr80168.c
@@ -0,0 +1,12 @@
+/* PR sanitizer/80168 */
+/* { dg-do compile } */
+
+int a;
+
+int
+foo (void)
+{
+ struct S { int c[a]; int q : 8; int e : 4; } f;
+ f.e = 4;
+ return f.e;
+}
diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index 17965ef..323c1cc 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -1772,7 +1772,7 @@ instrument_object_size (gimple_stmt_iterator *gsi, bool is_lhs)
{
tree repr = DECL_BIT_FIELD_REPRESENTATIVE (TREE_OPERAND (t, 1));
t = build3 (COMPONENT_REF, TREE_TYPE (repr), TREE_OPERAND (t, 0),
- repr, NULL_TREE);
+ repr, TREE_OPERAND (t, 2));
}
break;
case ARRAY_REF: