Files
google--benchmark/cmake/thread_safety_attributes.cpp
anish 33e9abfce4 Fix thread safety attribute detection failing to link in CMake check (#2178)
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>
2026-04-23 19:20:36 +01:00

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;
}