Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release/7.0] Update to latest .NET 7 Roslyn compiler #76471

Merged
merged 6 commits into from
Oct 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
<!--
TODO: Remove pinned version once arcade supplies a compiler that enables the repo to compile.
-->
<MicrosoftNetCompilersToolsetVersion>4.4.0-3.22452.8</MicrosoftNetCompilersToolsetVersion>
<MicrosoftNetCompilersToolsetVersion>4.4.0-3.22479.16</MicrosoftNetCompilersToolsetVersion>
<StaticCsVersion>0.2.0</StaticCsVersion>
<!-- SDK dependencies -->
<MicrosoftDotNetApiCompatTaskVersion>7.0.100-rc.1.22402.1</MicrosoftDotNetApiCompatTaskVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,9 @@ Signature LazyCreateSignature()
Span<ParameterCopyBackAction> shouldCopyBackParameters = new(ref argStorage._copyBack0, argCount);

StackAllocatedByRefs byrefStorage = default;
#pragma warning disable CS8500
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
#pragma warning restore CS8500

CheckArguments(
copyOfParameters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,9 @@ public override MethodImplAttributes GetMethodImplementationFlags()
Span<ParameterCopyBackAction> shouldCopyBackParameters = new(ref argStorage._copyBack0, 1);

StackAllocatedByRefs byrefStorage = default;
#pragma warning disable 8500
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
#pragma warning restore 8500

CheckArguments(
copyOfParameters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,11 +235,15 @@ public DynamicInvokeInfo(MethodBase method, IntPtr invokeThunk)
StackAllocedArguments argStorage = default;
StackAllocatedByRefs byrefStorage = default;

#pragma warning disable 8500
CheckArguments(ref argStorage._arg0!, (ByReference*)&byrefStorage, parameters, binderBundle);
#pragma warning restore 8500

try
{
#pragma warning disable 8500
ret = ref RawCalliHelper.Call(InvokeThunk, (void*)methodToCall, ref thisArg, ref ret, &byrefStorage);
#pragma warning restore 8500
DebugAnnotations.PreviousCallContainsDebuggerStepInCode();
}
catch (Exception e) when (wrapInTargetInvocationException)
Expand Down Expand Up @@ -268,7 +272,9 @@ private unsafe ref byte InvokeWithManyArguments(
IntPtr* pStorage = stackalloc IntPtr[2 * argCount];
NativeMemory.Clear(pStorage, (nuint)(2 * argCount) * (nuint)sizeof(IntPtr));

ByReference* pByRefStorage = (ByReference*)(pStorage + argCount);
#pragma warning disable 8500
void* pByRefStorage = (ByReference*)(pStorage + argCount);
#pragma warning restore 8500

RuntimeImports.GCFrameRegistration regArgStorage = new(pStorage, (uint)argCount, areByRefs: false);
RuntimeImports.GCFrameRegistration regByRefStorage = new(pByRefStorage, (uint)argCount, areByRefs: true);
Expand Down Expand Up @@ -326,7 +332,7 @@ private unsafe ref byte InvokeWithManyArguments(

private unsafe void CheckArguments(
ref object copyOfParameters,
ByReference* byrefParameters,
void* byrefParameters,
object?[] parameters,
BinderBundle binderBundle)
{
Expand Down Expand Up @@ -398,8 +404,10 @@ private unsafe void CheckArguments(

Unsafe.Add(ref copyOfParameters, i) = arg!;

byrefParameters[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
#pragma warning disable 8500, 9094
((ByReference*)byrefParameters)[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
ref Unsafe.As<object, byte>(ref Unsafe.Add(ref copyOfParameters, i)) : ref arg.GetRawData());
#pragma warning restore 8500, 9094
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<TargetFramework>netstandard2.0</TargetFramework>
<!-- Don't add references to the netstandard platform since this is a core assembly -->
<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
<Features>noRefSafetyRulesAttribute=true</Features>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<Platforms>x86;x64</Platforms>
<PlatformTarget>AnyCPU</PlatformTarget>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Features>noRefSafetyRulesAttribute=true</Features>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ internal unsafe ref struct BigInteger
private int _length;
private fixed uint _blocks[MaxBlockCount];

public static void Add(ref BigInteger lhs, ref BigInteger rhs, out BigInteger result)
public static void Add(scoped ref BigInteger lhs, scoped ref BigInteger rhs, out BigInteger result)
{
// determine which operand has the smaller length
ref BigInteger large = ref (lhs._length < rhs._length) ? ref rhs : ref lhs;
Expand Down Expand Up @@ -369,7 +369,7 @@ public static void Add(ref BigInteger lhs, ref BigInteger rhs, out BigInteger re
}
}

public static int Compare(ref BigInteger lhs, ref BigInteger rhs)
public static int Compare(scoped ref BigInteger lhs, scoped ref BigInteger rhs)
{
Debug.Assert(unchecked((uint)(lhs._length)) <= MaxBlockCount);
Debug.Assert(unchecked((uint)(rhs._length)) <= MaxBlockCount);
Expand Down Expand Up @@ -427,7 +427,7 @@ public static uint CountSignificantBits(ref BigInteger value)
return (lastIndex * BitsPerBlock) + CountSignificantBits(value._blocks[lastIndex]);
}

public static void DivRem(ref BigInteger lhs, ref BigInteger rhs, out BigInteger quo, out BigInteger rem)
public static void DivRem(scoped ref BigInteger lhs, scoped ref BigInteger rhs, out BigInteger quo, out BigInteger rem)
{
// This is modified from the libraries BigIntegerCalculator.DivRem.cs implementation:
// https://github.com/dotnet/runtime/blob/main/src/libraries/System.Runtime.Numerics/src/System/Numerics/BigIntegerCalculator.DivRem.cs
Expand Down Expand Up @@ -558,6 +558,11 @@ public static void DivRem(ref BigInteger lhs, ref BigInteger rhs, out BigInteger

if (digit > 0)
{
// rem and rhs have different lifetimes here and compiler is warning
// about potential for one to copy into the other. This is a place
// ref scoped parameters would alleviate.
// https://github.com/dotnet/roslyn/issues/64393
#pragma warning disable CS9080
// Now it's time to subtract our current quotient
uint carry = SubtractDivisor(ref rem, n, ref rhs, digit);

Expand All @@ -571,6 +576,7 @@ public static void DivRem(ref BigInteger lhs, ref BigInteger rhs, out BigInteger

Debug.Assert(carry == 1);
}
#pragma warning restore CS9080
}

// We have the digit!
Expand Down Expand Up @@ -693,7 +699,7 @@ public static uint HeuristicDivide(ref BigInteger dividend, ref BigInteger divis
return quotient;
}

public static void Multiply(ref BigInteger lhs, uint value, out BigInteger result)
public static void Multiply(scoped ref BigInteger lhs, uint value, out BigInteger result)
{
if (lhs._length <= 1)
{
Expand Down Expand Up @@ -739,7 +745,7 @@ public static void Multiply(ref BigInteger lhs, uint value, out BigInteger resul
}
}

public static void Multiply(ref BigInteger lhs, ref BigInteger rhs, out BigInteger result)
public static void Multiply(scoped ref BigInteger lhs, scoped ref BigInteger rhs, out BigInteger result)
{
if (lhs._length <= 1)
{
Expand Down Expand Up @@ -1032,7 +1038,7 @@ public void Multiply(uint value)
Multiply(ref this, value, out this);
}

public void Multiply(ref BigInteger value)
public void Multiply(scoped ref BigInteger value)
{
if (value._length <= 1)
{
Expand Down Expand Up @@ -1115,7 +1121,7 @@ public static void SetUInt64(out BigInteger result, ulong value)
}
}

public static void SetValue(out BigInteger result, ref BigInteger value)
public static void SetValue(out BigInteger result, scoped ref BigInteger value)
{
int rhsLength = value._length;
result._length = rhsLength;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -794,7 +794,7 @@ public FloatingPointInfo(ushort denormalMantissaBits, ushort exponentBits, int m
0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648
};

private static void AccumulateDecimalDigitsIntoBigInteger(ref NumberBuffer number, uint firstIndex, uint lastIndex, out BigInteger result)
private static void AccumulateDecimalDigitsIntoBigInteger(scoped ref NumberBuffer number, uint firstIndex, uint lastIndex, out BigInteger result)
{
BigInteger.SetZero(out result);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ BindingFlags invokeAttr
shouldCopyBack[i] = copyBackArg;
copyOfParameters[i] = arg;

#pragma warning disable 8500
if (isValueType)
{
#if !MONO // Temporary until Mono is updated.
Expand All @@ -254,6 +255,7 @@ BindingFlags invokeAttr
ByReference objRef = ByReference.Create(ref copyOfParameters[i]);
*(ByReference*)(byrefParameters + i) = objRef;
}
#pragma warning restore 8500
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,9 @@ internal void ThrowNoInvokeException()
Span<ParameterCopyBackAction> shouldCopyBackParameters = new(ref argStorage._copyBack0, argCount);

StackAllocatedByRefs byrefStorage = default;
#pragma warning disable 8500
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
#pragma warning restore 8500

CheckArguments(
copyOfParameters,
Expand Down Expand Up @@ -299,7 +301,9 @@ public override object Invoke(BindingFlags invokeAttr, Binder? binder, object?[]
Span<ParameterCopyBackAction> shouldCopyBackParameters = new(ref argStorage._copyBack0, argCount);

StackAllocatedByRefs byrefStorage = default;
#pragma warning disable 8500
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
#pragma warning restore 8500

CheckArguments(
copyOfParameters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,9 @@ private void ThrowNoInvokeException()
Span<ParameterCopyBackAction> shouldCopyBackParameters = new(ref argStorage._copyBack0, argCount);

StackAllocatedByRefs byrefStorage = default;
#pragma warning disable 8500
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
#pragma warning restore 8500

CheckArguments(
copyOfParameters,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ internal static partial class JsonHelpers
/// Returns the span for the given reader.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ReadOnlySpan<byte> GetSpan(this ref Utf8JsonReader reader)
public static ReadOnlySpan<byte> GetSpan(this scoped ref Utf8JsonReader reader)
{
return reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,12 @@ private void WriteStringEscapeProperty(scoped ReadOnlySpan<char> propertyName, i
Debug.Assert(int.MaxValue / JsonConstants.MaxExpansionFactorWhileEscaping >= propertyName.Length);

char[]? propertyArray = null;
scoped Span<char> escapedPropertyName;

if (firstEscapeIndexProp != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(propertyName.Length, firstEscapeIndexProp);

scoped Span<char> escapedPropertyName;
if (length > JsonConstants.StackallocCharThreshold)
{
propertyArray = ArrayPool<char>.Shared.Rent(length);
Expand Down Expand Up @@ -269,12 +269,12 @@ private void WriteStringEscapeProperty(scoped ReadOnlySpan<byte> utf8PropertyNam
Debug.Assert(int.MaxValue / JsonConstants.MaxExpansionFactorWhileEscaping >= utf8PropertyName.Length);

byte[]? propertyArray = null;
scoped Span<byte> escapedPropertyName;

if (firstEscapeIndexProp != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(utf8PropertyName.Length, firstEscapeIndexProp);

scoped Span<byte> escapedPropertyName;
if (length > JsonConstants.StackallocByteThreshold)
{
propertyArray = ArrayPool<byte>.Shared.Rent(length);
Expand Down Expand Up @@ -1076,12 +1076,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<char> property

char[]? valueArray = null;
char[]? propertyArray = null;
scoped Span<char> escapedValue;

if (firstEscapeIndexVal != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(value.Length, firstEscapeIndexVal);

scoped Span<char> escapedValue;
if (length > JsonConstants.StackallocCharThreshold)
{
valueArray = ArrayPool<char>.Shared.Rent(length);
Expand All @@ -1096,11 +1096,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<char> property
value = escapedValue.Slice(0, written);
}

scoped Span<char> escapedPropertyName;

if (firstEscapeIndexProp != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(propertyName.Length, firstEscapeIndexProp);

scoped Span<char> escapedPropertyName;
if (length > JsonConstants.StackallocCharThreshold)
{
propertyArray = ArrayPool<char>.Shared.Rent(length);
Expand Down Expand Up @@ -1135,12 +1136,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<byte> utf8Prop

byte[]? valueArray = null;
byte[]? propertyArray = null;
scoped Span<byte> escapedValue;

if (firstEscapeIndexVal != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(utf8Value.Length, firstEscapeIndexVal);

scoped Span<byte> escapedValue;
if (length > JsonConstants.StackallocByteThreshold)
{
valueArray = ArrayPool<byte>.Shared.Rent(length);
Expand All @@ -1155,11 +1156,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<byte> utf8Prop
utf8Value = escapedValue.Slice(0, written);
}

scoped Span<byte> escapedPropertyName;

if (firstEscapeIndexProp != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(utf8PropertyName.Length, firstEscapeIndexProp);

scoped Span<byte> escapedPropertyName;
if (length > JsonConstants.StackallocByteThreshold)
{
propertyArray = ArrayPool<byte>.Shared.Rent(length);
Expand Down Expand Up @@ -1194,12 +1196,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<char> property

byte[]? valueArray = null;
char[]? propertyArray = null;
scoped Span<byte> escapedValue;

if (firstEscapeIndexVal != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(utf8Value.Length, firstEscapeIndexVal);

scoped Span<byte> escapedValue;
if (length > JsonConstants.StackallocByteThreshold)
{
valueArray = ArrayPool<byte>.Shared.Rent(length);
Expand All @@ -1214,11 +1216,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<char> property
utf8Value = escapedValue.Slice(0, written);
}

scoped Span<char> escapedPropertyName;

if (firstEscapeIndexProp != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(propertyName.Length, firstEscapeIndexProp);

scoped Span<char> escapedPropertyName;
if (length > JsonConstants.StackallocCharThreshold)
{
propertyArray = ArrayPool<char>.Shared.Rent(length);
Expand Down Expand Up @@ -1253,12 +1256,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<byte> utf8Prop

char[]? valueArray = null;
byte[]? propertyArray = null;
scoped Span<char> escapedValue;

if (firstEscapeIndexVal != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(value.Length, firstEscapeIndexVal);

scoped Span<char> escapedValue;
if (length > JsonConstants.StackallocCharThreshold)
{
valueArray = ArrayPool<char>.Shared.Rent(length);
Expand All @@ -1273,11 +1276,12 @@ private void WriteStringEscapePropertyOrValue(scoped ReadOnlySpan<byte> utf8Prop
value = escapedValue.Slice(0, written);
}

scoped Span<byte> escapedPropertyName;

if (firstEscapeIndexProp != -1)
{
int length = JsonWriterHelper.GetMaxEscapedLength(utf8PropertyName.Length, firstEscapeIndexProp);

scoped Span<byte> escapedPropertyName;
if (length > JsonConstants.StackallocByteThreshold)
{
propertyArray = ArrayPool<byte>.Shared.Rent(length);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ internal static partial class RegexCaseEquivalences
/// <param name="equivalences">If <paramref name="c"/> is involved in case conversion, then equivalences will contain the
/// span of character which should be considered equal to <paramref name="c"/> in a case-insensitive comparison.</param>
/// <returns><see langword="true"/> if <paramref name="c"/> is involved in case conversion; otherwise, <see langword="false"/></returns>
public static bool TryFindCaseEquivalencesForCharWithIBehavior(char c, CultureInfo culture, ref RegexCaseBehavior mappingBehavior, out ReadOnlySpan<char> equivalences)
public static bool TryFindCaseEquivalencesForCharWithIBehavior(char c, CultureInfo culture, scoped ref RegexCaseBehavior mappingBehavior, out ReadOnlySpan<char> equivalences)
{
if ((c | 0x20) == 'i' || (c | 0x01) == '\u0131')
{
Expand Down