Skip to content

Comments

Toolset update: MSVC Compiler 19.51.36014#6095

Open
StephanTLavavej wants to merge 35 commits intomicrosoft:mainfrom
StephanTLavavej:build-tools-14.51
Open

Toolset update: MSVC Compiler 19.51.36014#6095
StephanTLavavej wants to merge 35 commits intomicrosoft:mainfrom
StephanTLavavej:build-tools-14.51

Conversation

@StephanTLavavej
Copy link
Member

@StephanTLavavej StephanTLavavej commented Feb 20, 2026

Changelog

  • Merged C++23 features:
    • P2255R2 Type Traits To Detect References Binding To Temporaries
    • P2674R1 is_implicit_lifetime
      • Initially supported for MSVC and Clang only. (EDG support will be enabled when the necessary compiler builtins become available.)
  • Improved test coverage:
    • Added ARM64 ASan test coverage.
  • Code cleanups:
    • Removed compiler bug workarounds.
  • Infrastructure improvements:
    • Updated dependencies.
      • Updated MSVC Compiler to 19.51.36014 (now required).
      • Updated CMake to 4.2.1 (now required).
      • Updated Python to 3.14.3 (now required).

Commits

  • Cycle locations for ARM64.
  • Python 3.14.3.
  • CMake 4.2.1.
  • MSVC Compiler 19.51.36014.
    • Not yet required in yvals_core.h; the internal toolset is still 19.50.35721.
  • README.md: Install "(Preview)" Build Tools.
  • README.md: Update Command Prompt instructions, adding -vcvars_ver=preview.
  • provision-image.ps1: Update to Preview components.
  • provision-image.ps1: Patch Launch-VsDevShell.ps1.
  • CMakePresets.json: Set "toolset" with a "value" of "version=preview".
    • This teaches the IDE to pick up the Preview toolset. Thanks to Vivy in the STL Discord.
  • Use 10 shards for x64/x86 too.
  • VSO-2574432 "C1XX incorrectly handles a requires-expression checking for r.operator T();" was fixed on 2025-09-13.
  • VSO-1513409 "Bogus warning C4100: '<_Args_0>': unreferenced formal parameter when if constexpr selects another branch" was fixed on 2025-06-27.
  • EDG 6.8 implemented multidimensional subscript.
  • Enable WG21-P2674R1 is_implicit_lifetime in C++23 mode for MSVC.
  • Enable WG21-P2255R2 reference_meows_from_temporary in C++23 mode for MSVC and EDG.
    • This was MSVC-PR-682362 on 2025-10-27 and VS-PR-688674 on 2025-11-18. CUDA is limited to C++20, so we don't need to worry about it. Reported VSO-2742607 "C1XX __reference_constructs_from_temporary mishandles a couple of cases". Use strict_latest_matrix.lst because there are (predictably) lots of errors in permissive mode due to the Evil Extension.
  • MSVC implemented WG21-P2448R2 "Relaxing some constexpr restrictions" with MSVC-PR-686379 on 2025-12-03.
  • MSVC fixed a constexpr bug!
  • Reported [libc++][test] facet.num.get.members/get_long.pass.cpp uses std::to_string() without including <string> llvm/llvm-project#182390.
  • Reported [libc++][test] vector/trivial_relocation.pass.cpp uses implementation-specific attribute [[clang::trivial_abi]] llvm/llvm-project#182392.
  • Reported [libc++][test] rand.dist.bern.negbin/eval.pass.cpp constructs with p == 1, which has undefined behavior llvm/llvm-project#182397.
  • Template parameters: _Pc => _ParseContext
    • This and the following commits are fixing widespread naming inconsistency, and will make it easier to remove the compiler bug workaround.
  • Function parameters: _Pc => _Parse_ctx
  • Template parameters: _ParseCtx => _ParseContext
  • Function parameters: _ParseCtx => _Parse_ctx
  • Function parameters: _FormatCtx => _Format_ctx
  • Template parameters: _FmtCtx => _FormatContext
  • _Fill_align_and_width_formatter::_Format() shouldn't be constexpr.
    • This was bogus because _Fill_align_and_width_formatter_format() was correctly non-constexpr.
  • _Fill_align_and_width_formatter::_Format() return type: auto => _FormatContext::iterator
  • Update citations: VSO-1236041 => VSO-2744645
    • VSO-1236041 was reportedly fixed on 2025-09-08, but it didn't entirely work. I've reported VSO-2744645 "Standard Library Header Units: Declaring and defining constexpr member functions in different headers fails to compile" which should be a very easy fix for @xiangfan-ms according to @cdacamar.
  • Drop _NODISCARD on workaround functions to match their callers.
    • This will reduce code churn when we unify them.
  • <format>: Remove workarounds for declaring and defining member functions in different headers.
    • For pair's piecewise constructor, we used _Tuple_get() as a perma-workaround, and I don't want to change that now. Note that I'm transferring an _STL_INTERNAL_STATIC_ASSERT in _Tuple_formatter_common_base::_Format().
  • libcxx/expected_results.txt: Overhaul the "XFAILS WHICH PASS" section.
    • Now that we have full ARM64 test coverage, and we're enabling ARM64 ASan, this needs to be updated. Transfer the tests that actually contain "XFAIL: msvc" to the section for the MSVC-internal test harness. A couple of tests don't contain "XFAIL: msvc" (anymore?) and are simply passing, so drop their mentions completely.
  • Partially enable ARM64 ASan, add test coverage.
    • And mention ASan in the ASan pipeline's stage and display names. Add dependsOn: [] to the x64 stage for symmetry, following the example of the Code Format stage in azure-pipelines.yml. Update comment in azure-pipelines.yml to follow our preferred arch order. Not enabling GH_002030_asan_annotate_string and GH_002030_asan_annotate_vector yet due to Clang issues.
  • New pools.
  • Upgrade all "constexpr step limits" tests to SKIPPED.
    • And remove the few :2 (Clang-specific) configs; if Clang has trouble, C1XX is very likely to also have trouble. vector.bool/flip.pass.cpp:0 was unexpectedly passing for x86. Playing whack-a-mole is just not worth my time.

Testing

STL-ASan-CI passed for x64, x86, and ARM64.

StephanTLavavej and others added 30 commits February 17, 2026 09:45
Not yet required in yvals_core.h; the internal toolset is still 19.50.35721.
This teaches the IDE to pick up the Preview toolset. Thanks to Vivy in the STL Discord.
…for `r.operator T();`" was fixed on 2025-09-13.
…arameter` when `if constexpr` selects another branch" was fixed on 2025-06-27.
This was MSVC-PR-675420 on 2025-10-01.
…and EDG.

This was MSVC-PR-682362 on 2025-10-27 and VS-PR-688674 on 2025-11-18.

CUDA is limited to C++20, so we don't need to worry about it.

Reported VSO-2742607 "C1XX __reference_constructs_from_temporary mishandles a couple of cases".

Use strict_latest_matrix.lst because there are (predictably) lots of errors in permissive mode due to the Evil Extension.
This was bogus because `_Fill_align_and_width_formatter_format()` was correctly non-`constexpr`.
VSO-1236041 was reportedly fixed on 2025-09-08, but it didn't work.
I've reported VSO-2744645 "Standard Library Header Units: Declaring and defining constexpr member functions in different headers fails to compile".
This will reduce code churn when we unify them.
@StephanTLavavej StephanTLavavej requested a review from a team as a code owner February 20, 2026 18:47
@StephanTLavavej StephanTLavavej added the infrastructure Related to repository automation label Feb 20, 2026
@github-project-automation github-project-automation bot moved this to Initial Review in STL Code Reviews Feb 20, 2026
@StephanTLavavej

This comment was marked as resolved.

@azure-pipelines

This comment was marked as resolved.

StephanTLavavej and others added 5 commits February 20, 2026 14:50
…tions in different headers.

For `pair`'s piecewise constructor, we used `_Tuple_get()` as a perma-workaround, and I don't want to change that now.

Note that I'm transferring an `_STL_INTERNAL_STATIC_ASSERT` in `_Tuple_formatter_common_base::_Format()`.

Reported VSO-2744645 "Standard Library Header Units: Declaring and defining constexpr member functions in different headers fails to compile"
which should be a very easy fix according to Cameron.
Now that we have full ARM64 test coverage, and we're enabling ARM64 ASan, this needs to be updated.

Transfer the tests that actually contain "XFAIL: msvc" to the section for the MSVC-internal test harness.

A couple of tests don't contain "XFAIL: msvc" (anymore?) and are simply passing, so drop their mentions completely:

std/time/time.cal/time.cal.ymd/time.cal.ymd.nonmembers/ostream.pass.cpp
std/time/time.clock/time.clock.system/sys_date.ostream.pass.cpp
And mention ASan in the ASan pipeline's stage and display names.

Add `dependsOn: []` to the x64 stage for symmetry, following the example of the Code Format stage in azure-pipelines.yml.

azure-pipelines.yml: Update comment to follow our preferred arch order.

Not enabling GH_002030_asan_annotate_string/GH_002030_asan_annotate_vector yet due to Clang issues.
And remove the few :2 (Clang-specific) configs; if Clang has trouble, C1XX is very likely to also have trouble.

std/containers/sequences/vector.bool/flip.pass.cpp:0 was unexpectedly passing for x86.

Playing whack-a-mole is just not worth my time.
@StephanTLavavej

This comment was marked as resolved.

@azure-pipelines

This comment was marked as resolved.

@StephanTLavavej StephanTLavavej added cxx23 C++23 feature ARM64 Related to the ARM64 architecture ASan Address Sanitizer test Related to test code labels Feb 20, 2026
@StephanTLavavej StephanTLavavej moved this from Initial Review to Final Review in STL Code Reviews Feb 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ARM64 Related to the ARM64 architecture ASan Address Sanitizer cxx23 C++23 feature infrastructure Related to repository automation test Related to test code

Projects

Status: Final Review

Development

Successfully merging this pull request may close these issues.

1 participant