diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index c03cabe47ab4e0..c705e342f6df4c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -10,61 +10,61 @@ - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 - + https://github.com/dotnet/arcade - ee39cd1573dbb8011f343e1037af51d4fc00a747 + 6813f5aa511a7a4498fa217a54219b5704a01f83 https://dev.azure.com/dnceng/internal/_git/dotnet-optimization diff --git a/eng/Versions.props b/eng/Versions.props index 067665b5a7113f..094ff7afcee1a7 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -48,16 +48,16 @@ - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 - 2.5.1-beta.20506.7 - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 - 5.0.0-beta.20506.7 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 + 2.5.1-beta.20510.1 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 + 5.0.0-beta.20510.1 5.0.0-rc.1.20451.14 5.0.0-rc.1.20451.14 diff --git a/global.json b/global.json index 1cfdd8d23916e7..b4ecbea8957e0e 100644 --- a/global.json +++ b/global.json @@ -5,17 +5,17 @@ "rollForward": "major" }, "tools": { - "dotnet": "5.0.100-rc.1.20454.5" + "dotnet": "5.0.100-rc.2.20479.15" }, "native-tools": { "cmake": "3.14.5", "python3": "3.7.1" }, "msbuild-sdks": { - "Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk": "5.0.0-beta.20506.7", - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20506.7", - "Microsoft.DotNet.Build.Tasks.SharedFramework.Sdk": "5.0.0-beta.20506.7", - "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20506.7", + "Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk": "5.0.0-beta.20510.1", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20510.1", + "Microsoft.DotNet.Build.Tasks.SharedFramework.Sdk": "5.0.0-beta.20510.1", + "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20510.1", "Microsoft.FIX-85B6-MERGE-9C38-CONFLICT": "1.0.0", "Microsoft.NET.Sdk.IL": "5.0.0-preview.8.20359.4", "Microsoft.Build.NoTargets": "2.0.1", diff --git a/src/tests/Interop/UnmanagedCallersOnly/InvalidCallbacks.il b/src/tests/Interop/UnmanagedCallersOnly/InvalidCallbacks.il index bd391367f52332..9eac36900a7998 100644 --- a/src/tests/Interop/UnmanagedCallersOnly/InvalidCallbacks.il +++ b/src/tests/Interop/UnmanagedCallersOnly/InvalidCallbacks.il @@ -7,7 +7,7 @@ .assembly InvalidCSharp { } .class public auto ansi beforefieldinit InvalidCSharp.GenericClass`1 - extends System.Object + extends [System.Runtime]System.Object { .method public hidebysig static void CallbackMethod ( @@ -73,3 +73,93 @@ IL_0006: ret } } + +.class public auto ansi beforefieldinit InvalidCSharp.CallingUnmanagedCallersOnlyDirectly + extends [System.Runtime]System.Object +{ + .method public hidebysig specialname rtspecialname + instance void .ctor () cil managed + { + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [System.Runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public hidebysig static + int32 ManagedDoubleCallback ( + int32 n + ) cil managed + { + .custom instance void [System.Runtime.InteropServices]System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute::.ctor() = ( + 01 00 00 00 + ) + .maxstack 1 + .locals init ( + [0] int32 + ) + + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: call int32 InvalidCSharp.CallingUnmanagedCallersOnlyDirectly::DoubleImpl(int32) + IL_0007: stloc.0 + IL_0008: br.s IL_000a + + IL_000a: ldloc.0 + IL_000b: ret + } + + .method private hidebysig static + int32 DoubleImpl ( + int32 n + ) cil managed + { + .maxstack 2 + .locals init ( + [0] int32 + ) + + IL_0000: nop + IL_0001: ldc.i4.2 + IL_0002: ldarg.0 + IL_0003: mul + IL_0004: stloc.0 + IL_0005: br.s IL_0007 + + IL_0007: ldloc.0 + IL_0008: ret + } + + .method public hidebysig static + class [System.Runtime]System.Func`2 GetDoubleDelegate () cil managed + { + .maxstack 8 + + IL_0000: ldnull + IL_0001: ldftn int32 InvalidCSharp.CallingUnmanagedCallersOnlyDirectly::ManagedDoubleCallback(int32) + IL_0007: newobj instance void class [System.Runtime]System.Func`2::.ctor(object, native int) + IL_000c: ret + } + + .method public hidebysig static pinvokeimpl("UnmanagedCallersOnlyDll" as "DoesntExist" winapi) + int32 PInvokeMarkedWithUnmanagedCallersOnly ( + int32 n + ) cil managed preservesig + { + .custom instance void [System.Runtime.InteropServices]System.Runtime.InteropServices.UnmanagedCallersOnlyAttribute::.ctor() = ( + 01 00 00 00 + ) + } + + .method public hidebysig static + int32 CallPInvokeMarkedWithUnmanagedCallersOnly ( + int32 n + ) cil managed + { + .maxstack 1 + + ldarg.0 + call int32 InvalidCSharp.CallingUnmanagedCallersOnlyDirectly::PInvokeMarkedWithUnmanagedCallersOnly(int32) + ret + } +} \ No newline at end of file diff --git a/src/tests/Interop/UnmanagedCallersOnly/UnmanagedCallersOnlyTest.cs b/src/tests/Interop/UnmanagedCallersOnly/UnmanagedCallersOnlyTest.cs index 0a2b5307da315e..1ebe513e4566ca 100644 --- a/src/tests/Interop/UnmanagedCallersOnly/UnmanagedCallersOnlyTest.cs +++ b/src/tests/Interop/UnmanagedCallersOnly/UnmanagedCallersOnlyTest.cs @@ -29,10 +29,6 @@ public static class UnmanagedCallersOnlyDll [DllImport(nameof(UnmanagedCallersOnlyDll))] // Returns -1 if exception was throw and caught. public static extern int CallManagedProcCatchException(IntPtr callbackProc, int n); - - [UnmanagedCallersOnly] - [DllImport(nameof(UnmanagedCallersOnlyDll), EntryPoint = "DoesntExist")] - public static extern int PInvokeMarkedWithUnmanagedCallersOnly(int n); } private const string InvalidCSharpAssemblyName = "InvalidCSharp"; @@ -49,6 +45,12 @@ public static Type GetGenericClassOfIntType() return asm.GetType("InvalidCSharp.GenericClass`1").MakeGenericType(typeof(int)); } + public static Type GetCallingUnmanagedCallersOnlyDirectlyType() + { + var asm = Assembly.Load(InvalidCSharpAssemblyName); + return asm.GetType("InvalidCSharp.CallingUnmanagedCallersOnlyDirectly"); + } + private delegate int IntNativeMethodInvoker(); private delegate void NativeMethodInvoker(); @@ -347,7 +349,7 @@ public static void NegativeTest_ViaDelegate() // Local function to delay exception thrown during JIT void CallAsDelegate() { - Func invoker = ManagedDoubleCallback; + Func invoker = (Func)GetCallingUnmanagedCallersOnlyDirectlyType().GetMethod("GetDoubleDelegate").Invoke(null, BindingFlags.DoNotWrapExceptions, null, null, null); invoker(0); } } @@ -716,10 +718,11 @@ public static void TestPInvokeMarkedWithUnmanagedCallersOnly() Console.WriteLine($"Running {nameof(TestPInvokeMarkedWithUnmanagedCallersOnly)}..."); // Call P/Invoke directly - Assert.Throws(() => UnmanagedCallersOnlyDll.PInvokeMarkedWithUnmanagedCallersOnly(0)); + var pInvokeWrapperMethod = GetCallingUnmanagedCallersOnlyDirectlyType().GetMethod("CallPInvokeMarkedWithUnmanagedCallersOnly"); + Assert.Throws(() => pInvokeWrapperMethod.Invoke(null, BindingFlags.DoNotWrapExceptions, null, new[] { (object)0 }, null)); // Call P/Invoke via reflection - var method = typeof(UnmanagedCallersOnlyDll).GetMethod(nameof(UnmanagedCallersOnlyDll.PInvokeMarkedWithUnmanagedCallersOnly)); + var method = GetCallingUnmanagedCallersOnlyDirectlyType().GetMethod("PInvokeMarkedWithUnmanagedCallersOnly"); Assert.Throws(() => method.Invoke(null, BindingFlags.DoNotWrapExceptions, null, new[] { (object)0 }, null)); // Call P/Invoke as a function pointer @@ -728,7 +731,7 @@ void TestPInvokeMarkedWithUnmanagedCallersOnly_Throws() { .locals init (native int V_0) IL_0000: nop - IL_0001: ldftn int UnmanagedCallersOnlyDll.PInvokeMarkedWithUnmanagedCallersOnly(int32) + IL_0001: ldftn int InvalidCSharp.CallingUnmanagedCallersOnlyDirectly::PInvokeMarkedWithUnmanagedCallersOnly(int32) IL_0007: stloc.0 IL_0008: ldc.i4 1234