-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix and Test case for #27924 #1059
Conversation
…perand, to preserve GC-ness.
src/coreclr/src/jit/codegenxarch.cpp
Outdated
@@ -954,7 +954,7 @@ void CodeGen::genCodeForBinary(GenTreeOp* treeNode) | |||
// reg3 = reg3 op reg2 | |||
else | |||
{ | |||
inst_RV_RV(ins_Copy(targetType), targetReg, op1reg, targetType); | |||
inst_RV_RV(ins_Copy(targetType), targetReg, op1reg, op1->TypeGet()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm, should gcMarkRegPtrVal
below also use op1->TypeGet()
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting - it probably should. It gets set to a byref during emit, which fixes the GC info. I confess that I'm not sure how regSet.m_rsGCInfo.gcRegByrefSetCur
is used during the codegen phase, but I presume that, since it's maintained, it must be depended on. I'll go ahead and change that and dig a little deeper in the meantime.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AFAICT, the codegen-time gc info is used at labels and calls, and hence, since this is a transitory byref, it wouldn't show up as being wrong in this case. That said, I believe it should be maintained correctly.
@dotnet/dnceng - I am getting package failures even on retry:
|
PTAL @dotnet/jit-contrib |
That looks like a build issue. @ViktorHofer @dagood I thought the live-live build was working now? That looks like it's referencing packages from yesterday? |
|
||
static void Work() | ||
{ | ||
for (uint i = 0; i < 1000000; i++) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: {
placement is inconsistent
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
#839 documents that you need to do a fresh build whenever you cross a day boundary. Looks like it applies to CI as well. I believe this is a combination of:
|
It looks like the original error was also caused by UTC day tickover. Here's the timestamp on the first line of a failing Installer build step in attempt 1: 2019-12-20T00:03:04.6739571Z Core-Setup stopped having this problem once it moved off BuildTools onto Arcade. Now we've got it again because of global dotnet/runtime settings. Right now, any build where Libraries => Installer spans a UTC day should fail this way. Adding it to the CI problem tracking issue #702. |
src/coreclr/tests/src/JIT/Regression/JitBlue/GitHub_27924/GitHub_27924.csproj
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Approved but meant to comment.
Having an innerloop test which sets GCStress 0xC seems incorrect. We know that gc stress has a certain level of unreliability that does not fit with our innerloop test bar.`
@dotnet/dnceng - I re-pushed (with a change to address PR feedback), but I'm still getting some inscrutable failures - e.g. https://helix.dot.net/api/2019-06-17/jobs/fda888e8-b6d4-40fc-ba3f-7fb296c47338/workitems/JIT.jit64.mcc/console simply ends with:
Any suggestions for how to move this forward? |
@CarolEidt The remaining CI failures are known Windows arm failures, so is this ready to merge? |
Since this adds a new test, I was hoping to get arm testing on this, but perhaps at this point I should just build and test on arm myself. |
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.
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.
https://github.com/dotnet/coreclr/issues/27924