This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
problem with purge_addressof (function.c)
- To: gcc at gcc dot gnu dot org
- Subject: problem with purge_addressof (function.c)
- From: "Lieven Marchand" <mal at wyrd dot be>
- Date: 20 Feb 2001 18:38:37 +0100
Hi,
I've checked out PR 2035 which claims to be an ICE for valid
code. It's an ICE all right but the code is invalid.
A small program that triggers the bug is the following:
int main(int v0, char ** v1)
{
double v8;
union {
struct {
float f34;
float f35;
} f;
} d65;
d65.f.f34=*(float *)&v8;
return 0;
}
(The problem only shows when compiling with -O4).
This gives the following instruction:
(insn 15 30 16 (set (reg:SF 110)
(mem:SF (addressof:SI (reg/v:DF 109) 108 370a28) 9)) 84 {*movsf_insn_novis} (nil)
(nil))
purge_addressoff_1 tries to remove the addressof by replacing it with
a bitfield operation. But the comment in expmed.c clearly states that
this isn't going to work.
else
/* Else we've got some float mode source being extracted into
a different float mode destination -- this combination of
subregs results in Severe Tire Damage. */
abort ();
Should this limitation be removed or should purge_addressof handle
this case differently and if so how?
--
Lieven Marchand <mal@wyrd.be>
Glaðr ok reifr skyli gumna hverr, unz sinn bíðr bana.