blob: ab10c34baaac997aa963f3470c55fa659ceaac3a [file] [log] [blame]
// { dg-do compile }
// { dg-options "-fgnu-tm -O1" }
__attribute__((transaction_pure))
inline int atomic_exchange_and_add(int dv )
{
int r;
__asm__ ("" : "=r"(r));
return r;
}
class sp_counted_base
{
public:
__attribute__((transaction_safe))
void release()
{
if( atomic_exchange_and_add(-1 ) == 1 )
{
}
}
};
sp_counted_base *base;
void here(){
__transaction_atomic {
base->release();
}
}