Skip to content

fix(test): switch 30 test targets from wave8_cpp23_objects to wave8_opt_only_objects - #699

Merged
lusoris merged 1 commit into
masterfrom
fix/tsan-test-link-gap
Jun 6, 2026
Merged

lusoris merged 1 commit into
masterfrom
fix/tsan-test-link-gap

Conversation

@lusoris

@lusoris lusoris commented Jun 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • TSan build (and all sanitizer builds using static linking) fails at link time with undefined symbol: json_open_buffer, vmaf_model_generate_name, etc. for test_lpips, test_dists, and 28 other test targets.
  • Root cause: wave8_cpp23_objects includes read_json_model_cpp23_lib, whose object file references model.c and pdjson.c symbols. Tests that compile predict.c directly but do not include pdjson.c/model.c in their source list get undefined references when -fsanitize=thread forces static linking.
  • Fix: replace wave8_cpp23_objects with the lighter wave8_opt_only_objects (opt.cpp only) for all 30 registration/coverage tests that do not load models. Exactly mirrors the fix already applied to test_feature_extractor/test_iqa_helpers/test_opt in commit 2f3267f3b.

Affected tests (30)

test_lpips, test_dists, test_fastdvdnet_pre, test_mobilesal, test_transnet_v2, test_cambi_simd, test_speed, test_speed_qa, test_integer_psnr_coverage, test_integer_motion_coverage, test_integer_motion_v2_coverage, test_ssim_coverage, test_adm_coverage, test_psnr_hvs_coverage, test_ssimulacra2_coverage, test_iqa_convolve, test_psnr_hvs_avx2, test_vif_simd, test_psnr_hvs_simd, test_integer_adm_simd, test_integer_ssim_simd, test_ciede_simd_parity, test_motion_v2_simd, test_ssimulacra2_simd, test_psnr_hvs_neon, test_moment_simd, test_speed_simd, test_ms_ssim_decimate, test_float_ms_ssim_min_dim, test_motion_min_dim.

test_feature_collector (line 92) intentionally kept on wave8_cpp23_objects — it links with libvmaf which already supplies the pdjson/model symbols.

Test plan

  • CI Sanitizers — TSan (master push) gate passes (this was the failing gate)
  • meson setup build-san -Db_sanitize=thread && ninja -C build-san test/test_lpips test/test_dists links cleanly
  • No Netflix golden assertions touched (meson.build-only change)

Checklist

  • no digest needed: root-cause confirmed from CI linker log (06c2446, job 79834572133)
  • no alternatives: only-one-way fix (wave8_opt_only_objects already exists for this purpose)
  • no rebase-sensitive invariants
  • reproducer: ninja -C build-tsan test/test_lpips fails with ld.lld: error: undefined symbol: json_open_buffer before fix, links cleanly after
  • no rebase impact: meson.build-only change; no C source or public API touched
  • state.md: no bug row needed (build-system link gap, not a C correctness bug)

🤖 Generated with Claude Code

…pt_only_objects

wave8_cpp23_objects includes read_json_model_cpp23_lib, whose object file
references vmaf_model_generate_name / vmaf_model_destroy / vmaf_model_collection_append
(from model.c) and json_open_buffer / json_close / json_next / etc. (from pdjson.c).

Tests that compile predict.c directly but do not link pdjson.c or model.c
will fail at link time with undefined symbol errors under ld.lld when
-fsanitize=thread/-fsanitize=address forces static linking. The TSan build job
(06c2446) shows exactly this: test_lpips and test_dists fail first; all 30
registration-and-coverage tests that share the same link recipe are broken.

The fix introduced in commit 2f3267f (for test_feature_extractor, test_iqa_helpers,
test_opt) already defined wave8_opt_only_objects = [opt_cpp23_lib.extract_all_objects()]
for this purpose. Extend the same fix to all remaining registration-only and
coverage tests that do not load models.

test_feature_collector (line 92, link_with libvmaf) is intentionally left on
wave8_cpp23_objects — libvmaf.{a,so} already supplies pdjson/model symbols.

no digest needed: root-cause confirmed directly from CI linker log
no rebase impact: meson.build-only change; no C source or public API touched

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@lusoris
lusoris marked this pull request as ready for review June 6, 2026 01:03
@lusoris
lusoris merged commit 1a979f6 into master Jun 6, 2026
68 of 104 checks passed
@lusoris
lusoris deleted the fix/tsan-test-link-gap branch June 6, 2026 01:04
lusoris added a commit that referenced this pull request Jun 6, 2026
…06 batch (#719)

Refreshes bug-tracking and planning documents after the 18-PR June 5-6 batch
(#691–#711). Changes in docs/state.md (tracked):

- Add batch-sweep _Updated header summarising PRs #691–#711.
- Add T-NEON-FMA-FLOAT-ADM-DWT2-2026-06-06 to Open bugs table (was only in
  the _Updated header, missing from the table body).
- Remove duplicate T-CPP23-READ-JSON-MODEL-PENDING-2026-05-29 row (stale copy
  that cited closed PR #215 as OPEN; the de-cited version is kept).
- Fix concatenated duplicate T-GPU-COVERAGE-STABLE-WEEKS rows in Recently
  closed (two entries were joined on a single line without a separator).
- Add 8 new Recently closed rows for substantive June 5-6 fixes:
  T-NEON-FMA-FLOAT-ADM-DWT2-REVERT (PR #695 revert),
  T-METAL-FEATURE-COLLECTOR-EXTERN-C (PR #694),
  T-SYCL-DICT-INCLUDE-MISSING (PR #696),
  T-INTEGER-SSIM-I686-INCLUDE (PR #700),
  T-WAVE8-OBJ-TARGET-DEPS (PRs #699/#701),
  T-DNN-INT8-TEST-ADR1032-ALIGN (PR #705),
  T-MCP-SMOKE-11-FAILURES (PR #706).

OPEN.md and BACKLOG.md (gitignored, updated in main tree only):
- Header dates updated to 2026-06-06.
- SIMD divergence cluster marked CLOSED (PR #681, 2026-06-04).
- T-NEON-FMA-FLOAT-ADM-DWT2 added to Active right now.
- June 5-6 PR table added to Recently completed sections.
- Awaiting user decision updated: SIMD divergence closed, NEON FMA rewire new.

no rebase impact: docs/state.md only; no C sources touched.

Co-authored-by: Lusoris <lusoris@pm.me>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@lusoris lusoris added this to the 1.0.0 — First release milestone Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant