if (op2->IsCnsIntOrI() && varTypeIsIntegralOrI(typ))
{
- CLANG_FORMAT_COMMENT_ANCHOR;
-
// Fold (x + 0).
-
if ((op2->AsIntConCommon()->IconValue() == 0) && !gtIsActiveCSE_Candidate(tree))
{
-
- // If this addition is adding an offset to a null pointer,
- // avoid the work and yield the null pointer immediately.
- // Dereferencing the pointer in either case will have the
- // same effect.
-
- if (!optValnumCSE_phase && varTypeIsGC(op2->TypeGet()) &&
- ((op1->gtFlags & GTF_ALL_EFFECT) == 0))
- {
- op2->gtType = tree->gtType;
- DEBUG_DESTROY_NODE(op1);
- DEBUG_DESTROY_NODE(tree);
- return op2;
- }
-
// Remove the addition iff it won't change the tree type
// to TYP_REF.
--- /dev/null
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Runtime.CompilerServices;
+
+unsafe class Runtime_61510
+{
+ [FixedAddressValueType]
+ private static byte s_field;
+
+ public static int Main()
+ {
+ ref byte result = ref AddZeroByrefToNativeInt((nint)Unsafe.AsPointer(ref s_field));
+
+ return Unsafe.AreSame(ref s_field, ref result) ? 100 : 101;
+ }
+
+ [MethodImpl(MethodImplOptions.NoInlining)]
+ private static ref byte AddZeroByrefToNativeInt(nint addr)
+ {
+ return ref Unsafe.Add(ref Unsafe.NullRef<byte>(), addr);
+ }
+}
--- /dev/null
+<Project Sdk="Microsoft.NET.Sdk">
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <Optimize>True</Optimize>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="$(MSBuildProjectName).cs" />
+ </ItemGroup>
+</Project>
\ No newline at end of file