Message ID | 66432be8-aa38-b393-048d-85af9087f4ed@suse.cz |
---|---|
State | New |
Headers | show |
Series | Do not instrument static target_expr for use-after-scope (PR sanitizer/90570). | expand |
On Thu, May 23, 2019 at 09:23:09AM +0200, Martin Liška wrote: > Hi. > > ASAN should skip TREE_STATIC target expression similarly to gimplify_decl_expr. > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > > Ready to be installed? > Thanks, > Martin > > gcc/ChangeLog: > > 2019-05-22 Martin Liska <mliska@suse.cz> > > PR sanitizer/90570 > * gimplify.c (gimplify_target_expr): Skip TREE_STATIC target > expression similarly to gimplify_decl_expr. > > gcc/testsuite/ChangeLog: > > 2019-05-22 Martin Liska <mliska@suse.cz> > > PR sanitizer/90570 > * g++.dg/asan/pr90570.C: New test. Ok (and after a while to 9.x too (not sure if 7.x/8.x need that too or not). Jakub
On 5/23/19 9:26 AM, Jakub Jelinek wrote: > On Thu, May 23, 2019 at 09:23:09AM +0200, Martin Liška wrote: >> Hi. >> >> ASAN should skip TREE_STATIC target expression similarly to gimplify_decl_expr. >> >> Patch can bootstrap on x86_64-linux-gnu and survives regression tests. >> >> Ready to be installed? >> Thanks, >> Martin >> >> gcc/ChangeLog: >> >> 2019-05-22 Martin Liska <mliska@suse.cz> >> >> PR sanitizer/90570 >> * gimplify.c (gimplify_target_expr): Skip TREE_STATIC target >> expression similarly to gimplify_decl_expr. >> >> gcc/testsuite/ChangeLog: >> >> 2019-05-22 Martin Liska <mliska@suse.cz> >> >> PR sanitizer/90570 >> * g++.dg/asan/pr90570.C: New test. > > Ok (and after a while to 9.x too (not sure if 7.x/8.x need that too or not). I'll backport that to all of them. Theoretically they can be affected. Thanks, Martin > > Jakub >
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 5bacb255ba7..e5713dd4e8c 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -6666,6 +6666,7 @@ 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 + && !TREE_STATIC (temp) && dbg_cnt (asan_use_after_scope) && !gimplify_omp_ctxp) { diff --git a/gcc/testsuite/g++.dg/asan/pr90570.C b/gcc/testsuite/g++.dg/asan/pr90570.C new file mode 100644 index 00000000000..c2366905516 --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr90570.C @@ -0,0 +1,18 @@ +/* PR sanitizer/90570 */ +/* { dg-do run } */ + +#include <vector> + +struct stru +{ + std::vector<int> v{1,2,3,4}; + int i{5}; +}; + +int main() +{ + stru s1; + stru s2; + + return 0; +}