This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/71372] [6/7 Regression] GCC Optimization "tree-dse" does not respect access to volatile* upon explicit cast.
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 01 Jun 2016 13:35:32 +0000
- Subject: [Bug c++/71372] [6/7 Regression] GCC Optimization "tree-dse" does not respect access to volatile* upon explicit cast.
- Auto-submitted: auto-generated
- References: <bug-71372-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71372
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
So pre gimplification we have
(gdb) p debug_generic_expr (0x7ffff69fcbe0)
*FLASH
(gdb) p ((tree)0x7ffff69fcbe0)->base.volatile_flag
$5 = 0
thus somehow the INDIRECT_REF misses the TREE_THIS_VOLATILE flag.
So it is cp_fold folding
<indirect_ref 0x7ffff69fc960
type <integer_type 0x7ffff69ee7e0 short unsigned int volatile unsigned HI
size <integer_cst 0x7ffff68a8018 constant 16>
unit size <integer_cst 0x7ffff68a8030 constant 2>
align 16 symtab 0 alias set -1 canonical type 0x7ffff69ee7e0 precision
16 min <integer_cst 0x7ffff68a8048 0> max <integer_cst 0x7ffff68a8000 65535>
pointer_to_this <pointer_type 0x7ffff69ee888>>
side-effects volatile
^^^^^^^^^^^^^^^^^^^^^^
via
unary:
loc = EXPR_LOCATION (x);
op0 = cp_fold_maybe_rvalue (TREE_OPERAND (x, 0), rval_ops);
if (op0 != TREE_OPERAND (x, 0))
{
if (op0 == error_mark_node)
x = error_mark_node;
else
x = fold_build1_loc (loc, code, TREE_TYPE (x), op0);
^^^^^^^^^^^
but forgetting to re-apply TREE_THIS_VOLATILE. This probably seriously breaks
volatile support.