April 14th, 2026
heart1 reaction

MSVC Build Tools Version 14.51 Release Candidate Now Available

Software Engineering Manager

We are pleased to announce the availability of the release candidate for Microsoft C++ (MSVC) Build Tools version 14.51. This is the last MSVC v14.51 preview before it moves to stable status and full support. You can download it from the Visual Studio 2026 Insiders Channel. As this is the release candidate, it is now the default toolset installed with C++ workloads in this channel. To check if it’s installed simply make sure one or both of these components are checked in the installer:

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

The version number printed by cl.exe and link.exe will be at least 14.51.36231.

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.

Version 14.51 is expected to go stable in May and will ship with the 18.6 release of Visual Studio (Stable channel). Once it goes stable, this release of MSVC will receive 9 months of servicing fixes, as described in New release cadence and support lifecycle for Microsoft C++ Build Tools.

This post summarizes the work done by the MSVC team between the 14.50 and 14.51 releases. This encompasses changes across the compiler frontend, backend, linker, standard library, and related tools.

C++ Standards Conformance

The frontend team continued implementing C++23 and C++20 features and fixing conformance issues:

  • C++23 Implementations: Please see the C++23 Support in MSVC Build Tools 14.51 blog post for details.
  • Consteval Improvements: Multiple fixes to consteval function handling, constexpr new/delete in modules, initializer list backing arrays, /experimental:constevalVfuncVtable behavior now enabled by default, and better error diagnostics for failed constant expressions.
  • Coroutine Improvements: Coroutine-related globals refactoring, and deprecation of experimental coroutine headers.
  • Parser Modernization: Recursive descent parser now handles [[attributes]], with continued improvements to error recovery and removal of legacy token accessors.
  • C Language Improvements: Added _Atomic qualifier support, removed incorrect diagnostics for C99 flexible array members, and added __typeof__ support for function types.

Code Generation

The backend optimizer received significant investment across many areas:

  • Sample-based profile guided optimizations: Support for sample-based profile guided optimizations with supporting tools. More details to follow in a future blog post.
  • Static Single-Assignment (SSA) optimization improvements: Implemented dozens of new algebraic simplification patterns, including ternary operator patterns, arithmetic patterns, and min/max.
  • Common Subexpression Elimination (CSE): Improve CSE of loads of [x + C] through if/else joins, redundant stores, and has improved multibyte aliasing checks.
  • Scalar Replacement of Aggregates (SROA): More aggressive unpacking of structures.
  • Loop Optimizations: Linear Function Test Replace (LFTR) signedness fixes and counted loop optimizations when the primary induction is used after the loop.
  • Inlining: Extended limited call-site inlining, and improved propagation of parameter type information when inlining.
  • Copy Propagation: Multiple improvements to copy propagation for integer constants and sequential copies.
  • Strength Reduction: Implemented reduction of conversions as a strength-reduction optimization.
  • Predicate and Jump Threading: Improvements to predicate-based optimizations for eliminating bound checks, including better use of predicates from min patterns.
  • Stack Layout: The compiler now prefers pushing callee-saved registers onto the stack over using shadow slots, reducing function prologue/epilogue overhead.
  • PGO: Improved per-function size/speed trade-offs to mitigate unrepresentative profiles and PGO trimming improvements.
  • Restrict Pointers: Added support for restrict pointer semantics to enable additional aliasing optimizations.
  • Pattern matching optimizations: New patterns for MSUB/MADD generation, ADC/SBB for conditional add/subtraction, and CMOVE/NE variants.
  • Intel APX: Preview support of Intel APX (Advanced Performance Extensions) in the MSVC toolchain. More details to follow.

ARM64 & SVE

  • SVE (Scalable Vector Extension) Support: Major new feature bringing ARM SVE to MSVC, including frontend type support for SVE scalar and aggregated types, intrinsic lowering, callee-saved register unwinding, variadic function parameter passing, header file installation, and tryblock/funclet support. Multiple ICE and miscompilation fixes were addressed.
  • Shrink Wrapping: Fixed multiple issues including epilog-only fragment unwind info, codegen bugs with chkstk killing X15, and multi-entry shrink wrap regions.
  • Code Quality: New patterns for CSEL pow2, 0 + ORR → CSET + ORR_SHIFT, optimized NEON_DUPR, removed redundant NEON_INSR after NEON_DUPR, ARM NEON patterns for x264, instruction fusion improvements, register retyping after globregs, and function alignment tuning.
  • DIA SDK: Full SVE support in the debug interface, including RtlpGetSveContextPointers and IDiaStackWalkHelper3.

SIMD & Vectorization

  • SLP Vectorizer: Improvements to Superword Level Parallelism (SLP) vectorization:
    • Scalar reduction vectorization
    • Generic and oversized vector instruction support
    • Permute optimizations and oversized select support
  • Vectorizer Improvements: Hoisting of vectorized inner loop pointer overlap checks to parent loops, character-count loop support, non-contiguous memory access support for 2-byte data types, and improved low trip count heuristics on ARM64.
  • AVX/SSE: AVX512 memcpy/memset, AVX2 memcmp override, AVX10.2, and vectorized bitmasking patterns for x264.

Linker & PDB

  • DIA: COM initialization thread safety, and SVE support.
  • PDB Fuzzing: Triggered PDB fuzzing from nightly builds.
  • SPGO: Sample-based profile guided optimizations available for use.

Standard Library (STL)

On GitHub, the microsoft/STL repo tracks its status with a high level of detail; see the Changelog for MSVC Build Tools 14.51. Notable library features that are newly available:

  • P0429R9<flat_map>
  • P1222R4<flat_set>
  • P2255R2 – Type Traits To Detect References Binding To Temporaries
  • P2590R2 – Explicit Lifetime Management
  • P2674R1is_implicit_lifetime

Other notable changes:

  • We’ve massively overhauled <regex> to fix long-standing correctness and performance problems that have been present since its initial implementation in VS 2008 SP1. After almost two decades, the stack overflows are finally fixed!
  • We’ve continued to add and improve SIMD-vectorized STL algorithms, using SSE4.2 and AVX2 for x64/x86, and (newly shipping in MSVC Build Tools 14.51) using NEON for ARM64/ARM64EC.
  • We’ve implemented 18 LWG issue resolutions.
  • We’ve removed long-deprecated non-Standard features, such as TR1, <hash_map>, <hash_set>, <experimental/filesystem>, stdext::checked_array_iterator, and stdext::unchecked_array_iterator.

All of this has been possible thanks to our amazing GitHub contributors.

AddressSanitizer (ASan)

  • ARM64 Support: Improved ASan for ARM64 support with comprehensive library packaging, interception fixes, and false-positive resolutions.
  • SanitizerCoverage: Fixed blocklist handling, codegen issues, and forward declarations to ensure sancov initializers are invoked.
  • Performance: Cached walked heaps for performance improvements during shadow memory operations.

Modules & IFC

  • IFC Version Update: The MSVC frontend generates IFC files according to the 0.44 version of the IFC specification.
  • Concurrency Fix: Fixed a use-after-free race in concurrent IFC debug record resolution.

Static Analysis

  • EspX Consolidation: Merged EspX and its extensions like CppCoreCheck into a single DLL, simplifying deployment.
  • Bug Fixes: Fixed false positives from inexact location dereference, and a number of internal compiler errors (ICE) under /analyze.

ARM64EC & ARM64X

  • Coroutine Support: Fixed missing entry thunks for coroutine outlinees and ramp functions.
  • ICF: Improved identical COMDAT folding (ICF) optimization in ARM64X binaries.
  • Volatile XMM: Fixed ARM64EC volatile XMM assignment.

Diagnostics

  • Fixed C4319 not being emitted when compiling C code.
  • Removed incorrect diagnostics for C99 flexible array members.
  • Warning C4789 improved to reduce false positives.

Debug Info

  • Enabled debug info pruning to reduce PDB sizes.

Tickets Fixed

The following customer-reported issues were fixed in this release:

Try Out the MSVC Release Candidate!

Please try out the RC and let us know what you think! Installation instructions:

  1. Download Visual Studio 2026 Insiders
  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 (Latest)
    • MSVC Build Tools for ARM64/ARM64EC (Latest)
  3. Share your feedback with us on Visual Studio Developer Community.
Category
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