------- Comment #6 from rguenth at gcc dot gnu dot org 2010-03-01 11:48 -------
Confirmed with a cross to hppa-linux.
I believe this is again related to DECL_VALUE_EXPR. SRA does:
@@ -122,8 +60,9 @@
<bb 2>:
x.0 = x;
+ SR.3_7 = x.a;
y.1_6 = y_1(D);
- D.1959_2 = x.0.a;
+ D.1959_2 = SR.3_7;
y.2_3 = y.1_6;
if (D.1959_2 != y.2_3)
goto <bb 3>;
but x is replaced with x.0 (callee copy). SRA shouldn't undo this
(thus, never create replacements involving a DECL with DECL_HAS_VALUE_EXPR_P
set).
Reduced testcase:
typedef struct {
_Complex double a;
_Complex double b;
} Scf10;
void
check (Scf10 x, _Complex double y)
{
if (x.a != y) __builtin_abort ();
}
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jamborm at gcc dot gnu dot
| |org
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
GCC build triplet|hppa-unknown-linux-gnu |
GCC host triplet|hppa-unknown-linux-gnu |
GCC target triplet|hppa-unknown-linux-gnu |hppa-unknown-linux-gnu,
| |hppa2.0w-hp-hpux11.11
Priority|P3 |P1
Last reconfirmed|0000-00-00 00:00:00 |2010-03-01 11:48:54
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42805