re PR middle-end/67120 (wrong code for volatile pointers at -O1 and above on x86_64-linux-gnu)

2015-08-05  Richard Biener  <rguenther@suse.de>

	PR middle-end/67120
	* match.pd: Compare address bases with == if they are decls
	or SSA names, not operand_equal_p.  Otherwise fail.

	* gcc.dg/torture/pr67120.c: New testcase.

From-SVN: r226623
This commit is contained in:
Richard Biener 2015-08-05 12:47:59 +00:00 committed by Richard Biener
parent a56ea54ab0
commit aad88aede9
4 changed files with 31 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2015-08-05 Richard Biener <rguenther@suse.de>
PR middle-end/67120
* match.pd: Compare address bases with == if they are decls
or SSA names, not operand_equal_p. Otherwise fail.
2015-08-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/67055

View File

@ -1848,13 +1848,14 @@ along with GCC; see the file COPYING3. If not see
(if (base0 && base1)
(with
{
int equal;
int equal = 2;
if (decl_in_symtab_p (base0)
&& decl_in_symtab_p (base1))
equal = symtab_node::get_create (base0)
->equal_address_to (symtab_node::get_create (base1));
else
equal = operand_equal_p (base0, base1, 0);
else if ((DECL_P (base0) || TREE_CODE (base0) == SSA_NAME)
&& (DECL_P (base1) || TREE_CODE (base1) == SSA_NAME))
equal = (base0 == base1);
}
(if (equal == 1
&& (cmp == EQ_EXPR || cmp == NE_EXPR

View File

@ -1,3 +1,8 @@
2015-08-05 Richard Biener <rguenther@suse.de>
PR middle-end/67120
* gcc.dg/torture/pr67120.c: New testcase.
2015-08-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/52846

View File

@ -0,0 +1,16 @@
/* { dg-do run } */
volatile int *volatile *a;
static volatile int *volatile **b = &a;
int
main ()
{
volatile int *volatile c;
*b = &c;
if (a != &c)
__builtin_abort ();
return 0;
}