diff --git a/.github/workflows/update-status-chart.yml b/.github/workflows/update-status-chart.yml index 249c9d55ef..7379faf7c4 100644 --- a/.github/workflows/update-status-chart.yml +++ b/.github/workflows/update-status-chart.yml @@ -20,7 +20,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: ">=21.7.1" + node-version: ">=22.2.0" - name: Install Packages run: | npm ci diff --git a/README.md b/README.md index 984b5d460f..499f7aa195 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ Just try to follow these rules, so we can spend more time fixing bugs and implem # How To Build With The Visual Studio IDE -1. Install Visual Studio 2022 17.10 Preview 4 or later. +1. Install Visual Studio 2022 17.11 Preview 1 or later. * Select "Windows 11 SDK (10.0.22621.0)" in the VS Installer. * We recommend selecting "C++ CMake tools for Windows" in the VS Installer. This will ensure that you're using supported versions of CMake and Ninja. @@ -156,7 +156,7 @@ Just try to follow these rules, so we can spend more time fixing bugs and implem # How To Build With A Native Tools Command Prompt -1. Install Visual Studio 2022 17.10 Preview 4 or later. +1. Install Visual Studio 2022 17.11 Preview 1 or later. * Select "Windows 11 SDK (10.0.22621.0)" in the VS Installer. * We recommend selecting "C++ CMake tools for Windows" in the VS Installer. This will ensure that you're using supported versions of CMake and Ninja. diff --git a/azure-devops/checkout-submodule.yml b/azure-devops/checkout-submodule.yml index 3822543e9d..3e038a5f65 100644 --- a/azure-devops/checkout-submodule.yml +++ b/azure-devops/checkout-submodule.yml @@ -12,19 +12,22 @@ steps: - task: PowerShell@2 displayName: 'Checkout ${{ parameters.path }} Submodule' condition: and(succeeded(), ${{ parameters.enabled }}) + retryCountOnTaskFailure: 4 inputs: + pwsh: true targetType: inline script: | + $PSNativeCommandUseErrorActionPreference = $true $submodule = '${{ parameters.path }}' $rawStatus = git submodule status --cached $submodule - $sha = $rawStatus -replace '^[ \-+]([0-9a-f]+) .*$', '$1' + $sha = $rawStatus -creplace '^[ \-+]([0-9a-f]+) .*$', '$1' cd $submodule git init if ((git remote) -eq $null) { git remote add submodule-upstream ${{ parameters.url }} } git fetch --filter=tree:0 --depth=1 submodule-upstream $sha - if ($submodule -eq 'llvm-project') { + if ($submodule -ceq 'llvm-project') { git sparse-checkout set --sparse-index libcxx/test libcxx/utils/libcxx llvm/utils/lit } git reset --quiet --hard FETCH_HEAD diff --git a/azure-devops/config.yml b/azure-devops/config.yml index f699f5d75c..9ecd9a9132 100644 --- a/azure-devops/config.yml +++ b/azure-devops/config.yml @@ -5,7 +5,7 @@ variables: - name: poolName - value: 'StlBuild-2024-04-17T1257-Pool' + value: 'StlBuild-2024-05-21T1719-Pool' readonly: true - name: poolDemands value: 'EnableSpotVM -equals false' @@ -19,6 +19,9 @@ variables: - name: benchmarkBuildOutputLocation value: 'D:\benchmark' readonly: true +- name: validationBuildOutputLocation + value: 'D:\validation' + readonly: true - name: Codeql.SkipTaskAutoInjection value: true readonly: true diff --git a/azure-devops/create-1es-hosted-pool.ps1 b/azure-devops/create-1es-hosted-pool.ps1 index 0814678ed9..c996e8d74b 100644 --- a/azure-devops/create-1es-hosted-pool.ps1 +++ b/azure-devops/create-1es-hosted-pool.ps1 @@ -70,36 +70,6 @@ function New-Password { return $result } -<# -.SYNOPSIS -Waits for the shutdown of the specified resource. - -.DESCRIPTION -Wait-Shutdown takes a VM, and checks if there's a 'PowerState/stopped' -code; if there is, it returns. If there isn't, it waits 10 seconds and -tries again. - -.PARAMETER ResourceGroupName -The name of the resource group to look up the VM in. - -.PARAMETER Name -The name of the virtual machine to wait on. -#> -function Wait-Shutdown { - [CmdletBinding(PositionalBinding=$false)] - Param( - [Parameter(Mandatory)][string]$ResourceGroupName, - [Parameter(Mandatory)][string]$Name - ) - - Write-Host "Waiting for $Name to stop..." - $StoppedCode = 'PowerState/stopped' - while ($StoppedCode -notin (Get-AzVM -ResourceGroupName $ResourceGroupName -Name $Name -Status).Statuses.Code) { - Write-Host '... not stopped yet, sleeping for 10 seconds' - Start-Sleep -Seconds 10 - } -} - #################################################################################################### Display-ProgressBar -Status 'Silencing breaking change warnings' @@ -169,7 +139,7 @@ Display-ProgressBar -Status 'Creating prototype VM' # Previously: -Priority 'Spot' $VM = New-AzVMConfig ` - -Name $ProtoVMName ` + -VMName $ProtoVMName ` -VMSize $VMSize ` -Priority 'Regular' @@ -195,79 +165,79 @@ $VM = Set-AzVMBootDiagnostic ` -VM $VM ` -Disable -$VM = Set-AzVMSecurityProfile ` - -VM $VM ` - -SecurityType 'TrustedLaunch' - -$VM = Set-AzVMUefi ` - -VM $VM ` - -EnableVtpm $true ` - -EnableSecureBoot $true - New-AzVm ` -ResourceGroupName $ResourceGroupName ` -Location $Location ` -VM $VM | Out-Null +$VM = Get-AzVM ` + -ResourceGroupName $ResourceGroupName ` + -Name $ProtoVMName + +$PrototypeOSDiskName = $VM.StorageProfile.OsDisk.Name + #################################################################################################### Display-ProgressBar -Status 'Running provision-image.ps1 in VM' $ProvisionImageResult = Invoke-AzVMRunCommand ` - -ResourceGroupName $ResourceGroupName ` - -VMName $ProtoVMName ` + -ResourceId $VM.ID ` -CommandId 'RunPowerShellScript' ` -ScriptPath "$PSScriptRoot\provision-image.ps1" Write-Host $ProvisionImageResult.value.Message +if ($ProvisionImageResult.value.Message -cnotmatch 'PROVISION_IMAGE_SUCCEEDED') { + Write-Host 'provision-image.ps1 failed, stopping VM...' + + Stop-AzVM ` + -Id $VM.ID ` + -Force | Out-Null + + Write-Error "VM stopped. Remember to delete unusable resource group: $ResourceGroupName" +} + #################################################################################################### Display-ProgressBar -Status 'Restarting VM' -Restart-AzVM -ResourceGroupName $ResourceGroupName -Name $ProtoVMName | Out-Null +Restart-AzVM ` + -Id $VM.ID | Out-Null #################################################################################################### Display-ProgressBar -Status 'Sleeping after restart' # The VM appears to be busy immediately after restarting. -# This workaround waits for a minute before attempting to run sysprep.ps1. +# This workaround waits for a minute before attempting to run sysprep. Start-Sleep -Seconds 60 #################################################################################################### -Display-ProgressBar -Status 'Running sysprep.ps1 in VM' +Display-ProgressBar -Status 'Running sysprep in VM' Invoke-AzVMRunCommand ` - -ResourceGroupName $ResourceGroupName ` - -VMName $ProtoVMName ` + -ResourceId $VM.ID ` -CommandId 'RunPowerShellScript' ` - -ScriptPath "$PSScriptRoot\sysprep.ps1" | Out-Null + -ScriptString 'C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown' | Out-Null #################################################################################################### Display-ProgressBar -Status 'Waiting for VM to shut down' -Wait-Shutdown -ResourceGroupName $ResourceGroupName -Name $ProtoVMName +while ('PowerState/stopped' -notin (Get-AzVM -ResourceId $VM.ID -Status).Statuses.Code) { + Start-Sleep -Seconds 10 +} #################################################################################################### Display-ProgressBar -Status 'Stopping VM' Stop-AzVM ` - -ResourceGroupName $ResourceGroupName ` - -Name $ProtoVMName ` + -Id $VM.ID ` -Force | Out-Null #################################################################################################### Display-ProgressBar -Status 'Generalizing VM' Set-AzVM ` - -ResourceGroupName $ResourceGroupName ` - -Name $ProtoVMName ` + -Id $VM.ID ` -Generalized | Out-Null -$VM = Get-AzVM ` - -ResourceGroupName $ResourceGroupName ` - -Name $ProtoVMName - -$PrototypeOSDiskName = $VM.StorageProfile.OsDisk.Name - #################################################################################################### Display-ProgressBar -Status 'Creating gallery' diff --git a/azure-devops/create-prdiff.ps1 b/azure-devops/create-prdiff.ps1 deleted file mode 100644 index 0274769e6c..0000000000 --- a/azure-devops/create-prdiff.ps1 +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -[CmdletBinding(PositionalBinding = $False)] -Param( - [Parameter()] - [String]$DiffFile -) - -if ([string]::IsNullOrEmpty($DiffFile)) { - $DiffFile = [System.IO.Path]::GetTempFileName() -} - -Start-Process -FilePath 'git' -ArgumentList 'diff', '--ignore-submodules' ` - -NoNewWindow -Wait ` - -RedirectStandardOutput $DiffFile -if (0 -ne (Get-Item -LiteralPath $DiffFile).Length) { - $message = @( - '##vso[task.logissue type=error]The formatting of the files in the repo was not what we expected.' - 'Please access the diff from format.diff in the build artifacts' - 'and apply it with `git apply`. To download the diff:' - '1. Click the failed Validation job,' - '2. Click "1 artifact produced",' - '3. Hover over format.diff,' - '4. Click the three dots that appear on the right,' - '5. Click "Download artifacts".' - 'Alternatively, you can run the `format` CMake target:' - ' cmake --build --target format' - '' - '##[group]Expected formatting - click to expand diff' - Get-Content -LiteralPath $DiffFile -Raw - '##[endgroup]' - "##vso[artifact.upload artifactname=format.diff]$DiffFile" - '##vso[task.complete result=Failed]DONE' - ) - Write-Host ($message -join "`n") -} diff --git a/azure-devops/format-validation.yml b/azure-devops/format-validation.yml index 62553a627a..945c96d1b0 100644 --- a/azure-devops/format-validation.yml +++ b/azure-devops/format-validation.yml @@ -10,30 +10,67 @@ jobs: steps: - template: checkout-self.yml - script: | + if exist "$(validationBuildOutputLocation)" ( + rmdir /S /Q "$(validationBuildOutputLocation)" + ) call "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\Common7\Tools\VsDevCmd.bat" ^ -host_arch=x64 -arch=x64 -no_logo - cmake -G Ninja -S $(Build.SourcesDirectory)/tools -B $(tmpDir)/format-validate-build - cmake --build $(tmpDir)/format-validate-build + cmake -G Ninja -S $(Build.SourcesDirectory)/tools -B "$(validationBuildOutputLocation)" + cmake --build "$(validationBuildOutputLocation)" displayName: 'Build format and validation' timeoutInMinutes: 5 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - script: | call "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\Common7\Tools\VsDevCmd.bat" ^ -host_arch=x64 -arch=x64 -no_logo - cmake --build $(tmpDir)/format-validate-build --target run-format + cmake --build "$(validationBuildOutputLocation)" --target run-format displayName: 'clang-format Files' timeoutInMinutes: 5 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - script: | call "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\Common7\Tools\VsDevCmd.bat" ^ -host_arch=x64 -arch=x64 -no_logo - cmake --build $(tmpDir)/format-validate-build --target run-validate + cmake --build "$(validationBuildOutputLocation)" --target run-validate displayName: 'Validate Files' timeoutInMinutes: 2 env: { TMP: $(tmpDir), TEMP: $(tmpDir) } - task: PowerShell@2 displayName: 'Create Diff' inputs: - filePath: azure-devops/create-prdiff.ps1 + pwsh: true + targetType: inline + script: | + $TempSubDir = Join-Path ([System.IO.Path]::GetTempPath()) ([System.IO.Path]::GetRandomFileName()) + mkdir $TempSubDir -Force | Out-Null + $DiffFile = Join-Path $TempSubDir 'format.diff' + git diff --ignore-submodules > $DiffFile + if ((Get-Item -LiteralPath $DiffFile).Length -ne 0) { + $message = @( + '##vso[task.logissue type=error]The files in the repo need to be properly formatted.' + '' + '##[section]To fix this, you can clang-format the entire repo with:' + ' cmake --preset x64' + ' cmake --build --preset x64 --target format' + '' + '##[section]Please avoid this in the future by configuring your editor to format-on-save.' + '' + '##[section]View expected formatting:' + '##[group] >>>>> Click this line to expand the diff: <<<<<' + Get-Content -LiteralPath $DiffFile -Raw + '##[endgroup]' + '' + '##[section]You can also download this as format.diff and apply it with `git apply`:' + ' 1. Click the failed Validation job (upper left, marked with a red X)' + ' 2. Click "1 artifact produced"' + ' 3. Click the ">" chevron to the left of "format-artifact"' + ' 4. Hover over "format.diff"' + ' 5. Click the three dots that appear on the right' + ' 6. Click "Download artifacts"' + '' + "##vso[artifact.upload artifactname=format-artifact]$DiffFile" + '##vso[task.complete result=Failed]' + ) + Write-Host ($message -join "`n") + } condition: succeededOrFailed() env: { TMP: $(tmpDir), TEMP: $(tmpDir) } diff --git a/azure-devops/provision-image.ps1 b/azure-devops/provision-image.ps1 index 99f75eeee9..4fb69a968f 100644 --- a/azure-devops/provision-image.ps1 +++ b/azure-devops/provision-image.ps1 @@ -3,86 +3,20 @@ <# .SYNOPSIS -Sets up a machine to be an image for a scale set. +Sets up a virtual machine to be an image for a hosted pool. .DESCRIPTION -provision-image.ps1 runs on an existing, freshly provisioned virtual machine, -and sets up that virtual machine as a build machine. After this is done, -(outside of this script), we take that machine and make it an image to be copied -for setting up new VMs in the scale set. +create-1es-hosted-pool.ps1 (running on an STL maintainer's machine) creates a "prototype" virtual machine in Azure, +then runs provision-image.ps1 on that VM. This gives us full control over what we install for building and testing +the STL. After provision-image.ps1 is done, create-1es-hosted-pool.ps1 makes an image of the prototype VM, +creates a 1ES Hosted Pool that will spin up copies of the image as worker VMs, and finally deletes the prototype VM. #> $ErrorActionPreference = 'Stop' $ProgressPreference = 'SilentlyContinue' -<# -.SYNOPSIS -Gets a random file path in the temp directory. - -.DESCRIPTION -Get-TempFilePath takes an extension, and returns a path with a random -filename component in the temporary directory with that extension. - -.PARAMETER Extension -The extension to use for the path. -#> -Function Get-TempFilePath { - [CmdletBinding(PositionalBinding=$false)] - Param( - [Parameter(Mandatory)][String]$Extension - ) - - $tempPath = [System.IO.Path]::GetTempPath() - $tempName = [System.IO.Path]::GetRandomFileName() + '.' + $Extension - return Join-Path $tempPath $tempName -} - -<# -.SYNOPSIS -Downloads and extracts a ZIP file to a newly created temporary subdirectory. - -.DESCRIPTION -DownloadAndExtractZip returns a path containing the extracted contents. - -.PARAMETER Url -The URL of the ZIP file to download. -#> -Function DownloadAndExtractZip { - [CmdletBinding(PositionalBinding=$false)] - Param( - [Parameter(Mandatory)][String]$Url - ) - - $ZipPath = Get-TempFilePath -Extension 'zip' - curl.exe -L -o $ZipPath -s -S $Url - $TempSubdirPath = Get-TempFilePath -Extension 'dir' - Expand-Archive -Path $ZipPath -DestinationPath $TempSubdirPath -Force - Remove-Item -Path $ZipPath - - return $TempSubdirPath -} - -if ($PSVersionTable.PSVersion -lt [Version]::new('7.4.2')) { - Write-Host "Old PowerShell version: $($PSVersionTable.PSVersion)" - - # https://github.com/PowerShell/PowerShell/releases/latest - $PowerShellZipUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.4.2/PowerShell-7.4.2-win-x64.zip' - Write-Host "Downloading: $PowerShellZipUrl" - $ExtractedPowerShellPath = DownloadAndExtractZip -Url $PowerShellZipUrl - $PwshPath = Join-Path $ExtractedPowerShellPath 'pwsh.exe' - - $PwshArgs = @( - '-ExecutionPolicy', - 'Unrestricted', - '-File', - $PSCommandPath - ) - Write-Host "Executing: $PwshPath $PwshArgs" - & $PwshPath $PwshArgs - - Write-Host 'Cleaning up...' - Remove-Item -Recurse -Path $ExtractedPowerShellPath - exit +if ($Env:COMPUTERNAME -cne 'PROTOTYPE') { + Write-Error 'You should not run provision-image.ps1 on your local machine.' } $VisualStudioWorkloads = @( @@ -105,6 +39,10 @@ foreach ($workload in $VisualStudioWorkloads) { $VisualStudioArgs += $workload } +# https://github.com/PowerShell/PowerShell/releases/latest +$PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.4.2/PowerShell-7.4.2-win-x64.msi' +$PowerShellArgs = @('/quiet', '/norestart') + $PythonUrl = 'https://www.python.org/ftp/python/3.12.3/python-3.12.3-amd64.exe' $PythonArgs = @('/quiet', 'InstallAllUsers=1', 'PrependPath=1', 'CompileAll=1', 'Include_doc=0') @@ -137,7 +75,10 @@ Function DownloadAndInstall { try { Write-Host "Downloading $Name..." - [string]$installerPath = Get-TempFilePath -Extension 'exe' + $tempPath = 'D:\installerTemp' + mkdir $tempPath -Force | Out-Null + $fileName = [uri]::new($Url).Segments[-1] + $installerPath = Join-Path $tempPath $fileName curl.exe -L -o $installerPath -s -S $Url Write-Host "Installing $Name..." @@ -158,9 +99,13 @@ Function DownloadAndInstall { } } +Write-Host "Old PowerShell version: $($PSVersionTable.PSVersion)" + # Print the Windows version, so we can verify whether Patch Tuesday has been picked up. -cmd /c ver +# Skip a blank line to improve the output. +(cmd /c ver)[1] +DownloadAndInstall -Name 'PowerShell' -Url $PowerShellUrl -Args $PowerShellArgs DownloadAndInstall -Name 'Python' -Url $PythonUrl -Args $PythonArgs DownloadAndInstall -Name 'Visual Studio' -Url $VisualStudioUrl -Args $VisualStudioArgs DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args $CudaArgs @@ -170,6 +115,7 @@ Write-Host 'Setting environment variables...' # The STL's PR/CI builds are totally unrepresentative of customer usage. [Environment]::SetEnvironmentVariable('VSCMD_SKIP_SENDTELEMETRY', '1', 'Machine') -Write-Host 'Done!' +# Tell create-1es-hosted-pool.ps1 that we succeeded. +Write-Host 'PROVISION_IMAGE_SUCCEEDED' exit diff --git a/azure-devops/sysprep.ps1 b/azure-devops/sysprep.ps1 deleted file mode 100644 index 285719366d..0000000000 --- a/azure-devops/sysprep.ps1 +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -$ErrorActionPreference = 'Stop' -Write-Host 'Running sysprep' -& C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown diff --git a/tests/std/tests/GH_001277_num_get_bad_grouping/test.cpp b/tests/std/tests/GH_001277_num_get_bad_grouping/test.cpp index 8d5e72294e..d03fe2ab32 100644 --- a/tests/std/tests/GH_001277_num_get_bad_grouping/test.cpp +++ b/tests/std/tests/GH_001277_num_get_bad_grouping/test.cpp @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +#ifndef __EDG__ // TRANSITION, VSO-2064546 + #include #include #include @@ -459,3 +461,5 @@ int main() { test_nonending_unlimited_grouping(); test_nonending_unlimited_grouping(); } + +#endif // ^^^ no workaround ^^^ diff --git a/tests/std/tests/LWG2381_num_get_floating_point/test.cpp b/tests/std/tests/LWG2381_num_get_floating_point/test.cpp index 7f0615f97e..44c50f7243 100644 --- a/tests/std/tests/LWG2381_num_get_floating_point/test.cpp +++ b/tests/std/tests/LWG2381_num_get_floating_point/test.cpp @@ -13,6 +13,8 @@ // * std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_float.pass.cpp // * std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_double.pass.cpp +#ifndef __EDG__ // TRANSITION, VSO-2064546 + #include #include #include @@ -616,3 +618,5 @@ int main() { test_double_from_char_cases(); #endif // _HAS_CXX17 } + +#endif // ^^^ no workaround ^^^ diff --git a/tests/tr1/include/tfuns.h b/tests/tr1/include/tfuns.h index 700e4cd5f5..669351bc8d 100644 --- a/tests/tr1/include/tfuns.h +++ b/tests/tr1/include/tfuns.h @@ -35,8 +35,6 @@ typedef int (*tf8)(const volatile funobj, int, int, int, int, int, int, int); typedef int (*tf9)(const volatile funobj, int, int, int, int, int, int, int, int); typedef int (*tf10)(const volatile funobj, int, int, int, int, int, int, int, int, int); -#pragma warning(push) -#pragma warning(disable : 4521) // multiple copy constructors specified struct funobj { // general purpose function object typedef int result_type; @@ -226,7 +224,6 @@ struct funobj { // general purpose function object } int i0; }; -#pragma warning(pop) typedef int (funobj::*mf1)(); typedef int (funobj::*mf2)(int); diff --git a/tests/tr1/tests/functional8/test.cpp b/tests/tr1/tests/functional8/test.cpp index 2219cefc78..2e09fd2494 100644 --- a/tests/tr1/tests/functional8/test.cpp +++ b/tests/tr1/tests/functional8/test.cpp @@ -61,8 +61,6 @@ int f10(int, int, int, int, int, int, int, int, int, int) { return 10; } -#pragma warning(push) -#pragma warning(disable : 4521) // multiple copy constructors specified struct S { S() : di(1), df(2.0), cdd(3.0), vdd(4.0), cvdd(5.0) { // default constructor } @@ -259,7 +257,6 @@ struct S { return 39; } }; -#pragma warning(pop) struct Fn0 { char operator()() const { diff --git a/tests/tr1/tests/locale3/test.cpp b/tests/tr1/tests/locale3/test.cpp index 2c177311fe..89136f897a 100644 --- a/tests/tr1/tests/locale3/test.cpp +++ b/tests/tr1/tests/locale3/test.cpp @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +#ifndef __EDG__ // TRANSITION, VSO-2064546 + // test , part 3 #define TEST_NAME ", part 3" @@ -553,3 +555,5 @@ void test_main() { // test basic workings of locale definitions test_time_get(); test_time_put(); } + +#endif // ^^^ no workaround ^^^ diff --git a/tests/tr1/tests/locale4/test.cpp b/tests/tr1/tests/locale4/test.cpp index 8ed6bcb057..16cafe7d49 100644 --- a/tests/tr1/tests/locale4/test.cpp +++ b/tests/tr1/tests/locale4/test.cpp @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +#ifndef __EDG__ // TRANSITION, VSO-2064546 + // test , part 4 #define TEST_NAME ", part 4" @@ -521,3 +523,5 @@ void test_main() { // test basic workings of locale definitions test_time_get(); test_time_put(); } + +#endif // ^^^ no workaround ^^^