[Bug tree-optimization/27236] [4.1/4.2 Regression] inliner creates an INDIRECT_REF without TREE_THIS_VOLATILE set for *a
pinskia at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sat Apr 22 19:19:00 GMT 2006
------- Comment #3 from pinskia at gcc dot gnu dot org 2006-04-22 19:19 -------
One more inliner fix:
Index: tree-inline.c
===================================================================
--- tree-inline.c (revision 112997)
+++ tree-inline.c (working copy)
@@ -590,6 +590,7 @@ copy_body_r (tree *tp, int *walk_subtree
if (n)
{
tree new;
+ tree old;
/* If we happen to get an ADDR_EXPR in n->value, strip
it manually here as we'll eventually get ADDR_EXPRs
which lie about their types pointed to. In this case
@@ -598,13 +599,17 @@ copy_body_r (tree *tp, int *walk_subtree
does other useful transformations, try that first, though. */
tree type = TREE_TYPE (TREE_TYPE ((tree)n->value));
new = unshare_expr ((tree)n->value);
+ old = *tp;
*tp = fold_indirect_ref_1 (type, new);
if (! *tp)
{
if (TREE_CODE (new) == ADDR_EXPR)
*tp = TREE_OPERAND (new, 0);
else
- *tp = build1 (INDIRECT_REF, type, new);
+ {
+ *tp = build1 (INDIRECT_REF, type, new);
+ TREE_THIS_VOLATILE (*tp) = TREE_THIS_VOLATILE (old);
+ }
}
*walk_subtrees = 0;
return NULL;
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |hubicka at gcc dot gnu dot
| |org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27236
More information about the Gcc-bugs
mailing list