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:
- MSVC Build Tools for x64/x86 (Preview)
- 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 constexprwithrequiresexpressions 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 stdwould 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
allocafunctions. - Fixed a crash during link-time code generation and PGO linking.
- Fixed an issue where
/LARGEADDRESSAWAREwas 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 namedeis used. - Fixed
constexprobject evaluations failing with C2131 inside lambdas withautoparameters 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
noexceptexpressions when synthesizing inherited constructors in__declspec(dllexport)classes. - Fixed
static_assertincorrectly 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_noopemitting a dynamic initializer when it shouldn’t. - Fixed ambiguity between partial specializations when
autonon-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 warningoutput under/Efor 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
.popframedirective 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:
- Variadic template class breaks if constexpr( requires{…} ) in module
- Internal Compiler Error with C++23 modules and MSVC Build Tools Preview 14.51
- MSVC module raises ICE on exported operator==
- Static members of class templates are instantiated even when those members are not referenced
- Cannot deduce the type of the placeholder for class type templates
- cl: Crash C1001 in use_ansi.h when building with x86
- \<numbers> header causes compiler issues when a variable/type with the name “e” is used
- Within lambdas with parameters of type auto, constexpr object evaluations fail with C2131 in nested structs
- C++ 20 Modules unable to import std using build tools 14.51
- cl compile time of large chained functions throughput with improvement examples
- MSVC link.exe LTCG/SPGO link hits fatal error C1001
- dump.exe /dumpNearJumpsCSV fatals on usbhub.sys with unsupported instruction
- VC++ compiler hits fatal error C1001 and 0xC0000005 on longvectors.cpp
- Build system reports fatal error LINK100 with unknown internal failure
- MSVC cl.exe hits fatal error C1001 compiling amd64 SIMD C files
- MSVC template static_assert accepts invalid parameter pack
- MSVC ICE with CTAD, designated initializer, and local lambda
- VC rejects instantiation of a lambda with constraints based on other parameter names
- Template parameter unrecognized in noexcept expression when synthesizing inherited constructor in __declspec(dllexport) class
- Some global variables incorrectly merged under ASAN builds
- \<coroutine> __builtin_coro_noop emits dynamic initializer with Build Tools Preview 14.52
- Aggressive instantiation in lambda init-capture
- Calls in aggregate initializer are missing
- C++ aggregate paren-init rejects conversion operator
- MSVC /std:c++latest fails to compile: wants to apply binary operator in unary operator case
Try Out the MSVC Build Tools Preview!
Please try out the MSVC Build Tools Preview and let us know what you think! Installation instructions:
- Download Visual Studio 2026 Insiders for frequent updates, or download Visual Studio 2026 for less frequent updates.
- 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)
- Follow the instructions on https://aka.ms/msvc/preview on configuring your IDE & command prompts to use the MSVC Build Tools Preview.
- Share your feedback with us on Visual Studio Developer Community.
0 comments
Be the first to start the discussion.