// { dg-do compile } // { dg-options "-fgnu-tm" } static inline void atomic_exchange_and_add() { __asm__ (""); } template class shared_ptr { public: shared_ptr( T * p ) { atomic_exchange_and_add(); } }; class BuildingCompletedEvent { public: __attribute__((transaction_callable)) void updateBuildingSite(void); __attribute__((transaction_pure)) BuildingCompletedEvent(); }; void BuildingCompletedEvent::updateBuildingSite(void) { shared_ptr event(new BuildingCompletedEvent()); }