Skip to content

Fix model metadata readers on MSVC - #22754

Merged
Gasoonjia merged 2 commits into
mainfrom
codex/fix-msvc-model-metadata
Sep 12, 2026
Merged

Gasoonjia merged 2 commits into
mainfrom
codex/fix-msvc-model-metadata

Conversation

@Gasoonjia

@Gasoonjia Gasoonjia commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

Summary:

  • replace GNU statement-expression based ET_UNWRAP calls in the shared model metadata reader
  • use the MSVC-portable ET_ASSIGN_OR_RETURN helper instead

This fixes CUDA Windows builds failing in extension/llm/runner/model_metadata.h with C2059/C2143 syntax errors.

Test plan:

Signed-off-by: Songhao Jia <gasoonjia@meta.com>
@pytorch-bot

pytorch-bot Bot commented Sep 11, 2026 •

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/22754

Note: Links to docs will display an error until the docs builds have been completed.

✅ You can merge normally! (1 Unrelated Failure)

As of commit f5f7fdc with merge base e97a88b (image):

BROKEN TRUNK - The following job failed but were present on the merge base:

👉 Rebase onto the `viable/strict` branch to avoid these failures

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Sep 11, 2026
Signed-off-by: Songhao Jia <gasoonjia@meta.com>
@Gasoonjia
Gasoonjia merged commit 2eacd09 into main Sep 12, 2026
242 of 243 checks passed
@Gasoonjia
Gasoonjia deleted the codex/fix-msvc-model-metadata branch September 12, 2026 08:01
JakeStevens pushed a commit that referenced this pull request Oct 14, 2026
…, and Samsung conv1d (#22373)

### Summary

Error-guard sites that construct a failure which cannot actually fire.
This PR inserts the missing `raise` (or replaces an always-true `assert`
with the file's existing `check_or_raise`) so the documented failure
mode is the one callers see.

Updated for `main` at 5e21c13: the two `ExportSession` guards were fixed
upstream in the meantime by #21748, so the only code change left in
`export/export.py` is the message typo. The regression tests for those
two guards are kept, since nothing else covers them.

| File | What happens on `main` today | Reachability |
| --- | --- | --- |
| `export/export.py` `ExportSession.print_delegation_info` | Both guards
already `raise` (#21748). Remaining here: the message says "atleast",
and no test pins either guard. | **Reachable.** `ExportSession` is in
`executorch.export.__all__` and is `@experimental`. A pipeline with no
lowering stage, or one that lists `TO_EDGE_TRANSFORM_AND_LOWER` /
`TO_BACKEND` without having run it, reaches each guard. This PR fixes
the wording and adds `export/tests/test_print_delegation_info.py` for
both. |
| `backends/xnnpack/operators/node_visitor.py` per-channel axis `else` |
`assert f"Unsupported weight per channel quantization axis ..."`: the
f-string is always truthy, so the assertion never fires. An `assert`
would also disappear under `python -O`. | **Not reachable on a normal
export.** The only call that passes `swap_in_out_for_weights=True` is
`backends/xnnpack/operators/op_conv2d.py:102`, and that visitor already
`check_or_raise`s the axis to `0` (depthwise) or `1` (transpose) before
`define_tensor`. This change restores a guard that can actually raise if
that `else` is ever entered; it does not fix a mis-serialized `.pte` on
the current conv2d path. |
| `backends/samsung/_passes/conv1d_to_conv2d.py` `update_kernel` `else`
| `RuntimeError("Weight of 1d conv should be constant tensor or
Parameter obj")` is built and discarded; `weight_node.meta["val"]` is
still unsqueezed. | **Not reachable on a normal Parameter /
lifted-constant / buffer conv1d export.** Those cases are handled by the
preceding branches (the buffer branch was added on `main` by #22725).
The `else` is the leftover for a weight that is none of those. This
change only makes that documented `RuntimeError` actually raise if the
branch is entered. |

### Test plan

Tests cover only the two reachable `ExportSession` guards. There is
intentionally no test for the XNNPACK `else` and none for the Samsung
`else`: both are unreachable on a normal export, and a test that injects
that state would exercise a situation the production callers do not
produce.

`export/tests` is already in `pytest.ini` `testpaths`:

```
pytest export/tests/test_print_delegation_info.py
```

Measured on 89cf698 (merge of `main` 5e21c13), CPython 3.12, torch
2.15.0.dev20261004+cpu:

- `export/tests/test_print_delegation_info.py`: 2 passed.
- Negative control, after `git checkout origin/main --
export/export.py`, same run: `AssertionError: 'at least one of the
lowering stages' not found in 'No delegation info available, atleast one
of the lowering stages should be present'`, 1 failed / 1 passed.
- `pytest export/tests --ignore=export/tests/test_target_recipes.py`: 8
failed / 172 passed on this branch, and the same 8 failed / 170 passed
on `main` alone. The 8 are a local-environment gap
(`exir/_serialize/program.fbs` is copied in by the build, which this
checkout has not run), not a regression. `test_target_recipes.py` does
not collect locally (no `coremltools`).

### CI

Merged `main` into the branch. The conflict in `export/export.py` was
resolved in favour of `main`'s `_raise_if_released` call, keeping the
typo fix. The six reds triaged earlier on 12c3858 came from the merge
base and their upstream fixes (#22802, #22754) are now in this branch.

Two checks are still red on 89cf698, neither of them from this change:

- `pull / android / run-emulator`: the emulator boots
(`sys.boot_completed` returns 1), and
`reactivecircus/android-emulator-runner` then fails on its own post-boot
`adb shell input keyevent 82` with `cmd: Failure calling service input:
Broken pipe (32)`, exit code 224. That step runs before the job script,
and the log carries no output from `scripts/run_android_emulator.sh`.
The same job also failed on `main` at efc7f2e when checked on
2026-10-06, and passed on the seven `main` runs before it.
- `MLTEC_elastic - GitHubPOC` (NXP Bamboo): outside this repository's
workflows, and red on other PRs too, not just this one: of eight open
PRs untouched since 2026-10-05, two carry this status and both are red.
Here the status went `pending` at 2026-10-05T07:01:25Z and `failure` one
second later, which reads as a trigger-side failure rather than anything
built from this branch, but the build log is on an internal host so I
cannot confirm that from here.

This change touches three Python files and adds one test.

cc @nil-is-all @digantdesai

Co-authored-by: Axel.Cffrd.Dnty <AxelNoun@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

This branch was previously deployed

1 inactive deployment
cadence — f5f7fdc3 Deployed Sep 11, 2026 by Gasoonjia via hifi-op-test / hifi4 #27502
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. release notes: backends

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants