#include<cstdint>#include"benchmark/benchmark.h"namespace{#ifdefined(__GNUC__)
std::uint64_tdouble_up(const std::uint64_tx)__attribute__((const));#endif
std::uint64_tdouble_up(const std::uint64_tx){return x *2;}}// namespace
// Using DoNotOptimize on types like BitRef seem to cause a lot of problems
// with the inline assembly on both GCC and Clang.
structBitRef{int index;unsignedchar& byte;public:static BitRef Make(){staticunsignedchar arr[2]={};
BitRef b(1, arr[0]);return b;}private:BitRef(inti,unsignedchar&b):index(i),byte(b){}};intmain(int,char*[]){// this test verifies compilation of DoNotOptimize() for some types
char buffer8[8]="";benchmark::DoNotOptimize(buffer8);char buffer20[20]="";benchmark::DoNotOptimize(buffer20);char buffer1024[1024]="";benchmark::DoNotOptimize(buffer1024);benchmark::DoNotOptimize(&buffer1024[0]);int x =123;benchmark::DoNotOptimize(x);benchmark::DoNotOptimize(&x);benchmark::DoNotOptimize(x +=42);benchmark::DoNotOptimize(double_up(x));// These tests are to e
benchmark::DoNotOptimize(BitRef::Make());
BitRef lval =BitRef::Make();benchmark::DoNotOptimize(lval);}