http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56572
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-12-09 Component|c |tree-optimization Version|trans-mem |4.9.0 Ever confirmed|0 |1 --- Comment #3 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- Confirmed. The problem is also present in 4.9. The problem here is that the code removing nested transactions runs as part of the execute_lower_tm() pass: /* If there was absolutely nothing transaction related inside the transaction, we may elide it. Likewise if this is a nested transaction and does not contain an abort. */ if (this_state == 0 || (!(this_state & GTMA_HAVE_ABORT) && outer_state != NULL)) ...whereas inlining happens in a subsequent pass.