-
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
[arm32/Linux] System.Runtime.Tests failures on arm32 linux #28129
Comments
cc @tarekgh |
This will be good to be looked by the jit guys. |
Right the math we are doing here is very simple, it is most likely in code gen. |
@RussKeldorph we suspect codegen here as we are doing simple math which is expected to overflow. The same issue occurs on Linux and Windows - but only on ARM. |
Or possibly runtime, if they have an ARM specific codepath (it can't be the C library) |
@BruceForstall Could you investigate? |
@dotnet/jit-contrib |
Yes. Note that we have a pretty fundamental corefx test run regression now on ARM that may block investigation: https://github.com/dotnet/coreclr/issues/21464. |
The issue seems to be caused by handling floating points on ARM. One of the failing tests is trying to add In coreclr repo src/System.Private.CoreLib/shared/System/DateTime.cs
On both x64 and ARM3 passed in values are value=1.79769313486232E+308 scale=86400000 However on x64 long millis become -9223372036854775808 but on arm32 this will be -1. That is than passed down as -10000 to AddTicks() and that will not trigger OutOfRange when added to current time. Note that I have seen similar issues in the past with floats causing HTTP test failures. I was running HTTP tests in QEMU emulator and issues with daytime caused troubles. |
@wfurt It looks to me like either System.DateTime.Add() is incorrectly handling overflow (namely, not handling it in cases where it may occur), or it is allowed to do "unspecified" things on overflow, and the test is invalid. In particular, this line:
where |
Question is whether to simply remove the test, as it's undefined behavior, or make the product math checked, which perhaps has some performance penalty. |
I think the test is correct as it should throw argument out of range exception. |
Perhaps the ArgumentOutOfRangeException checking should be pulled into the callers of this |
The behavior of The fix should be to do the range check on |
Floating point arithmetic in which intermediate values are not explicitly cast to I agree with @jkotas that the range checking should be done before the conversion. |
@jkotas @CarolEidt So with:
where So maybe Add() should be:
|
And maybe there should be an
|
Although I guess that's unnecessary if MaxMillis is typed |
@BruceForstall I believe this implementation is reasonable. |
can we try it on ARM to ensure this will work? |
do you want me to run some tests or do you plan to put up PR @BruceForstall ? You seems to be faster than me... |
at least we need to test the failed case to ensure it fix the issue. we already have other tests in the CI which exercise the functionality that should catch regressions |
I'll let you make the change; I don't have any experience working in the framework code. |
ok. I have build and test machines ready (thanks to @RussKeldorph ) so it is easy for me to try. |
thanks @wfurt |
Proposed change fixed all DayTime tests. I'll do more testing on X64 tomorrow and Ill create PR.
I'll take close look tomorrow as well. |
The sync root changes are probably fallout of my changes a few days ago to remove syncroot field on our collections. I fixed all the tests though, I thought. Is it possible corefx/coreclr/tests are not all in a matching state here? |
it is certainly possible. I reused my build trees from last week. I can give it fresh or let CI do for me.
|
Bumps to mono/api-snapshot@ae01378 Bumps to mono/reference-assemblies@e5173a5 Bumps to mono/bockbuild@d30329d Bumps to mono/boringssl@3d87996 Bumps to mono/corefx@72f7d76 Bumps to mono/corert@1b7d4a1 Bumps to mono/helix-binaries@7e893ea Bumps to mono/illinker-test-assets@f21ff68 Bumps to dotnet/linker@13d864e Bumps to mono/llvm@1aaaaa5 [mono] Bumps to mono/llvm@2c2cffe [xamarin-android] Bumps to mono/NUnitLite@0029561 Bumps to mono/roslyn-binaries@0bbc9b4 Bumps to mono/xunit-binaries@8f6e62e $ git diff --shortstat 886c4901..e66c7667 # mono 3597 files changed, 350850 insertions(+), 91128 deletions(-) $ git diff --shortstat 349752c464c5fc93b32e7d45825f2890c85c8b7d..2c2cffedf01e0fe266b9aaad2c2563e05b750ff4 240 files changed, 18562 insertions(+), 6581 deletions(-) Context: https://github.com/dotnet/coreclr/issues/22046 Fixes: CVE 2018-8292 on macOS Fixes: http://work.devdiv.io/737323 Fixes: https://github.com/dotnet/corefx/issues/33965 Fixes: dotnet/standard#642 Fixes: mono/mono#6997 Fixes: mono/mono#7326 Fixes: mono/mono#7517 Fixes: mono/mono#7750 Fixes: mono/mono#7859 Fixes: mono/mono#8360 Fixes: mono/mono#8460 Fixes: mono/mono#8766 Fixes: mono/mono#8922 Fixes: mono/mono#9418 Fixes: mono/mono#9507 Fixes: mono/mono#9951 Fixes: mono/mono#10024 Fixes: mono/mono#10030 Fixes: mono/mono#10038 Fixes: mono/mono#10448 Fixes: mono/mono#10735 Fixes: mono/mono#10735 Fixes: mono/mono#10737 Fixes: mono/mono#10743 Fixes: mono/mono#10834 Fixes: mono/mono#10837 Fixes: mono/mono#10838 Fixes: mono/mono#10863 Fixes: mono/mono#10945 Fixes: mono/mono#11020 Fixes: mono/mono#11021 Fixes: mono/mono#11021 Fixes: mono/mono#11049 Fixes: mono/mono#11091 Fixes: mono/mono#11095 Fixes: mono/mono#11123 Fixes: mono/mono#11138 Fixes: mono/mono#11146 Fixes: mono/mono#11202 Fixes: mono/mono#11214 Fixes: mono/mono#11317 Fixes: mono/mono#11326 Fixes: mono/mono#11378 Fixes: mono/mono#11385 Fixes: mono/mono#11478 Fixes: mono/mono#11479 Fixes: mono/mono#11488 Fixes: mono/mono#11489 Fixes: mono/mono#11527 Fixes: mono/mono#11529 Fixes: mono/mono#11596 Fixes: mono/mono#11603 Fixes: mono/mono#11613 Fixes: mono/mono#11623 Fixes: mono/mono#11663 Fixes: mono/mono#11681 Fixes: mono/mono#11684 Fixes: mono/mono#11693 Fixes: mono/mono#11697 Fixes: mono/mono#11779 Fixes: mono/mono#11809 Fixes: mono/mono#11858 Fixes: mono/mono#11895 Fixes: mono/mono#11898 Fixes: mono/mono#11898 Fixes: mono/mono#11965 Fixes: mono/mono#12182 Fixes: mono/mono#12193 Fixes: mono/mono#12218 Fixes: mono/mono#12235 Fixes: mono/mono#12263 Fixes: mono/mono#12307 Fixes: mono/mono#12331 Fixes: mono/mono#12362 Fixes: mono/mono#12374 Fixes: mono/mono#12402 Fixes: mono/mono#12421 Fixes: mono/mono#12461 Fixes: mono/mono#12479 Fixes: mono/mono#12479 Fixes: mono/mono#12552 Fixes: mono/mono#12603 Fixes: mono/mono#12747 Fixes: mono/mono#12831 Fixes: mono/mono#12843 Fixes: mono/mono#12881 Fixes: mono/mono#13030 Fixes: mono/mono#13284 Fixes: mono/mono#13297 Fixes: mono/mono#13455 Fixes: mono/mono#13460 Fixes: mono/mono#13478 Fixes: mono/mono#13479 Fixes: mono/mono#13522 Fixes: mono/mono#13607 Fixes: mono/mono#13610 Fixes: mono/mono#13610 Fixes: mono/mono#13639 Fixes: mono/mono#13672 Fixes: mono/mono#13834 Fixes: mono/mono#13878 Fixes: mono/mono#6352 Fixes: mono/monodevelop#6898 Fixes: xamarin/maccore#1069 Fixes: xamarin/maccore#1407 Fixes: xamarin/maccore#604 Fixes: xamarin/xamarin-macios#4984 Fixes: xamarin/xamarin-macios#5289 Fixes: xamarin/xamarin-macios#5363 Fixes: xamarin/xamarin-macios#5381 Fixes: https://issuetracker.unity3d.com/issues/editor-crashes-with-g-logv-when-entering-play-mode-with-active-flowcanvas-script
Running the arm32 tests on linux for System.Runtime.Tests produced the following results: passed 31235/31245 tests.
All 10 failing tests have the same message which is:
The text was updated successfully, but these errors were encountered: