diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-01-08 10:20:24 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-01-08 10:20:24 +0100 |
commit | bd84df1879c9f7acf4e25a2b7d638013d17e6896 (patch) | |
tree | 921d6d769d91040d99d552f697691471aae5e957 | |
parent | ae6b8666c957ea16bc44fd4d4d425b0db8d6bd85 (diff) | |
download | gcc-bd84df1879c9f7acf4e25a2b7d638013d17e6896.zip gcc-bd84df1879c9f7acf4e25a2b7d638013d17e6896.tar.gz gcc-bd84df1879c9f7acf4e25a2b7d638013d17e6896.tar.bz2 |
re PR sanitizer/64336 (Template functions are not instrumented at -O0 and -Og)
PR sanitizer/64336
* tree.c (build2_stat): Fix up initialization of TREE_READONLY
and TREE_THIS_VOLATILE for MEM_REFs.
(build5_stat): Fix up initialization of TREE_READONLY and
TREE_THIS_VOLATILE for TARGET_MEM_REFs.
From-SVN: r219339
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/tree.c | 38 |
2 files changed, 38 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 55ffb7b..2661550 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-01-08 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/64336 + * tree.c (build2_stat): Fix up initialization of TREE_READONLY + and TREE_THIS_VOLATILE for MEM_REFs. + (build5_stat): Fix up initialization of TREE_READONLY and + TREE_THIS_VOLATILE for TARGET_MEM_REFs. + 2015-01-08 Kaz Kojima <kkojima@gcc.gnu.org> PR target/64533 @@ -4358,12 +4358,24 @@ build2_stat (enum tree_code code, tree tt, tree arg0, tree arg1 MEM_STAT_DECL) PROCESS_ARG (0); PROCESS_ARG (1); - TREE_READONLY (t) = read_only; - TREE_CONSTANT (t) = constant; TREE_SIDE_EFFECTS (t) = side_effects; - TREE_THIS_VOLATILE (t) - = (TREE_CODE_CLASS (code) == tcc_reference - && arg0 && TREE_THIS_VOLATILE (arg0)); + if (code == MEM_REF) + { + if (arg0 && TREE_CODE (arg0) == ADDR_EXPR) + { + tree o = TREE_OPERAND (arg0, 0); + TREE_READONLY (t) = TREE_READONLY (o); + TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o); + } + } + else + { + TREE_READONLY (t) = read_only; + TREE_CONSTANT (t) = constant; + TREE_THIS_VOLATILE (t) + = (TREE_CODE_CLASS (code) == tcc_reference + && arg0 && TREE_THIS_VOLATILE (arg0)); + } return t; } @@ -4458,9 +4470,19 @@ build5_stat (enum tree_code code, tree tt, tree arg0, tree arg1, PROCESS_ARG (4); TREE_SIDE_EFFECTS (t) = side_effects; - TREE_THIS_VOLATILE (t) - = (TREE_CODE_CLASS (code) == tcc_reference - && arg0 && TREE_THIS_VOLATILE (arg0)); + if (code == TARGET_MEM_REF) + { + if (arg0 && TREE_CODE (arg0) == ADDR_EXPR) + { + tree o = TREE_OPERAND (arg0, 0); + TREE_READONLY (t) = TREE_READONLY (o); + TREE_THIS_VOLATILE (t) = TREE_THIS_VOLATILE (o); + } + } + else + TREE_THIS_VOLATILE (t) + = (TREE_CODE_CLASS (code) == tcc_reference + && arg0 && TREE_THIS_VOLATILE (arg0)); return t; } |