re PR c/86617 (Volatile qualifier is ignored sometimes for unsigned char)

gcc:
2018-07-23  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR c/86617
        * genmatch.c (dt_operand::gen_match_op): Avoid folding volatile values.

testsuite:
2018-07-23  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR c/86617
        * gcc.dg/pr86617.c: New test.

From-SVN: r262933
This commit is contained in:
Bernd Edlinger 2018-07-23 13:23:51 +00:00 committed by Bernd Edlinger
parent a353fec45a
commit 1544db9a61
4 changed files with 27 additions and 4 deletions

View file

@ -1,3 +1,8 @@
2018-07-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR c/86617
* genmatch.c (dt_operand::gen_match_op): Avoid folding volatile values.
2018-07-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gimple-fold.c (gimple_fold_builtin_printf): Don't create a not NUL

View file

@ -2748,12 +2748,14 @@ dt_operand::gen_match_op (FILE *f, int indent, const char *opname, bool)
char match_opname[20];
match_dop->get_name (match_opname);
if (value_match)
fprintf_indent (f, indent, "if (%s == %s || operand_equal_p (%s, %s, 0))\n",
opname, match_opname, opname, match_opname);
fprintf_indent (f, indent, "if ((%s == %s && ! TREE_SIDE_EFFECTS (%s)) "
"|| operand_equal_p (%s, %s, 0))\n",
opname, match_opname, opname, opname, match_opname);
else
fprintf_indent (f, indent, "if (%s == %s || (operand_equal_p (%s, %s, 0) "
fprintf_indent (f, indent, "if ((%s == %s && ! TREE_SIDE_EFFECTS (%s)) "
"|| (operand_equal_p (%s, %s, 0) "
"&& types_match (%s, %s)))\n",
opname, match_opname, opname, match_opname,
opname, match_opname, opname, opname, match_opname,
opname, match_opname);
fprintf_indent (f, indent + 2, "{\n");
return 1;

View file

@ -1,3 +1,8 @@
2018-07-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR c/86617
* gcc.dg/pr86617.c: New test.
2018-07-23 Jakub Jelinek <jakub@redhat.com>
PR c++/86569

View file

@ -0,0 +1,11 @@
/* { dg-options "-Os -fdump-rtl-final" } */
volatile unsigned char u8;
void test (void)
{
u8 = u8 + u8;
u8 = u8 - u8;
}
/* { dg-final { scan-rtl-dump-times "mem/v" 6 "final" } } */