July 15th, 2026
like1 reaction

MSVC Build Tools Preview updates – July 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 Insiders Channel, Insiders gets MSVC Preview updates more quickly (roughly weekly).

To check if it is installed simply 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.36520 / 14.52.36520.

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++ Conformance and Frontend

  • Relaxed the rules for designated initialization to accept more valid C++ code.
  • Added support for constexpr new[] (array allocation) inside modules.
  • Corrected comparison of non-type template arguments so that constraints (concepts) no longer cause external member function definitions to fail to compile.
  • Fixed type deduction so the correct type is propagated through nested lambdas, including decltype of a captured entity inside a non-mutable lambda.
  • Fixed an incorrect result from the __is_constructible type trait.
  • Fixed a false negative from std::is_layout_compatible on structs containing nested structs.
  • Improved _Pragma handling: better support when mixed with macros, full support under /E, and fixes for preprocessor crashes when a function-like macro expands at a _Pragma.
  • Increased the compiler limit for deeply nested initializers and increased the maximum size of legacy preprocessor macro buffers.
  • Reduced memory usage when caret (^) diagnostics are enabled.
  • Fixed selection of an overloaded member function via static_cast when the member has a deduced (auto) return type in a class template.
  • Fixed template-argument deduction for class templates that previously produced a spurious C2641.
  • Fixed several internal compiler errors, including those involving requires with a default template argument before a parameter pack, coroutines with aggregate initialization, and recursive variadic template default member initializers.
  • Improved robustness of MultiByteToWideChar handling on older Windows versions.

C++ Modules

  • Fixed a fatal error C1001 and C1116 regression when importing a partitioned C++23 module (built with import std;) after including third-party headers.
  • Fixed an internal compiler error when exporting an overload set from a module.
  • Improved header-unit resolution so a quoted include correctly falls back to an angle-bracket lookup when the resolved entry was already consumed.
  • Added a new LNK4321 warning that diagnoses duplicate C++ module exports in an import library.

Code Generation and Optimization

ARM64 improvements:

  • Added vectorization support for floor, ceil, trunc, and round.
  • Improved NEON code generation: folded redundant duplicate sequences, eliminated redundant compare-against-zero on mask inputs, and tracked live bits across NEON vector arithmetic to remove dead instructions.
  • Enabled load-pair/store-pair fusion for adjacent global table lookups accessed through a computed index.
  • Improved register spill and rematerialization cost modeling for high-use values.
  • Fixed a signedness mismatch in paired integer-to-floating-point SIMD conversions.

x64 improvements:

  • Extended code generation for the newest x64 instruction set (APX), including new destination-form lowering and a conditional-move optimization pattern, and fixed keeping caller-saved registers unnecessarily live across calls under LTCG.
  • Fixed generation of an invalid AVX-512 gather instruction that used a high vector index register.
  • Improved code generation for population-count (popcount) patterns.
  • Preserved the sign of negative zero in the 32-bit x86 floor expansion.
  • Fixed a miscompilation of descending bit-search loops that use trailing-zero counting.
  • Addressed a performance regression in a speech-recognition workload involving fused multiply-add.

Optimizer:

  • Enabled strength reduction for induction variables that can overflow, and expanded the set of overflow cases the optimizer can handle safely.
  • Enabled earlier loop-invariant code motion.
  • Enabled a new expression-reassociation pass.
  • Enabled type-based devirtualization alongside PGO and improved speculative devirtualization inlining.
  • Improved heuristics leading to more common-subexpression elimination in larger functions.
  • Fixed several optimizer internal compiler errors and miscompilations, including a jump-threading crash, loop unswitching under LTCG, preservation of overflow semantics through the loop optimizer, a hang in string-compare simplification, and incorrect code generation for indirection through a based pointer.
  • Fixed a fence-preservation issue under /fp:strict.

Other code generation:

  • Fixed /LTCG:incremental unnecessarily falling back to a full compilation on alternating links.
  • Added a graceful bailout when profile data cannot be read for a mixed /Od + /O2 LTCG build.
  • Emit C4744 for extern type mismatches under LTCG.

Linker

  • Fixed a linker crash during incremental pointer calculation.
  • Fixed incremental linking when the /NOEXP option is used.
  • Reduced PDB file size growth in incremental-link scenarios.
  • Improved determinism by masking the PDB age in the PE hash computation.

Static Analysis

  • Added command-line options to configure environment variables for Code Analysis.
  • Fixed several Code Analysis crashes, including one involving throw in a ternary operator.

AddressSanitizer

  • Fix in ASan interception of RtlReAllocateHeap, preventing crashes when re-allocating ASan-owned memory during process termination.

STL

  • See https://github.com/microsoft/STL/wiki/Changelog for details on STL improvements in the MSVC Build Tools Preview.

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.

Category

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.

1 comment

Sort by :
  • Antanas UrÅ¡ulis

    Thanks for the updates!

    Some feedback to be passed down, if I may - when tickets from developercommunity (like this one: LNK4279 icall thunk mismatch on ARM64EC with std::filesystem::path and std::chrono::tzdb) get marked as "Fixed in Visual Studio 18.8.0", can they please also get marked *which toolset* the fix is actually in? It seems this fix is in the preview toolset that is released alongside 18.8.0 - so I guess the marking is technically correct - but it doesn't help me because it's not fixed in any of the production toolsets.

    I think this is doubly more important now with the pace...

    Read more