From c257eb6f051050b88b5b10d717d2c82c1aa72df6 Mon Sep 17 00:00:00 2001 From: Robert Jordan Date: Sun, 9 Dec 2007 17:43:59 +0000 Subject: [PATCH] In mono/mini: 2007-12-09 Robert Jordan * mini-x86.c (mono_arch_emit_epilog): Consider all kinds of 64-bit types. Fixes #323114. In mono/tests: 2007-12-09 Robert Jordan * bug-323114.cs: Add test case for #323114. svn path=/trunk/mono/; revision=91007 --- mono/mini/ChangeLog | 5 +++++ mono/mini/mini-x86.c | 2 +- mono/tests/ChangeLog | 4 ++++ mono/tests/Makefile.am | 1 + mono/tests/bug-323114.cs | 23 +++++++++++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 mono/tests/bug-323114.cs diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index f22c56c0ff4..38b9ef693e8 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,3 +1,8 @@ +2007-12-09 Robert Jordan + + * mini-x86.c (mono_arch_emit_epilog): + Consider all kinds of 64-bit types. Fixes #323114. + 2007-12-08 Zoltan Varga * tramp-amd64.c (mono_arch_create_trampoline_code): Clean up the code a bit. diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index d2f154658ae..8c65ead58a8 100644 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -3914,7 +3914,7 @@ mono_arch_emit_epilog (MonoCompile *cfg) x86_mov_mem_reg (code, lmf_tls_offset, X86_ECX, 4); } else { /* Find a spare register */ - switch (sig->ret->type) { + switch (mono_type_get_underlying_type (sig->ret)->type) { case MONO_TYPE_I8: case MONO_TYPE_U8: prev_lmf_reg = X86_EDI; diff --git a/mono/tests/ChangeLog b/mono/tests/ChangeLog index 3dfa7e4cc8f..8f8c887a49c 100644 --- a/mono/tests/ChangeLog +++ b/mono/tests/ChangeLog @@ -1,3 +1,7 @@ +2007-12-09 Robert Jordan + + * bug-323114.cs: Add test case for #323114. + 2007-12-07 Zoltan Varga * pinvoke2.cs: Fix the names of two tests. diff --git a/mono/tests/Makefile.am b/mono/tests/Makefile.am index 79731eea71c..c743e5bcf60 100644 --- a/mono/tests/Makefile.am +++ b/mono/tests/Makefile.am @@ -215,6 +215,7 @@ TEST_CS_SRC= \ bug-78653.cs \ bug-78656.cs \ bug-77127.cs \ + bug-323114.cs \ bug-331958.cs \ interlocked.cs \ cross-domain.cs \ diff --git a/mono/tests/bug-323114.cs b/mono/tests/bug-323114.cs new file mode 100644 index 00000000000..ef9ff992eb2 --- /dev/null +++ b/mono/tests/bug-323114.cs @@ -0,0 +1,23 @@ +using System; + +public enum Enum64 : long +{ + A = Int64.MaxValue, +} + +delegate Enum64 EnumDelegate (Enum64 value); + +class Test +{ + static Enum64 Method (Enum64 value) + { + return value; + } + + static int Main () + { + EnumDelegate d = new EnumDelegate (Method); + Enum64 r = d.EndInvoke (d.BeginInvoke (Enum64.A, null, null)); + return r == Enum64.A ? 0 : 1; + } +} -- 2.25.1