From aa45a75f425e69935bde7dbbfdb2e629e9d43ed5 Mon Sep 17 00:00:00 2001 From: Denis Khalikov Date: Mon, 17 Apr 2017 19:31:13 +0300 Subject: [PATCH] [ubsan] Ported fix for PR sanitizer/79897 2017-03-07 Jakub Jelinek PR sanitizer/79897 * ubsan.c (ubsan_encode_value): Call mark_addressable on the temporary. Change-Id: I075edb26f51d4ec2eccc2e59dbbe489b43b3b5db Signed-off-by: Denis Khalikov --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/c-c++-common/ubsan/pr79897.c | 15 +++++++++++++++ gcc/ubsan.c | 1 + 4 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/ubsan/pr79897.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b765c86..d83072b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-03-07 Jakub Jelinek + + PR sanitizer/79897 + * ubsan.c (ubsan_encode_value): Call mark_addressable on the + temporary. + 2017-02-03 Carl Love Backport of two commits from mainline, r244943 and r244904, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e9cf664..e564593 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-03-07 Jakub Jelinek + + PR sanitizer/79897 + * c-c++-common/ubsan/pr79897.c: New test. + 2017-02-03 Carl Love * gcc.target/powerpc/builtins-3-p8.c: Add new testfile for missing 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 0000000..0dadcff --- /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 1093824..127f21d 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -144,6 +144,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 -- 2.7.4