-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Toolset update: MSVC Compiler 19.50 Preview 1, Clang 20 #5717
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
VS is currently shipping 10.0.26100.4654, but the patch versions aren't significant to us.
Using "MSVC Compiler" to clarify the 19.5x version stream, in contrast to the MSVC Build Tools 14.5x and the IDE 18.x.
+ Don't repeat the "native desktop" limitation which was already mentioned. + Consistently mention x64 before x86. This reflects a mindset change for us. + Also mention ARM64EC.
This overhauls duplicated, disorganized instructions. It begins by explaining the need to install Insiders, as installing production releases is a common mistake. It just says "and keep it up to date" without mentioning our exact required compiler version, as that doesn't affect what you select in the VS Installer. The version is now enforced by `CMakeLists.txt` with a clear message. It gives an explicit list of what workload and components to select. It doesn't bother with verbosely explaining that you can install CMake/Ninja independently. It lists AddressSanitizer, which we forgot earlier. It lists Clang immediately, instead of only mentioning it later in the testing sections. Also it doesn't bother with explaining that you can install Clang independently. It explains how to install Python with a little more detail. The duplication between the IDE and Command Prompt steps is now avoided, as the prereqs are exactly the same. Finally, the testing section can get straight to the point.
Extract the "non-default location" explanation. Depict vcvarsall.bat for x64 and x86 (this is what I personally use in clean command prompts), with the shortcuts as alternatives. This also highlights the symmetry of the steps.
Update the command prompt name. Make things clearer by showing the STL being built before it's used. Modernize the example to use std::println.
yvals_core.h: Just say "Clang 20" to avoid confusion.
Help > About isn't useful anymore, so let's recommend the `cl.exe` version or `_MSVC_STL_UPDATE` value instead. Finally, expand the example commit hash to full.
…ant", removed by MSVC-PR-646313 on 2025-06-25.
…ixed by 2024-05-21.
…by MSVC-PR-643622 on 2025-06-30.
copy_backward.pass.cpp and copy.pass.cpp are still failing due to truncation warnings.
… MSVC-PR-643706 on 2025-06-16.
…191296_allocator_construct WITH MACRO CHANGES, results are acceptable. In GENERATE_CONTAINER_TYPEDEFS, reorder opt_typename so that the usage automatically lines up nicely. This is also the order in which the macro parameters are used. In DEFINE_TEST_IMPL, add a semicolon after preface_text to avoid confusing clang-format. This results in an unnecessary semicolon being emitted, which is fine. In DEFINE_TEST and DEFINE_TEST_SPECIALIZATION, drop the verbose comments naming each macro parameter. DEFINE_TEST_IMPL is immediately above, so these comments provided little value. In DEFINE_TEST_SPECIALIZATION, rename specialized_tag to my_tag. This avoids wrapping, and is still clear.
… wrapping AND EXTRA COMMENTS for "gaps". If anything, this is a slight clarity improvement by drawing attention to the gaps.
…S, results are acceptable. Consistently comment U+nnnn, following our usual conventions. U+07FF is now NKO TAMAN SIGN. Make it clearer which cases are TRANSITION. U+10348 was commented as HWAIR but its full name is GOTHIC LETTER HWAIR.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
seishun
reviewed
Sep 14, 2025
seishun
reviewed
Sep 14, 2025
seishun
reviewed
Sep 14, 2025
seishun
reviewed
Sep 14, 2025
Use unordered lists because we don't need to emphasize a sequence of steps. Nest the workload and components under VS, which is what they apply to. Extract the Insiders rationale to Note 1, debulking the list. Add an ARM64/ARM64EC explanation as Note 2.
|
Pushed commits - thank you @seishun for the very helpful review! 😻 |
|
I'm mirroring this to the MSVC-internal repo - please notify me if any further changes are pushed. |
zacklj89
approved these changes
Sep 15, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📜 Changelog
🗺️ Overview
This updates our toolset to the MSVC Compiler 19.50 Preview 1 and Clang 20 in VS 2026 Insiders. As a new major version, we have a greater-than-usual number of things that need to be updated. I'm overhauling the README, simplifying the installer instructions. I've centralized the path to VsDevCmd.bat in our Azure Pipelines machinery, making it easier to update in the future. Both MSVC and Clang accumulated a lot of bugfixes, so I can remove a lot of workarounds, but in a few cases I had to report new bugs and add workarounds. Enough constexpr misbehavior was fixed that the remaining list wasn't as daunting, so I went through our libcxx skips and reported all of the remaining MSVC-specific bugs we're working around. Clang 20 allows us to enable ARM64EC which went surprisingly well (only coroutines were blocked). EDG shipped behavior changes to
<source_location>, allowing us to remove workarounds that were dealing with the difference between the internal and public versions. CUDA rejects the 19.5x compiler version, so once again we need to activate their escape hatch. (We've informed NVIDIA and whenever CUDA begins allowing MSVC again, we'll update our minimum required version in the STL.)As usual with a new major version of Clang, I'm updating our
.clang-formatbaseline and regenerating the formatting. (This time I didn't see any new options that were worth configuring, although I experimented with parenthesis removal, which identified a few places to clean up.) I also took this opportunity to review all of our clang-format suppressions, removing them when possible. All of the remaining suppressions are now marked with a reason, using their supported syntax.⚙️ Commits
CMakeLists.txtwith a clear message.This also highlights the symmetry of the steps.
std::println.cl.exeversion or_MSVC_STL_UPDATEvalue instead.memmove()is surprisingly slow for more than 8 KB on certain CPUs #5506 / DevCom-10906320 / VSO-2495607, fixed by MSVC-PR-643622 on 2025-06-30.std::current_exception()llvm/llvm-project#158302.constexprbuiltin floating point classification / comparison functions llvm/llvm-project#94118.<coroutine>ICE: failed to perform tail call elimination on a call site marked musttail llvm/llvm-project#56507.#__NoopCoro_ResumeDestroy(EC Symbol) llvm/llvm-project#158341.--allow-unsupported-compileragain.r.operator T();".max_size()wrapping.requires, results are acceptable.requiresclauses, clang-format consumes more lines, but is more systematic, and the results are more consistently readable. clang-format has also improved its handling ofrequiresover the years.concept no_iterator_traitsin P0896R4_common_iterator.GENERATE_CONTAINER_TYPEDEFS, reorderopt_typenameso that the usage automatically lines up nicely. This is also the order in which the macro parameters are used.DEFINE_TEST_IMPL, add a semicolon afterpreface_textto avoid confusing clang-format. This results in an unnecessary semicolon being emitted, which is fine.DEFINE_TESTandDEFINE_TEST_SPECIALIZATION, drop the verbose comments naming each macro parameter.DEFINE_TEST_IMPLis immediately above, so these comments provided little value.DEFINE_TEST_SPECIALIZATION, renamespecialized_tagtomy_tag. This avoids wrapping, and is still clear.expected_results.txtstands.