Renumber `removed_in` markers left stale by the version rename
## Problem
The 26 -> 27 / 27 -> 28 version rename renamed the API directories but not the hand-written version numbers. `system.product_type` was marked `removed_in="v27"` when that meant "the release after 26", which is now 28, so it was flagged private on the current v27.0.0 API. Calls to it logged the "Private method ... without private_methods enabled" warning, and the generated docs said it was scheduled for removal in v27.
## Solution
Changed the `system.product_type` marker to `v28`. Also relabeled `truenas_connect.ip_choices` from `v26` to `v27` (visibility is unchanged), and fixed the old numbering in the `pool.ddt_prefetch` `versionremoved` note and the SCRAM authentication doc ("TrueNAS 26" -> 27). The auth integration test docstrings claimed the legacy login methods were removed in v27 and exercised over an older API version, neither of which is true on this branch, so they now just call them legacy.
[analyzer] Fix crashing PaddingChecker when using dependent context lambdas in noexcept specifiers (#232986)
A lambda in the `noexcept` specifier of an abbreviated function template
is not marked as dependent, even when it captures a dependent entity.
This Sema bug is tracked in #233102.
```cpp
void crasher(auto&& fn) noexcept(noexcept([_ = fn] {})) {}
```
Because the closure type is not marked dependent, `PaddingChecker` tries
to compute its record layout and crashes in
`ASTContext::getTypeInfoImpl` on the dependent field type.
This PR adds a unit test documenting the Sema bug, a FIXME in
`Sema::ActOnLambdaExpressionAfterIntroducer`, and a temporary workaround
in `PaddingChecker::shouldSkipDecl` that skips fields of dependent type
so the analyzer no longer crashes. The workaround should be removed
together with the FIXME once the Sema bug is fixed.
Fixes #232874
kea: remove inactive PD routes and retry unresolved next hops
Handle lease state before the shared route deletion step and cache
active prefixes only after successful route installation. This removes
released routes and lets later polls retry failed lookups or route adds.
Renumber `removed_in` markers left stale by the version rename
## Problem
The 26 -> 27 / 27 -> 28 version rename renamed the API directories but not the hand-written version numbers. Markers written as `removed_in='v27'` before the rename meant "the release after 26", which is now 28, so `auth.login`, `auth.login_with_api_key`, `system.advanced.syslog_certificate_authority_choices` and `system.product_type` were flagged private on the v27.0.0 API too. Calls to them logged the "Private method ... without private_methods enabled" warning, and the generated docs said they were scheduled for removal in v27.
## Solution
Changed those markers and their docstrings to `v28`. The `v27` markers that were already relabeled from `v26` after the rename are correct and are left alone. Also fixed the old numbering in the `pool.ddt_prefetch` `versionremoved` note, the SCRAM authentication doc ("TrueNAS 26" -> 27, "removed from the v27 API" -> v28) and the auth integration test docstrings.
[LV] Implement legality checks for compressing patterns (#230546)
This implements the legality checking for "compressing" patterns for
example:
E.g., Loops like:
```
int dst_idx = 0;
for (int i = 0; i < n; i++) {
// Can be vectorized as a llvm.masked.compressstore.
if (cond[i])
dst[dst_idx++] = src[i];
}
```
This uses the new `ConditionalInductionDescriptor` to recognize
compressing patterns.
[16 lines not shown]
[lldb] Python3 fixes for "lui" script (#234548)
Which I was trying out after reading
https://discourse.llvm.org/t/rfc-removing-gui-mode/92570.
This is fixes by 2to3, some that I found testing
it, and a few I saw looking through the sources.
Just enough to get it to run, I bet there are
all sorts of issues with it.
use clang headers from llvm distfile, extracted via a :patch target in
BUILD_DEPENDS, rather than a separate packaged file which needs updating
when llvm is updated. use special internal-only flavour so that it only
extracts the relevant dir rather than all of llvm(+clang+lldb+...)
emulators/wine needs the clang headers which are removed from packaging
(see "search and remove headers that might conflict with base"). to ensure
that it uses a correct version matching the installed clang, it's going to
depend on an devel/llvm :patch target, to extract the archive. however this
would normally extract 184k files which takes quite noticeable time, so add
an internal-use flavour "headerextract" to llvm that can be used in
emulators/wine to extract just the files it needs.
"i am fine with that flavor if you think it will make life easier" robert
devel/cargo-nextest: update to 0.9.149
Security
cargo nextest self update no longer trusts the eMudhra intermediate certificate authorities whose private keys were disclosed on 2026-10-20. Previously, an attacker able to intercept network traffic could have used these keys to make cargo nextest self update download and install a malicious binary.
Nextest's self-updater uses a bundled set of root certificates, so operating system and browser updates do not protect it. This release updates webpki-roots to 1.0.10 and rustls-webpki to 0.103.16, both of which distrust the compromised certificates.
Running tests does not involve network access and is not affected. Builds without the self-update feature, including most distribution packages, are also not affected.
Updating from an earlier version with cargo nextest self update would go through the affected code one last time. If you're concerned about your network being compromised, use one of the other installation methods instead.
Fixed
On riscv64 Linux, cargo nextest self update no longer panics. (#3649)
[LoongArch] Lower FP_TO_SINT_SAT to [X]VFTINTRZ/FTINTRZ (#233760)
The ftintrz.{w,l}.{s,d} and [x]vftintrz.{w.s,l.d} instructions saturate
out-of-range inputs to the minimum/maximum integer and convert NaN to 0
(when the invalid operation exception is not trapped), which matches the
semantics of llvm.fptosi.sat when the saturation width is the native
32/64 bits. This was verified on LA664 for all scalar, LSX and LASX
variants and matches QEMU's LoongArch model. Use them instead of the
generic expansion, which emits three compares and selects per element
and fully scalarizes vectors.
Also override shouldConvertFpToSat so DAGCombiner only folds min/max
clamps and NaN-guarded selects into FP_TO_SINT_SAT when that lowers to a
single ftintrz, avoiding the generic expansion for mismatched vector
element widths and for i64 results without the D extension.
This is what Rust emits for `f32 as i32`. rustc-perf svg-render-1 on
LA664: instructions -6.4%, cycles -4.0%.
[CIR] Use `llvm::ElementCount` to hold `cir::VectorType` size (#231906)
A separate scalability flag is a design issue inherited from MLIR's
VectorType. It makes dropping/ignoring scalability an easy mistake to
make in common transforms and lowerings.
This patch aligns ClangIR with LLVM and uses `ElementCount` to hold the
vector size. This makes it simple to propagate the entire size (element
count and scalability) and forces users to query the size they expect:
- `.getFixedValue()`
- Asserts the size is fixed and converts it to an integer
- `.getKnownMinValue()`
- Allowed for fixed/scalable vectors
- Returns the element count at vscale=1
A few small bugs/missed verifier checks have been handled with this
patch and are now tested:
[4 lines not shown]
[AMDGPU] Only fold 32-bit shift sources in isExtractHiElt (#215245)
D16 image sample returns 4-time 16-bit samples packed into 64 bits. The
backend legalizes extractelement <4 x half>, 1 (channel 1 — the upper
half of the first dword) into trunc(srl(i64, 16)). At normal
optimization levels the DAG combiner splits the i64 into two i32s before
instruction selection, hiding the problem. At -O0 the i64 survives
intact. This creates an invalid COPY from a 64-bit virtual register to a
32-bit physical register, which asserts in SIInstrInfo::copyPhysReg.
To fix it, in isExtractHiElt (both the SelectionDAG version in
AMDGPUISelDAGToDAG.cpp and the GlobalISel version in
AMDGPUInstructionSelector.cpp), check that the shift source is exactly
32 bits before folding.
[lld][LoongArch] Fix crash with TLS IE relocations in extreme code model (#234508)
Restore TLS IE and DESC relocation expressions needed by the extreme
code model fallback in relocateAlloc().
Fixes: #234507
[TargetLowering][X86] Address review: keep "rm" in memory for half and bfloat
The check that an "rm" value fits in one 'r' register accepted any value no
wider than the register. X86 gives a half or bfloat value a GR64 (GR32 on
i686), so "rm"(half) printed as %rax and failed to assemble, where it used
to pick memory. Require the value to fill the register, and test half and
bfloat.
Also check the target, opt level, and isIndirect before scanning the
constraint codes, don't offer 'm' to a MayFoldRegister output with a
matching input (as for any other operand), assert a single register in
GlobalISel as SelectionDAG does, and name the instruction selector in the
new tests' RUN lines.
Assisted-by: Claude Opus 5.5
[ADT] Add SmallVectorWithFlags with packed user flags
Structures that hold a SmallVector followed by a bool or a couple of
flag bits pay up to eight bytes of padding for those bits, and there is
no padding inside the vector to reuse: the header is exactly a pointer
and two 32-bit fields, and the inline storage of pointer-sized elements
is a multiple of eight bytes. SmallVectorWithFlags stores one to four
user flag bits in the high bits of the capacity field, so it has the
same size and inline capacity as SmallVector.
The capacity field is the one header field not read on the hot path:
the buffer pointer's free low bits depend on the element alignment and
are read on every element access, and the size is read by size() and
end(). Only capacity() masks the flags out, which costs one extra `and`
in the growth check of push_back; begin(), end(), and size() are
untouched. The cost is a maximum capacity divided by 2^FlagBits, which
with the 32-bit size type and four flag bits is 268 million elements.
The SmallVector implementation layers take a FlagBits template
[35 lines not shown]