Skip to content
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

JitTests.Float fails on iOS devices in release mode on 2019-08 #16411

Closed
akoeplinger opened this issue Aug 22, 2019 · 9 comments · Fixed by #16510
Closed

JitTests.Float fails on iOS devices in release mode on 2019-08 #16411

akoeplinger opened this issue Aug 22, 2019 · 9 comments · Fixed by #16510
Assignees

Comments

@akoeplinger
Copy link
Member

@akoeplinger akoeplinger commented Aug 22, 2019

Steps to Reproduce

  1. Clone and checkout xamarin-macios branch mono-2019-08 branch at e169cd3a9148602fa0d5c3e4fa22695ffcd5b440
  2. Run [NUnit] Mono BCL tests group 1 - iOS Unified 64-bits - device - Release
  3. It fails the JitTests.Float test

Most likely caused by #15930

Current Behavior

16:03:32.7919020 2019-08-22 16:03:33.038 com.xamarin.bcltests.BCL tests group 1[796:227642] Running 'test_0_fconv_u8' ...
16:03:32.7919050 2019-08-22 16:03:33.038 com.xamarin.bcltests.BCL tests group 1[796:227642] test_0_fconv_u8 failed: got 1, expected 0
16:03:32.7919070 2019-08-22 16:03:33.038 com.xamarin.bcltests.BCL tests group 1[796:227642] Running 'test_0_fconv_u4' ...
16:03:32.7919100 2019-08-22 16:03:33.039 com.xamarin.bcltests.BCL tests group 1[796:227642] test_0_fconv_u4 failed: got 1, expected 0
16:03:32.7919120 2019-08-22 16:03:33.039 com.xamarin.bcltests.BCL tests group 1[796:227642] Running 'test_0_rconv_u8' ...
16:03:32.7919150 2019-08-22 16:03:33.039 com.xamarin.bcltests.BCL tests group 1[796:227642] test_0_rconv_u8 failed: got 1, expected 0
16:03:32.7919310 2019-08-22 16:03:33.039 com.xamarin.bcltests.BCL tests group 1[796:227642] Running 'test_0_rconv_u4' ...
16:03:32.7919350 2019-08-22 16:03:33.039 com.xamarin.bcltests.BCL tests group 1[796:227642] test_0_rconv_u4 failed: got 1, expected 0

Expected Behavior

No failures

On which platforms did you notice this

[X] iOS devices
[ ] macOS
[ ] Linux
[ ] Windows

Version Used: 2019-08

@filipnavara

This comment has been minimized.

Copy link
Collaborator

@filipnavara filipnavara commented Aug 22, 2019

I thought this was already fixed by last change by @directhex (#16276), was not it?

Note that the tests are newly introduced and the behavior was likely broken before. I would be happy to look into it but none of my ARM devices exhibit the test failures locally and neither did the ones on Mono CI.

@filipnavara

This comment has been minimized.

Copy link
Collaborator

@filipnavara filipnavara commented Aug 22, 2019

On second throught, the fconv_u4 test was already there before my PR in slightly different form and the opcode emulation was unconditionally enabled for it.

It is likely possible to turn on the emulation of [fr]conv_u[48] in mini-arm64 for TARGET_IOS but it is weird that it works differently from other ARM CPUs.

@lewurm

This comment has been minimized.

Copy link
Member

@lewurm lewurm commented Aug 22, 2019

@filipnavara note that this happens only in Release mode, that is FullAOT+LLVM.

@lewurm

This comment has been minimized.

Copy link
Member

@lewurm lewurm commented Aug 22, 2019

(don't have my hands on a debugger yet)

It could be related to this: #15536 (comment)

@filipnavara

This comment has been minimized.

Copy link
Collaborator

@filipnavara filipnavara commented Aug 22, 2019

Ok, LLVM may behave differently. I would still expect it to be caught by Mono CI on the Linux AArch64 FullAOT+LLVM lane but it is not a combination I tested locally. Disassembly of the code would show how the floating point tests got compiled and if it's correct. If it is Apple Ax CPU behaving differently we can enable the opcode emulation for this case.

@lewurm

This comment has been minimized.

Copy link
Member

@lewurm lewurm commented Aug 26, 2019

I reduced it to this:

        [MethodImpl(MethodImplOptions.NoInlining)]
        public static int test_0_fconv_u8()
        {
            double d = Double.NaN;
            ulong ui;
            ui = (ulong)d;
            if (ui != 0)
            {
                return 1;
            }
        }

LLVM:

_fconvfriends_fconvfriends_Application_test_0_fconv_u8:
000000010000918c    orr w0, wzr, #0x1
0000000100009190    ret

Mini:

fconvfriends_Application_test_0_fconv_u8:
0000000100008f50    stp x29, x30, [sp, #-0x20]!
0000000100008f54    mov x29, sp
0000000100008f58    str x26, [x29, #0x10]
0000000100008f5c    mov x30, #0x0
0000000100008f60    movk    x30, #0xfff8, lsl #48
0000000100008f64    fmov    d0, x30
0000000100008f68    fcvtzu  x0, d0
0000000100008f6c    cmp x0, xzr
0000000100008f70    cset    x0, hi
0000000100008f74    uxtb    w0, w0
0000000100008f78    cbz w0, 0x100008f84
0000000100008f7c    mov x26, #0x1
0000000100008f80    b   0x100008f88
0000000100008f84    mov x26, #0x0
0000000100008f88    mov x0, x26
0000000100008f8c    ldr x26, [x29, #0x10]
0000000100008f90    mov sp, x29
0000000100008f94    ldp x29, x30, [sp], #0x20
0000000100008f98    ret

So LLVM is just too clever, right? Let's look at the output of Mini that is fed into LLVM:

; Function Attrs: noinline uwtable
define hidden monocc i32 @fconvfriends_Application_test_0_fconv_u8() #5 {
BB0:
  br label %INIT_BB1

INIT_BB1:                                         ; preds = %BB0
  br label %INITED_BB2

INITED_BB2:                                       ; preds = %INIT_BB1
  br label %BB3

BB3:                                              ; preds = %INITED_BB2
  br label %BB2

BB2:                                              ; preds = %BB3
  br i1 true, label %BB4, label %BB5

BB4:                                              ; preds = %BB2
  br label %BB6

BB5:                                              ; preds = %BB2
  br label %BB6

BB6:                                              ; preds = %BB5, %BB4
  %0 = phi i32 [ 1, %BB5 ], [ 0, %BB4 ]
  br label %BB1

BB1:                                              ; preds = %BB6
  ret i32 %0
}

and after running opt it results into this:

define hidden monocc i32 @fconvfriends_Application_test_0_fconv_u8() #4 {
BB0:
  ret i32 0
}

So LLVM doesn't even see NaN anymore. So what's Mini emitting? Running with MONO_VERBOSE_METHOD=test_0_fconv_u8:

DUMP BLOCK 0:
DUMP BLOCK 3:
 nop
 nop
 nop
 nop
DUMP BLOCK 2:
 il_seq_point il: 0x0
 il_seq_point il: 0x1
 nop
 il_seq_point il: 0xb
 r8const R38 <- [nan]
 float_conv_to_u8 R34 <- R38
 il_seq_point il: 0xe
 move R40 <- R34
 lcompare_imm R40
 long_cgt_un R43 <-
 int_conv_to_u1 R35 <- R43
 il_seq_point il: 0x14
 move R45 <- R35
 icompare_imm R45 [0]
 int_beq [B4B5]
DUMP BLOCK 5:
 il_seq_point il: 0x17
 il_seq_point il: 0x18
 iconst R36 <- [1]
 il_seq_point il: 0x1a
 br [B6]
DUMP BLOCK 4:
 il_seq_point il: 0x1c
 iconst R51 <- [0]
 il_seq_point il: 0x1e
 br [B6]
DUMP BLOCK 6:
 phi R49 <- [4 (R36, R51)]
 il_seq_point il: 0x20
 il_seq_point il: 0x21
 move R50 <- R49
 br [B1]
DUMP BLOCK 1:
 setret R50

is the last dump right before passing it to mini-llvm.c. So this must have something to get rid of NaN, but that's a bit surprising to me. I believe LLVM does some constant folding during construction of the IR.

Anyway, looks like the semantic of (long) NaN is not exactly well defined for C:

$ cat c.c
#include <stdio.h>
#include <math.h>

static unsigned long storage = 0xfff8000000000000;

int testme (double val)
{
        long l = (long) val;
        if (l != 0)
                return 1;
        return 0;
}

int main (void)
{
        printf ("storage = 0x%016lx\n", storage);
        printf ("isnan = %d\n", isnan (*(double *) &storage));
        printf ("testme = %d\n", testme (*(double *) &storage));

        return 0;
}
$ clang -O0 -o c c.c
$ file c
c: Mach-O 64-bit executable x86_64
$ ./c
storage = 0xfff8000000000000
isnan = 1
testme = 1
constme = 1
$ clang -O2 -o c c.c
$ ./c
storage = 0xfff8000000000000
isnan = 1
testme = 0
constme = 0

And then the result is yet a bit different on linux/arm64:

$ clang -O0 -o c c.c
$ ./c
storage = 0xfff8000000000000
isnan = 1
testme = 0
constme = 0
$ clang -O2 -o c c.c
$ ./c
storage = 0xfff8000000000000
isnan = 1
testme = 0
constme = 1

I swear I didn't make up this output 😱

I'm still puzzled why it doesn't fail on any CI lane with LLVM.

For what it's worth, this fixes iOS:

--- a/mono/mini/mini-arm64.h
+++ b/mono/mini/mini-arm64.h
@@ -112,16 +112,16 @@ typedef struct {
        int thunks_size;
 } MonoCompileArch;

-#ifdef MONO_ARCH_ILP32
-/* For the watch (starting with series 4), a new ABI is introduced: arm64_32.
- * We can still use the older AOT compiler to produce bitcode, because it's
- * "offset compatible". However, since it is targeting arm7k, it makes certain
- * assumptions that we need to align here. */
 #define MONO_ARCH_EMULATE_FCONV_TO_I8 1
 #define MONO_ARCH_EMULATE_FCONV_TO_U8 1
 #define MONO_ARCH_EMULATE_LCONV_TO_R8 1
 #define MONO_ARCH_EMULATE_LCONV_TO_R4 1
 #define MONO_ARCH_EMULATE_LCONV_TO_R8_UN 1
+#ifdef MONO_ARCH_ILP32
+/* For the watch (starting with series 4), a new ABI is introduced: arm64_32.
+ * We can still use the older AOT compiler to produce bitcode, because it's
+ * "offset compatible". However, since it is targeting arm7k, it makes certain
+ * assumptions that we need to align here. */
 #define MONO_ARCH_EMULATE_DIV 1
 #define MONO_ARCH_EMULATE_CONV_R8_UN 1
 #else

I still want to think about it before pushing it. Maybe we can make it conditional regarding if LLVM is used.

@filipnavara

This comment has been minimized.

Copy link
Collaborator

@filipnavara filipnavara commented Aug 26, 2019

The C# example is a bit flawed with the constant propagation. I understand the JIT tests are flawed in the same way but it would be nice to see what LLVM produces when the NaN value is passed through parameter and inlining is disabled.

The fact that it does not fail on any CI lane is definitely something that needs to be looked into.

I am a bit uneasy about unconditionally using the helpers for opcode emulation. One of the reasons I switched them off on ARM64 is to produce the same results as CoreCLR and keep the high-performance of the native instructions. That said, I would not expect it to affect performance compared to previous Mono versions as some of the opcodes were already emulated.

@lewurm

This comment has been minimized.

Copy link
Member

@lewurm lewurm commented Aug 26, 2019

The generated code on linux/arm64 with FullAOT+LLVM doesn't look good either:

00000000000007ac <Tests_test_0_fconv_u8>:
     7ac:   d0000088    adrp    x8, 12000 <_DYNAMIC>
     7b0:   91104108    add x8, x8, #0x410
     7b4:   39401508    ldrb    w8, [x8,#5]
     7b8:   34000068    cbz w8, 7c4 <Tests_test_0_fconv_u8+0x18>
     7bc:   321f03e0    orr w0, wzr, #0x2
     7c0:   d65f03c0    ret
     7c4:   f81f0ffe    str x30, [sp,#-16]!
     7c8:   528000a0    mov w0, #0x5                    // #5
     7cc:   97ffff86    bl  5e4 <mono_aot_basic_floatinit_method>
     7d0:   f84107fe    ldr x30, [sp],#16
     7d4:   321f03e0    orr w0, wzr, #0x2
     7d8:   d65f03c0    ret

Can't test it, because make -C mono/mini llvmfullaotcheck is broken -.- We don't run it on CI, see #15999

Edit: make -C mono/mini llvmaotcheck runs, but fails with the following:

Test 'test_0_fconv_u8' failed result (got 2, expected 0).
Test 'test_0_fconv_u4' failed result (got 2, expected 0).
Test 'test_0_rconv_u8' failed result (got 2, expected 0).
Test 'test_0_rconv_u4' failed result (got 2, expected 0).

Different result than iOS though. We are getting there! 🙂

lewurm added a commit to lewurm/mono that referenced this issue Aug 26, 2019
LLVM eagerly optimizes constants such as NaN in a way that does not align with .NET behaviour. In the future we can change it so that we only do opcode emulation when LLVM is used.

Fixes mono#16411
@filipnavara

This comment has been minimized.

Copy link
Collaborator

@filipnavara filipnavara commented Aug 27, 2019

Hmm, that indeed looks wrong and it could explain some of the LLVM failures that were happening on CI (only on Windows though ¯_(ツ)_/¯). It should generate fcvtzu for the actual conversion which is definitely not happening here. Would it be possible to enable the opcode emulation for LLVM-only (on all platforms)? That is likely as close to a fix as I can imagine. At least until we figure out how to get LLVM to produce the expected code.

Specifically,

mono/mono/mini/mini-runtime.c

Lines 4473 to 4480 in e54f031

#ifdef MONO_ARCH_EMULATE_FCONV_TO_U8
register_opcode_emulation (OP_FCONV_TO_U8, __emul_fconv_to_u8, mono_icall_sig_ulong_double, mono_fconv_u8_2, FALSE);
register_opcode_emulation (OP_RCONV_TO_U8, __emul_rconv_to_u8, mono_icall_sig_ulong_float, mono_rconv_u8, FALSE);
#endif
#ifdef MONO_ARCH_EMULATE_FCONV_TO_U4
register_opcode_emulation (OP_FCONV_TO_U4, __emul_fconv_to_u4, mono_icall_sig_uint32_double, mono_fconv_u4_2, FALSE);
register_opcode_emulation (OP_RCONV_TO_U4, __emul_rconv_to_u4, mono_icall_sig_uint32_float, mono_rconv_u4, FALSE);
#endif
should probably be made unconditional on LLVM. The #ifdefs around the helpers would have to be removed from https://github.com/mono/mono/blob/4c17442dc31553109a8792e0f6d32221392d798c/mono/mini/jit-icalls.c. And, finally,

mono/mono/mini/mini-amd64.h

Lines 418 to 420 in 4c17442

#ifdef TARGET_WIN32
#define MONO_ARCH_EMULATE_FCONV_TO_U4 1
#endif
should be removed.

lewurm added a commit to lewurm/mono that referenced this issue Aug 27, 2019
LLVM eagerly optimizes constants such as NaN in a way that does not align with .NET behaviour. In the future we can change it so that we only do opcode emulation when LLVM is used.

Fixes mono#16411
lewing added a commit that referenced this issue Aug 28, 2019
LLVM eagerly optimizes constants such as NaN in a way that does not align with .NET behaviour. In the future we can change it so that we only do opcode emulation when LLVM is used.

Fixes #16411
monojenkins added a commit to monojenkins/mono that referenced this issue Aug 28, 2019
LLVM eagerly optimizes constants such as NaN in a way that does not align with .NET behaviour. In the future we can change it so that we only do opcode emulation when LLVM is used.

Fixes mono#16411
akoeplinger added a commit that referenced this issue Aug 28, 2019
* [ci] add make -C mono/mini llvmaotcheck to FullAOT LLVM lanes

* [arm64] use opcode emulation for fconv/rconv

LLVM eagerly optimizes constants such as NaN in a way that does not align with .NET behaviour. In the future we can change it so that we only do opcode emulation when LLVM is used.

Fixes #16411

* [arm] account only 4 bytes on stack for single precision arguments

Fixes `test_0_arm64_small_stack_args` in gshared.cs when
* `test_0_arm64_small_stack_args` is compiled with LLVM
* `Foo3.Floats` is compiled with Mini

* [arm] use opcode emulation for fconv/rconv

* [llvmaotcheck] require sse3 being available for regression tests

* [amd64] use opcode emulation for fconv/rconv

* fix cast and signature for mono_rconv_u4
jonpryor added a commit to xamarin/xamarin-android that referenced this issue Sep 6, 2019
Changes: http://github.com/mono/mono/compare/2c3aeaf3780de7392a0d3cbe4dcf86846eb4dffa...29b1ac19c961b959a09097dbc0fe4cd567cc5298

	$ git diff --shortstat 2c3aeaf3..29b1ac19
	 1528 files changed, 45421 insertions(+), 21967 deletions(-)

Changes: mono/api-doc-tools@d03e819...5da8127

	$ git diff --shortstat d03e8198..5da8127a
	 1001 files changed, 86168 insertions(+), 11863 deletions(-)

Changes: mono/api-snapshot@e09042d...1ca8e82

	$ git diff --shortstat e09042da..1ca8e82f
        28 files changed, 612 insertions(+), 217 deletions(-)

Changes: mono/cecil@a6c8f5e...cb6c1ca

	$ git diff --shortstat a6c8f5e1..cb6c1ca9
	 13 files changed, 233 insertions(+), 88 deletions(-)

Changes: mono/corefx@4806207...470e0e1

	$ git diff --shortstat 4806207f...470e0e10
	 4 files changed, 31 insertions(+), 12 deletions(-)

Changes: mono/linker@ebe2a1f...1f87de3

	$ git diff --shortstat ebe2a1f4...1f87de35
        90 files changed, 3219 insertions(+), 1224 deletions(-)

Changes: xamarin/java.interop@befdbc0...be6048e

	$ git diff --shortstat befdbc03...be6048ed
        3 files changed, 3 insertions(+), 3 deletions(-)

Upstream-Fixes: https://bugs.winehq.org/show_bug.cgi?id=47561
Upstream-Fixes: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/967582
Upstream-Fixes: dotnet/coreclr#25071
Upstream-Fixes: dotnet/coreclr#25242
Upstream-Fixes: dotnet/coreclr#25632
Upstream-Fixes: dotnet/coreclr#25709
Upstream-Fixes: dotnet/corefx#37955
Upstream-Fixes: dotnet/corefx#38455
Upstream-Fixes: mono/mono#7377
Upstream-Fixes: mono/mono#8747
Upstream-Fixes: mono/mono#9621
Upstream-Fixes: mono/mono#9664
Upstream-Fixes: mono/mono#9706
Upstream-Fixes: mono/mono#10201
Upstream-Fixes: mono/mono#10645
Upstream-Fixes: mono/mono#10748
Upstream-Fixes: mono/mono#10848
Upstream-Fixes: mono/mono#12141
Upstream-Fixes: mono/mono#13311
Upstream-Fixes: mono/mono#13408
Upstream-Fixes: mono/mono#13412
Upstream-Fixes: mono/mono#13891
Upstream-Fixes: mono/mono#13923
Upstream-Fixes: mono/mono#13945
Upstream-Fixes: mono/mono#14170
Upstream-Fixes: mono/mono#14214
Upstream-Fixes: mono/mono#14214
Upstream-Fixes: mono/mono#14215
Upstream-Fixes: mono/mono#14243
Upstream-Fixes: mono/mono#14377
Upstream-Fixes: mono/mono#14495
Upstream-Fixes: mono/mono#14555
Upstream-Fixes: mono/mono#14724
Upstream-Fixes: mono/mono#14729
Upstream-Fixes: mono/mono#14772
Upstream-Fixes: mono/mono#14792
Upstream-Fixes: mono/mono#14793
Upstream-Fixes: mono/mono#14809
Upstream-Fixes: mono/mono#14830
Upstream-Fixes: mono/mono#14839
Upstream-Fixes: mono/mono#14841
Upstream-Fixes: mono/mono#14847
Upstream-Fixes: mono/mono#14864
Upstream-Fixes: mono/mono#14871
Upstream-Fixes: mono/mono#14917
Upstream-Fixes: mono/mono#14945
Upstream-Fixes: mono/mono#14946
Upstream-Fixes: mono/mono#14948
Upstream-Fixes: mono/mono#14957
Upstream-Fixes: mono/mono#14959
Upstream-Fixes: mono/mono#14960
Upstream-Fixes: mono/mono#14961
Upstream-Fixes: mono/mono#14963
Upstream-Fixes: mono/mono#14971
Upstream-Fixes: mono/mono#14972
Upstream-Fixes: mono/mono#14975
Upstream-Fixes: mono/mono#15023
Upstream-Fixes: mono/mono#15048
Upstream-Fixes: mono/mono#15058
Upstream-Fixes: mono/mono#15080
Upstream-Fixes: mono/mono#15182
Upstream-Fixes: mono/mono#15188
Upstream-Fixes: mono/mono#15189
Upstream-Fixes: mono/mono#15261
Upstream-Fixes: mono/mono#15262
Upstream-Fixes: mono/mono#15263
Upstream-Fixes: mono/mono#15265
Upstream-Fixes: mono/mono#15268
Upstream-Fixes: mono/mono#15307
Upstream-Fixes: mono/mono#15324
Upstream-Fixes: mono/mono#15329
Upstream-Fixes: mono/mono#15330
Upstream-Fixes: mono/mono#15441
Upstream-Fixes: mono/mono#15446
Upstream-Fixes: mono/mono#15503
Upstream-Fixes: mono/mono#15541
Upstream-Fixes: mono/mono#15551
Upstream-Fixes: mono/mono#15556
Upstream-Fixes: mono/mono#15596
Upstream-Fixes: mono/mono#15691
Upstream-Fixes: mono/mono#15692
Upstream-Fixes: mono/mono#15740
Upstream-Fixes: mono/mono#15751
Upstream-Fixes: mono/mono#15760
Upstream-Fixes: mono/mono#15781
Upstream-Fixes: mono/mono#15794
Upstream-Fixes: mono/mono#15825
Upstream-Fixes: mono/mono#15853
Upstream-Fixes: mono/mono#15878
Upstream-Fixes: mono/mono#15887
Upstream-Fixes: mono/mono#15990
Upstream-Fixes: mono/mono#16032
Upstream-Fixes: mono/mono#16411
Upstream-Fixes: mono/mono#16486
Upstream-Fixes: https://github.com/mono/mono/issues/25709
Upstream-Fixes: https://github.com/mono/mono/issues/38821
Upstream-Fixes: #3112
Upstream-Fixes: #3168

Update `build-tools/automation/build.groovy` so that it fully cleans
the build tree before starting the build, so that the vestigial mono
submodule (removed in 0c9f83b) is *actually* removed from the build
tree, so that we don't inadvertently use *ancient* submodule contents.
jonpryor added a commit to jonpryor/xamarin-android that referenced this issue Sep 6, 2019
Changes: http://github.com/mono/mono/compare/2c3aeaf3780de7392a0d3cbe4dcf86846eb4dffa...29b1ac19c961b959a09097dbc0fe4cd567cc5298

	$ git diff --shortstat 2c3aeaf3..29b1ac19
	 1528 files changed, 45421 insertions(+), 21967 deletions(-)

Changes: mono/api-doc-tools@d03e819...5da8127

	$ git diff --shortstat d03e8198..5da8127a
	 1001 files changed, 86168 insertions(+), 11863 deletions(-)

Changes: mono/api-snapshot@e09042d...1ca8e82

	$ git diff --shortstat e09042da..1ca8e82f
        28 files changed, 612 insertions(+), 217 deletions(-)

Changes: mono/cecil@a6c8f5e...cb6c1ca

	$ git diff --shortstat a6c8f5e1..cb6c1ca9
	 13 files changed, 233 insertions(+), 88 deletions(-)

Changes: mono/corefx@4806207...470e0e1

	$ git diff --shortstat 4806207f...470e0e10
	 4 files changed, 31 insertions(+), 12 deletions(-)

Changes: mono/linker@ebe2a1f...1f87de3

	$ git diff --shortstat ebe2a1f4...1f87de35
	 90 files changed, 3219 insertions(+), 1224 deletions(-)

Changes: xamarin/java.interop@75b1189...4fd3539

	$ git diff --shortstat 75b11891...4fd35393
	 34 files changed, 448 insertions(+), 52 deletions(-)

Upstream-Fixes: https://bugs.winehq.org/show_bug.cgi?id=47561
Upstream-Fixes: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/967582
Upstream-Fixes: dotnet/coreclr#25071
Upstream-Fixes: dotnet/coreclr#25242
Upstream-Fixes: dotnet/coreclr#25632
Upstream-Fixes: dotnet/coreclr#25709
Upstream-Fixes: dotnet/corefx#37955
Upstream-Fixes: dotnet/corefx#38455
Upstream-Fixes: mono/mono#7377
Upstream-Fixes: mono/mono#8747
Upstream-Fixes: mono/mono#9621
Upstream-Fixes: mono/mono#9664
Upstream-Fixes: mono/mono#9706
Upstream-Fixes: mono/mono#10201
Upstream-Fixes: mono/mono#10645
Upstream-Fixes: mono/mono#10748
Upstream-Fixes: mono/mono#10848
Upstream-Fixes: mono/mono#12141
Upstream-Fixes: mono/mono#13311
Upstream-Fixes: mono/mono#13408
Upstream-Fixes: mono/mono#13412
Upstream-Fixes: mono/mono#13891
Upstream-Fixes: mono/mono#13923
Upstream-Fixes: mono/mono#13945
Upstream-Fixes: mono/mono#14170
Upstream-Fixes: mono/mono#14214
Upstream-Fixes: mono/mono#14214
Upstream-Fixes: mono/mono#14215
Upstream-Fixes: mono/mono#14243
Upstream-Fixes: mono/mono#14377
Upstream-Fixes: mono/mono#14495
Upstream-Fixes: mono/mono#14555
Upstream-Fixes: mono/mono#14724
Upstream-Fixes: mono/mono#14729
Upstream-Fixes: mono/mono#14772
Upstream-Fixes: mono/mono#14792
Upstream-Fixes: mono/mono#14793
Upstream-Fixes: mono/mono#14809
Upstream-Fixes: mono/mono#14830
Upstream-Fixes: mono/mono#14839
Upstream-Fixes: mono/mono#14841
Upstream-Fixes: mono/mono#14847
Upstream-Fixes: mono/mono#14864
Upstream-Fixes: mono/mono#14871
Upstream-Fixes: mono/mono#14917
Upstream-Fixes: mono/mono#14945
Upstream-Fixes: mono/mono#14946
Upstream-Fixes: mono/mono#14948
Upstream-Fixes: mono/mono#14957
Upstream-Fixes: mono/mono#14959
Upstream-Fixes: mono/mono#14960
Upstream-Fixes: mono/mono#14961
Upstream-Fixes: mono/mono#14963
Upstream-Fixes: mono/mono#14971
Upstream-Fixes: mono/mono#14972
Upstream-Fixes: mono/mono#14975
Upstream-Fixes: mono/mono#15023
Upstream-Fixes: mono/mono#15048
Upstream-Fixes: mono/mono#15058
Upstream-Fixes: mono/mono#15080
Upstream-Fixes: mono/mono#15182
Upstream-Fixes: mono/mono#15188
Upstream-Fixes: mono/mono#15189
Upstream-Fixes: mono/mono#15261
Upstream-Fixes: mono/mono#15262
Upstream-Fixes: mono/mono#15263
Upstream-Fixes: mono/mono#15265
Upstream-Fixes: mono/mono#15268
Upstream-Fixes: mono/mono#15307
Upstream-Fixes: mono/mono#15324
Upstream-Fixes: mono/mono#15329
Upstream-Fixes: mono/mono#15330
Upstream-Fixes: mono/mono#15441
Upstream-Fixes: mono/mono#15446
Upstream-Fixes: mono/mono#15503
Upstream-Fixes: mono/mono#15541
Upstream-Fixes: mono/mono#15551
Upstream-Fixes: mono/mono#15556
Upstream-Fixes: mono/mono#15596
Upstream-Fixes: mono/mono#15691
Upstream-Fixes: mono/mono#15692
Upstream-Fixes: mono/mono#15740
Upstream-Fixes: mono/mono#15751
Upstream-Fixes: mono/mono#15760
Upstream-Fixes: mono/mono#15781
Upstream-Fixes: mono/mono#15794
Upstream-Fixes: mono/mono#15825
Upstream-Fixes: mono/mono#15853
Upstream-Fixes: mono/mono#15878
Upstream-Fixes: mono/mono#15887
Upstream-Fixes: mono/mono#15990
Upstream-Fixes: mono/mono#16032
Upstream-Fixes: mono/mono#16411
Upstream-Fixes: mono/mono#16486
Upstream-Fixes: https://github.com/mono/mono/issues/25709
Upstream-Fixes: https://github.com/mono/mono/issues/38821
Upstream-Fixes: xamarin#3112
Upstream-Fixes: xamarin#3168

Update `build-tools/automation/build.groovy` so that it fully cleans
the build tree before starting the build, so that the vestigial mono
submodule (removed in 0c9f83b) is *actually* removed from the build
tree, so that we don't inadvertently use *ancient* submodule contents.
jonpryor added a commit to xamarin/xamarin-android that referenced this issue Sep 7, 2019
Changes: http://github.com/mono/mono/compare/2c3aeaf3780de7392a0d3cbe4dcf86846eb4dffa...29b1ac19c961b959a09097dbc0fe4cd567cc5298

	$ git diff --shortstat 2c3aeaf3..29b1ac19
	 1528 files changed, 45421 insertions(+), 21967 deletions(-)

Changes: mono/api-doc-tools@d03e819...5da8127

	$ git diff --shortstat d03e8198..5da8127a
	 1001 files changed, 86168 insertions(+), 11863 deletions(-)

Changes: mono/api-snapshot@e09042d...1ca8e82

	$ git diff --shortstat e09042da..1ca8e82f
        28 files changed, 612 insertions(+), 217 deletions(-)

Changes: mono/cecil@a6c8f5e...cb6c1ca

	$ git diff --shortstat a6c8f5e1..cb6c1ca9
	 13 files changed, 233 insertions(+), 88 deletions(-)

Changes: mono/corefx@4806207...470e0e1

	$ git diff --shortstat 4806207f...470e0e10
	 4 files changed, 31 insertions(+), 12 deletions(-)

Changes: mono/linker@ebe2a1f...1f87de3

	$ git diff --shortstat ebe2a1f4...1f87de35
	 90 files changed, 3219 insertions(+), 1224 deletions(-)

Changes: xamarin/java.interop@75b1189...4fd3539

	$ git diff --shortstat 75b11891...4fd35393
	 34 files changed, 448 insertions(+), 52 deletions(-)

Fixes: #3112
Fixes: #3168

Context: https://bugs.winehq.org/show_bug.cgi?id=47561
Context: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/967582
Context: dotnet/coreclr#25071
Context: dotnet/coreclr#25242
Context: dotnet/coreclr#25632
Context: dotnet/coreclr#25709
Context: dotnet/corefx#37955
Context: dotnet/corefx#38455
Context: mono/mono#7377
Context: mono/mono#8747
Context: mono/mono#9621
Context: mono/mono#9664
Context: mono/mono#9706
Context: mono/mono#10201
Context: mono/mono#10645
Context: mono/mono#10748
Context: mono/mono#10848
Context: mono/mono#12141
Context: mono/mono#13311
Context: mono/mono#13408
Context: mono/mono#13412
Context: mono/mono#13891
Context: mono/mono#13923
Context: mono/mono#13945
Context: mono/mono#14170
Context: mono/mono#14214
Context: mono/mono#14214
Context: mono/mono#14215
Context: mono/mono#14243
Context: mono/mono#14377
Context: mono/mono#14495
Context: mono/mono#14555
Context: mono/mono#14724
Context: mono/mono#14729
Context: mono/mono#14772
Context: mono/mono#14792
Context: mono/mono#14793
Context: mono/mono#14809
Context: mono/mono#14830
Context: mono/mono#14839
Context: mono/mono#14841
Context: mono/mono#14847
Context: mono/mono#14864
Context: mono/mono#14871
Context: mono/mono#14917
Context: mono/mono#14945
Context: mono/mono#14946
Context: mono/mono#14948
Context: mono/mono#14957
Context: mono/mono#14959
Context: mono/mono#14960
Context: mono/mono#14961
Context: mono/mono#14963
Context: mono/mono#14971
Context: mono/mono#14972
Context: mono/mono#14975
Context: mono/mono#15023
Context: mono/mono#15048
Context: mono/mono#15058
Context: mono/mono#15080
Context: mono/mono#15182
Context: mono/mono#15188
Context: mono/mono#15189
Context: mono/mono#15261
Context: mono/mono#15262
Context: mono/mono#15263
Context: mono/mono#15265
Context: mono/mono#15268
Context: mono/mono#15307
Context: mono/mono#15324
Context: mono/mono#15329
Context: mono/mono#15330
Context: mono/mono#15441
Context: mono/mono#15446
Context: mono/mono#15503
Context: mono/mono#15541
Context: mono/mono#15551
Context: mono/mono#15556
Context: mono/mono#15596
Context: mono/mono#15691
Context: mono/mono#15692
Context: mono/mono#15740
Context: mono/mono#15751
Context: mono/mono#15760
Context: mono/mono#15781
Context: mono/mono#15794
Context: mono/mono#15825
Context: mono/mono#15853
Context: mono/mono#15878
Context: mono/mono#15887
Context: mono/mono#15990
Context: mono/mono#16032
Context: mono/mono#16411
Context: mono/mono#16486
Context: https://github.com/mono/mono/issues/25709
Context: https://github.com/mono/mono/issues/38821

Update `build-tools/automation/build.groovy` so that it fully cleans
the build tree before starting the build, so that the vestigial mono
submodule (removed in 0c9f83b) is *actually* removed from the build
tree, so that we don't inadvertently use *ancient* submodule contents.
jonpryor added a commit to xamarin/xamarin-android that referenced this issue Dec 3, 2019
Changes: mono/api-snapshot@fc50bc4...45a61d9

        $ git diff --shortstat fc50bc4f...45a61d93
         22 files changed, 775 insertions(+), 474 deletions(-)

Changes: mono/cecil@a6c8f5e...a6a7f5c

        $ git diff --shortstat a6c8f5e1...a6a7f5c0
         55 files changed, 818 insertions(+), 530 deletions(-)

Changes: mono/corefx@1f87de3...49f1c45

        $ git diff --shortstat e4f7102b...49f1c453
         38 files changed, 1171 insertions(+), 419 deletions(-)

Changes: mono/linker@ebe2a1f...e8d054b

        $ git diff --shortstat ebe2a1f4...e8d054bf
         137 files changed, 5360 insertions(+), 1781 deletions(-)

Changes: mono/mono@8946e49...18920a8

        $ git diff --shortstat 8946e49a...18920a83
         1811 files changed, 47240 insertions(+), 48331 deletions(-)

Changes: xamarin/xamarin-android-api-compatibility@a61271e...50a3c52

        $ git diff --shortstat a61271e0...50a3c52d
         1 file changed, 2 insertions(+), 791 deletions(-)

Fixes: #3619

Context: https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1005448
Context: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/967582
Context: dotnet/coreclr#26370
Context: dotnet/coreclr#26479
Context: dotnet/corefx#40455
Context: dotnet/corefx#40578
Context: mono/mono#7377
Context: mono/mono#12421
Context: mono/mono#12586
Context: mono/mono#14080
Context: mono/mono#14725
Context: mono/mono#14772
Context: mono/mono#15261
Context: mono/mono#15262
Context: mono/mono#15263
Context: mono/mono#15307
Context: mono/mono#15308
Context: mono/mono#15310
Context: mono/mono#15646
Context: mono/mono#15687
Context: mono/mono#15805
Context: mono/mono#15992
Context: mono/mono#15994
Context: mono/mono#15999
Context: mono/mono#16032
Context: mono/mono#16034
Context: mono/mono#16046
Context: mono/mono#16192
Context: mono/mono#16308
Context: mono/mono#16310
Context: mono/mono#16369
Context: mono/mono#16380
Context: mono/mono#16381
Context: mono/mono#16395
Context: mono/mono#16411
Context: mono/mono#16415
Context: mono/mono#16486
Context: mono/mono#16570
Context: mono/mono#16605
Context: mono/mono#16616
Context: mono/mono#16689
Context: mono/mono#16701
Context: mono/mono#16712
Context: mono/mono#16742
Context: mono/mono#16759
Context: mono/mono#16803
Context: mono/mono#16808
Context: mono/mono#16824
Context: mono/mono#16876
Context: mono/mono#16879
Context: mono/mono#16918
Context: mono/mono#16943
Context: mono/mono#16950
Context: mono/mono#16974
Context: mono/mono#17004
Context: mono/mono#17017
Context: mono/mono#17038
Context: mono/mono#17040
Context: mono/mono#17083
Context: mono/mono#17084
Context: mono/mono#17133
Context: mono/mono#17139
Context: mono/mono#17151
Context: mono/mono#17180
Context: mono/mono#17278
Context: mono/mono#17549
Context: mono/mono#17569
Context: mono/mono#17665
Context: mono/mono#17687
Context: mono/mono#17737
Context: mono/mono#17790
Context: mono/mono#17924
Context: mono/mono#17931
Context: https://github.com/mono/mono/issues/26758
Context: https://github.com/mono/mono/issues/37913
Context: xamarin/xamarin-macios#7005
jonpryor added a commit to xamarin/xamarin-android that referenced this issue Dec 3, 2019
Changes: mono/api-snapshot@fc50bc4...45a61d9

        $ git diff --shortstat fc50bc4f...45a61d93
         22 files changed, 775 insertions(+), 474 deletions(-)

Changes: mono/cecil@a6c8f5e...a6a7f5c

        $ git diff --shortstat a6c8f5e1...a6a7f5c0
         55 files changed, 818 insertions(+), 530 deletions(-)

Changes: mono/corefx@1f87de3...49f1c45

        $ git diff --shortstat e4f7102b...49f1c453
         38 files changed, 1171 insertions(+), 419 deletions(-)

Changes: mono/linker@ebe2a1f...e8d054b

        $ git diff --shortstat ebe2a1f4...e8d054bf
         137 files changed, 5360 insertions(+), 1781 deletions(-)

Changes: mono/mono@8946e49...18920a8

        $ git diff --shortstat 8946e49a...18920a83
         1811 files changed, 47240 insertions(+), 48331 deletions(-)

Changes: xamarin/xamarin-android-api-compatibility@a61271e...50a3c52

        $ git diff --shortstat a61271e0...50a3c52d
         1 file changed, 2 insertions(+), 791 deletions(-)

Fixes: #3619

Context: https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1005448
Context: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/967582
Context: dotnet/coreclr#26370
Context: dotnet/coreclr#26479
Context: dotnet/corefx#40455
Context: dotnet/corefx#40578
Context: mono/mono#7377
Context: mono/mono#12421
Context: mono/mono#12586
Context: mono/mono#14080
Context: mono/mono#14725
Context: mono/mono#14772
Context: mono/mono#15261
Context: mono/mono#15262
Context: mono/mono#15263
Context: mono/mono#15307
Context: mono/mono#15308
Context: mono/mono#15310
Context: mono/mono#15646
Context: mono/mono#15687
Context: mono/mono#15805
Context: mono/mono#15992
Context: mono/mono#15994
Context: mono/mono#15999
Context: mono/mono#16032
Context: mono/mono#16034
Context: mono/mono#16046
Context: mono/mono#16192
Context: mono/mono#16308
Context: mono/mono#16310
Context: mono/mono#16369
Context: mono/mono#16380
Context: mono/mono#16381
Context: mono/mono#16395
Context: mono/mono#16411
Context: mono/mono#16415
Context: mono/mono#16486
Context: mono/mono#16570
Context: mono/mono#16605
Context: mono/mono#16616
Context: mono/mono#16689
Context: mono/mono#16701
Context: mono/mono#16712
Context: mono/mono#16742
Context: mono/mono#16759
Context: mono/mono#16803
Context: mono/mono#16808
Context: mono/mono#16824
Context: mono/mono#16876
Context: mono/mono#16879
Context: mono/mono#16918
Context: mono/mono#16943
Context: mono/mono#16950
Context: mono/mono#16974
Context: mono/mono#17004
Context: mono/mono#17017
Context: mono/mono#17038
Context: mono/mono#17040
Context: mono/mono#17083
Context: mono/mono#17084
Context: mono/mono#17133
Context: mono/mono#17139
Context: mono/mono#17151
Context: mono/mono#17180
Context: mono/mono#17278
Context: mono/mono#17549
Context: mono/mono#17569
Context: mono/mono#17665
Context: mono/mono#17687
Context: mono/mono#17737
Context: mono/mono#17790
Context: mono/mono#17924
Context: mono/mono#17931
Context: https://github.com/mono/mono/issues/26758
Context: https://github.com/mono/mono/issues/37913
Context: xamarin/xamarin-macios#7005
ManickaP pushed a commit to ManickaP/runtime that referenced this issue Jan 20, 2020
LLVM eagerly optimizes constants such as NaN in a way that does not align with .NET behaviour. In the future we can change it so that we only do opcode emulation when LLVM is used.

Fixes mono/mono#16411


Commit migrated from mono/mono@475defc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants
You can’t perform that action at this time.