Skip to content

fix(qwen3.5): the capture #1054 dropped was not redundant, and MSVC says so - #1069

Merged
localai-bot merged 1 commit into
mainfrom
row/ENG-RELEASE-WINDOWS-1068
Aug 17, 2026
Merged

fix(qwen3.5): the capture #1054 dropped was not redundant, and MSVC says so#1069
localai-bot merged 1 commit into
mainfrom
row/ENG-RELEASE-WINDOWS-1068

Conversation

@localai-bot

@localai-bot localai-bot commented Aug 16, 2026

Copy link
Copy Markdown
Collaborator

e34d71379 removed [&kRequired] from the refuse lambda in
CheckMoeQuantLayoutSupported as "the redundant namespace-scope capture". Two
different variables carry that name, and only one of them is namespace-scope:
kMoeExpertLayoutHelp (:894) is a static const std::string and needs no
capture, while kRequired (:929) is a function-local const std::string&
bound to it, is odr-used in the lambda body, and therefore must be captured.
MSVC rejects the result with error C3493 and main has not compiled under it
since.

Naming the namespace-scope constant inside the lambda satisfies both compilers
at once: MSVC has nothing left to capture, and the AppleClang diagnostic #1054
set out to remove stays removed. Reverting to [&kRequired] would fix MSVC and
reintroduce that diagnostic. Behavior is unchanged because kRequired IS
kMoeExpertLayoutHelp; the reference is still used by the other refusal at
:947, so it does not become dead.

Verified by CI rather than locally for the compiler that matters: this box has
no MSVC, so windows-msvc-cpu and windows-msvc-vulkan on this PR are the
gate. g++ -std=c++20 -fsyntax-only on the TU returns 0.

Worth recording why this landed green. The guarding gate is a source-TEXT
assertion -- it "rejects const auto refuse = [&kRequired] and finds
const auto refuse = []" -- which passes whether or not the translation unit
compiles, so it cannot fail on the defect it was written to guard. #1054 also
records that its host had neither CMake nor Clang, so the change was compiled by
neither compiler it concerns. And windows-msvc-* are skipped on main (#503),
so no baseline existed for the break to regress from and it first surfaced on an
unrelated PR (#983).

An instance of #503, not a new report of it.

Fixes #1068

documentation-checkpoint refused an earlier revision of this commit, because
FEATURE_SURFACE_PREFIXES covered all of src/vllm/model_executor/models/ and
so any edit there owed docs/FEATURES.md -- for a change that adds no
capability and alters no behavior. That demand is exactly what #1054 answered
with prose, and that prose is what crossed the check-public-doc-tables budgets
and blocked every push in the repository (#1055). Rather than feed it again,
the trigger was repaired: 8fa405bb7 (#1086, issue #595) now keys
feature_surface off a change to the set of REGISTER_VLLM_MODEL(...)
registrations. This commit changes none, so the gate passes it on its own terms
and no exception is claimed.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]

…ays so

`e34d71379` removed `[&kRequired]` from the `refuse` lambda in
`CheckMoeQuantLayoutSupported` as "the redundant namespace-scope capture". Two
different variables carry that name, and only one of them is namespace-scope:
`kMoeExpertLayoutHelp` (`:894`) is a `static const std::string` and needs no
capture, while `kRequired` (`:929`) is a function-local `const std::string&`
bound to it, is odr-used in the lambda body, and therefore must be captured.
MSVC rejects the result with `error C3493` and `main` has not compiled under it
since.

Naming the namespace-scope constant inside the lambda satisfies both compilers
at once: MSVC has nothing left to capture, and the AppleClang diagnostic #1054
set out to remove stays removed. Reverting to `[&kRequired]` would fix MSVC and
reintroduce that diagnostic. Behavior is unchanged because `kRequired` IS
`kMoeExpertLayoutHelp`; the reference is still used by the other refusal at
`:947`, so it does not become dead.

Verified by CI rather than locally for the compiler that matters: this box has
no MSVC, so `windows-msvc-cpu` and `windows-msvc-vulkan` on this PR are the
gate. `g++ -std=c++20 -fsyntax-only` on the TU returns 0.

Worth recording why this landed green. The guarding gate is a source-TEXT
assertion -- it "rejects `const auto refuse = [&kRequired]` and finds
`const auto refuse = []`" -- which passes whether or not the translation unit
compiles, so it cannot fail on the defect it was written to guard. #1054 also
records that its host had neither CMake nor Clang, so the change was compiled by
neither compiler it concerns. And `windows-msvc-*` are skipped on `main` (#503),
so no baseline existed for the break to regress from and it first surfaced on an
unrelated PR (#983).

An instance of #503, not a new report of it.

Fixes #1068

`documentation-checkpoint` refused an earlier revision of this commit, because
`FEATURE_SURFACE_PREFIXES` covered all of `src/vllm/model_executor/models/` and
so any edit there owed `docs/FEATURES.md` -- for a change that adds no
capability and alters no behavior. That demand is exactly what #1054 answered
with prose, and that prose is what crossed the `check-public-doc-tables` budgets
and blocked every push in the repository (#1055). Rather than feed it again,
the trigger was repaired: `8fa405bb7` (#1086, issue #595) now keys
`feature_surface` off a change to the set of `REGISTER_VLLM_MODEL(...)`
registrations. This commit changes none, so the gate passes it on its own terms
and no exception is claimed.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]
@localai-bot
localai-bot force-pushed the row/ENG-RELEASE-WINDOWS-1068 branch from 22f8d78 to 337f12f Compare August 17, 2026 08:23
@localai-bot
localai-bot merged commit 9b3317c into main Aug 17, 2026
17 of 23 checks passed
localai-bot pushed a commit that referenced this pull request Aug 17, 2026
Fixes #837.

## Problem

On a peer-MoE device hop, the single per-thread (TLS) hipBLAS handle is destroyed
on the wrong device, corrupting the `GetBlas` accessor during multi-GPU Gemma-4
MoE serving.

## What changed

- `GetBlas` **dual-slot** TLS keyed by device, plus a host-lifetime seam, so the
  handle is no longer destroyed across the device hop. The production `GetBlas`
  in `src/vt/rocm/rocm_matmul_hipblaslt.hip` is edited in place and routes
  through the new engine, so the change is reached rather than merely present.
- Product-call seam and an exit-77 HIP probe; `StreamIsCapturing` is made
  load-bearing on the product path.
- Spec and identity probe (0→1→0→1) land in the same PR, spec first.

## Verification

Built and smoked on gfx1201, shipping ROCm 7.2.4 (clang `f58b06d`), as the
combined #837+#838+#839 stack on `d1b0ea3a`: gfx1201 build `BUILD_RC=0`, all 30
layers resident and bound, ready in ~20 s; batched-MoE prefill deadlock-free
(T=2012 done, `PEER_ACT` active, no hang, no HIP error); Paris/63 quality PASS.

Stated plainly, because it bounds what this PR alone demonstrates: that smoke
covers the three-PR stack, not this branch in isolation. What *is* isolated here
is the host-side test evidence — 12 cases with real RED mutants (swapped
selector, destroy-on-hop, missing `SetStream`, capture-time `SetDevice`,
forwarded device 0, forwarded null stream), plus a source-invariant case that
reds if the production call site is deleted.

## Maintainer changes on top

Two repairs were applied while landing, neither touching behavior:

- The donor evidence moved from `.agents/evidence/` — a path
  `scripts/check-pr-size.py` cannot classify, so the gate refused the change
  outright — to `.agents/specs/rocm-gemma4-getblas-dualslot-donor.{md,log}`,
  which match `SPEC` and `SPEC_EVIDENCE` at `check-pr-size.py:188-189`.
- `docs/FEATURES.md` is left as `main` has it. The branch had rewritten the
  Gemma4 row, dropping the `VT_GEMMA4_*`/`VT_ATTN_*` env pointer, the
  `test_gemma4_rocm_fp8_seams` seam name and the spec link. Restoring those and
  adding the #837 sentence does not fit — `check-public-doc-tables` caps a cell
  at 220 characters and main's is already 219 — and `check-doc-checkpoint` does
  not ask for a FEATURES edit here, since `src/vt/rocm/` is not a feature
  surface and no `REGISTER_VLLM_MODEL` set changed (#595, #1086). The #837
  detail stays where this branch already put it in full: `docs/USAGE.md` and the
  spec.

The branch was rebuilt by rebase rather than merge so it carries no untrailered
merge commit; all six original commits are preserved with their authorship.

## Known-unrelated CI

`windows-msvc-cpu` and `windows-msvc-vulkan` were red on every open PR from a
break predating this branch (#503). That queue has since been cleared — #968
landed as #983 and #1068 as #1069 — and only #584's runtime crash remains.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: ClaudeCode:claude-opus-5 [ClaudeCode]
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.

main does not compile under MSVC: #1054 removed a lambda capture that was not redundant

2 participants