summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2020-02-13 14:27:49 -0800
committerGitHub <noreply@github.com>2020-02-13 14:27:49 -0800
commitefcf98fc7885dc423bdf61b3423dddc63c36075f (patch)
treec39644aaa7f2e717383860b7b0eb12760e2ec3e6 /src
parenta86e825a641cf637d641e35f9ca88b65fe7ae801 (diff)
downloadcoreclr-efcf98fc7885dc423bdf61b3423dddc63c36075f.tar.gz
coreclr-efcf98fc7885dc423bdf61b3423dddc63c36075f.tar.bz2
coreclr-efcf98fc7885dc423bdf61b3423dddc63c36075f.zip
Port of dotnet/runtime#1059 to 3.1 branch (#27986)
This is the fix for #27924. This is a GC hole bug that was found externally, #27590. The cause is that the JIT was using the target type of the subtract when it needed to make a copy of the source, but it needs to use the source type. ## Customer Impact Corruption of state that is non-deterministic and hard to track down. ## Regression? Not a recent regression, but exposed by Unsafe.ByteOffset. ## Testing The fix has been verified in the runtime repo. ## Risk Low: The fix is straightfoward and only impacts 3 lines of code.
Diffstat (limited to 'src')
-rw-r--r--src/jit/codegenxarch.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/jit/codegenxarch.cpp b/src/jit/codegenxarch.cpp
index 521aaca407..a235e41922 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;
}