summaryrefslogtreecommitdiff
path: root/gcc/gimplify.c
diff options
context:
space:
mode:
authormarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2017-01-05 09:16:50 +0000
committermarxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>2017-01-05 09:16:50 +0000
commit1e35a093c6fde3afcaaf699a210a2d9589d26918 (patch)
tree35d4b9263534521db1a3b4659dbab8a4d9d370df /gcc/gimplify.c
parent4ce312c1996532522aa5566636afe2e17382bbf5 (diff)
downloadgcc-1e35a093c6fde3afcaaf699a210a2d9589d26918.tar.gz
Do not sanitize in an abnormal context (PR sanitizer/78815).
2017-01-05 Martin Liska <mliska@suse.cz> PR sanitizer/78815 * gimplify.c (gimplify_decl_expr): Compare to asan_poisoned_variables instread of checking flags. (gimplify_target_expr): Likewise. (gimplify_expr): Likewise. (gimplify_function_tree): Conditionally initialize asan_poisoned_variables. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@244095 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r--gcc/gimplify.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 14e79b4b3f3..e1e9ce9e903 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -1620,8 +1620,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
is_vla = true;
}
- if (asan_sanitize_use_after_scope ()
- && !asan_no_sanitize_address_p ()
+ if (asan_poisoned_variables
&& !is_vla
&& TREE_ADDRESSABLE (decl)
&& !TREE_STATIC (decl)
@@ -6413,8 +6412,7 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
else
cleanup = clobber;
}
- if (asan_sanitize_use_after_scope ()
- && dbg_cnt (asan_use_after_scope))
+ if (asan_poisoned_variables && dbg_cnt (asan_use_after_scope))
{
tree asan_cleanup = build_asan_poison_call_expr (temp);
if (asan_cleanup)
@@ -11426,7 +11424,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
/* If the label is used in a goto statement, or address of the label
is taken, we need to unpoison all variables that were seen so far.
Doing so would prevent us from reporting a false positives. */
- if (asan_sanitize_use_after_scope ()
+ if (asan_poisoned_variables
&& asan_used_labels != NULL
&& asan_used_labels->contains (label))
asan_poison_variables (asan_poisoned_variables, false, pre_p);
@@ -12531,10 +12529,14 @@ gimplify_function_tree (tree fndecl)
&& !needs_to_live_in_memory (ret))
DECL_GIMPLE_REG_P (ret) = 1;
- asan_poisoned_variables = new hash_set<tree> ();
+ if (asan_sanitize_use_after_scope () && !asan_no_sanitize_address_p ())
+ asan_poisoned_variables = new hash_set<tree> ();
bind = gimplify_body (fndecl, true);
- delete asan_poisoned_variables;
- asan_poisoned_variables = NULL;
+ if (asan_poisoned_variables)
+ {
+ delete asan_poisoned_variables;
+ asan_poisoned_variables = NULL;
+ }
/* The tree body of the function is no longer needed, replace it
with the new GIMPLE body. */