mirror of
https://github.com/google/benchmark.git
synced 2025-03-10 17:20:06 +08:00
Add workaround for VS2013 const-incorrect atomic (#230)
This commit is contained in:
parent
3685cad68c
commit
84cd50b85e
@ -115,7 +115,13 @@ std::string* GetReportLabel() {
|
|||||||
|
|
||||||
// Global variable so that a benchmark can report an error as a human readable
|
// Global variable so that a benchmark can report an error as a human readable
|
||||||
// string. If error_message is null no error occurred.
|
// string. If error_message is null no error occurred.
|
||||||
static std::atomic<const char*> error_message = ATOMIC_VAR_INIT(nullptr);
|
#if defined(_MSC_VER) && _MSC_VER <= 1800
|
||||||
|
typedef char* error_message_type;
|
||||||
|
#else
|
||||||
|
typedef const char* error_message_type;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static std::atomic<error_message_type> error_message = ATOMIC_VAR_INIT(nullptr);
|
||||||
|
|
||||||
// TODO(ericwf): support MallocCounter.
|
// TODO(ericwf): support MallocCounter.
|
||||||
//static benchmark::MallocCounter *benchmark_mc;
|
//static benchmark::MallocCounter *benchmark_mc;
|
||||||
@ -807,7 +813,7 @@ void RunBenchmark(const benchmark::internal::Benchmark::Instance& b,
|
|||||||
MutexLock l(GetBenchmarkLock());
|
MutexLock l(GetBenchmarkLock());
|
||||||
label = *GetReportLabel();
|
label = *GetReportLabel();
|
||||||
}
|
}
|
||||||
const char* error_msg = error_message;
|
error_message_type error_msg = error_message;
|
||||||
|
|
||||||
const double min_time = !IsZero(b.min_time) ? b.min_time
|
const double min_time = !IsZero(b.min_time) ? b.min_time
|
||||||
: FLAGS_benchmark_min_time;
|
: FLAGS_benchmark_min_time;
|
||||||
@ -929,8 +935,9 @@ void State::ResumeTiming() {
|
|||||||
void State::SkipWithError(const char* msg) {
|
void State::SkipWithError(const char* msg) {
|
||||||
CHECK(msg);
|
CHECK(msg);
|
||||||
error_occurred_ = true;
|
error_occurred_ = true;
|
||||||
const char* expected_no_error_msg = nullptr;
|
error_message_type expected_no_error_msg = nullptr;
|
||||||
error_message.compare_exchange_weak(expected_no_error_msg, msg);
|
error_message.compare_exchange_weak(expected_no_error_msg,
|
||||||
|
const_cast<error_message_type>(msg));
|
||||||
started_ = finished_ = true;
|
started_ = finished_ = true;
|
||||||
total_iterations_ = max_iterations;
|
total_iterations_ = max_iterations;
|
||||||
timer_manager->RemoveErroredThread();
|
timer_manager->RemoveErroredThread();
|
||||||
|
Loading…
Reference in New Issue
Block a user