re PR tree-optimization/35716 (gfortran.dg/assign_6.f and gfortran.dg/g77/dnrm2.f)

2008-03-27  Richard Guenther  <rguenther@suse.de>

	PR middle-end/35716
	* fold-const.c (fold_comparison): Restrict distinct decl
	comparison folding to VAR_DECLs and PARM_DECLs.  Do not
	solely rely on operand_equal_p.

From-SVN: r133647
This commit is contained in:
Richard Guenther 2008-03-27 17:09:54 +00:00 committed by Richard Biener
parent 6b4e94bcae
commit ffd837fe16
2 changed files with 14 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2008-03-27 Richard Guenther <rguenther@suse.de>
PR middle-end/35716
* fold-const.c (fold_comparison): Restrict distinct decl
comparison folding to VAR_DECLs and PARM_DECLs. Do not
solely rely on operand_equal_p.
2008-03-27 Richard Guenther <rguenther@suse.de>
PR c/32511

View File

@ -8584,14 +8584,18 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
of local binding decls or constants. */
else if (indirect_base0 && indirect_base1
/* We know that !operand_equal_p (base0, base1, 0)
because the if condition was false. */
because the if condition was false. But make
sure two decls are not the same. */
&& base0 != base1
&& TREE_CODE (arg0) == ADDR_EXPR
&& TREE_CODE (arg1) == ADDR_EXPR
&& ((DECL_P (base0)
&& (((TREE_CODE (base0) == VAR_DECL
|| TREE_CODE (base0) == PARM_DECL)
&& (targetm.binds_local_p (base0)
|| CONSTANT_CLASS_P (base1)))
|| CONSTANT_CLASS_P (base0))
&& ((DECL_P (base1)
&& (((TREE_CODE (base1) == VAR_DECL
|| TREE_CODE (base1) == PARM_DECL)
&& (targetm.binds_local_p (base1)
|| CONSTANT_CLASS_P (base0)))
|| CONSTANT_CLASS_P (base1)))