diff --git a/src/jit/codegenxarch.cpp b/src/jit/codegenxarch.cpp index 521aaca407b8..a235e4192237 100644 --- a/src/jit/codegenxarch.cpp +++ b/src/jit/codegenxarch.cpp @@ -954,9 +954,10 @@ void CodeGen::genCodeForBinary(GenTreeOp* treeNode) // reg3 = reg3 op reg2 else { - inst_RV_RV(ins_Copy(targetType), targetReg, op1reg, targetType); + var_types op1Type = op1->TypeGet(); + inst_RV_RV(ins_Copy(op1Type), targetReg, op1reg, op1Type); regSet.verifyRegUsed(targetReg); - gcInfo.gcMarkRegPtrVal(targetReg, targetType); + gcInfo.gcMarkRegPtrVal(targetReg, op1Type); dst = treeNode; src = op2; } diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.cs b/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.cs new file mode 100644 index 000000000000..c4b8cf5be502 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Threading; +using System.Runtime.CompilerServices; +using System.Collections.Generic; +using System.Threading.Tasks; + +class Program +{ + static int returnVal = 100; + static byte[][] s = new byte[1000][]; + + static void Work() + { + for (uint i = 0; i < 1000000; i++) + { + var a = s[i++ % s.Length]; + + ref byte p = ref a[0]; + ref byte q = ref a[1]; + + if (Unsafe.ByteOffset(ref p, ref q) != new IntPtr(1)) + { + Console.WriteLine("ERROR: i = " + i); + returnVal = -1; + } + p = 1; q = 2; + } + } + + static int Main(string[] args) + { + for(int i = 0; i < s.Length; i++) s[i] = new byte[2]; + + List tasks = new List(); + for(int i = 0; i < 5; i++) + { + tasks.Add(Task.Run(Work)); + } + + Random r = new Random(); + for (uint i = 0; i < 10000; i++) + { + s[r.Next(s.Length)] = new byte[3 + r.Next(100)]; + } + Task t = Task.WhenAll(tasks); + t.Wait(); + return returnVal; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.csproj new file mode 100644 index 000000000000..155de5c4fa68 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + + + + + + + False + + + + + True + True + + + + + + + + + + + + + + +