Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corefx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Perez Rodriguez <joperezr@microsoft.com>2017-01-06 01:03:56 +0300
committerJose Perez Rodriguez <joperezr@microsoft.com>2017-01-06 01:03:56 +0300
commit44b68e694948065c1b61457cec125d3d64c1fa22 (patch)
treefc7093fb753c57f29ce42de9dd64ecc435d2e95c /src/System.Runtime.CompilerServices.Unsafe
parentd4d3bbdf7b8b35b5a330c94427051582470531d0 (diff)
parent05ae65fd6b51f865750e8d400c60511fcdbbbfb5 (diff)
Merge branch master into dev/eng
Diffstat (limited to 'src/System.Runtime.CompilerServices.Unsafe')
-rw-r--r--src/System.Runtime.CompilerServices.Unsafe/pkg/System.Runtime.CompilerServices.Unsafe.pkgproj1
-rw-r--r--src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.il12
-rw-r--r--src/System.Runtime.CompilerServices.Unsafe/src/System.Runtime.CompilerServices.Unsafe.xml8
-rw-r--r--src/System.Runtime.CompilerServices.Unsafe/tests/UnsafeTests.cs27
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)