http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51771
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-06-01 Ever Confirmed|0 |1 --- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> 2012-06-01 16:39:12 UTC --- This is a mental note for whenever we decide to pick this up again... The current approach with the returns-twice patch is a bit heavy handed, as the register allocator will more-or-less give up across returns-twice. With the appropriate abnormal edges, the allocator will get more exact info. Whether or not it's able to do anything extra with this info is a different story... That's why, we should drop this to ultra low priority-- the returns-twice approach is good enough. However, when someone gets bored, the way to debug this is with any trivial testcase: int glob; foo() { __transaction_atomic { glob=666; } } If one reverts the returns-twice patch referenced in this PR, one sees the abnormal edges all the way up to *.c.*t.optimized. The edges get corrupted somewhere in the RTL passes.