June 11th, 2026
likecompelling3 reactions

MSVC Build Tools Preview updates – June 2026

Software Engineering Manager

The MSVC Build Tools Preview is updated regularly with the latest features and fixes from the MSVC development team. This post covers updates from the past month, currently targeting the v14.52 release. This encompasses changes across the compiler frontend, backend, linker, standard library, and related tools.

Although you can acquire the MSVC Build Tools Preview through either the Visual Studio 2026 Stable Channel or Visual Studio 2026 Insiders Channel, Insiders gets MSVC Preview updates roughly weekly.

To check if it’s installed make sure one or both of these components are checked in the installer:

  1. MSVC Build Tools for x64/x86 (Preview)
  2. MSVC Build Tools for ARM64/ARM64EC (Preview)

Follow the instructions on https://aka.ms/msvc/preview to configure your IDE & command prompts to use the MSVC Build Tools Preview.

The version number printed by cl.exe and link.exe will be at least 19.52.36418 / 14.52.36418.

We appreciate any feedback that you may have. Please report any issues on Visual Studio Developer Community so we can address them by the time we move out of preview.

C++ Modules Improvements

Several fixes improve the reliability of C++ modules:

  • Fixed a compiler crash involving variadic template classes using if constexpr with requires expressions inside modules.
  • Fixed an internal compiler error (ICE) with C++23 modules.
  • Fixed an ICE when using exported operator== in modules.
  • Fixed an issue where import std would fail to build.
  • Fixed a reentrancy issue when prolongations and global module fragments are involved, improving module build reliability.
  • Fixed nested parentheses in macro __VA_OPT__ when imported from a header unit.

Code Generation and Optimization

ARM64 improvements:

  • Improved vector construction by eliminating redundant insert operations after duplicate instructions.
  • Added support for SVE (Scalable Vector Extension) types to the SSA Optimizer.
  • Narrowed the width of immediate operands in bitfield instructions (BFI, BFXIL, UBFIZ, UBFX, SBFIZ, SBFX) for more compact code.
  • Canonicalized vector memory intrinsics into standard load/store operations, delivering 2-3% improvement in targeted benchmarks.

x64/x86 improvements:

  • Fixed multiple correctness bugs in multi-byte copy propagation, including a miscompile when the destination address is captured.
  • Preserved overflow flags when strength-reducing multiplies to shifts.
  • Fixed an ICE involving LEA with a non-register destination on x86.
  • Fixed an ICE compiling SIMD C files on amd64.
  • Tuned SSA Optimizer copy propagation on x86.
  • Fixed an x86 codegen bug for 16-bit overflow intrinsics.

Optimization improvements:

  • Added return value cost analysis for inliner heuristics, improving inlining decisions.
  • Improved the inliner’s memory model to enable function pointer devirtualization.
  • Fixed a coroutine inlining assertion failure.
  • Enabled folding of constant type conversions without requiring /fp:fast.
  • Fixed a combined loop unswitching and loop vectorization failure.
  • Fixed several ICEs in the SLP vectorizer and tile register allocator.
  • Fixed multiple loop optimizer correctness issues in scalar promotion.
  • Reduced the IL emission of attributes, improving compiler throughput.

Linker & PDB Improvements

  • Added x64 unwind V3 debugger unwinder support in DIA.
  • Fixed incorrect epilog unwind codes for alloca functions.
  • Fixed a crash during link-time code generation and PGO linking.
  • Fixed an issue where /LARGEADDRESSAWARE was incorrectly polluting the link line.
  • Fixed a decision tree optimization bug caused by using invalidated iterators.

Frontend and Conformance Fixes

  • Fixed the <numbers> header causing compilation issues when a variable or type named e is used.
  • Fixed constexpr object evaluations failing with C2131 inside lambdas with auto parameters in nested structs.
  • Fixed incorrect deduction of the type placeholder for class type templates.
  • Avoided unnecessary instantiation of static inline template members when they are not ODR-used.
  • Added a new warning for overriding a non-pure virtual function which is deprecated.
  • Fixed rejection of lambda instantiation with constraints based on other parameter names.
  • Fixed a template parameter becoming unrecognized in noexcept expressions when synthesizing inherited constructors in __declspec(dllexport) classes.
  • Fixed static_assert incorrectly accepting an invalid parameter pack.
  • Fixed an ICE with CTAD (class template argument deduction), designated initializers, and local lambdas.
  • Fixed an ICE involving assertions in the lambda capture processing.
  • Fixed a syntax error on C++11 attributes on variadic arguments in C++/CLI.
  • Fixed calls in aggregate initializers being missed, and aggressive instantiation in lambda init-captures.
  • Fixed <coroutine> __builtin_coro_noop emitting a dynamic initializer when it shouldn’t.
  • Fixed ambiguity between partial specializations when auto non-type template parameters are involved.
  • Fixed an operator binding regression where a unary + operator was incorrectly treated as binary.
  • Fixed aggregate parenthesized initialization incorrectly rejecting conversion operators.
  • Fixed a C1001 crash on x86 in pragma warning handling.
  • Reworked #pragma warning output under /E for correctness.

Preprocessor

  • Fixed token concatenation of user-defined literals and numbers emitting a spurious warning C5103 under /Zc:preprocessor.
  • Fixed a determinism issue in precompiled header generation under /Zc:preprocessor.

AddressSanitizer

  • Fixed incorrect merging of global variable metadata under AddressSanitizer builds.

STL

  • See the STL Changelog for details on STL improvements in MSVC Build Tools Preview.

Other Fixes

  • masm/ml64: added .popframe directive support with improved error handling.
  • Improved compile-time throughput for large chained function expressions by refactoring a quadratic algorithm to linear.
  • Fixed a resource leak in type library reference loading.

Tickets Fixed

The following tickets reported through Developer Community have been fixed in this update:

Try Out the MSVC Build Tools Preview!

Please try out the MSVC Build Tools Preview and let us know what you think! Installation instructions:

  1. Download Visual Studio 2026 Insiders for frequent updates, or download Visual Studio 2026 for less frequent updates.
  2. Install the Desktop development with C++ workload and make sure one or both of these MSVC components are checked (depending on your target build architecture):
    • MSVC Build Tools for x64/x86 (Preview)
    • MSVC Build Tools for ARM64/ARM64EC (Preview)
  3. Follow the instructions on https://aka.ms/msvc/preview on configuring your IDE & command prompts to use the MSVC Build Tools Preview.
  4. Share your feedback with us on Visual Studio Developer Community.

Topics

Author

Eric Brumer
Software Engineering Manager

Software engineering manager on the Visual C++ compiler back-end team. I lead the machine-independent optimization team, as well as code generation security, including sanitizers.

0 comments