{"id":27875,"date":"2021-04-14T17:27:30","date_gmt":"2021-04-14T17:27:30","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=27875"},"modified":"2024-09-10T07:55:53","modified_gmt":"2024-09-10T07:55:53","slug":"msvc-backend-updates-in-visual-studio-2019-version-16-10-preview-2","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/msvc-backend-updates-in-visual-studio-2019-version-16-10-preview-2\/","title":{"rendered":"MSVC Backend Updates in Visual Studio 2019 version 16.10 Preview 2"},"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.10 Preview 2 we 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;:276}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Address Sanitizer<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Fixed false negative bugs,\u00a0fixed\u00a0false positive bugs, and improved debugger step-over fidelity of\u00a0ASan-instrumented code.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">ARM64 support for \/guard:ehcont<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"2\"><span data-contrast=\"auto\">The \/guard:ehcont\u00a0flag can be added to both compilation and linking of an executable to generate metadata that could be used by the OS to perform security checks at exception handling continuation points. Previously, this was only generated and supported for AMD64, but with 16.10 it is also possible to compile ARM64 executables with this metadata.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"2\"><span data-contrast=\"auto\">Documentation for this switch:\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/reference\/guard-enable-eh-continuation-metadata?view=msvc-160\"><span data-contrast=\"none\">\/guard:ehcont\u00a0(Enable EH Continuation Metadata) | Microsoft Docs<\/span><\/a><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"2\"><span data-contrast=\"auto\">See Windows blog for\u00a0Control-Flow Integrity\u00a0(CFI)\u00a0mitigations using\u00a0ehcont:\u00a0<\/span><a href=\"https:\/\/techcommunity.microsoft.com\/t5\/windows-kernel-internals\/developer-guidance-for-hardware-enforced-stack-protection\/ba-p\/2163340\"><span data-contrast=\"none\">Developer Guidance for Hardware-enforced Stack Protection &#8211; Microsoft Tech Community<\/span><\/a><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">OpenMP<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"2\"><span data-contrast=\"auto\">Made\u00a0\/openmp:llvm\u00a0available on x86 and\u00a0ARM64<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Bigger stack reserve for link.exe\u00a0and mspdbsrv.exe<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Increased\u00a0stack reserve for link.exe and mspdbsrv.exe (x86 and amd64 hosted only) from the default 1MB to 4MB, to accommodate recursive type merging at link time.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"2\"><span data-contrast=\"auto\">Feedback:\u00a0<\/span><a href=\"https:\/\/developercommunity2.visualstudio.com\/t\/Unhandled-Exception-During-Linking-IN-li\/1300875\"><span data-contrast=\"none\">Unhandled Exception During Linking IN link.exe &#8211; Visual Studio Feedback<\/span><\/a><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Added\u00a0flags to enable\/disable the SSA peeps for amd64 and\u00a0x86\u00a0<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"2\"><span data-contrast=\"auto\">Added\u00a0retail flags (-post-color-ssa-peeps, post-color-ssa-peeps-) to allow users to disable post-color\u00a0ssa\u00a0peeps and -pre-color-ssa-peeps and -pre-color-ssa-peeps- to enable them. This should allow users affected by an overly aggressive peep to work around their issue without having to completely disable the optimizer.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Avoid PDB size overgrowth from incremental\u00a0linking<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Feedback:\u00a0<\/span><a href=\"https:\/\/developercommunity2.visualstudio.com\/t\/PDBs-keep-growing-in-size-on-incremental\/1307614\"><span data-contrast=\"none\">PDBs keep\u00a0growing in size\u00a0on incremental links &#8211; Visual Studio Feedback<\/span><\/a><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Debug mode performance improvements<\/span><\/b><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"4\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"2\"><span data-contrast=\"auto\">Removed\u00a0unnecessary overhead due to\u00a0<\/span><a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/reference\/rtc-run-time-error-checks?view=msvc-160\"><span data-contrast=\"none\">runtime checks<\/span><\/a><span data-contrast=\"auto\">. This\u00a0may\u00a0increase performance of\u00a0your\u00a0code compiled in debug mode by up\u00a0to 3x.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><strong>Added additional peephole optimizations for\u00a0ARM64<\/strong><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:276}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"6\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><strong>Enabled\u00a0volatile metadata by default when targeting x64 to improve emulation\u00a0performance<\/strong><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">Do you want to experience the new improvements of the C++ backend? Please download\u00a0<\/span><a href=\"https:\/\/visualstudio.microsoft.com\/vs\/preview\/\"><span data-contrast=\"none\">the latest Visual Studio 2019<\/span><\/a><span data-contrast=\"none\">\u00a0and give it a try! Any feedback is welcome. We can be reached via the comments below,\u00a0<\/span><a href=\"https:\/\/developercommunity.visualstudio.com\/spaces\/8\/index.html\"><span data-contrast=\"none\">Developer Community<\/span><\/a><span data-contrast=\"none\">, email (<\/span><a href=\"mailto:visualcpp@microsoft.com\"><span data-contrast=\"none\">visualcpp@microsoft.com<\/span><\/a><span data-contrast=\"none\">), and Twitter (<\/span><a href=\"https:\/\/twitter.com\/visualc\"><span data-contrast=\"none\">@VisualC<\/span><\/a><span data-contrast=\"none\">).<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In\u00a0Visual Studio 2019\u00a0version 16.10 Preview 2 we 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\u00a0 Fixed false negative bugs,\u00a0fixed\u00a0false positive bugs, and improved debugger step-over fidelity of\u00a0ASan-instrumented code.\u00a0 ARM64 support [&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-27875","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.10 Preview 2 we 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\u00a0 Fixed false negative bugs,\u00a0fixed\u00a0false positive bugs, and improved debugger step-over fidelity of\u00a0ASan-instrumented code.\u00a0 ARM64 support [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/27875","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=27875"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/27875\/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=27875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=27875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=27875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}