Open
Description
See godbolt
#define LOCKABLE __attribute__((lockable))
#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__((exclusive_lock_function(__VA_ARGS__)))
#define UNLOCK_FUNCTION(...) __attribute__((unlock_function(__VA_ARGS__)))
#define GUARDED_BY(x) __attribute__((guarded_by(x)))
class LOCKABLE Mutex {
public:
void Lock() EXCLUSIVE_LOCK_FUNCTION();
void Unlock() UNLOCK_FUNCTION();
};
class Test {
Mutex mu;
union {
int a GUARDED_BY(mu);
int b GUARDED_BY(mu);
} ;
void test1() {
mu.Lock();
a = 0; // unexpected warning: writing variable 'a' requires holding mutex 'mu' exclusively
mu.Unlock();
}
};