// { dg-do compile } // { dg-options "-fgnu-tm" } #define __ts __attribute__((transaction_safe)) #define __tc __attribute__((transaction_callable)) #define __tp __attribute__((transaction_pure)) #define __tu __attribute__((transaction_unsafe)) struct __ts A { virtual void f(); virtual void g(); }; struct __tc B : public A { void f() __tc; // { dg-error ".transaction_callable. overriding .transaction_safe." } void g(); virtual void h(); }; struct C : public B { void g() __tc; // { dg-error ".transaction_callable. overriding .transaction_safe." } }; struct C2 : public B { void g() __ts; void h() __tu; // { dg-error ".transaction_unsafe. overriding .transaction_callable." } }; struct D { virtual void f() __tp; virtual void g() __tp; }; struct E : public D { void f() __ts; // { dg-error ".transaction_safe. overriding .transaction_pure." } void g(); }; struct F : public E { void g() __ts; // { dg-error ".transaction_safe. overriding .transaction_pure." } };