Skip to content

chore: deny clippy::inline_always at the workspace level - #9726

Merged
joseph-isaacs merged 3 commits into
developfrom
claude/vortex-inline-always-lint-iuc5no
Sep 2, 2026
Merged

chore: deny clippy::inline_always at the workspace level#9726
joseph-isaacs merged 3 commits into
developfrom
claude/vortex-inline-always-lint-iuc5no

Conversation

@joseph-isaacs

@joseph-isaacs joseph-isaacs commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Ban new uses of #[inline(always)] across the workspace. clippy::inline_always is pedantic-only and the workspace does not enable the pedantic group, so the lint has to be named explicitly to have any effect.

The 91 existing uses are deliberate hot-path annotations — vortex-buffer bit accessors, the SIMD compress and AVX2 take kernels, vortex-compute lane kernels, FastLanes unpacking — several with comments explaining why always is load-bearing (e.g. #[target_feature] wrappers that need a fully-inlined copy per feature set). Removing them would change codegen in the hottest paths in the repo with no benchmarks to back it, so they are grandfathered with a per-site #[allow(clippy::inline_always)] instead. Codegen is unchanged. Any new #[inline(always)] now fails the build unless the author adds the same explicit opt-out, which is the point.

Changes

  • Cargo.toml: inline_always = "deny" in [workspace.lints.clippy], with a comment explaining the grandfathering.
  • 36 files: added #[allow(clippy::inline_always)] above each existing #[inline(always)]. Mechanical, no behavior or codegen change.

Checks

  • cargo clippy --workspace --all-targets --all-features — clean.
    • vortex-duckdb, vortex-sqllogictest and benchmarks/duckdb-bench were excluded locally: the vortex-duckdb build script downloads duckdb v1.5.5.zip and gets HTTP 403 through the sandbox proxy. None of those three crates contains an #[inline(always)], so they need no grandfathering; CI covers them.
  • cargo +nightly fmt --all — clean (unrelated reformatting this newer nightly wanted in vortex-ffi / vortex-duckdb was reverted, so it stays out of this diff).
  • Verified the ban bites: a temporary #[inline(always)] added to vortex-utils failed cargo clippy -p vortex-utils, then was removed.
  • No tests run — the change adds only lint attributes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs
@codspeed-hq

codspeed-hq Bot commented Sep 2, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 26.24%

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

❌ 2 regressed benchmarks
✅ 2092 untouched benchmarks
⏩ 206 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
WallTime arrow_checked_add_u32_neon[16384] 13.4 µs 20.4 µs -34.36%
WallTime arrow_checked_add_u32_avx2[16384] 17.7 µs 21.3 µs -17.1%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing claude/vortex-inline-always-lint-iuc5no (e26d5b9) with develop (b4863a1)

Open in CodSpeed

Footnotes

  1. 206 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Comment thread Cargo.toml Outdated
Ban new uses of `#[inline(always)]` workspace-wide. The 91 existing uses are
deliberate hot-path annotations, so each is grandfathered with a per-site
`#[allow(clippy::inline_always)]` rather than removed; codegen is unchanged.
New uses now need the same explicit opt-out, backed by a measurement.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs
@joseph-isaacs joseph-isaacs changed the title chore: allow clippy::inline_always at the workspace level chore: deny clippy::inline_always at the workspace level Sep 2, 2026
@joseph-isaacs joseph-isaacs added the changelog/chore A trivial change label Sep 2, 2026
@joseph-isaacs
joseph-isaacs enabled auto-merge (squash) September 2, 2026 10:41
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTBhQJigN9KMk4nAnRFCzs

@robert3005 robert3005 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect these inlines are not always necessary but let's grandfather them for now

@joseph-isaacs
joseph-isaacs merged commit f80b83c into develop Sep 2, 2026
82 of 83 checks passed
@joseph-isaacs
joseph-isaacs deleted the claude/vortex-inline-always-lint-iuc5no branch September 2, 2026 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/chore A trivial change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants