![dotnet-maestro[bot]](/assets/img/avatar_default.png)
[release/7.0.1xx] Update dependencies from dotnet/sdk - Coherency Updates: - Microsoft.NETCore.App.Runtime.win-x64: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - Microsoft.NETCore.App.Ref: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - VS.Redist.Common.NetCore.TargetingPack.x64.7.0: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - Microsoft.NETCore.App.Host.win-x64: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - Microsoft.NETCore.DotNetHostResolver: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - Microsoft.NETCore.Platforms: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - Microsoft.AspNetCore.App.Ref: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - Microsoft.AspNetCore.App.Ref.Internal: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - Microsoft.AspNetCore.App.Runtime.win-x64: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - VS.Redist.Common.AspNetCore.SharedFramework.x64.7.0: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - dotnet-dev-certs: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - dotnet-user-jwts: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - dotnet-user-secrets: from 7.0.0-rtm.22479.3 to 7.0.0-rtm.22503.15 (parent: Microsoft.NET.Sdk) - Microsoft.Net.Compilers.Toolset: from 4.4.0-3.22478.13 to 4.4.0-3.22480.9 (parent: Microsoft.NET.Sdk) - Microsoft.Build: from 17.4.0-preview-22479-03 to 17.4.0-preview-22480-04 (parent: Microsoft.NET.Sdk) - NuGet.Build.Tasks: from 6.4.0-preview.3.100 to 6.4.0-preview.3.107 (parent: Microsoft.NET.Sdk) - VS.Redist.Common.NetCore.SharedFramework.x64.7.0: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - VS.Redist.Common.NetCore.SharedFramework.x64.7.0: from 7.0.0-rtm.22478.9 to 7.0.0-rtm.22480.10 (parent: Microsoft.NET.Sdk) - Remove backported msbuild patch - Add runtime PR 76471 as patch - Clean up overlapping patches in runtime
557 lines
29 KiB
Diff
557 lines
29 KiB
Diff
From 371d1e5b10b3632289b5944fb36bdfd3c032b58e Mon Sep 17 00:00:00 2001
|
|
From: Charles Stoner <10732005+cston@users.noreply.github.com>
|
|
Date: Tue, 20 Sep 2022 14:44:06 -0700
|
|
Subject: [PATCH 1/6] Patches for scoped locals
|
|
|
|
https://github.com/dotnet/roslyn/pull/64093
|
|
|
|
This change enforced that `scoped` on a local set the escape scope to
|
|
the current block where previously it was incorrectly setting to the
|
|
containing method.
|
|
---
|
|
.../Reflection/RuntimeMethodInfo.CoreCLR.cs | 2 ++
|
|
.../System/Reflection/DynamicInvokeInfo.cs | 14 ++++++++---
|
|
.../src/System/Reflection/MethodBase.cs | 2 ++
|
|
.../Reflection/RuntimeConstructorInfo.cs | 4 ++++
|
|
.../System/Reflection/RuntimeMethodInfo.cs | 2 ++
|
|
.../src/System/Text/Json/JsonHelpers.cs | 2 +-
|
|
.../Utf8JsonWriter.WriteProperties.String.cs | 24 +++++++++++--------
|
|
7 files changed, 36 insertions(+), 14 deletions(-)
|
|
|
|
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs
|
|
index c55ee607da773..4e1246b481b10 100644
|
|
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs
|
|
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.CoreCLR.cs
|
|
@@ -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,
|
|
diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs
|
|
index 234f8a16e9c5c..cc3d8c74a60b7 100644
|
|
--- a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs
|
|
+++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs
|
|
@@ -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)
|
|
@@ -268,7 +272,9 @@ public DynamicInvokeInfo(MethodBase method, IntPtr invokeThunk)
|
|
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);
|
|
@@ -326,7 +332,7 @@ public DynamicInvokeInfo(MethodBase method, IntPtr invokeThunk)
|
|
|
|
private unsafe void CheckArguments(
|
|
ref object copyOfParameters,
|
|
- ByReference* byrefParameters,
|
|
+ void* byrefParameters,
|
|
object?[] parameters,
|
|
BinderBundle binderBundle)
|
|
{
|
|
@@ -398,8 +404,10 @@ public DynamicInvokeInfo(MethodBase method, IntPtr invokeThunk)
|
|
|
|
Unsafe.Add(ref copyOfParameters, i) = arg!;
|
|
|
|
- byrefParameters[i] = new ByReference(ref (argumentInfo.Transform & Transform.Reference) != 0 ?
|
|
+#pragma warning disable 8500
|
|
+ ((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
|
|
}
|
|
}
|
|
|
|
diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBase.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBase.cs
|
|
index 13ff9e34df920..98069a70ef55b 100644
|
|
--- a/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBase.cs
|
|
+++ b/src/libraries/System.Private.CoreLib/src/System/Reflection/MethodBase.cs
|
|
@@ -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.
|
|
@@ -254,6 +255,7 @@ BindingFlags invokeAttr
|
|
ByReference objRef = ByReference.Create(ref copyOfParameters[i]);
|
|
*(ByReference*)(byrefParameters + i) = objRef;
|
|
}
|
|
+#pragma warning restore 8500
|
|
}
|
|
}
|
|
|
|
diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.cs
|
|
index b1f3222736a1a..1fd9c177ddb8a 100644
|
|
--- a/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.cs
|
|
+++ b/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeConstructorInfo.cs
|
|
@@ -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,
|
|
@@ -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,
|
|
diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs
|
|
index 770a59d40eb91..bf534c58e70ed 100644
|
|
--- a/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs
|
|
+++ b/src/libraries/System.Private.CoreLib/src/System/Reflection/RuntimeMethodInfo.cs
|
|
@@ -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,
|
|
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs b/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs
|
|
index 9e9adcd0a52ea..4706b64753c97 100644
|
|
--- a/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs
|
|
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/JsonHelpers.cs
|
|
@@ -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;
|
|
}
|
|
diff --git a/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriter.WriteProperties.String.cs b/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriter.WriteProperties.String.cs
|
|
index 65c6fd303c13c..7cd0e3b45a4a1 100644
|
|
--- a/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriter.WriteProperties.String.cs
|
|
+++ b/src/libraries/System.Text.Json/src/System/Text/Json/Writer/Utf8JsonWriter.WriteProperties.String.cs
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
@@ -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);
|
|
|
|
From 89c6bf4290c7d65ec4d9ffbe92015e4cbf6c4a16 Mon Sep 17 00:00:00 2001
|
|
From: Jared Parsons <jaredpparsons@gmail.com>
|
|
Date: Fri, 30 Sep 2022 09:49:03 -0700
|
|
Subject: [PATCH 2/6] Make return and out equivalent for ref safety
|
|
|
|
https://github.com/dotnet/roslyn/pull/64318
|
|
|
|
This change allows anything returnable from a method to be assigned to
|
|
an `out` parameter. In several places had to add `scoped` to `ref` to
|
|
inform compiler they could not be captured in an `out` parameter.
|
|
---
|
|
.../System/Reflection/DynamicInvokeInfo.cs | 4 ++--
|
|
.../src/System/Number.BigInteger.cs | 20 ++++++++++++-------
|
|
.../Number.NumberToFloatingPointBits.cs | 2 +-
|
|
.../RegexCaseEquivalences.cs | 2 +-
|
|
4 files changed, 17 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs
|
|
index cc3d8c74a60b7..4f0106980837d 100644
|
|
--- a/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs
|
|
+++ b/src/coreclr/nativeaot/System.Private.CoreLib/src/System/Reflection/DynamicInvokeInfo.cs
|
|
@@ -404,10 +404,10 @@ public DynamicInvokeInfo(MethodBase method, IntPtr invokeThunk)
|
|
|
|
Unsafe.Add(ref copyOfParameters, i) = arg!;
|
|
|
|
-#pragma warning disable 8500
|
|
+#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
|
|
+#pragma warning restore 8500, 9094
|
|
}
|
|
}
|
|
|
|
diff --git a/src/libraries/System.Private.CoreLib/src/System/Number.BigInteger.cs b/src/libraries/System.Private.CoreLib/src/System/Number.BigInteger.cs
|
|
index c19e7d036b04b..f7e613f962829 100644
|
|
--- a/src/libraries/System.Private.CoreLib/src/System/Number.BigInteger.cs
|
|
+++ b/src/libraries/System.Private.CoreLib/src/System/Number.BigInteger.cs
|
|
@@ -317,7 +317,7 @@ internal static partial class Number
|
|
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;
|
|
@@ -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);
|
|
@@ -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
|
|
@@ -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);
|
|
|
|
@@ -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!
|
|
@@ -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)
|
|
{
|
|
@@ -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)
|
|
{
|
|
@@ -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)
|
|
{
|
|
@@ -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;
|
|
diff --git a/src/libraries/System.Private.CoreLib/src/System/Number.NumberToFloatingPointBits.cs b/src/libraries/System.Private.CoreLib/src/System/Number.NumberToFloatingPointBits.cs
|
|
index e88014c3a9518..bec85ff737bab 100644
|
|
--- a/src/libraries/System.Private.CoreLib/src/System/Number.NumberToFloatingPointBits.cs
|
|
+++ b/src/libraries/System.Private.CoreLib/src/System/Number.NumberToFloatingPointBits.cs
|
|
@@ -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);
|
|
|
|
diff --git a/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs b/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
|
|
index 7c65c63e90dfb..72a61998b8ccf 100644
|
|
--- a/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
|
|
+++ b/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCaseEquivalences.cs
|
|
@@ -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')
|
|
{
|
|
|
|
From 2b96bc0edcf67fed4d18dc155e045bc9a4328c64 Mon Sep 17 00:00:00 2001
|
|
From: Jared Parsons <jaredpparsons@gmail.com>
|
|
Date: Fri, 30 Sep 2022 10:52:30 -0700
|
|
Subject: [PATCH 3/6] Warnings on managed pointer types
|
|
|
|
https://github.com/dotnet/roslyn/pull/64294
|
|
|
|
Compiler now issues warnings for pointer operations involving managed
|
|
types
|
|
---
|
|
.../src/System/Reflection/Emit/DynamicMethod.cs | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs
|
|
index a2d74336bee2b..bf455a6b63f69 100644
|
|
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs
|
|
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs
|
|
@@ -504,6 +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
|
|
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
|
|
|
|
CheckArguments(
|
|
|
|
From 28ada4a0580acc72a9e9f658b93b163017d23b63 Mon Sep 17 00:00:00 2001
|
|
From: Jared Parsons <jaredpparsons@gmail.com>
|
|
Date: Fri, 30 Sep 2022 10:26:17 -0700
|
|
Subject: [PATCH 4/6] Update compiler version
|
|
|
|
---
|
|
eng/Versions.props | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/eng/Versions.props b/eng/Versions.props
|
|
index b839658f454ee..ff8f04758c364 100644
|
|
--- a/eng/Versions.props
|
|
+++ b/eng/Versions.props
|
|
@@ -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>
|
|
|
|
From cb7618ebf71639627549db8945097efe82b1a27c Mon Sep 17 00:00:00 2001
|
|
From: Jared Parsons <jaredpparsons@gmail.com>
|
|
Date: Fri, 30 Sep 2022 15:50:08 -0700
|
|
Subject: [PATCH 5/6] Fixup
|
|
|
|
---
|
|
.../src/System/Reflection/Emit/DynamicMethod.cs | 1 -
|
|
1 file changed, 1 deletion(-)
|
|
|
|
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs
|
|
index bf455a6b63f69..84bc2f8ebd3c4 100644
|
|
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs
|
|
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/DynamicMethod.cs
|
|
@@ -507,7 +507,6 @@ Signature LazyCreateSignature()
|
|
#pragma warning disable CS8500
|
|
IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
|
|
#pragma warning restore CS8500
|
|
- IntPtr* pByRefStorage = (IntPtr*)&byrefStorage;
|
|
|
|
CheckArguments(
|
|
copyOfParameters,
|
|
|
|
From 46af7972a57e3378e53ba98cec65bee61850f58b Mon Sep 17 00:00:00 2001
|
|
From: Jared Parsons <jaredpparsons@gmail.com>
|
|
Date: Fri, 30 Sep 2022 16:03:31 -0700
|
|
Subject: [PATCH 6/6] Ref safety rules attribute
|
|
|
|
---
|
|
.../ILCompiler.Compiler.Tests.Assets.csproj | 1 +
|
|
.../ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.csproj | 1 +
|
|
2 files changed, 2 insertions(+)
|
|
|
|
diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.Assets/ILCompiler.Compiler.Tests.Assets.csproj b/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.Assets/ILCompiler.Compiler.Tests.Assets.csproj
|
|
index ea167e092b031..605d407443da2 100644
|
|
--- a/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.Assets/ILCompiler.Compiler.Tests.Assets.csproj
|
|
+++ b/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.Assets/ILCompiler.Compiler.Tests.Assets.csproj
|
|
@@ -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>
|
|
diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.csproj b/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.csproj
|
|
index 5967b093841b1..b09ef31312661 100644
|
|
--- a/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.csproj
|
|
+++ b/src/coreclr/tools/aot/ILCompiler.Compiler.Tests/ILCompiler.Compiler.Tests.csproj
|
|
@@ -14,6 +14,7 @@
|
|
<Platforms>x86;x64</Platforms>
|
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
|
+ <Features>noRefSafetyRulesAttribute=true</Features>
|
|
</PropertyGroup>
|
|
|
|
<ItemGroup>
|