[BUG] Segfault when all runs of a Complexity() benchmark are skipped
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 75/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- performance, testing
Direzione di ricerca
Inizia da BenchmarkRunner::DoOneRepetition e RunBenchmarks, menzionati nella spiegazione dell’issue relativa al crash con Runs vuoto. Riproduci il problema con il programma fornito usando Complexity() ed esecuzioni saltate, quindi esamina i test dei benchmark per trovare il punto giusto in cui aggiungere il caso di regressione. Il lavoro è concluso quando tutte le esecuzioni saltate vengono segnalate, i benchmark successivi continuano a essere eseguiti e non compaiono righe BigO o RMS.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- C++
- Stelle
- 10.5k
- Fork
- 1.8k
- Merge medio
- 2g 2h
- PR unite (30g)
- 31
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di google/benchmark
-
[BUG] Confusing title in docs/platform_specific_build_instructions.mdForse già presa @skryabae l’ha presa 26 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
[BUG] Memory manager counts allocations not part of benchmarkForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
google/benchmark#2149 · 5 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
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.pyForse già presa @Aryan9891 l’ha presa 5 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 64/100
google/benchmark#2299 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[FR] Add native Zig bindings via top-level `bindings/zig`Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 42/100
google/benchmark#2266 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
google/benchmark#2235 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di google/benchmark
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
pocoproject/poco#5636 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Code: Performance
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
CrimsonCrossBunker/Cataclysm-Cleanwater-Bomb#1167 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
meshcore-dev/MeshCore#3760 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno