From 3b7423ecc78c82ca80cb0e6be47dba65d07ea6c3 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 2 Sep 2026 11:11:18 -0700 Subject: [PATCH 01/25] Run 'Validate Files' before 'clang-format Files', comment why. --- azure-devops/format-validation.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/azure-devops/format-validation.yml b/azure-devops/format-validation.yml index 33ffbc1e557..1edaeb8ca6b 100644 --- a/azure-devops/format-validation.yml +++ b/azure-devops/format-validation.yml @@ -25,26 +25,27 @@ jobs: timeoutInMinutes: 5 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PowerShell@2 - displayName: 'clang-format Files' + displayName: 'Validate Files' inputs: pwsh: true targetType: inline script: | $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch x64 -Arch x64 - cmake --build "$(validationBuildOutputLocation)" --target run-format - timeoutInMinutes: 5 + cmake --build "$(validationBuildOutputLocation)" --target run-validate + timeoutInMinutes: 2 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } + # We need to validate files before running clang-format, which modifies them in-place. - task: PowerShell@2 - displayName: 'Validate Files' + displayName: 'clang-format Files' inputs: pwsh: true targetType: inline script: | $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch x64 -Arch x64 - cmake --build "$(validationBuildOutputLocation)" --target run-validate - timeoutInMinutes: 2 + cmake --build "$(validationBuildOutputLocation)" --target run-format + timeoutInMinutes: 5 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PowerShell@2 displayName: 'Create Diff' From 12188d37b8d2955ef80605d7d09e379cf612ceb7 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 1 Sep 2026 15:05:19 -0700 Subject: [PATCH 02/25] create-1es-hosted-pool.ps1: Add `$DiskType` to handle NVMe vs. SCSI. --- azure-devops/create-1es-hosted-pool.ps1 | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index a7c36e195c0..5ab8a580103 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -41,24 +41,28 @@ $Timestamp = $CurrentDate.ToString('yyyy-MM-ddTHHmm') if ($VMSku -ieq 'Fasv6') { $Arch = 'x64' + $DiskType = 'NVMe' $ProtoVMSize = 'Standard_F16as_v6' $PoolSkuName = 'Standard_F64as_v6' $PoolSize = 32 # We have quota for 4096 cores (64 VMs), so we can have old and new pools of 32 VMs each. $AvailableLocations = @('eastus2') } elseif ($VMSku -ieq 'Fasv7') { $Arch = 'x64' + $DiskType = 'NVMe' $ProtoVMSize = 'Standard_F16as_v7' $PoolSkuName = 'Standard_F48as_v7' $PoolSize = 13 # Locations where we have quota for at least 640 cores (13 VMs): $AvailableLocations = @('northeurope', 'southeastasia') } elseif ($VMSku -ieq 'Fadsv7') { $Arch = 'x64' + $DiskType = 'NVMe' $ProtoVMSize = 'Standard_F16ads_v7' $PoolSkuName = 'Standard_F48ads_v7' $PoolSize = 21 # We have quota for 2048 cores (42 VMs), so we can have old and new pools of 21 VMs each. $AvailableLocations = @('australiaeast') } elseif ($VMSku -ieq 'Dpdsv6') { $Arch = 'arm64' + $DiskType = 'SCSI' $ProtoVMSize = 'Standard_D16pds_v6' $PoolSkuName = 'Standard_D64pds_v6' $PoolSize = 32 # Locations where we have quota for at least 2048 cores (32 VMs): @@ -232,13 +236,13 @@ if ($Arch -ieq 'x64') { $VM = New-AzVMConfig ` -VMName $ProtoVMName ` -VMSize $ProtoVMSize ` - -DiskControllerType 'NVMe' ` + -DiskControllerType $DiskType ` -Priority 'Regular' } else { $VM = New-AzVMConfig ` -VMName $ProtoVMName ` -VMSize $ProtoVMSize ` - -DiskControllerType 'SCSI' ` + -DiskControllerType $DiskType ` -Priority 'Regular' ` -SecurityType 'TrustedLaunch' ` -SharedGalleryImageId $ImageId @@ -386,7 +390,7 @@ Display-ProgressBar -Status 'Creating image definition' $ImageDefinitionName = "$ResourceGroupName-ImageDefinition" $FeatureTrustedLaunch = @{ Name = 'SecurityType'; Value = 'TrustedLaunch'; } -if ($Arch -ieq 'x64') { +if ($DiskType -ieq 'NVMe') { $FeatureNVMe = @{ Name = 'DiskControllerTypes'; Value = 'SCSI, NVMe'; } } else { $FeatureNVMe = @{ Name = 'DiskControllerTypes'; Value = 'SCSI'; } From 337b482bf0785f368750267d36aeb89b8d41ec18 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 1 Sep 2026 15:24:16 -0700 Subject: [PATCH 03/25] create-1es-hosted-pool.ps1: Fadsv7 quota increase from 21 48-core VMs to 23 64-core VMs. --- azure-devops/create-1es-hosted-pool.ps1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index 5ab8a580103..396572452c9 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -35,7 +35,7 @@ $Timestamp = $CurrentDate.ToString('yyyy-MM-ddTHHmm') # | Fasv7 | australiaeast | 740 | Currently unused to stay within our regional (all-SKU) quota of 4736 cores # | Fasv7 | northeurope | 640 | # | Fasv7 | southeastasia | 640 | -# | Fadsv7 | australiaeast | 2048 | +# | Fadsv7 | australiaeast | 3024 | # | Dpdsv6 | australiaeast | 2048 | # | Dpdsv6 | southcentralus | 2048 | @@ -57,8 +57,8 @@ if ($VMSku -ieq 'Fasv6') { $Arch = 'x64' $DiskType = 'NVMe' $ProtoVMSize = 'Standard_F16ads_v7' - $PoolSkuName = 'Standard_F48ads_v7' - $PoolSize = 21 # We have quota for 2048 cores (42 VMs), so we can have old and new pools of 21 VMs each. + $PoolSkuName = 'Standard_F64ads_v7' + $PoolSize = 23 # We have quota for 3024 cores (47 VMs), so we can have old and new pools of 23 VMs each. $AvailableLocations = @('australiaeast') } elseif ($VMSku -ieq 'Dpdsv6') { $Arch = 'arm64' From 170cb7dfe608b0be91795e47f78d6e2c120cbcad Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 1 Sep 2026 15:35:05 -0700 Subject: [PATCH 04/25] create-1es-hosted-pool.ps1: Drop Fasv6 and Fasv7. --- azure-devops/create-1es-hosted-pool.ps1 | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index 396572452c9..614fd4a7fa4 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -9,11 +9,11 @@ Creates a 1ES Hosted Pool, set up for the STL's CI. See https://github.com/microsoft/STL/wiki/Checklist-for-Toolset-Updates for more information. .PARAMETER VMSku -The VM SKU can be Fasv6, Fasv7, Fadsv7, or Dpdsv6. +The VM SKU can be Fadsv7 or Dpdsv6. #> [CmdletBinding(PositionalBinding=$false)] Param( - [Parameter(Mandatory)][ValidateSet('Fasv6', 'Fasv7', 'Fadsv7', 'Dpdsv6')][String]$VMSku + [Parameter(Mandatory)][ValidateSet('Fadsv7', 'Dpdsv6')][String]$VMSku ) $ErrorActionPreference = 'Stop' @@ -31,29 +31,11 @@ $Timestamp = $CurrentDate.ToString('yyyy-MM-ddTHHmm') # | SKU | Location | Cores | Notes # |--------|----------------|------:|------- -# | Fasv6 | eastus2 | 4096 | -# | Fasv7 | australiaeast | 740 | Currently unused to stay within our regional (all-SKU) quota of 4736 cores -# | Fasv7 | northeurope | 640 | -# | Fasv7 | southeastasia | 640 | # | Fadsv7 | australiaeast | 3024 | # | Dpdsv6 | australiaeast | 2048 | # | Dpdsv6 | southcentralus | 2048 | -if ($VMSku -ieq 'Fasv6') { - $Arch = 'x64' - $DiskType = 'NVMe' - $ProtoVMSize = 'Standard_F16as_v6' - $PoolSkuName = 'Standard_F64as_v6' - $PoolSize = 32 # We have quota for 4096 cores (64 VMs), so we can have old and new pools of 32 VMs each. - $AvailableLocations = @('eastus2') -} elseif ($VMSku -ieq 'Fasv7') { - $Arch = 'x64' - $DiskType = 'NVMe' - $ProtoVMSize = 'Standard_F16as_v7' - $PoolSkuName = 'Standard_F48as_v7' - $PoolSize = 13 # Locations where we have quota for at least 640 cores (13 VMs): - $AvailableLocations = @('northeurope', 'southeastasia') -} elseif ($VMSku -ieq 'Fadsv7') { +if ($VMSku -ieq 'Fadsv7') { $Arch = 'x64' $DiskType = 'NVMe' $ProtoVMSize = 'Standard_F16ads_v7' From 8e9dc7e0da46d888d014615297258b4a6e100fc0 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Mon, 7 Sep 2026 13:34:53 -0700 Subject: [PATCH 05/25] create-1es-hosted-pool.ps1: Fadsv7 quota increase to 32 80-core VMs. --- azure-devops/create-1es-hosted-pool.ps1 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index 614fd4a7fa4..9cb14ad368c 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -32,6 +32,7 @@ $Timestamp = $CurrentDate.ToString('yyyy-MM-ddTHHmm') # | SKU | Location | Cores | Notes # |--------|----------------|------:|------- # | Fadsv7 | australiaeast | 3024 | +# | Fadsv7 | swedencentral | 2560 | # | Dpdsv6 | australiaeast | 2048 | # | Dpdsv6 | southcentralus | 2048 | @@ -39,9 +40,9 @@ if ($VMSku -ieq 'Fadsv7') { $Arch = 'x64' $DiskType = 'NVMe' $ProtoVMSize = 'Standard_F16ads_v7' - $PoolSkuName = 'Standard_F64ads_v7' - $PoolSize = 23 # We have quota for 3024 cores (47 VMs), so we can have old and new pools of 23 VMs each. - $AvailableLocations = @('australiaeast') + $PoolSkuName = 'Standard_F80ads_v7' + $PoolSize = 32 # Locations where we have quota for at least 2560 cores (32 VMs): + $AvailableLocations = @('australiaeast', 'swedencentral') } elseif ($VMSku -ieq 'Dpdsv6') { $Arch = 'arm64' $DiskType = 'SCSI' From 79028476419c13029185dc2dc85fa38375da2a20 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 1 Sep 2026 15:40:17 -0700 Subject: [PATCH 06/25] Unify x64 Slow/Medium/Fast pools. --- azure-devops/asan-pipeline.yml | 8 ++++---- azure-devops/config.yml | 18 ++---------------- azure-pipelines.yml | 24 ++++++++++++------------ 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/azure-devops/asan-pipeline.yml b/azure-devops/asan-pipeline.yml index 985520ff416..97ae1ba8e0a 100644 --- a/azure-devops/asan-pipeline.yml +++ b/azure-devops/asan-pipeline.yml @@ -20,11 +20,11 @@ stages: displayName: 'Test x64 ASan' dependsOn: [] pool: - name: ${{ variables.x64SlowPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64SlowPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: build-and-test.yml @@ -39,11 +39,11 @@ stages: displayName: 'Test x86 ASan' dependsOn: [] pool: - name: ${{ variables.x64SlowPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64SlowPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: build-and-test.yml diff --git a/azure-devops/config.yml b/azure-devops/config.yml index 27be969b450..6a07dfdbc09 100644 --- a/azure-devops/config.yml +++ b/azure-devops/config.yml @@ -4,13 +4,7 @@ # Common configuration used by both pipelines variables: -- name: x64SlowPoolName - value: 'Stl-2026-08-25T2113-x64-Fasv6-Pool' - readonly: true -- name: x64MediumPoolName - value: 'Stl-2026-08-25T2113-x64-Fasv7-Pool' - readonly: true -- name: x64FastPoolName +- name: x64PoolName value: 'Stl-2026-08-25T2113-x64-Fadsv7-Pool' readonly: true - name: arm64PoolName @@ -22,16 +16,8 @@ variables: - name: launchVsDevShell value: 'C:\Program Files\Microsoft Visual Studio\18\Insiders\Common7\Tools\Launch-VsDevShell.ps1' readonly: true -# The x64 SKU Fasv6 doesn't have local temporary storage, so it must use 'C:'. -- name: x64SlowPoolWorkRoot - value: 'C:' - readonly: true -# The x64 SKU Fasv7 doesn't have local temporary storage, so it must use 'C:'. -- name: x64MediumPoolWorkRoot - value: 'C:' - readonly: true # The x64 SKU Fadsv7 has local temporary storage, available as 'N:' (for NVMe). -- name: x64FastPoolWorkRoot +- name: x64PoolWorkRoot value: 'N:' readonly: true # The arm64 SKU Dpdsv6 has local temporary storage, available as 'E:'. diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 1979b1b2cd6..7273f5a565c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -15,11 +15,11 @@ stages: dependsOn: [] displayName: 'Code Format' pool: - name: ${{ variables.x64MediumPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64MediumPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: azure-devops/format-validation.yml @@ -28,11 +28,11 @@ stages: dependsOn: [] displayName: 'Build x64' pool: - name: ${{ variables.x64MediumPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64MediumPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: azure-devops/build-and-test.yml @@ -50,11 +50,11 @@ stages: dependsOn: [] displayName: 'Build x86' pool: - name: ${{ variables.x64MediumPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64MediumPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: azure-devops/build-and-test.yml @@ -116,11 +116,11 @@ stages: dependsOn: [] displayName: 'Configure Tests' pool: - name: ${{ variables.x64MediumPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64MediumPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: azure-devops/build-and-test.yml @@ -143,11 +143,11 @@ stages: - Configure_Tests displayName: 'Test x64' pool: - name: ${{ variables.x64FastPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64FastPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: azure-devops/build-and-test.yml @@ -186,11 +186,11 @@ stages: - Test_ARM64 displayName: 'Test x86' pool: - name: ${{ variables.x64SlowPoolName }} + name: ${{ variables.x64PoolName }} demands: ${{ variables.poolDemands }} variables: - name: workRoot - value: '$(x64SlowPoolWorkRoot)' + value: '$(x64PoolWorkRoot)' readonly: true jobs: - template: azure-devops/build-and-test.yml From 527d6c8f85844c37fcddd5b5d9344b21ad7a963d Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 1 Sep 2026 15:53:37 -0700 Subject: [PATCH 07/25] Cycle locations. --- azure-devops/create-1es-hosted-pool.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index 9cb14ad368c..d8a589c7f36 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -52,7 +52,7 @@ if ($VMSku -ieq 'Fadsv7') { $AvailableLocations = @('australiaeast', 'southcentralus') } -$AvailableLocationIdx = 14 # Increment for each new set of pools, to cycle through the available locations. +$AvailableLocationIdx = 15 # Increment for each new set of pools, to cycle through the available locations. $Location = $AvailableLocations[$AvailableLocationIdx % $AvailableLocations.Length] if ($Arch -ieq 'x64') { From 205674c33f69310e15bdcd865e41b2367a27f5b7 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 8 Sep 2026 13:51:21 -0700 Subject: [PATCH 08/25] provision-image.ps1: Detect errors from curl.exe. "--fail" means "Fail fast with no output on HTTP errors". --- azure-devops/provision-image.ps1 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/azure-devops/provision-image.ps1 b/azure-devops/provision-image.ps1 index 1ecb4d106c4..6414a81d5b1 100644 --- a/azure-devops/provision-image.ps1 +++ b/azure-devops/provision-image.ps1 @@ -111,7 +111,10 @@ Function DownloadAndInstall { mkdir $tempPath -Force | Out-Null $fileName = [uri]::new($Url).Segments[-1] $installerPath = Join-Path $tempPath $fileName - curl.exe -L -o $installerPath -s -S $Url + curl.exe --fail -L -o $installerPath -s -S $Url + if ($LASTEXITCODE -ne 0) { + Write-Error "curl.exe failed with non-zero exit code $LASTEXITCODE." + } Write-Host "Installing $Name..." $proc = Start-Process -FilePath $installerPath -ArgumentList $Args -Wait -PassThru From 7d3b731575d70e706b7f8725710e5741ab68b0ee Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 8 Sep 2026 14:06:09 -0700 Subject: [PATCH 09/25] provision-image.ps1: Reorder and use long options for curl.exe. ``` -f, --fail Fail fast with no output on HTTP errors -s, --silent Silent mode -S, --show-error Show error even when -s is used -L, --location Follow redirects -o, --output Write to file instead of stdout ``` --- azure-devops/provision-image.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-devops/provision-image.ps1 b/azure-devops/provision-image.ps1 index 6414a81d5b1..72972f20092 100644 --- a/azure-devops/provision-image.ps1 +++ b/azure-devops/provision-image.ps1 @@ -111,7 +111,7 @@ Function DownloadAndInstall { mkdir $tempPath -Force | Out-Null $fileName = [uri]::new($Url).Segments[-1] $installerPath = Join-Path $tempPath $fileName - curl.exe --fail -L -o $installerPath -s -S $Url + curl.exe --fail --silent --show-error --location --output $installerPath $Url if ($LASTEXITCODE -ne 0) { Write-Error "curl.exe failed with non-zero exit code $LASTEXITCODE." } From 7afa85563d96bdac4c5459e1d856b544785c1290 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 8 Sep 2026 14:12:15 -0700 Subject: [PATCH 10/25] create-1es-hosted-pool.ps1: Set `$PSNativeCommandUseErrorActionPreference` just in case. We don't have any native commands right now. --- azure-devops/create-1es-hosted-pool.ps1 | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index d8a589c7f36..b3c75849aaf 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -17,6 +17,7 @@ Param( ) $ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true $CurrentDate = Get-Date $Timestamp = $CurrentDate.ToString('yyyy-MM-ddTHHmm') From 4bd12764e2396d4fa6dcc357f102b27e196a576b Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 8 Sep 2026 14:16:02 -0700 Subject: [PATCH 11/25] PowerShell 7.6.6. --- azure-devops/provision-image.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-devops/provision-image.ps1 b/azure-devops/provision-image.ps1 index 72972f20092..86c716c2c99 100644 --- a/azure-devops/provision-image.ps1 +++ b/azure-devops/provision-image.ps1 @@ -59,9 +59,9 @@ foreach ($workload in $VisualStudioWorkloads) { # https://github.com/PowerShell/PowerShell/releases/latest if ($Provisioning_x64) { - $PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.5/PowerShell-7.6.5-win-x64.msi' + $PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.6/PowerShell-7.6.6-win-x64.msi' } else { - $PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.5/PowerShell-7.6.5-win-arm64.msi' + $PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.6.6/PowerShell-7.6.6-win-arm64.msi' } $PowerShellArgs = @('/quiet', '/norestart') From a5b26abee663302f4460a868b1fff8df4d2b6531 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 8 Sep 2026 14:19:11 -0700 Subject: [PATCH 12/25] MSVC Compiler 19.52.36725. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe1cf099d0f..dbf13adf380 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 4.3.1) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) project(msvc_standard_libraries LANGUAGES CXX) -set(expected_msvc_compiler_version "19.52.36629") +set(expected_msvc_compiler_version "19.52.36725") if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS expected_msvc_compiler_version) message(FATAL_ERROR "The STL must be built with MSVC Compiler ${expected_msvc_compiler_version} or later. Follow the README instructions.") endif() From 7c6c0cfbbfaa851eaa16b9c2dd41f0a207aad48b Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Tue, 8 Sep 2026 15:03:39 -0700 Subject: [PATCH 13/25] New pools. --- azure-devops/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-devops/config.yml b/azure-devops/config.yml index 6a07dfdbc09..c73e107afea 100644 --- a/azure-devops/config.yml +++ b/azure-devops/config.yml @@ -5,10 +5,10 @@ variables: - name: x64PoolName - value: 'Stl-2026-08-25T2113-x64-Fadsv7-Pool' + value: 'Stl-2026-09-08T1422-x64-Fadsv7-Pool' readonly: true - name: arm64PoolName - value: 'Stl-2026-08-25T2113-arm64-Dpdsv6-Pool' + value: 'Stl-2026-09-08T1422-arm64-Dpdsv6-Pool' readonly: true - name: poolDemands value: 'EnableSpotVM -equals false' From c9e254ab6ade802bb479750d3528ada20754c6d7 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:09:04 -0700 Subject: [PATCH 14/25] MSVC-PR-766982 renamed `/experimental:mathlib` to `/Zc:cmath`. --- .../env.lst | 81 +++++++++---------- .../VSO_0157762_feature_test_macros/env.lst | 3 +- 2 files changed, 41 insertions(+), 43 deletions(-) diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst index f21cfd91912..209a3bc1387 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst @@ -4,49 +4,48 @@ RUNALL_INCLUDE ..\usual_matrix.lst # Explicitly enable libc-based math: -# TRANSITION, MSVC-PR-766982 renamed /experimental:mathlib to /Zc:cmath, pass both until this change ships -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++14 /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++14 /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++14 /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++14 /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++17 /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++17 /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++17 /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++17 /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++20 /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++20 /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++20 /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++20 /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++23preview /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++23preview /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++23preview /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++23preview /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++latest /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++latest /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++latest /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /std:c++latest /MTd" +PM_CL="/EHsc /Zc:cmath /std:c++14 /MD" +PM_CL="/EHsc /Zc:cmath /std:c++14 /MDd" +PM_CL="/EHsc /Zc:cmath /std:c++14 /MT" +PM_CL="/EHsc /Zc:cmath /std:c++14 /MTd" +PM_CL="/EHsc /Zc:cmath /std:c++17 /MD" +PM_CL="/EHsc /Zc:cmath /std:c++17 /MDd" +PM_CL="/EHsc /Zc:cmath /std:c++17 /MT" +PM_CL="/EHsc /Zc:cmath /std:c++17 /MTd" +PM_CL="/EHsc /Zc:cmath /std:c++20 /MD" +PM_CL="/EHsc /Zc:cmath /std:c++20 /MDd" +PM_CL="/EHsc /Zc:cmath /std:c++20 /MT" +PM_CL="/EHsc /Zc:cmath /std:c++20 /MTd" +PM_CL="/EHsc /Zc:cmath /std:c++23preview /MD" +PM_CL="/EHsc /Zc:cmath /std:c++23preview /MDd" +PM_CL="/EHsc /Zc:cmath /std:c++23preview /MT" +PM_CL="/EHsc /Zc:cmath /std:c++23preview /MTd" +PM_CL="/EHsc /Zc:cmath /std:c++latest /MD" +PM_CL="/EHsc /Zc:cmath /std:c++latest /MDd" +PM_CL="/EHsc /Zc:cmath /std:c++latest /MT" +PM_CL="/EHsc /Zc:cmath /std:c++latest /MTd" # /O2 implies /Oi which affects <__msvc_math.hpp>: -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++14 /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++14 /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++14 /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++14 /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++17 /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++17 /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++17 /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++17 /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++20 /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++20 /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++20 /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++20 /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++23preview /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++23preview /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++23preview /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++23preview /MTd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++latest /MD" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++latest /MDd" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++latest /MT" -PM_CL="/EHsc /Zc:cmath /experimental:mathlib /O2 /std:c++latest /MTd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MD" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MDd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MT" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MTd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MD" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MDd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MT" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MTd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MD" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MDd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MT" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MTd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MD" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MDd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MT" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MTd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MD" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MDd" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MT" +PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MTd" # Explicitly disable libc-based math: PM_CL="/EHsc /Zc:cmath- /std:c++14 /MD" diff --git a/tests/std/tests/VSO_0157762_feature_test_macros/env.lst b/tests/std/tests/VSO_0157762_feature_test_macros/env.lst index 0b32c69f019..c5019de78e2 100644 --- a/tests/std/tests/VSO_0157762_feature_test_macros/env.lst +++ b/tests/std/tests/VSO_0157762_feature_test_macros/env.lst @@ -43,6 +43,5 @@ PM_CL="/MT /std:c++14 /permissive- /EHsc /await:strict" PM_CL="/MT /std:c++14 /permissive- /EHsc /Zc:char8_t" PM_CL="/MT /std:c++17 /permissive- /EHsc /Zc:char8_t" PM_CL="/MT /std:c++latest /permissive- /EHsc" -# TRANSITION, MSVC-PR-766982 renamed /experimental:mathlib to /Zc:cmath, pass both until this change ships -PM_CL="/MT /std:c++latest /permissive- /EHsc /Zc:cmath /experimental:mathlib" +PM_CL="/MT /std:c++latest /permissive- /EHsc /Zc:cmath" PM_CL="/MT /std:c++latest /permissive- /EHsc /Zc:cmath-" From de31d845e0e65c83326c6d89a36a41264d1b06da Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:17:36 -0700 Subject: [PATCH 15/25] Cite MSVC-PR-777572 which was merged 2026-09-03. --- .../std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp index 594c105ae29..4587746a8ca 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// TRANSITION, MSVC frontend needs to intercept inclusions of : +// TRANSITION, MSVC-PR-777572 (merged 2026-09-03) changed the MSVC frontend to intercept inclusions of : #ifndef _M_CEE_PURE #include <__msvc_inttypes.hpp> #endif From ce509e704ce7e7fc8695092d9733ca35ef041117 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:18:24 -0700 Subject: [PATCH 16/25] MSVC-PR-767184/772024 (merged 2026-08-19/20) fixed LNK2005 for frexp(), before GH 6434 (merged 2026-09-04) used inline namespaces to allow mixing. --- .../std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp index 4587746a8ca..c700b3ebab7 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp @@ -41,7 +41,6 @@ template CONSTEXPR_CMATH23 void test_comparison_functions_cxx23(); CONSTEXPR_CMATH23 bool test_cmath_cxx23() { -#if defined(_MSVC_INTERNAL_TESTING) || !defined(_MSVC_LIBC_MATH) // TRANSITION, MSVC-PR-767184/772024 fixed LNK2005 { int exponent = 0; assert(frexp(15.5f, &exponent) == 0.96875f); @@ -57,7 +56,6 @@ CONSTEXPR_CMATH23 bool test_cmath_cxx23() { assert(frexp(1729, &exponent) == 0.84423828125); assert(exponent == 11); } -#endif // ^^^ no workaround ^^^ assert(ilogb(0.1729f) == -3); assert(ilogb(0.1729) == -3); From e3475632464ab8c2245c76dc99403879390da482 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:21:52 -0700 Subject: [PATCH 17/25] MSVC-PR-767404 (merged 2026-08-07) fixed the comparison functions in constant evaluation and fpclassify for subnormal floats. --- .../test.cpp | 27 +++++-------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp index c700b3ebab7..3b182d02575 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp @@ -243,15 +243,10 @@ CONSTEXPR_CMATH23 bool test_cmath_cxx23() { test_classification_functions_cxx23(); test_classification_functions_cxx23(); -#ifndef _MSVC_INTERNAL_TESTING // TRANSITION, MSVC-PR-767404 fixed the comparison functions in constant evaluation - if (!_Is_constant_evaluated()) -#endif // ^^^ workaround ^^^ - { - test_comparison_functions_cxx23(); - test_comparison_functions_cxx23(); - test_comparison_functions_cxx23(); - test_comparison_functions_cxx23(); - } + test_comparison_functions_cxx23(); + test_comparison_functions_cxx23(); + test_comparison_functions_cxx23(); + test_comparison_functions_cxx23(); return true; } @@ -283,12 +278,7 @@ CONSTEXPR_CMATH23 void test_classification_functions_cxx23() { constexpr T inf = numeric_limits::infinity(); constexpr T nan = numeric_limits::quiet_NaN(); -#ifndef _MSVC_INTERNAL_TESTING // TRANSITION, MSVC-PR-767404 fixed fpclassify for subnormal floats - if constexpr (!is_same_v) -#endif // ^^^ workaround ^^^ - { - assert(fpclassify(sub) == FP_SUBNORMAL); - } + assert(fpclassify(sub) == FP_SUBNORMAL); assert(fpclassify(inf) == FP_INFINITE); assert(fpclassify(nan) == FP_NAN); @@ -304,12 +294,7 @@ CONSTEXPR_CMATH23 void test_classification_functions_cxx23() { assert(!isnan(inf)); assert(isnan(nan)); -#ifndef _MSVC_INTERNAL_TESTING // TRANSITION, MSVC-PR-767404 fixed fpclassify for subnormal floats - if constexpr (!is_same_v) -#endif // ^^^ workaround ^^^ - { - assert(!isnormal(sub)); - } + assert(!isnormal(sub)); assert(!isnormal(inf)); assert(!isnormal(nan)); } From afba6e2b69f9288d6d3ddf7b57f80aec813241fd Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:23:14 -0700 Subject: [PATCH 18/25] MSVC-PR-767414/MSVC-PR-768260 (merged 2026-08-07/10) fixed LNK2019 for ARM64EC. --- .../tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp index 3b182d02575..b33dfc3d910 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/test.cpp @@ -640,7 +640,6 @@ CONSTEXPR_CMATH26 bool test_cmath_cxx26() { return true; } -#if defined(_MSVC_INTERNAL_TESTING) || !defined(_M_ARM64EC) // TRANSITION, MSVC-PR-767414/MSVC-PR-768260 fixed LNK2019 void test_cmath_runtime() { assert(nearbyint(3.14f) == 3.0f); assert(nearbyint(3.14) == 3.0); @@ -674,16 +673,13 @@ void test_cmath_runtime() { assert(isnan(nanf(""))); assert(isnan(nanl(""))); } -#endif // ^^^ no workaround ^^^ int main() { -#if defined(_MSVC_INTERNAL_TESTING) || !defined(_M_ARM64EC) // TRANSITION, MSVC-PR-767414/MSVC-PR-768260 fixed LNK2019 test_cmath_cxx23(); test_cstdlib_cxx23(); test_cinttypes_cxx23(); test_cmath_cxx26(); test_cmath_runtime(); -#endif // ^^^ no workaround ^^^ #ifdef __cpp_lib_constexpr_cmath static_assert(test_cmath_cxx23()); From 06071829d42045cc61fa75acec95304b9e31bd15 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:27:38 -0700 Subject: [PATCH 19/25] GH 6434 (merged 2026-09-04) removed the `#pragma function` stuff that made `/O2` coverage necessary. --- .../env.lst | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst index 209a3bc1387..11e33077245 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst @@ -25,28 +25,6 @@ PM_CL="/EHsc /Zc:cmath /std:c++latest /MDd" PM_CL="/EHsc /Zc:cmath /std:c++latest /MT" PM_CL="/EHsc /Zc:cmath /std:c++latest /MTd" -# /O2 implies /Oi which affects <__msvc_math.hpp>: -PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MD" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MDd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MT" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++14 /MTd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MD" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MDd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MT" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++17 /MTd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MD" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MDd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MT" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++20 /MTd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MD" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MDd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MT" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++23preview /MTd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MD" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MDd" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MT" -PM_CL="/EHsc /Zc:cmath /O2 /std:c++latest /MTd" - # Explicitly disable libc-based math: PM_CL="/EHsc /Zc:cmath- /std:c++14 /MD" PM_CL="/EHsc /Zc:cmath- /std:c++14 /MDd" From ea28fc4744fad66a14034a0892c99e5d675cee1b Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:32:22 -0700 Subject: [PATCH 20/25] MSVC-PR-771026 (merged 2026-08-19) added `/std:c++23` and deprecated `/std:c++23preview`. --- stl/inc/yvals_core.h | 4 ++-- .../env.lst | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/stl/inc/yvals_core.h b/stl/inc/yvals_core.h index b037883504b..c8d3f67d2db 100644 --- a/stl/inc/yvals_core.h +++ b/stl/inc/yvals_core.h @@ -789,8 +789,8 @@ // copy/move constructors and copy/move assignment operators are not trivial (/Wall) // warning C5246: 'member': the initialization of a subobject should be wrapped in braces (/Wall) // warning C5278: adding a specialization for 'type trait' has undefined behavior -// warning C5280: a static operator '()' requires at least '/std:c++23preview' -// warning C5281: a static lambda requires at least '/std:c++23preview' +// warning C5280: a static operator '()' requires at least '/std:c++23' +// warning C5281: a static lambda requires at least '/std:c++23' // warning C5285: cannot declare a specialization for 'meow' // warning C5291: 'DERIVED': deriving from the base class 'BASE' can cause potential runtime issues // due to an ABI bug. Recommend adding a 4-byte data member to the base class diff --git a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst index 11e33077245..a25d22d1bca 100644 --- a/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst +++ b/tests/std/tests/P0533R9_constexpr_for_cmath_and_cstdlib/env.lst @@ -16,10 +16,10 @@ PM_CL="/EHsc /Zc:cmath /std:c++20 /MD" PM_CL="/EHsc /Zc:cmath /std:c++20 /MDd" PM_CL="/EHsc /Zc:cmath /std:c++20 /MT" PM_CL="/EHsc /Zc:cmath /std:c++20 /MTd" -PM_CL="/EHsc /Zc:cmath /std:c++23preview /MD" -PM_CL="/EHsc /Zc:cmath /std:c++23preview /MDd" -PM_CL="/EHsc /Zc:cmath /std:c++23preview /MT" -PM_CL="/EHsc /Zc:cmath /std:c++23preview /MTd" +PM_CL="/EHsc /Zc:cmath /std:c++23 /MD" +PM_CL="/EHsc /Zc:cmath /std:c++23 /MDd" +PM_CL="/EHsc /Zc:cmath /std:c++23 /MT" +PM_CL="/EHsc /Zc:cmath /std:c++23 /MTd" PM_CL="/EHsc /Zc:cmath /std:c++latest /MD" PM_CL="/EHsc /Zc:cmath /std:c++latest /MDd" PM_CL="/EHsc /Zc:cmath /std:c++latest /MT" @@ -38,10 +38,10 @@ PM_CL="/EHsc /Zc:cmath- /std:c++20 /MD" PM_CL="/EHsc /Zc:cmath- /std:c++20 /MDd" PM_CL="/EHsc /Zc:cmath- /std:c++20 /MT" PM_CL="/EHsc /Zc:cmath- /std:c++20 /MTd" -PM_CL="/EHsc /Zc:cmath- /std:c++23preview /MD" -PM_CL="/EHsc /Zc:cmath- /std:c++23preview /MDd" -PM_CL="/EHsc /Zc:cmath- /std:c++23preview /MT" -PM_CL="/EHsc /Zc:cmath- /std:c++23preview /MTd" +PM_CL="/EHsc /Zc:cmath- /std:c++23 /MD" +PM_CL="/EHsc /Zc:cmath- /std:c++23 /MDd" +PM_CL="/EHsc /Zc:cmath- /std:c++23 /MT" +PM_CL="/EHsc /Zc:cmath- /std:c++23 /MTd" PM_CL="/EHsc /Zc:cmath- /std:c++latest /MD" PM_CL="/EHsc /Zc:cmath- /std:c++latest /MDd" PM_CL="/EHsc /Zc:cmath- /std:c++latest /MT" From e1b17bc16f1a0a2e563104d227444efc55f78316 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 10:37:07 -0700 Subject: [PATCH 21/25] MSVC-PR-771455 "Mark noreturn intrinsics as cold code" was merged 2026-08-26. --- stl/inc/__msvc_doom_core.hpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/stl/inc/__msvc_doom_core.hpp b/stl/inc/__msvc_doom_core.hpp index 1300f8081cd..08b90323c78 100644 --- a/stl/inc/__msvc_doom_core.hpp +++ b/stl/inc/__msvc_doom_core.hpp @@ -40,9 +40,7 @@ _STL_DISABLE_CLANG_WARNINGS #define _MSVC_STL_DOOM_FUNCTION(mesg) ::_invoke_watson(nullptr, nullptr, nullptr, 0, 0) #else // Use the MSVC __fastfail intrinsic: extern "C" __declspec(noreturn) void __fastfail(unsigned int); // declared by -#define _MSVC_STL_DOOM_FUNCTION(mesg) \ - __fastfail(5); /* __fastfail(FAST_FAIL_INVALID_ARG), value defined by */ \ - _STL_UNREACHABLE /* TRANSITION, DevCom-10914110 */ +#define _MSVC_STL_DOOM_FUNCTION(mesg) __fastfail(5); /* __fastfail(FAST_FAIL_INVALID_ARG), value in */ #endif // choose "doom function" #endif // ^^^ !defined(_MSVC_STL_DOOM_FUNCTION) ^^^ From b0e07978080fe1458b8afd1c7ffacbb7241bd70d Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 12:19:32 -0700 Subject: [PATCH 22/25] Add `/Zc:cmath` to libcxx, reported LLVM-222431. --- tests/libcxx/expected_results.txt | 29 ++++++++++++++--------------- tests/libcxx/usual_matrix.lst | 4 ++-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index 07c7bffe066..eab5d49f1e4 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -61,6 +61,16 @@ std/containers/sequences/vector/trivial_relocation.pass.cpp:1 FAIL # LLVM-182397: [libc++][test] rand.dist.bern.negbin/eval.pass.cpp constructs with p == 1, which has undefined behavior std/numerics/rand/rand.dist/rand.dist.bern/rand.dist.bern.negbin/eval.pass.cpp FAIL +# LLVM-222431: [libcxx][test] `signaling_NaN()` should not be used in `constexpr ` tests +std/numerics/c.math/isgreater.pass.cpp:0 FAIL +std/numerics/c.math/isgreater.pass.cpp:1 FAIL +std/numerics/c.math/isgreaterequal.pass.cpp:0 FAIL +std/numerics/c.math/isgreaterequal.pass.cpp:1 FAIL +std/numerics/c.math/islessequal.pass.cpp:0 FAIL +std/numerics/c.math/islessequal.pass.cpp:1 FAIL +std/numerics/c.math/isunordered.pass.cpp:0 FAIL +std/numerics/c.math/isunordered.pass.cpp:1 FAIL + # Non-Standard regex behavior. # "It seems likely that the test is still non-conforming due to how libc++ handles the 'w' character class." std/re/re.traits/lookup_classname.pass.cpp FAIL @@ -244,21 +254,10 @@ std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_m std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_min.pass.cpp FAIL # P0533R9 constexpr For And -std/language.support/support.limits/support.limits.general/cmath.version.compile.pass.cpp FAIL -std/language.support/support.limits/support.limits.general/cstdlib.version.compile.pass.cpp FAIL -std/numerics/c.math/fpclassify.pass.cpp FAIL -std/numerics/c.math/isgreater.pass.cpp:0 FAIL -std/numerics/c.math/isgreater.pass.cpp:1 FAIL -std/numerics/c.math/isgreaterequal.pass.cpp:0 FAIL -std/numerics/c.math/isgreaterequal.pass.cpp:1 FAIL -std/numerics/c.math/isless.pass.cpp:0 FAIL -std/numerics/c.math/isless.pass.cpp:1 FAIL -std/numerics/c.math/islessequal.pass.cpp:0 FAIL -std/numerics/c.math/islessequal.pass.cpp:1 FAIL -std/numerics/c.math/islessgreater.pass.cpp:0 FAIL -std/numerics/c.math/islessgreater.pass.cpp:1 FAIL -std/numerics/c.math/isunordered.pass.cpp:0 FAIL -std/numerics/c.math/isunordered.pass.cpp:1 FAIL +# GH-6412 Implement P0533R9 (C++23 constexpr ) for Clang and EDG +std/language.support/support.limits/support.limits.general/cmath.version.compile.pass.cpp:2 FAIL +std/language.support/support.limits/support.limits.general/cstdlib.version.compile.pass.cpp:2 FAIL +std/numerics/c.math/fpclassify.pass.cpp:2 FAIL # P0543R3 Saturation Arithmetic # Add 'std-at-least-c++26' to tests/utils/stl/test/tests.py when beginning work on C++26. diff --git a/tests/libcxx/usual_matrix.lst b/tests/libcxx/usual_matrix.lst index 163ddc7403e..ed85203605d 100644 --- a/tests/libcxx/usual_matrix.lst +++ b/tests/libcxx/usual_matrix.lst @@ -5,6 +5,6 @@ RUNALL_INCLUDE ..\universal_prefix.lst RUNALL_CROSSLIST * PM_CL="/EHsc /MTd /std:c++latest /permissive- /utf-8 /FImsvc_stdlib_force_include.h /wd4643" RUNALL_CROSSLIST -PM_CL="/Zc:preprocessor" -ASAN PM_CL="/Zc:preprocessor -fsanitize=address /Zi" PM_LINK="/debug" +PM_CL="/Zc:preprocessor /Zc:cmath" +ASAN PM_CL="/Zc:preprocessor /Zc:cmath -fsanitize=address /Zi" PM_LINK="/debug" PM_COMPILER="clang-cl" PM_CL="-fno-ms-compatibility -fno-delayed-template-parsing -Wno-unqualified-std-cast-call" From c280ad0a33a91afce42f7a1be3a55ebe78c79df1 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 14:10:03 -0700 Subject: [PATCH 23/25] Azure Pipelines: Adjust timeouts. Remove most of the fine-grained task timeouts; we don't need them. Keep the Code Format Validation job timeout at 5 minutes. It currently takes ~1m55s so this leaves a 2.5x margin. Reduce the build-and-test.yml job timeout from 30 to 20 minutes. The slowest shards are ARM64EC and they take ~9m, so this leaves a 2.2x margin. Making this arch/stage dependent would be valuable, since the early builds and the x64/x86 runs are faster. Reduce the Run Tests task timeout from 30 to 15 minutes. The slowest ARM64EC shard takes 5m56s so this leaves a 2.5x margin. --- azure-devops/build-and-test.yml | 2 +- azure-devops/build-benchmarks.yml | 2 -- azure-devops/cmake-configure-build.yml | 2 -- azure-devops/format-validation.yml | 3 --- azure-devops/run-tests.yml | 3 +-- 5 files changed, 2 insertions(+), 10 deletions(-) diff --git a/azure-devops/build-and-test.yml b/azure-devops/build-and-test.yml index c37891ffe60..2c6b1ae4383 100644 --- a/azure-devops/build-and-test.yml +++ b/azure-devops/build-and-test.yml @@ -39,7 +39,7 @@ jobs: - job: '${{ parameters.targetPlatform }}' strategy: parallel: ${{ parameters.numShards }} - timeoutInMinutes: 30 + timeoutInMinutes: 20 steps: - template: checkout-self.yml - template: checkout-submodule.yml diff --git a/azure-devops/build-benchmarks.yml b/azure-devops/build-benchmarks.yml index b0734bb2b47..6a0a79e568e 100644 --- a/azure-devops/build-benchmarks.yml +++ b/azure-devops/build-benchmarks.yml @@ -31,7 +31,6 @@ steps: -DSTL_BINARY_DIR="$(buildOutputLocation)" ` -DVCLIBS_TARGET_ARCHITECTURE=${{ parameters.targetPlatform }} ` -S $(Build.SourcesDirectory)/benchmarks -B "$(benchmarkBuildOutputLocation)\${{ parameters.compiler }}" - timeoutInMinutes: 2 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } # TRANSITION, we currently only build the benchmarks with Clang for x64 condition: > @@ -47,7 +46,6 @@ steps: $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }} cmake --build "$(benchmarkBuildOutputLocation)\${{ parameters.compiler }}" - timeoutInMinutes: 2 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } # TRANSITION, we currently only build the benchmarks with Clang for x64 condition: > diff --git a/azure-devops/cmake-configure-build.yml b/azure-devops/cmake-configure-build.yml index 8f324caa0f8..1402b216cb2 100644 --- a/azure-devops/cmake-configure-build.yml +++ b/azure-devops/cmake-configure-build.yml @@ -48,7 +48,6 @@ steps: -DTESTS_BUILD_ONLY=${{ parameters.testsBuildOnly }} ` -DVCLIBS_TARGET_ARCHITECTURE=${{ parameters.targetPlatform }} ` -S $(Build.SourcesDirectory) -B "$(buildOutputLocation)" - timeoutInMinutes: 2 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PowerShell@2 displayName: 'Build STL' @@ -59,6 +58,5 @@ steps: $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }} cmake --build "$(buildOutputLocation)" - timeoutInMinutes: 5 condition: and(succeeded(), ${{ parameters.buildStl }}) env: { TMP: $(tmpDir), TEMP: $(tmpDir) } diff --git a/azure-devops/format-validation.yml b/azure-devops/format-validation.yml index 1edaeb8ca6b..da6cef97613 100644 --- a/azure-devops/format-validation.yml +++ b/azure-devops/format-validation.yml @@ -22,7 +22,6 @@ jobs: & "$(launchVsDevShell)" -Preview -NoLogo -HostArch x64 -Arch x64 cmake -G Ninja -S $(Build.SourcesDirectory)/tools -B "$(validationBuildOutputLocation)" cmake --build "$(validationBuildOutputLocation)" - timeoutInMinutes: 5 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PowerShell@2 displayName: 'Validate Files' @@ -33,7 +32,6 @@ jobs: $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch x64 -Arch x64 cmake --build "$(validationBuildOutputLocation)" --target run-validate - timeoutInMinutes: 2 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } # We need to validate files before running clang-format, which modifies them in-place. - task: PowerShell@2 @@ -45,7 +43,6 @@ jobs: $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch x64 -Arch x64 cmake --build "$(validationBuildOutputLocation)" --target run-format - timeoutInMinutes: 5 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PowerShell@2 displayName: 'Create Diff' diff --git a/azure-devops/run-tests.yml b/azure-devops/run-tests.yml index 9db612463fc..e08543547f4 100644 --- a/azure-devops/run-tests.yml +++ b/azure-devops/run-tests.yml @@ -23,12 +23,11 @@ steps: $PSNativeCommandUseErrorActionPreference = $true & "$(launchVsDevShell)" -Preview -NoLogo -HostArch ${{ parameters.hostArch }} -Arch ${{ parameters.targetArch }} ninja --verbose -k 0 ${{ parameters.testTargets }} - timeoutInMinutes: 30 + timeoutInMinutes: 15 condition: and(succeeded(), ${{ parameters.runTesting }}) env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PublishTestResults@2 displayName: 'Publish Tests' - timeoutInMinutes: 5 condition: and(succeededOrFailed(), ${{ parameters.runTesting }}) inputs: searchFolder: $(buildOutputLocation) From e9afd9f01c6e73d7c847f81d0e9780a707fe707b Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 14:36:00 -0700 Subject: [PATCH 24/25] Azure Pipelines: Refine timeouts. Use 6 minutes for early x64/x86 builds (2.4x margin), and 9 minutes for early ARM64/ARM64EC builds (2.5x margin). Use 5 minutes for Configure Tests (3.3x margin), same as Code Format Validation. Use 15 minutes for full x64/x86 tests (2.5x margin) and 20 minutes for full ARM64/ARM64EC tests (2.2x margin). Use 20 minutes for x64/x86 ASan (unverified but should be ~2.5x margin) and 25 minutes for ARM64 ASan (2.5x margin). --- azure-devops/asan-pipeline.yml | 3 +++ azure-devops/build-and-test.yml | 4 +++- azure-pipelines.yml | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/azure-devops/asan-pipeline.yml b/azure-devops/asan-pipeline.yml index 97ae1ba8e0a..3a30757da2a 100644 --- a/azure-devops/asan-pipeline.yml +++ b/azure-devops/asan-pipeline.yml @@ -29,6 +29,7 @@ stages: jobs: - template: build-and-test.yml parameters: + jobTimeoutInMinutes: 20 hostArch: x64 targetArch: x64 targetPlatform: x64 @@ -48,6 +49,7 @@ stages: jobs: - template: build-and-test.yml parameters: + jobTimeoutInMinutes: 20 hostArch: x86 targetArch: x86 targetPlatform: x86 @@ -67,6 +69,7 @@ stages: jobs: - template: build-and-test.yml parameters: + jobTimeoutInMinutes: 25 hostArch: arm64 targetArch: arm64 targetPlatform: arm64 diff --git a/azure-devops/build-and-test.yml b/azure-devops/build-and-test.yml index 2c6b1ae4383..2909ddfb5b7 100644 --- a/azure-devops/build-and-test.yml +++ b/azure-devops/build-and-test.yml @@ -2,6 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception parameters: +- name: jobTimeoutInMinutes + type: string - name: hostArch type: string - name: targetArch @@ -39,7 +41,7 @@ jobs: - job: '${{ parameters.targetPlatform }}' strategy: parallel: ${{ parameters.numShards }} - timeoutInMinutes: 20 + timeoutInMinutes: ${{ parameters.jobTimeoutInMinutes }} steps: - template: checkout-self.yml - template: checkout-submodule.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7273f5a565c..a6d2683d8d2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -37,6 +37,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 6 hostArch: x64 targetArch: x64 targetPlatform: x64 @@ -59,6 +60,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 6 hostArch: x86 targetArch: x86 targetPlatform: x86 @@ -81,6 +83,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 9 hostArch: arm64 targetArch: arm64 targetPlatform: arm64 @@ -103,6 +106,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 9 hostArch: arm64 targetArch: arm64 targetPlatform: arm64ec @@ -125,6 +129,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 5 hostArch: x64 targetArch: x64 targetPlatform: x64 @@ -152,6 +157,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 15 hostArch: x64 targetArch: x64 targetPlatform: x64 @@ -175,6 +181,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 20 hostArch: arm64 targetArch: arm64 targetPlatform: arm64 @@ -195,6 +202,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 15 hostArch: x86 targetArch: x86 targetPlatform: x86 @@ -214,6 +222,7 @@ stages: jobs: - template: azure-devops/build-and-test.yml parameters: + jobTimeoutInMinutes: 20 hostArch: arm64 targetArch: arm64 targetPlatform: arm64ec From 89fee32a4f3fdb83c814fa1e8cad91b597facab9 Mon Sep 17 00:00:00 2001 From: "Stephan T. Lavavej" Date: Wed, 9 Sep 2026 16:07:07 -0700 Subject: [PATCH 25/25] Reported GH 6445. --- tests/libcxx/expected_results.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/libcxx/expected_results.txt b/tests/libcxx/expected_results.txt index eab5d49f1e4..68e9d9f6fdd 100644 --- a/tests/libcxx/expected_results.txt +++ b/tests/libcxx/expected_results.txt @@ -644,6 +644,11 @@ std/localization/locale.categories/category.time/locale.time.put/locale.time.put # GH-6135 : time_put_byname doesn't encode the output in UTF-8 even if the locale name contains ".UTF-8" std/localization/locale.categories/category.time/locale.time.put.byname/put1.pass.cpp FAIL +# GH-6445 : constexpr fpclassify() rejects signaling NaNs on x86 +# SKIPPED because this is x86-specific. +std/numerics/c.math/fpclassify.pass.cpp:0 SKIPPED +std/numerics/c.math/fpclassify.pass.cpp:1 SKIPPED + # *** VCRUNTIME BUGS ***