diff options
author | Jose Perez Rodriguez <joperezr@microsoft.com> | 2017-01-06 01:03:56 +0300 |
---|---|---|
committer | Jose Perez Rodriguez <joperezr@microsoft.com> | 2017-01-06 01:03:56 +0300 |
commit | 44b68e694948065c1b61457cec125d3d64c1fa22 (patch) | |
tree | fc7093fb753c57f29ce42de9dd64ecc435d2e95c /src/System.Runtime.CompilerServices.Unsafe | |
parent | d4d3bbdf7b8b35b5a330c94427051582470531d0 (diff) | |
parent | 05ae65fd6b51f865750e8d400c60511fcdbbbfb5 (diff) |
Merge branch master into dev/eng
Diffstat (limited to 'src/System.Runtime.CompilerServices.Unsafe')
4 files changed, 26 insertions, 22 deletions
diff --git a/src/System.Runtime.CompilerServices.Unsafe/pkg/System.Runtime.CompilerServices.Unsafe.pkgproj b/src/System.Runtime.CompilerServices.Unsafe/pkg/System.Runtime.CompilerServices.Unsafe.pkgproj index 66269ad81e..b6659d64b0 100644 --- a/src/System.Runtime.CompilerServices.Unsafe/pkg/System.Runtime.CompilerServices.Unsafe.pkgproj +++ b/src/System.Runtime.CompilerServices.Unsafe/pkg/System.Runtime.CompilerServices.Unsafe.pkgproj @@ -2,6 +2,7 @@ <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> <ItemGroup> + <PackageIndex Include="$(ProjectDir)\pkg\baseline\packageBaseline.1.1.json" /> <ProjectReference Include="..\src\System.Runtime.CompilerServices.Unsafe.ilproj"> <SupportedFramework>net45;netcore45;wp8;wpa81;netcoreapp1.0;$(AllXamarinFrameworks)</SupportedFramework> </ProjectReference> diff --git a/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.il b/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.il index 3251744263..0eb1aa4091 100644 --- a/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.il +++ b/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.il @@ -130,7 +130,7 @@ ret } // end of method Unsafe::CopyBlock - .method public hidebysig static void CopyBlock(void* destination, void* source, native unsigned int byteCount) cil managed aggressiveinlining + .method public hidebysig static void CopyBlock(uint8& destination, uint8& source, uint32 byteCount) cil managed aggressiveinlining { .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) .maxstack 3 @@ -153,7 +153,7 @@ ret } // end of method Unsafe::CopyBlockUnaligned - .method public hidebysig static void CopyBlockUnaligned(void* destination, void* source, native unsigned int byteCount) cil managed aggressiveinlining + .method public hidebysig static void CopyBlockUnaligned(uint8& destination, uint8& source, uint32 byteCount) cil managed aggressiveinlining { .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) .maxstack 3 @@ -176,7 +176,7 @@ ret } // end of method Unsafe::InitBlock - .method public hidebysig static void InitBlock(void* startAddress, uint8 'value', native unsigned int byteCount) cil managed aggressiveinlining + .method public hidebysig static void InitBlock(uint8& startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining { .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) .maxstack 3 @@ -199,7 +199,7 @@ ret } // end of method Unsafe::InitBlockUnaligned - .method public hidebysig static void InitBlockUnaligned(void* startAddress, uint8 'value', native unsigned int byteCount) cil managed aggressiveinlining + .method public hidebysig static void InitBlockUnaligned(uint8& startAddress, uint8 'value', uint32 byteCount) cil managed aggressiveinlining { .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) .maxstack 3 @@ -222,8 +222,12 @@ .method public hidebysig static !!T& AsRef<T>(void* source) cil managed aggressiveinlining { .custom instance void System.Runtime.Versioning.NonVersionableAttribute::.ctor() = ( 01 00 00 00 ) + .locals (int32&) .maxstack 1 ldarg.0 + // Roundtrip via a local to avoid type mismatch on return that the JIT inliner chokes on. + stloc.0 + ldloc.0 ret } // end of method Unsafe::AsRef diff --git a/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.xml b/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.xml index bd8f42271a..4a7ea0d948 100644 --- a/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.xml +++ b/src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.xml @@ -160,7 +160,7 @@ <param name="source">The source address to copy from.</param> <param name="byteCount">The number of bytes to copy.</param> </member> - <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UIntPtr)"> + <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte@,System.Byte@,System.UInt32)"> <summary> Copies bytes from the source address to the destination address. </summary> @@ -177,7 +177,7 @@ <param name="source">The source address to copy from.</param> <param name="byteCount">The number of bytes to copy.</param> </member> - <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UIntPtr)"> + <member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte@,System.Byte@,System.UInt32)"> <summary> Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses. @@ -194,7 +194,7 @@ <param name="value">The value to initialize the block to.</param> <param name="byteCount">The number of bytes to initialize.</param> </member> - <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UIntPtr)"> + <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte@,System.Byte,System.UInt32)"> <summary> Initializes a block of memory at the given location with a given initial value. </summary> @@ -211,7 +211,7 @@ <param name="value">The value to initialize the block to.</param> <param name="byteCount">The number of bytes to initialize.</param> </member> - <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UIntPtr)"> + <member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte@,System.Byte,System.UInt32)"> <summary> Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address. diff --git a/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs b/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs index ba6ecb1737..7511966b99 100644 --- a/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs +++ b/src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs @@ -181,10 +181,10 @@ namespace System.Runtime.CompilerServices [Theory] [MemberData(nameof(InitBlockData))] - public static unsafe void InitBlockUIntPtrStack(int numBytes, byte value) + public static unsafe void InitBlockRefStack(int numBytes, byte value) { byte* stackPtr = stackalloc byte[numBytes]; - Unsafe.InitBlock(stackPtr, value, (UIntPtr)numBytes); + Unsafe.InitBlock(ref *stackPtr, value, (uint)numBytes); for (int i = 0; i < numBytes; i++) { Assert.Equal(stackPtr[i], value); @@ -193,11 +193,11 @@ namespace System.Runtime.CompilerServices [Theory] [MemberData(nameof(InitBlockData))] - public static unsafe void InitBlockUIntPtrUnmanaged(int numBytes, byte value) + public static unsafe void InitBlockRefUnmanaged(int numBytes, byte value) { IntPtr allocatedMemory = Marshal.AllocCoTaskMem(numBytes); byte* bytePtr = (byte*)allocatedMemory.ToPointer(); - Unsafe.InitBlock(bytePtr, value, (UIntPtr)numBytes); + Unsafe.InitBlock(ref *bytePtr, value, (uint)numBytes); for (int i = 0; i < numBytes; i++) { Assert.Equal(bytePtr[i], value); @@ -232,11 +232,11 @@ namespace System.Runtime.CompilerServices [Theory] [MemberData(nameof(InitBlockData))] - public static unsafe void InitBlockUnalignedUIntPtrStack(int numBytes, byte value) + public static unsafe void InitBlockUnalignedRefStack(int numBytes, byte value) { byte* stackPtr = stackalloc byte[numBytes + 1]; stackPtr += 1; // +1 = make unaligned - Unsafe.InitBlockUnaligned(stackPtr, value, (UIntPtr)numBytes); + Unsafe.InitBlockUnaligned(ref *stackPtr, value, (uint)numBytes); for (int i = 0; i < numBytes; i++) { Assert.Equal(stackPtr[i], value); @@ -245,11 +245,11 @@ namespace System.Runtime.CompilerServices [Theory] [MemberData(nameof(InitBlockData))] - public static unsafe void InitBlockUnalignedUIntPtrUnmanaged(int numBytes, byte value) + public static unsafe void InitBlockUnalignedRefUnmanaged(int numBytes, byte value) { IntPtr allocatedMemory = Marshal.AllocCoTaskMem(numBytes + 1); byte* bytePtr = (byte*)allocatedMemory.ToPointer() + 1; // +1 = make unaligned - Unsafe.InitBlockUnaligned(bytePtr, value, (UIntPtr)numBytes); + Unsafe.InitBlockUnaligned(ref *bytePtr, value, (uint)numBytes); for (int i = 0; i < numBytes; i++) { Assert.Equal(bytePtr[i], value); @@ -291,7 +291,7 @@ namespace System.Runtime.CompilerServices [Theory] [MemberData(nameof(CopyBlockData))] - public static unsafe void CopyBlockUIntPtr(int numBytes) + public static unsafe void CopyBlockRef(int numBytes) { byte* source = stackalloc byte[numBytes]; byte* destination = stackalloc byte[numBytes]; @@ -302,7 +302,7 @@ namespace System.Runtime.CompilerServices source[i] = value; } - Unsafe.CopyBlock(destination, source, (UIntPtr)numBytes); + Unsafe.CopyBlock(ref destination[0], ref source[0], (uint)numBytes); for (int i = 0; i < numBytes; i++) { @@ -337,10 +337,9 @@ namespace System.Runtime.CompilerServices } } - [Theory] [MemberData(nameof(CopyBlockData))] - public static unsafe void CopyBlockUnalignedUIntPtr(int numBytes) + public static unsafe void CopyBlockUnalignedRef(int numBytes) { byte* source = stackalloc byte[numBytes + 1]; byte* destination = stackalloc byte[numBytes + 1]; @@ -353,7 +352,7 @@ namespace System.Runtime.CompilerServices source[i] = value; } - Unsafe.CopyBlockUnaligned(destination, source, (UIntPtr)numBytes); + Unsafe.CopyBlockUnaligned(ref destination[0], ref source[0], (uint)numBytes); for (int i = 0; i < numBytes; i++) { @@ -419,7 +418,7 @@ namespace System.Runtime.CompilerServices } [Fact] - public unsafe static void AsRef() + public static unsafe void AsRef() { byte[] b = new byte[4] { 0x42, 0x42, 0x42, 0x42 }; fixed (byte * p = b) |