{"id":27390,"date":"2021-01-21T15:02:59","date_gmt":"2021-01-21T15:02:59","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=27390"},"modified":"2024-09-10T07:55:58","modified_gmt":"2024-09-10T07:55:58","slug":"msvc-backend-updates-in-visual-studio-2019-version-16-9-preview-3","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-backend-updates-in-visual-studio-2019-version-16-9-preview-3\/","title":{"rendered":"MSVC Backend Updates in Visual Studio 2019 version 16.9 Preview 3"},"content":{"rendered":"<p><span data-contrast=\"none\">In\u00a0<\/span><a href=\"https:\/\/visualstudio.microsoft.com\/vs\/preview\"><span data-contrast=\"none\">Visual Studio 2019<\/span><\/a><span data-contrast=\"none\">\u00a0version 16.9<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">Preview 3<\/span><span data-contrast=\"none\">\u00a0we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a brief list of improvements for you to review.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Address Sanitizer:<\/span><\/b><span data-contrast=\"none\">\u00a0The IDE integration for\u00a0ASan-reported exceptions (vcasan.lib) now handles the complete collection of exceptions\u00a0ASan\u00a0can report. That\u00a0vcasan\u00a0lib is also found automatically, just like the other\u00a0ASan\u00a0libraries, when you throw \/fsanitize=address. The compiler and linker also additionally will suggest emitting debug information if they detect you&#8217;re building with\u00a0ASan\u00a0but not emitting debug information. We&#8217;re excited to be able to share these user-model improvements in this latest preview! More details will be available in the upcoming full\u00a0ASan\u00a0documentation as 16.9 approaches the final release. Additional technical improvements include:<\/span>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Expanded\u00a0RtlAllocateHeap\u00a0support, fixed compatibility of\u00a0RtlCreateHeap\u00a0and\u00a0RtlAllocateHeap\u00a0interceptors with executable memory.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Added\u00a0ASan\u00a0interceptor support for\u00a0GlobalAlloc\u00a0and\u00a0LocalAlloc\u00a0moveable memory.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Updated handling of interception failures, added check for ASAN_WIN_CONTINUE_ON_INTERCEPTION_FAILURE\u00a0 environment\u00a0variable to continue after interception failure.<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Updated error messages for shadow memory interleaving and interception failure to make problems and resolutions explicit.<\/span><\/li>\n<\/ul>\n<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>OpenMP<\/strong> <strong>targeting the LLVM runtime<\/strong>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">We\u2019ve added the option to target the LLVM version of the OpenMP runtime.\u00a0<\/span><span data-contrast=\"none\">T<\/span><span data-contrast=\"none\">arget the new runtime<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">by using<\/span><span data-contrast=\"none\">\u00a0the new CL switch\u00a0<\/span><span data-contrast=\"none\">\/openmp:llvm\u00a0instead of \/openmp.\u00a0<\/span><span data-contrast=\"none\">In addition to all the OpenMP features supported with \/openmp, \/openmp:llvm\u00a0<\/span><span data-contrast=\"none\">adds\u00a0<\/span><span data-contrast=\"none\">support<\/span><span data-contrast=\"none\">\u00a0for<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">the\u00a0lastprivate\u00a0clause on #pragma\u00a0<\/span><span data-contrast=\"none\">omp\u00a0<\/span><span data-contrast=\"none\">section<\/span><span data-contrast=\"none\">s<\/span><span data-contrast=\"none\">\u00a0and\u00a0<\/span><span data-contrast=\"none\">unsigned\u00a0<\/span><span data-contrast=\"none\">index variables in parallel for loops.\u00a0<\/span><span data-contrast=\"none\">Th<\/span><span data-contrast=\"none\">e<\/span><span data-contrast=\"none\">\u00a0\/openmp:llvm\u00a0switch<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">is available<\/span><span data-contrast=\"none\">\u00a0only f<\/span><span data-contrast=\"none\">or the<\/span><span data-contrast=\"none\"> x64<\/span><span data-contrast=\"none\">\u00a0target<\/span><span data-contrast=\"none\">\u00a0and is still experimental<\/span><span data-contrast=\"none\">.<\/span><\/li>\n<\/ul>\n<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Improved coroutine debugging support<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Maintain pre-coloring for arm64 (jump-threading)\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Fixed a code generation bug when compiling arm64 functions that return a large object with \/O2. (linked customer feedback: <a href=\"https:\/\/developercommunity2.visualstudio.com\/t\/Incorrect-O2-ARM64-function-call-codegen\/1170230\">Incorrect \/O2 ARM64 function call codegen passing parameter, returning object (visualstudio.com)<\/a>)<\/li>\n<\/ul>\n<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Swap order of loop fusion and vectorization\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Improved loop optimizer to apply loop fusion in many more cases.<\/li>\n<\/ul>\n<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Remove unnecessary memory loads\u00a0using the reg-mem variants of commutative x86 instructions<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Fix issue with \/OPT:REF under LTCG\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Fixed an issue where\u00a0a function referenced only by data (such as a\u00a0vtable) could be incorrectly removed under \/OPT:REF\u00a0and LTCG in rare cases<\/li>\n<\/ul>\n<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Incremental linking support for\u00a0C++\u00a0Modules\u00a0linkage<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"12\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\">Support for Intel\u00a0Keylocker\u00a0and User Interrupt instructions as well as\u00a0intrinsic functions added in VC tools such as\u00a0Compiler, MASM,\u00a0and\u00a0MSDIS<\/li>\n<\/ul>\n<p>Do you want to experience the new improvements of the C++ backend?\u00a0<span style=\"font-size: 1rem;\" data-contrast=\"none\">Please download<\/span>\u00a0<a href=\"https:\/\/visualstudio.microsoft.com\/vs\/preview\/\">the latest Visual Studio 2019<\/a>\u00a0and<span style=\"font-size: 1rem;\" data-contrast=\"none\"> give it a try! Any feedback is welcome. We can be reached via the comments <\/span>below,\u00a0<a href=\"https:\/\/developercommunity.visualstudio.com\/spaces\/8\/index.html\">Developer Community<\/a>, email (<a href=\"mailto:visualcpp@microsoft.com\">visualcpp@microsoft.com<\/a>), and Twitter (<a href=\"https:\/\/twitter.com\/visualc\">@VisualC<\/a>).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In\u00a0Visual Studio 2019\u00a0version 16.9\u00a0Preview 3\u00a0we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a brief list of improvements for you to review.\u00a0 Address Sanitizer:\u00a0The IDE integration for\u00a0ASan-reported exceptions (vcasan.lib) now handles the complete collection of exceptions\u00a0ASan\u00a0can report. That\u00a0vcasan\u00a0lib is also found [&hellip;]<\/p>\n","protected":false},"author":43689,"featured_media":35994,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3946,1,3921],"tags":[],"class_list":["post-27390","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","category-cplusplus","category-openmp"],"acf":[],"blog_post_summary":"<p>In\u00a0Visual Studio 2019\u00a0version 16.9\u00a0Preview 3\u00a0we have continued to improve the C++ backend with new features, new and improved optimizations, build throughput improvements, and better security. Here is a brief list of improvements for you to review.\u00a0 Address Sanitizer:\u00a0The IDE integration for\u00a0ASan-reported exceptions (vcasan.lib) now handles the complete collection of exceptions\u00a0ASan\u00a0can report. That\u00a0vcasan\u00a0lib is also found [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/27390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/43689"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=27390"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/27390\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/35994"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=27390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=27390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=27390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}