aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-03-07 06:11:14 +0000
committerJakub Jelinek <jakub@redhat.com>2017-03-07 06:11:14 +0000
commit913ca3e6cb5748b051064c285a283c7151202504 (patch)
tree650681b7c596b0039d28f13112a1d8d99a50ca8c
parentebe90a15ce29a9583f788c0e0142476ba628089e (diff)
PR sanitizer/79897
* ubsan.c (ubsan_encode_value): Call mark_addressable on the temporary. * c-c++-common/ubsan/pr79897.c: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@245945 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/ubsan/pr79897.c15
-rw-r--r--gcc/ubsan.c1
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2727acd1929..eb06b5ab2eb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-03-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/79897
+ * ubsan.c (ubsan_encode_value): Call mark_addressable on the
+ temporary.
+
2017-03-06 Jakub Jelinek <jakub@redhat.com>
PR c++/79821
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2f27e4b535c..9c8b87e90c7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR sanitizer/79897
+ * c-c++-common/ubsan/pr79897.c: New test.
+
2017-03-06 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/79571
diff --git a/gcc/testsuite/c-c++-common/ubsan/pr79897.c b/gcc/testsuite/c-c++-common/ubsan/pr79897.c
new file mode 100644
index 00000000000..0dadcffe98d
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/ubsan/pr79897.c
@@ -0,0 +1,15 @@
+/* PR sanitizer/79897 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=enum -O2" } */
+
+enum E
+{
+ A = 0,
+ B = ~0U + 1LL
+} x = A;
+
+int
+main ()
+{
+ return x != A;
+}
diff --git a/gcc/ubsan.c b/gcc/ubsan.c
index 11a41e1dc53..17965efde5c 100644
--- a/gcc/ubsan.c
+++ b/gcc/ubsan.c
@@ -145,6 +145,7 @@ ubsan_encode_value (tree t, bool in_expand_p)
code by making vars unnecessarily addressable. */
tree var = create_tmp_var (type);
tree tem = build2 (MODIFY_EXPR, void_type_node, var, t);
+ mark_addressable (var);
if (in_expand_p)
{
rtx mem