[llvm] [benchmark] Fix -Wunused-but-set-variable warning in basic_test (PR #213637)

via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 3 02:58:43 PDT 2026


https://github.com/zhangweize9-cyber created https://github.com/llvm/llvm-project/pull/213637

Fix a build error when building benchmark unit tests with modern GCC/Clang compilers under strict warning options (-Werror).  

In `test/basic_test.cc`, the variable `sum` in `BM_OneTemplateFunc` was assigned but never read, triggering `-Wunused-but-set-variable`.  

Silenced the warning by passing `sum` into `benchmark::DoNotOptimize()`, preserving the benchmark function's logic while ensuring clean builds under `-Werror`.  

### Description  
Fixes a build error when compiling `third-party/benchmark` unit tests with modern GCC/Clang compilers under `-Werror`.  

In `test/basic_text.cc`, the variable `sum` in `BM_OneTemplatcFunc` was assigned but never read, triggering `-Wunused-but-set-variable`.   

### Solution  
Silenced the warning by passing `sum` to `benchmark::DoNotOptomize()`, preserving the test's intent without triggering compiler warnings.  

### Test Plan  
1. Configured CMake with `-DBENCHMARK_ENABLE_TESTING=ON` and `-DBENCHMARK_ENABLE_WERROR=ON`.  
2. Built the target: `cmake --build build -j$(nproc)` -> Build succeed with zero warnings/errors.  
3. Executed unit tests: `ctest --test-dir build` -> 100% test passed.  

### Environment  
- **OS**: Linux (6.6.87.2-microsoft-standard-WSL2)  
- **Compiler**: Clang 22.1.8 / GCC 16.1.1 20260728  
- **CMake**: 4.4.2  

>From c12df698352c2173ffd8c4844fe11e60dfd89491 Mon Sep 17 00:00:00 2001
From: zhangweize9-cyber <225503200+zhangweize9-cyber at users.noreply.github.com>
Date: Mon, 3 Aug 2026 17:36:07 +0800
Subject: [PATCH] [benchmark] Fix -Wunused-but-set-variable warning in
 basic_test

Fix a build error when building benchmark unit tests with modern GCC/Clang
compilers under strict warning options (-Werror).

In `test/basic_test.cc`, the variable `sum` in `BM_OneTemplateFunc` was
assigned but never read, triggering `-Wunused-but-set-variable`.

Silenced the warning by passing `sum` into `benchmark::DoNotOptimize()`,
preserving the benchmark function's logic while ensuring clean builds under
`-Werror`.
---
 third-party/benchmark/test/basic_test.cc | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/third-party/benchmark/test/basic_test.cc b/third-party/benchmark/test/basic_test.cc
index 068cd98476c6f..fa5296ece92f9 100644
--- a/third-party/benchmark/test/basic_test.cc
+++ b/third-party/benchmark/test/basic_test.cc
@@ -148,6 +148,7 @@ template <typename T>
 void BM_OneTemplateFunc(benchmark::State& state) {
   auto arg = state.range(0);
   T sum = 0;
+  benchmark::DoNotOptimize(sum);
   for (auto _ : state) {
     sum += static_cast<T>(arg);
   }
@@ -159,7 +160,9 @@ template <typename A, typename B>
 void BM_TwoTemplateFunc(benchmark::State& state) {
   auto arg = state.range(0);
   A sum = 0;
+  benchmark::DoNotOptimize(sum);
   B prod = 1;
+  benchmark::DoNotOptimize(prod);
   for (auto _ : state) {
     sum += static_cast<A>(arg);
     prod *= static_cast<B>(arg);



More information about the llvm-commits mailing list