33e9abfce4
The `cmake/thread_safety_attributes.cpp` check was including `../src/mutex.h`, which transitively pulls in `check.h`. That header declares `benchmark::internal::GetAbortHandler()` with `BENCHMARK_EXPORT`, which requires linking against the benchmark library. Since `try_run` in `CXXFeatureCheck.cmake` only links against `BENCHMARK_CXX_LIBRARIES` (which doesn't include the full library at check time), the check failed to link, leaving `HAVE_THREAD_SAFETY_ATTRIBUTES` undefined. Signed-off-by: anish k <ak8686@princeton.edu>
26 lines
571 B
C++
26 lines
571 B
C++
#if defined(__clang__)
|
|
#define THREAD_ANNOTATION_ATTRIBUTE_(x) __attribute__((x))
|
|
#else
|
|
#define THREAD_ANNOTATION_ATTRIBUTE_(x)
|
|
#endif
|
|
|
|
#define CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE_(capability(x))
|
|
#define ACQUIRE() THREAD_ANNOTATION_ATTRIBUTE_(acquire_capability())
|
|
#define RELEASE() THREAD_ANNOTATION_ATTRIBUTE_(release_capability())
|
|
|
|
class CAPABILITY("mutex") Mutex {
|
|
public:
|
|
void lock() ACQUIRE();
|
|
void unlock() RELEASE();
|
|
};
|
|
|
|
void Mutex::lock() ACQUIRE() {}
|
|
void Mutex::unlock() RELEASE() {}
|
|
|
|
int main() {
|
|
Mutex m;
|
|
m.lock();
|
|
m.unlock();
|
|
return 0;
|
|
}
|