------- Comment #1 from jakub at gcc dot gnu dot org 2009-03-18 08:56 -------
Created an attachment (id=17483)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17483&action=view)
gcc44-pr39485.patch
Self inflicted pain I'd say, if you don't want something in register, don't use
a register keyword. That said, the following patch does that for you.
In 4.3 the reason why the above testcase had v stored in memory, not in
register, has been just that it has been used in multiple basic blocks and
global allocation wasn't performed.
If you use a simpler testcase like:
struct S
{
int x;
int method ();
};
int
S::method ()
{
return x + 5;
}
int
main ()
{
register S v;
v.x = 0;
return v.x + 5;
}
then even g++ 4.3 and earlier will allocate v in a register and so you won't be
able to do v.method () in the debugger (though, with the attached patch you
can).
With the patch:
struct S
{
int x;
};
int
main ()
{
register int v;
int i;
v = 0;
for (i = 0; i < 13; ++i)
v += i;
--v;
return v + 5;
}
will still use a register for v, but that is definitely fine.
--
jakub at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |jakub at gcc dot gnu dot org
|dot org |
Status|UNCONFIRMED |ASSIGNED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39485