On 2012-10-30 05:32, Aldy Hernandez wrote: > + // If we have a ``_transaction_cancel [[outer]]'', there is only > + // one abnormal edge: to the transaction marked OUTER. > + tree arg = gimple_call_arg (stmt, 0); > + if (TREE_CODE (arg) == INTEGER_CST) > + { > + if (TREE_INT_CST_LOW (arg) & AR_OUTERABORT) > + { > + // Find the GTMA_IS_OUTER transaction. > + for (; region; region = region->outer) > + { > + if (region->original_transaction_was_outer) > + { > + make_edge (bb, region->entry_block, EDGE_ABNORMAL); > + return; > + } > + } > + // The front-end should have caught outer aborts without > + // an outer transaction. > + gcc_unreachable ();
Err, no the final check there would be if the current function includes attribute may_throw_abort_outer (sp). Just return here I think for now. Otherwise it looks ok. Obviously we can do better for the aborts, but I think that can be fixed in follow-up patches. r~