aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-03-28 16:45:21 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-03-28 14:45:21 +0000
commitd838c2d5a8b1844c7c78596b9689339ec60731f3 (patch)
tree3bc231046d07cdde8d0c364d280ceeb49fe3a24d /gcc
parenta48b4234ddba56e6ac698a8a84f24176085dc099 (diff)
downloadgcc-d838c2d5a8b1844c7c78596b9689339ec60731f3.zip
gcc-d838c2d5a8b1844c7c78596b9689339ec60731f3.tar.gz
gcc-d838c2d5a8b1844c7c78596b9689339ec60731f3.tar.bz2
Fix wrong use-after-scope sanitization for omp variable (PR sanitizer/85081).
2018-03-28 Jakub Jelinek <jakub@redhat.com> Martin Liska <mliska@suse.cz> PR sanitizer/85081 * gimplify.c (asan_poison_variable): Don't do the check for gimplify_omp_ctxp here. (gimplify_decl_expr): Do it here. (gimplify_target_expr): Likewise. 2018-03-28 Jakub Jelinek <jakub@redhat.com> Martin Liska <mliska@suse.cz> PR sanitizer/85081 * g++.dg/asan/pr85081.C: New test. Co-Authored-By: Martin Liska <mliska@suse.cz> From-SVN: r258924
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/gimplify.c10
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/asan/pr85081.C20
4 files changed, 39 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 33f78bc..7742da1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2018-03-28 Jakub Jelinek <jakub@redhat.com>
+ Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/85081
+ * gimplify.c (asan_poison_variable): Don't do the check for
+ gimplify_omp_ctxp here.
+ (gimplify_decl_expr): Do it here.
+ (gimplify_target_expr): Likewise.
+
2018-03-28 Martin Liska <mliska@suse.cz>
PR target/84988
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 115f80b..c32869b4 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1168,10 +1168,6 @@ static void
asan_poison_variable (tree decl, bool poison, gimple_stmt_iterator *it,
bool before)
{
- /* When within an OMP context, do not emit ASAN_MARK internal fns. */
- if (gimplify_omp_ctxp)
- return;
-
tree unit_size = DECL_SIZE_UNIT (decl);
tree base = build_fold_addr_expr (decl);
@@ -1689,7 +1685,8 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
&& !TREE_STATIC (decl)
&& !DECL_HAS_VALUE_EXPR_P (decl)
&& DECL_ALIGN (decl) <= MAX_SUPPORTED_STACK_ALIGNMENT
- && dbg_cnt (asan_use_after_scope))
+ && dbg_cnt (asan_use_after_scope)
+ && !gimplify_omp_ctxp)
{
asan_poisoned_variables->add (decl);
asan_poison_variable (decl, false, seq_p);
@@ -6614,7 +6611,8 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
}
if (asan_poisoned_variables
&& DECL_ALIGN (temp) <= MAX_SUPPORTED_STACK_ALIGNMENT
- && dbg_cnt (asan_use_after_scope))
+ && dbg_cnt (asan_use_after_scope)
+ && !gimplify_omp_ctxp)
{
tree asan_cleanup = build_asan_poison_call_expr (temp);
if (asan_cleanup)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0fea418..fc1d5d0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-28 Jakub Jelinek <jakub@redhat.com>
+ Martin Liska <mliska@suse.cz>
+
+ PR sanitizer/85081
+ * g++.dg/asan/pr85081.C: New test.
+
2018-03-28 Alexandre Oliva <aoliva@redhat.com>
PR c++/84789
diff --git a/gcc/testsuite/g++.dg/asan/pr85081.C b/gcc/testsuite/g++.dg/asan/pr85081.C
new file mode 100644
index 0000000..d7dec31
--- /dev/null
+++ b/gcc/testsuite/g++.dg/asan/pr85081.C
@@ -0,0 +1,20 @@
+/* PR sanitizer/85081 */
+/* { dg-do run } */
+/* { dg-options "-fopenmp-simd" } */
+/* { dg-require-effective-target fopenmp } */
+
+inline const int& max(const int& a, const int& b)
+{
+ return a < b ? b : a;
+}
+
+int main()
+{
+ #pragma omp simd
+ for ( int i = 0; i < 20; ++i )
+ {
+ const int j = max(i, 1);
+ }
+
+ return 0;
+}