[BUG] Segfault when all runs of a Complexity() benchmark are skipped
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 75/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- cpp
- 領域
- performance, testing
調査の方向性
Runs が空の場合のクラッシュについて issue の説明で挙げられている BenchmarkRunner::DoOneRepetition と RunBenchmarks から始めます。提供されたプログラムで Complexity() とスキップされた実行を使って再現し、その後、回帰テストを追加する適切な場所を見つけるためにベンチマークテストを調べます。すべてのスキップされた実行が報告され、後続のベンチマークも実行され、BigO または RMS の行が表示されなければ完了です。
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
If every run of a benchmark family using Complexity() is skipped, with either SkipWithMessage or SkipWithError, RunSpecifiedBenchmarks() segfaults. The remaining results are lost, and any later benchmarks don't run. The same benchmark without Complexity() exits normally.
System
- OS: macOS 26.6.2 (arm64)
- Compiler and version: Apple clang 21.0.0 (clang-2100.3.34.2)
To reproduce
- Sync to commit e508a65 (
main) and build in Release mode. - Compile and run this program, linked against the library:
#include <benchmark/benchmark.h>
static void BM_Sort(benchmark::State& state) {
state.SkipWithMessage("not supported on this machine");
for (auto _ : state) {
}
state.SetComplexityN(state.range(0));
}
BENCHMARK(BM_Sort)->Range(8, 64)->Complexity();
BENCHMARK_MAIN();
- It prints the
BM_Sort/8row, then exits with a segfault (exit code 139) before printingBM_Sort/64.
Expected behavior
Both runs are reported as skipped, no BigO or RMS rows are printed, and the program exits normally.
Additional context
BenchmarkRunner::DoOneRepetition counts skipped runs in num_runs_done, but only adds non-skipped runs to Runs. When every run in a family is skipped, Runs is empty once the family finishes, and RunBenchmarks still calls reports_for_family->Runs.front().family_index. UBSan reports a reference binding to a null pointer there.
The same code is in v1.10.0, though I only ran the reproducer on main.
I'd like to work on this. I have a fix that takes the family index from the benchmark instance, plus a regression test, and can open a PR.
- 主要言語
- C++
- スター
- 10.5k
- フォーク
- 1.8k
- 平均マージ
- 2日 2時間
- マージ済み PR(30日)
- 30
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
google/benchmark のほかの issue
-
[BUG] Confusing title in docs/platform_specific_build_instructions.md対応中かも @skryabae が 28 日前に担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
[BUG] Memory manager counts allocations not part of benchmark再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
google/benchmark#2149 · コメント 5 件 ·
メンテナーはふだん 1 日以内に返信
-
Three small hardening notes from a security review: CSV formula-prefix neutralization, full C0 escaping in the JSON reporter, and type diagnostics in gbench/compare.py対応中かも @Aryan9891 が 7 日前に担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 64/100
google/benchmark#2299 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
[FR] Add native Zig bindings via top-level `bindings/zig`再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープン
難易度 5/5 1週間以上 初心者へのやさしさ 42/100
google/benchmark#2266 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
google/benchmark#2235 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
google/benchmark の issue をすべて見る
似ている issue
-
documentation enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
QuantStack/git2cpp#203 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
BaptisteHudyma/Lamp-Da#588 ·
メンテナーはふだん 1 日以内に返信
-
bug macOS networking
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
docling-project/docling-parse#448 ·
メンテナーはふだん 5 日以内に返信