On 2012-11-01 07:31, Aldy Hernandez wrote: > + // Hmmm, the front-end should have caught outer aborts without > + // an outer transaction. Bail and hope for the best. > + tree attrs = get_attrs_for (current_function_decl); > + if (!attrs || !lookup_attribute ("transaction_may_cancel_outer", > + attrs)) > + return;
No, like // The front end should have semantically checked outer aborts, but in either case // the target region is not within this function. gcc_checking_assert(attrs && lookup_attribute ("transaction_may_cancel_outer", attrs)); return; And now that you mention it... > - if (subcode & GTMA_DOES_GO_IRREVOCABLE) > - flags = PR_DOESGOIRREVOCABLE | PR_UNINSTRUMENTEDCODE; > - else > - flags = PR_INSTRUMENTEDCODE; ... > + int flags = PR_MULTIWAYCODE; > + tree tm_start = builtin_decl_explicit (BUILT_IN_TM_START); > + > + /* ??? There are plenty of bits here we're not computing. */ > + int subcode = gimple_transaction_subcode (region->transaction_stmt); > + if (subcode & GTMA_DOES_GO_IRREVOCABLE) > + flags |= PR_DOESGOIRREVOCABLE; This is a regression for GTMA_DOES_GO_IRREVOCABLE. We don't want to generate instrumented code in that case. We certainly didn't before. And lets not advertise uninstrumented code until we've got it. r~