------- 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