зеркало из https://github.com/microsoft/STL.git
Toolset update: VS 2022 17.1 Preview 4, ARM64EC (#2496)
This commit is contained in:
Родитель
f575e7becd
Коммит
fcd5cf555f
|
@ -140,7 +140,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.1 Preview 2 or later.
|
||||
1. Install Visual Studio 2022 17.1 Preview 4 or later.
|
||||
* 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.
|
||||
* Otherwise, install [CMake][] 3.21 or later, and [Ninja][] 1.10.2 or later.
|
||||
|
@ -155,7 +155,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.1 Preview 2 or later.
|
||||
1. Install Visual Studio 2022 17.1 Preview 4 or later.
|
||||
* 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.
|
||||
* Otherwise, install [CMake][] 3.21 or later, and [Ninja][] 1.10.2 or later.
|
||||
|
|
|
@ -21,45 +21,18 @@ $ErrorActionPreference = 'Stop'
|
|||
$Env:SuppressAzurePowerShellBreakingChangeWarnings = 'true'
|
||||
|
||||
$Location = 'westus2'
|
||||
$Prefix = 'StlBuild-' + (Get-Date -Format 'yyyy-MM-dd')
|
||||
$Prefix = 'StlBuild-' + (Get-Date -Format 'yyyy-MM-dd-THHmm')
|
||||
$VMSize = 'Standard_D32ads_v5'
|
||||
$ProtoVMName = 'PROTOTYPE'
|
||||
$LiveVMPrefix = 'BUILD'
|
||||
$ImagePublisher = 'MicrosoftWindowsDesktop'
|
||||
$ImageOffer = 'windows-11'
|
||||
$ImageSku = 'win11-21h2-ent'
|
||||
$ImagePublisher = 'MicrosoftWindowsServer'
|
||||
$ImageOffer = 'WindowsServer'
|
||||
$ImageSku = '2022-datacenter-g2'
|
||||
|
||||
$ProgressActivity = 'Creating Scale Set'
|
||||
$TotalProgress = 14
|
||||
$CurrentProgress = 1
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Returns whether there's a name collision in the resource group.
|
||||
|
||||
.DESCRIPTION
|
||||
Find-ResourceGroupNameCollision takes a list of resources, and checks if $Test
|
||||
collides names with any of the resources.
|
||||
|
||||
.PARAMETER Test
|
||||
The name to test.
|
||||
|
||||
.PARAMETER Resources
|
||||
The list of resources.
|
||||
#>
|
||||
function Find-ResourceGroupNameCollision {
|
||||
[CmdletBinding()]
|
||||
Param([string]$Test, $Resources)
|
||||
|
||||
foreach ($resource in $Resources) {
|
||||
if ($resource.ResourceGroupName -eq $Test) {
|
||||
return $true
|
||||
}
|
||||
}
|
||||
|
||||
return $false
|
||||
}
|
||||
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Attempts to find a name that does not collide with any resources in the resource group.
|
||||
|
@ -76,10 +49,10 @@ function Find-ResourceGroupName {
|
|||
[CmdletBinding()]
|
||||
Param([string] $Prefix)
|
||||
|
||||
$resources = Get-AzResourceGroup
|
||||
$existingNames = (Get-AzResourceGroup).ResourceGroupName
|
||||
$result = $Prefix
|
||||
$suffix = 0
|
||||
while (Find-ResourceGroupNameCollision -Test $result -Resources $resources) {
|
||||
while ($result -in $existingNames) {
|
||||
$suffix++
|
||||
$result = "$Prefix-$suffix"
|
||||
}
|
||||
|
@ -170,7 +143,8 @@ Write-Progress `
|
|||
-Status 'Setting the subscription context' `
|
||||
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
|
||||
|
||||
$IgnoredAzureContext = Set-AzContext -SubscriptionName CPP_STL_GitHub
|
||||
Set-AzContext -SubscriptionName CPP_STL_GitHub | Out-Null
|
||||
az account set --subscription CPP_STL_GitHub
|
||||
|
||||
####################################################################################################
|
||||
Write-Progress `
|
||||
|
@ -180,7 +154,7 @@ Write-Progress `
|
|||
|
||||
$ResourceGroupName = Find-ResourceGroupName $Prefix
|
||||
$AdminPW = New-Password
|
||||
$IgnoredResourceGroup = New-AzResourceGroup -Name $ResourceGroupName -Location $Location
|
||||
New-AzResourceGroup -Name $ResourceGroupName -Location $Location | Out-Null
|
||||
$AdminPWSecure = ConvertTo-SecureString $AdminPW -AsPlainText -Force
|
||||
$Credential = New-Object System.Management.Automation.PSCredential ('AdminUser', $AdminPWSecure)
|
||||
|
||||
|
@ -196,19 +170,31 @@ $allowHttp = New-AzNetworkSecurityRuleConfig `
|
|||
-Access Allow `
|
||||
-Protocol Tcp `
|
||||
-Direction Outbound `
|
||||
-Priority 1008 `
|
||||
-Priority 1000 `
|
||||
-SourceAddressPrefix * `
|
||||
-SourcePortRange * `
|
||||
-DestinationAddressPrefix * `
|
||||
-DestinationPortRange @(80, 443)
|
||||
|
||||
$allowQuic = New-AzNetworkSecurityRuleConfig `
|
||||
-Name AllowQUIC `
|
||||
-Description 'Allow QUIC' `
|
||||
-Access Allow `
|
||||
-Protocol Udp `
|
||||
-Direction Outbound `
|
||||
-Priority 1010 `
|
||||
-SourceAddressPrefix * `
|
||||
-SourcePortRange * `
|
||||
-DestinationAddressPrefix * `
|
||||
-DestinationPortRange 443
|
||||
|
||||
$allowDns = New-AzNetworkSecurityRuleConfig `
|
||||
-Name AllowDNS `
|
||||
-Description 'Allow DNS' `
|
||||
-Access Allow `
|
||||
-Protocol * `
|
||||
-Direction Outbound `
|
||||
-Priority 1009 `
|
||||
-Priority 1020 `
|
||||
-SourceAddressPrefix * `
|
||||
-SourcePortRange * `
|
||||
-DestinationAddressPrefix * `
|
||||
|
@ -220,7 +206,7 @@ $denyEverythingElse = New-AzNetworkSecurityRuleConfig `
|
|||
-Access Deny `
|
||||
-Protocol * `
|
||||
-Direction Outbound `
|
||||
-Priority 1010 `
|
||||
-Priority 2000 `
|
||||
-SourceAddressPrefix * `
|
||||
-SourcePortRange * `
|
||||
-DestinationAddressPrefix * `
|
||||
|
@ -231,7 +217,7 @@ $NetworkSecurityGroup = New-AzNetworkSecurityGroup `
|
|||
-Name $NetworkSecurityGroupName `
|
||||
-ResourceGroupName $ResourceGroupName `
|
||||
-Location $Location `
|
||||
-SecurityRules @($allowHttp, $allowDns, $denyEverythingElse)
|
||||
-SecurityRules @($allowHttp, $allowQuic, $allowDns, $denyEverythingElse)
|
||||
|
||||
$SubnetName = $ResourceGroupName + '-Subnet'
|
||||
$Subnet = New-AzVirtualNetworkSubnetConfig `
|
||||
|
@ -277,10 +263,10 @@ $VM = Set-AzVMSourceImage `
|
|||
-Version latest
|
||||
|
||||
$VM = Set-AzVMBootDiagnostic -VM $VM -Disable
|
||||
$IgnoredAzureOperationResponse = New-AzVm `
|
||||
New-AzVm `
|
||||
-ResourceGroupName $ResourceGroupName `
|
||||
-Location $Location `
|
||||
-VM $VM
|
||||
-VM $VM | Out-Null
|
||||
|
||||
####################################################################################################
|
||||
Write-Progress `
|
||||
|
@ -303,7 +289,7 @@ Write-Progress `
|
|||
-Status 'Restarting VM' `
|
||||
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
|
||||
|
||||
$IgnoredComputeLongRunningOperation = Restart-AzVM -ResourceGroupName $ResourceGroupName -Name $ProtoVMName
|
||||
Restart-AzVM -ResourceGroupName $ResourceGroupName -Name $ProtoVMName | Out-Null
|
||||
|
||||
####################################################################################################
|
||||
Write-Progress `
|
||||
|
@ -321,11 +307,11 @@ Write-Progress `
|
|||
-Status 'Running provisioning script sysprep.ps1 in VM' `
|
||||
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
|
||||
|
||||
$IgnoredRunCommandResult = Invoke-AzVMRunCommand `
|
||||
Invoke-AzVMRunCommand `
|
||||
-ResourceGroupName $ResourceGroupName `
|
||||
-VMName $ProtoVMName `
|
||||
-CommandId 'RunPowerShellScript' `
|
||||
-ScriptPath "$PSScriptRoot\sysprep.ps1"
|
||||
-ScriptPath "$PSScriptRoot\sysprep.ps1" | Out-Null
|
||||
|
||||
####################################################################################################
|
||||
Write-Progress `
|
||||
|
@ -341,15 +327,15 @@ Write-Progress `
|
|||
-Status 'Converting VM to Image' `
|
||||
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
|
||||
|
||||
$IgnoredComputeLongRunningOperation = Stop-AzVM `
|
||||
Stop-AzVM `
|
||||
-ResourceGroupName $ResourceGroupName `
|
||||
-Name $ProtoVMName `
|
||||
-Force
|
||||
-Force | Out-Null
|
||||
|
||||
$IgnoredComputeLongRunningOperation = Set-AzVM `
|
||||
Set-AzVM `
|
||||
-ResourceGroupName $ResourceGroupName `
|
||||
-Name $ProtoVMName `
|
||||
-Generalized
|
||||
-Generalized | Out-Null
|
||||
|
||||
$VM = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $ProtoVMName
|
||||
$PrototypeOSDiskName = $VM.StorageProfile.OsDisk.Name
|
||||
|
@ -362,11 +348,11 @@ Write-Progress `
|
|||
-Status 'Deleting unused VM and disk' `
|
||||
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
|
||||
|
||||
$IgnoredComputeLongRunningOperation = Remove-AzVM -Id $VM.ID -Force
|
||||
$IgnoredOperationStatusResponse = Remove-AzDisk `
|
||||
Remove-AzVM -Id $VM.ID -Force | Out-Null
|
||||
Remove-AzDisk `
|
||||
-ResourceGroupName $ResourceGroupName `
|
||||
-DiskName $PrototypeOSDiskName `
|
||||
-Force
|
||||
-Force | Out-Null
|
||||
|
||||
####################################################################################################
|
||||
Write-Progress `
|
||||
|
@ -420,11 +406,34 @@ Write-Progress `
|
|||
-Status 'Enabling VMSS diagnostic logs' `
|
||||
-PercentComplete (100 / $TotalProgress * $CurrentProgress++)
|
||||
|
||||
$StorageAccountName = 'stlvmssdiaglogssa'
|
||||
|
||||
$ExpirationDate = (Get-Date -AsUTC).AddYears(1).ToString('yyyy-MM-ddTHH:mmZ')
|
||||
|
||||
$StorageAccountSASToken = $(az storage account generate-sas `
|
||||
--account-name $StorageAccountName `
|
||||
--expiry $ExpirationDate `
|
||||
--permissions acuw `
|
||||
--resource-types co `
|
||||
--services bt `
|
||||
--https-only `
|
||||
--output tsv `
|
||||
2> $null)
|
||||
|
||||
$DiagnosticsDefaultConfig = $(az vmss diagnostics get-default-config --is-windows-os 2> $null). `
|
||||
Replace('__DIAGNOSTIC_STORAGE_ACCOUNT__', $StorageAccountName). `
|
||||
Replace('__VM_OR_VMSS_RESOURCE_ID__', $Vmss.Id)
|
||||
|
||||
Out-File -FilePath "$PSScriptRoot\vmss-config.json" -InputObject $DiagnosticsDefaultConfig
|
||||
|
||||
$DiagnosticsProtectedSettings = "{'storageAccountName': '$StorageAccountName', "
|
||||
$DiagnosticsProtectedSettings += "'storageAccountSasToken': '?$StorageAccountSASToken'}"
|
||||
|
||||
az vmss diagnostics set `
|
||||
--resource-group $ResourceGroupName `
|
||||
--vmss-name $VmssName `
|
||||
--settings "$PSScriptRoot\vmss-config.json" `
|
||||
--protected-settings "$PSScriptRoot\vmss-protected.json" `
|
||||
--protected-settings "$DiagnosticsProtectedSettings" `
|
||||
--output none
|
||||
|
||||
####################################################################################################
|
||||
|
|
|
@ -133,6 +133,7 @@ $Workloads = @(
|
|||
'Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre',
|
||||
'Microsoft.VisualStudio.Component.VC.Tools.ARM',
|
||||
'Microsoft.VisualStudio.Component.VC.Tools.ARM64',
|
||||
'Microsoft.VisualStudio.Component.VC.Tools.ARM64EC',
|
||||
'Microsoft.VisualStudio.Component.VC.Tools.x86.x64',
|
||||
# TRANSITION, LLVM-51128 (Clang 12 targeting ARM64 is incompatible with WinSDK 10.0.20348.0)
|
||||
'Microsoft.VisualStudio.Component.Windows10SDK.19041'
|
||||
|
@ -141,7 +142,7 @@ $Workloads = @(
|
|||
$ReleaseInPath = 'Preview'
|
||||
$Sku = 'Enterprise'
|
||||
$VisualStudioBootstrapperUrl = 'https://aka.ms/vs/17/pre/vs_enterprise.exe'
|
||||
$PythonUrl = 'https://www.python.org/ftp/python/3.10.1/python-3.10.1-amd64.exe'
|
||||
$PythonUrl = 'https://www.python.org/ftp/python/3.10.2/python-3.10.2-amd64.exe'
|
||||
|
||||
$CudaUrl = `
|
||||
'https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_426.00_win10.exe'
|
||||
|
|
|
@ -7,7 +7,7 @@ variables:
|
|||
tmpDir: 'D:\Temp'
|
||||
buildOutputLocation: 'D:\build'
|
||||
|
||||
pool: 'StlBuild-2022-01-13-2'
|
||||
pool: 'StlBuild-2022-01-25-T1318'
|
||||
|
||||
stages:
|
||||
- stage: Code_Format
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#pragma message("see https://github.com/microsoft/STL/issues/1814 for details.")
|
||||
#else // ^^^ !defined(__cpp_lib_format) / defined(__cpp_lib_format) vvv
|
||||
|
||||
#include <algorithm>
|
||||
#include <charconv>
|
||||
#include <concepts>
|
||||
#include <cstdint>
|
||||
|
@ -1978,8 +1979,13 @@ _NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _CharT* _Value);
|
|||
template <class _CharT, class _OutputIt>
|
||||
_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, basic_string_view<_CharT> _Value);
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4365) // 'argument': conversion from 'char' to 'const wchar_t', signed/unsigned mismatch
|
||||
template <class _CharT>
|
||||
struct _Widen_char {
|
||||
_NODISCARD _CharT operator()(const char _Ch) const noexcept {
|
||||
return static_cast<_CharT>(_Ch);
|
||||
}
|
||||
};
|
||||
|
||||
// clang-format off
|
||||
template <class _CharT, class _OutputIt, class _Arithmetic>
|
||||
requires (is_arithmetic_v<_Arithmetic> && !_CharT_or_bool<_Arithmetic, _CharT>)
|
||||
|
@ -1989,9 +1995,8 @@ _NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _Arithmetic _Value) {
|
|||
char _Buffer[_Format_min_buffer_length];
|
||||
const auto [_End, _Ec] = _STD to_chars(_Buffer, _STD end(_Buffer), _Value);
|
||||
_STL_ASSERT(_Ec == errc{}, "to_chars failed");
|
||||
return _RANGES _Copy_unchecked(_Buffer, _End, _STD move(_Out)).out;
|
||||
return _RANGES transform(_Buffer, _End, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
}
|
||||
#pragma warning(pop)
|
||||
|
||||
template <class _CharT, class _OutputIt>
|
||||
_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const bool _Value) {
|
||||
|
@ -2008,8 +2013,6 @@ _NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _CharT _Value) {
|
|||
return _Out;
|
||||
}
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4365) // 'argument': conversion from 'char' to 'const wchar_t', signed/unsigned mismatch
|
||||
template <class _CharT, class _OutputIt>
|
||||
_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const void* const _Value) {
|
||||
// TRANSITION, Reusable buffer
|
||||
|
@ -2018,9 +2021,8 @@ _NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const void* const _Value) {
|
|||
_STL_ASSERT(_Ec == errc{}, "to_chars failed");
|
||||
*_Out++ = '0';
|
||||
*_Out++ = 'x';
|
||||
return _RANGES _Copy_unchecked(_Buffer, _End, _STD move(_Out)).out;
|
||||
return _RANGES transform(_Buffer, _End, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
}
|
||||
#pragma warning(pop)
|
||||
|
||||
template <class _CharT, class _OutputIt>
|
||||
_NODISCARD _OutputIt _Fmt_write(_OutputIt _Out, const _CharT* _Value) {
|
||||
|
@ -2172,7 +2174,7 @@ _NODISCARD _OutputIt _Write_separated_integer(const char* _First, const char* co
|
|||
++_Repeats;
|
||||
}
|
||||
}
|
||||
_Out = _RANGES _Copy_unchecked(_First, _Last - _Grouped, _STD move(_Out)).out;
|
||||
_Out = _RANGES transform(_First, _Last - _Grouped, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
_First = _Last - _Grouped;
|
||||
|
||||
for (; _Separators > 0; --_Separators) {
|
||||
|
@ -2183,7 +2185,7 @@ _NODISCARD _OutputIt _Write_separated_integer(const char* _First, const char* co
|
|||
}
|
||||
|
||||
*_Out++ = _Separator;
|
||||
_Out = _RANGES _Copy_unchecked(_First, _First + *_Group_it, _STD move(_Out)).out;
|
||||
_Out = _RANGES transform(_First, _First + *_Group_it, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
_First += *_Group_it;
|
||||
}
|
||||
_STL_INTERNAL_CHECK(_First == _Last);
|
||||
|
@ -2231,8 +2233,6 @@ template <class _CharT, class _OutputIt>
|
|||
_NODISCARD _OutputIt _Fmt_write(
|
||||
_OutputIt _Out, basic_string_view<_CharT> _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale);
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4365) // 'argument': conversion from 'char' to 'const wchar_t', signed/unsigned mismatch
|
||||
template <class _CharT, class _OutputIt, integral _Integral>
|
||||
_NODISCARD _OutputIt _Write_integral(
|
||||
_OutputIt _Out, const _Integral _Value, _Basic_format_specs<_CharT> _Specs, _Lazy_locale _Locale) {
|
||||
|
@ -2313,9 +2313,9 @@ _NODISCARD _OutputIt _Write_integral(
|
|||
#pragma warning(disable : 4296) // '<': expression is always false
|
||||
_Out = _Write_sign(_STD move(_Out), _Specs._Sgn, _Value < _Integral{0});
|
||||
#pragma warning(pop)
|
||||
_Out = _RANGES _Copy_unchecked(_Prefix.begin(), _Prefix.end(), _STD move(_Out)).out;
|
||||
_Out = _RANGES transform(_Prefix, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
if (_Write_leading_zeroes && _Width < _Specs._Width) {
|
||||
_Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, '0');
|
||||
_Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, _CharT{'0'});
|
||||
}
|
||||
|
||||
if (_Separators > 0) {
|
||||
|
@ -2323,7 +2323,7 @@ _NODISCARD _OutputIt _Write_integral(
|
|||
_STD use_facet<numpunct<_CharT>>(_Locale._Get()).thousands_sep(), //
|
||||
_Separators, _STD move(_Out));
|
||||
}
|
||||
return _RANGES _Copy_unchecked(_Buffer_start, _End, _STD move(_Out)).out;
|
||||
return _RANGES transform(_Buffer_start, _End, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
};
|
||||
|
||||
if (_Write_leading_zeroes) {
|
||||
|
@ -2332,7 +2332,6 @@ _NODISCARD _OutputIt _Write_integral(
|
|||
|
||||
return _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Right, _Writer);
|
||||
}
|
||||
#pragma warning(pop)
|
||||
|
||||
// clang-format off
|
||||
template <class _CharT, class _OutputIt, integral _Integral>
|
||||
|
@ -2382,8 +2381,6 @@ _NODISCARD _OutputIt _Fmt_write(
|
|||
return _Fmt_write(_STD move(_Out), basic_string_view<_CharT>{&_Value, 1}, _Specs, _Locale);
|
||||
}
|
||||
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4365) // 'argument': conversion from 'char' to 'const wchar_t', signed/unsigned mismatch
|
||||
template <class _CharT, class _OutputIt, floating_point _Float>
|
||||
_NODISCARD _OutputIt _Fmt_write(
|
||||
_OutputIt _Out, const _Float _Value, const _Basic_format_specs<_CharT>& _Specs, _Lazy_locale _Locale) {
|
||||
|
@ -2569,7 +2566,7 @@ _NODISCARD _OutputIt _Fmt_write(
|
|||
_Out = _Write_sign(_STD move(_Out), _Sgn, _Is_negative);
|
||||
|
||||
if (_Write_leading_zeroes && _Width < _Specs._Width) {
|
||||
_Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, '0');
|
||||
_Out = _RANGES fill_n(_STD move(_Out), _Specs._Width - _Width, _CharT{'0'});
|
||||
}
|
||||
|
||||
if (_Specs._Localized) {
|
||||
|
@ -2587,7 +2584,7 @@ _NODISCARD _OutputIt _Fmt_write(
|
|||
}
|
||||
}
|
||||
|
||||
_Out = _RANGES _Copy_unchecked(_Buffer_start, _Exponent_start, _STD move(_Out)).out;
|
||||
_Out = _RANGES transform(_Buffer_start, _Exponent_start, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
if (_Specs._Alt && _Append_decimal) {
|
||||
*_Out++ = '.';
|
||||
}
|
||||
|
@ -2596,7 +2593,7 @@ _NODISCARD _OutputIt _Fmt_write(
|
|||
*_Out++ = '0';
|
||||
}
|
||||
|
||||
return _RANGES _Copy_unchecked(_Exponent_start, _Result.ptr, _STD move(_Out)).out;
|
||||
return _RANGES transform(_Exponent_start, _Result.ptr, _STD move(_Out), _Widen_char<_CharT>{}).out;
|
||||
};
|
||||
|
||||
if (_Write_leading_zeroes) {
|
||||
|
@ -2605,7 +2602,6 @@ _NODISCARD _OutputIt _Fmt_write(
|
|||
|
||||
return _Write_aligned(_STD move(_Out), _Width, _Specs, _Fmt_align::_Right, _Writer);
|
||||
}
|
||||
#pragma warning(pop)
|
||||
|
||||
template <class _CharT, class _OutputIt>
|
||||
_NODISCARD _OutputIt _Fmt_write(
|
||||
|
@ -3044,48 +3040,38 @@ _OutputIt format_to(_OutputIt _Out, const locale& _Loc, const _Fmt_wstring<_Type
|
|||
return _STD vformat_to(_STD move(_Out), _Loc, _Fmt._Str, _STD make_wformat_args(_Args...));
|
||||
}
|
||||
|
||||
#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1433873
|
||||
#define _TEMPLATE_INT_0_NODISCARD \
|
||||
template <int = 0> /* improves throughput, see GH-2329 */ \
|
||||
_NODISCARD
|
||||
#else // ^^^ no workaround / workaround vvv
|
||||
#define _TEMPLATE_INT_0_NODISCARD _NODISCARD inline
|
||||
#endif // ^^^ workaround ^^^
|
||||
|
||||
_TEMPLATE_INT_0_NODISCARD
|
||||
string vformat(const string_view _Fmt, const format_args _Args) {
|
||||
template <int = 0> // improves throughput, see GH-2329
|
||||
_NODISCARD string vformat(const string_view _Fmt, const format_args _Args) {
|
||||
string _Str;
|
||||
_Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());
|
||||
_STD vformat_to(back_insert_iterator{_Str}, _Fmt, _Args);
|
||||
return _Str;
|
||||
}
|
||||
|
||||
_TEMPLATE_INT_0_NODISCARD
|
||||
wstring vformat(const wstring_view _Fmt, const wformat_args _Args) {
|
||||
template <int = 0> // improves throughput, see GH-2329
|
||||
_NODISCARD wstring vformat(const wstring_view _Fmt, const wformat_args _Args) {
|
||||
wstring _Str;
|
||||
_Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());
|
||||
_STD vformat_to(back_insert_iterator{_Str}, _Fmt, _Args);
|
||||
return _Str;
|
||||
}
|
||||
|
||||
_TEMPLATE_INT_0_NODISCARD
|
||||
string vformat(const locale& _Loc, const string_view _Fmt, const format_args _Args) {
|
||||
template <int = 0> // improves throughput, see GH-2329
|
||||
_NODISCARD string vformat(const locale& _Loc, const string_view _Fmt, const format_args _Args) {
|
||||
string _Str;
|
||||
_Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());
|
||||
_STD vformat_to(back_insert_iterator{_Str}, _Loc, _Fmt, _Args);
|
||||
return _Str;
|
||||
}
|
||||
|
||||
_TEMPLATE_INT_0_NODISCARD
|
||||
wstring vformat(const locale& _Loc, const wstring_view _Fmt, const wformat_args _Args) {
|
||||
template <int = 0> // improves throughput, see GH-2329
|
||||
_NODISCARD wstring vformat(const locale& _Loc, const wstring_view _Fmt, const wformat_args _Args) {
|
||||
wstring _Str;
|
||||
_Str.reserve(_Fmt.size() + _Args._Estimate_required_capacity());
|
||||
_STD vformat_to(back_insert_iterator{_Str}, _Loc, _Fmt, _Args);
|
||||
return _Str;
|
||||
}
|
||||
|
||||
#undef _TEMPLATE_INT_0_NODISCARD // TRANSITION, VSO-1433873
|
||||
|
||||
template <class... _Types>
|
||||
_NODISCARD string format(const _Fmt_string<_Types...> _Fmt, _Types&&... _Args) {
|
||||
return _STD vformat(_Fmt._Str, _STD make_format_args(_Args...));
|
||||
|
|
|
@ -1532,7 +1532,7 @@ class _Move_only_function_call {
|
|||
};
|
||||
|
||||
// A script to generate the specializations is at
|
||||
// /tools/move_only_function_specializations/move_only_function_specializations.py
|
||||
// /tools/scripts/move_only_function_specializations.py
|
||||
// (Avoiding C++ preprocessor for better IDE navigation and debugging experience)
|
||||
|
||||
template <class _Rx, class... _Types>
|
||||
|
|
|
@ -3331,16 +3331,6 @@ namespace ranges {
|
|||
// clang-format off
|
||||
subrange() requires default_initializable<_It> = default;
|
||||
|
||||
#if !defined(_MSVC_INTERNAL_TESTING) && !defined(__clang__) && !defined(__EDG__) // TRANSITION, VS 17.1p3
|
||||
// This was originally annotated as a workaround for DevCom-1331017, but the problem it corrects continued to
|
||||
// manifest after that bug was fixed. We reduced a repro to file an additional bug, but the underlying issue had
|
||||
// already been fixed in the internal compiler (see GH-2326).
|
||||
constexpr subrange(const subrange&) = default;
|
||||
constexpr subrange(subrange&&) = default;
|
||||
constexpr subrange& operator=(const subrange&) = default;
|
||||
constexpr subrange& operator=(subrange&&) = default;
|
||||
#endif // ^^^ workaround ^^^
|
||||
|
||||
template <_Convertible_to_non_slicing<_It> _It2>
|
||||
constexpr subrange(_It2 _First_, _Se _Last_) requires (!_Store_size)
|
||||
: _First(_STD move(_First_)), _Last(_STD move(_Last_)) {}
|
||||
|
|
|
@ -696,9 +696,7 @@ int run_test()
|
|||
{
|
||||
optional<B> opt;
|
||||
ASSERT_NOT_NOEXCEPT(std::hash<optional<B>>()(opt));
|
||||
#ifndef __EDG__ // TRANSITION, DevCom-1633478 / VSO-1460046
|
||||
ASSERT_NOT_NOEXCEPT(std::hash<optional<const B>>()(opt));
|
||||
#endif // ^^^ no workaround ^^^
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
# This script generates the partial specializations of _Move_only_function_call in <functional>.
|
||||
|
||||
def specialization(cv, ref, ref_inv, noex, noex_val, callable):
|
||||
return f"""template <class _Rx, class... _Types>
|
||||
class _Move_only_function_call<_Rx(_Types...) {cv} {ref} {noex}>
|
|
@ -0,0 +1,23 @@
|
|||
# Copyright (c) Microsoft Corporation.
|
||||
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
|
||||
# This script prints the output of test failures that were recorded by `stl-lit.py -o TEST_LOG_FILENAME`.
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
sys.exit(f"Usage: python {sys.argv[0]} TEST_LOG_FILENAME")
|
||||
|
||||
test_log = json.load(open(sys.argv[1]))
|
||||
|
||||
for result in test_log["tests"]:
|
||||
if not result["code"] in ["PASS", "UNSUPPORTED", "XFAIL"]:
|
||||
print("code: {}".format(result["code"]))
|
||||
# Ignore result["elapsed"].
|
||||
print("name: {}".format(result["name"]))
|
||||
# The JSON contains embedded CRLFs (which aren't affected by opening the file in text mode).
|
||||
# If we don't replace these CRLFs with LFs here, this script will appear to be okay in the console,
|
||||
# but redirecting it to a file will result in ugly double newlines.
|
||||
print("output: {}".format(result["output"].replace("\r\n", "\n")))
|
||||
print("==================================================")
|
Загрузка…
Ссылка в новой задаче