Repository navigation
Open
Labels
area/range-setRangeSet and multirange algebraRangeSet and multirange algebraarea/rangesRange unions, variants and the shape enginesRange unions, variants and the shape enginesenhancementNew feature or requestNew feature or requestpackage/coreAffects CodoMetis.ValueRangesAffects CodoMetis.ValueRangespackage/nodatimeAffects CodoMetis.ValueRanges.NodaTimeAffects CodoMetis.ValueRanges.NodaTime
Milestone
Description
Problem
#149 marks the range unions closed on both lines, and its 10.x half had to wait for .NET 11 GA: a stable package must not build with LangVersion preview. .NET 11 has been generally available since 2026-11-10.
release/10.x builds with SDK 10 (global.json pins 10.0.100), whose compiler has no C# 15. So this port is also the change that moves the 10.x build to the .NET 11 SDK, still targeting net10.0.
Blocked by
- Mark the range unions closed (C# 15) for compile-time exhaustiveness, on both lines #149 on
main, published in an11.0.0-previewand shown to work there. main: move to the .NET 11 GA SDK and the 11.0.0 test packages, and repeat the retarget measurements #532's probeAnswered 2026-11-11 (main: move to the .NET 11 GA SDK and the 11.0.0 test packages, and repeat the retarget measurements #532):closedcompiles as stable C# 15 on the GA compiler fornet10.0, withLangVersion15 and the polyfill. No preview is needed.- Core tests never finish on SDK 11.0.100: a 20 MB results message from ParserResilienceTests stalls vstest.console #535's test change, cherry-picked first: without it the core test run does not end on SDK 11.0.100.
Change
global.jsononrelease/10.xto the SDK 11 band,LangVersion15,TargetFrameworkunchanged. CI on the branch installs the .NET 11 SDK and the .NET 10 runtime.- Cherry-pick Mark the range unions closed (C# 15) for compile-time exhaustiveness, on both lines #149 with
-x:closedon every union type, and theIsClosedTypeAttributepolyfill under#if !NET11_0_OR_GREATERin each shipping assembly. - Before the cherry-pick, build the branch on SDK 11 with no source change and compare. The new compiler and analyzers must add no warning (warnings are errors), and the packed
net10.0assemblies must have the same public surface (dotnet apicompatagainst 10.4.0). - The Native AOT smoke consumer switches over a range with no discard arm.
Does it change an answer?
No. It ships only if package validation against the 10.x baseline stays clean with no suppression. A consumer's existing _ => throw arm keeps compiling without a warning, and a consumer on a compiler before C# 15 sees no difference.
Done when
- a
net10.0consumer built with SDK 11 andLangVersion15 gets CS8509 naming the variant for a missing arm, and none for a complete switch without a discard. Measured in main: move to the .NET 11 GA SDK and the 11.0.0 test packages, and repeat the retarget measurements #532:net10.0defaults to C# 14 even on SDK 11, and at C# 14 the consumer sees no difference - a
net10.0consumer built with SDK 10 builds as before docs/ranges.md#pattern-matchingon 10.x says which compiler and whichLangVersiongive the check
Metadata
Metadata
Assignees
Labels
area/range-setRangeSet and multirange algebraRangeSet and multirange algebraarea/rangesRange unions, variants and the shape enginesRange unions, variants and the shape enginesenhancementNew feature or requestNew feature or requestpackage/coreAffects CodoMetis.ValueRangesAffects CodoMetis.ValueRangespackage/nodatimeAffects CodoMetis.ValueRanges.NodaTimeAffects CodoMetis.ValueRanges.NodaTime
Activity