aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-inline.c
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@cavium.com>2011-07-26 05:28:45 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2011-07-25 22:28:45 -0700
commit0de204de65593f3a5cfeb4a682e0566657b840f6 (patch)
tree5df32a8770e8baaad425277737ea84c3ea2e263b /gcc/tree-inline.c
parent9bc13c238df4ed18f702e70f976408dee0c7df6b (diff)
downloadgcc-0de204de65593f3a5cfeb4a682e0566657b840f6.zip
gcc-0de204de65593f3a5cfeb4a682e0566657b840f6.tar.gz
gcc-0de204de65593f3a5cfeb4a682e0566657b840f6.tar.bz2
re PR middle-end/49671 (volatile goes missing after inlining)
2011-07-25 Andrew Pinski <apinski@cavium.com> PR tree-opt/49671 * tree-inline.c (remap_gimple_op_r): Copy TREE_THIS_VOLATILE and TREE_THIS_NOTRAP into the inner most MEM_REF. Always copy TREE_THIS_VOLATILE. * tree-sra.c (ptr_parm_has_direct_uses): Check that the lhs, rhs and arguments are not volatile references. 2011-07-25 Andrew Pinski <apinski@cavium.com> PR tree-opt/49671 * gcc.dg/tree-ssa/pr49671-1.c: New testcase. * gcc.dg/tree-ssa/pr49671-2.c: New testcase. From-SVN: r176782
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r--gcc/tree-inline.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index 6a8eae8..e9daff6 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -881,14 +881,16 @@ remap_gimple_op_r (tree *tp, int *walk_subtrees, void *data)
build_int_cst
(TREE_TYPE (TREE_OPERAND (*tp, 1)), 0));
*tp = tem;
+ TREE_THIS_VOLATILE (*tem_basep) = TREE_THIS_VOLATILE (old);
+ TREE_THIS_NOTRAP (*tem_basep) = TREE_THIS_NOTRAP (old);
}
else
{
*tp = fold_build2 (MEM_REF, type,
ptr, TREE_OPERAND (*tp, 1));
- TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
TREE_THIS_NOTRAP (*tp) = TREE_THIS_NOTRAP (old);
}
+ TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
TREE_NO_WARNING (*tp) = TREE_NO_WARNING (old);
*walk_subtrees = 0;
return NULL;