[Mono-bugs] [Bug 81466][Cri] New - Mono fails to run binaries produced with .NET C# compiler.

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Thu Apr 26 17:53:44 EDT 2007


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by devel at bitprox.com.

http://bugzilla.ximian.com/show_bug.cgi?id=81466

--- shadow/81466	2007-04-26 17:53:44.000000000 -0400
+++ shadow/81466.tmp.20343	2007-04-26 17:53:44.000000000 -0400
@@ -0,0 +1,153 @@
+Bug#: 81466
+Product: Mono: Runtime
+Version: 1.2
+OS: All
+OS Details: Windows XP/SUSE Linux 10.1
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Critical
+Component: JIT
+AssignedTo: lupus at ximian.com                            
+ReportedBy: devel at bitprox.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Mono fails to run binaries produced with .NET C# compiler.
+
+Description of Problem:
+
+I am experiencing a problem when I try to run the code compiled using the
+.NET Framework on the mono runtime. The same code runs fine when executed on
+.NET Framework. However when I compile the code using mono compiler mcs.exe
+it runs fine on any runtime. When I started to examine the IL code emitted
+by the csc.exe and mcs.exe I noticed the difference that leads to unbounded
+recursion and then a StackOverflowException.
+
+To reproduce the problem the following steps required:
+1. The library. Contains code:
+
+using System;
+
+namespace MainSpace
+{
+   public interface IA
+   {}
+   public interface IB
+   { bool Test(); }
+   public interface IC : IA, IB
+   {}
+   public interface ID : IC
+   {}
+   public class A : IA
+   {}
+   public class AC : A, IC
+   {
+       public virtual bool Test()
+       {
+            Console.WriteLine("AC.Test()"); return true;
+       }              
+   }
+   public class CD : AC, ID
+   {}
+}
+
+
+2. The executable. Contains code:
+
+using System;
+
+namespace ImplSpace
+{
+   internal class TestImpl : MainSpace.CD
+   {
+       public override bool Test()
+       { Console.WriteLine("TestImpl.Test()"); return base.Test(); }
+   }
+   public class TestClass
+   {
+       public static void Main()
+       {
+           TestImpl ti = new TestImpl();
+           ti.Test();                  
+       }
+   }
+}
+
+3. The library and the executable now should be compiled using the
+Microsoft csc.exe C# compiler.
+
+4. When executed using the .NET Framework the output is expected:
+TestImpl.Test()
+AC.Test()
+
+5. When executed using the Mono-1.2.3/4 for Win32 the output is unexpected:
+TestImpl.Test()
+...
+TestImpl.Test()
+Unhandled Exception: System.StackOverflowException: The requested operation
+caus ed a stack overflow.
+ at ImplSpace.TestImpl.Test () [0x00000]   
+ ...
+ at ImplSpace.TestImpl.Test () [0x00000]
+
+6. If the library and the executable are compiled using the Mono compiler
+then no any unexpected behaviour occurs.
+
+Actual Results:
+Unhandled Exception: System.StackOverflowException
+
+Expected Results:
+TestImpl.Test()
+AC.Test()
+
+How often does this happen? 
+Always
+
+Additional Information:
+Disassembly information obtained with .NET IL DASM(ildasm.exe) utility 
+follows.
+The following IL code is generated using the csc.exe for the method
+TestImpl.Test:
+.method public hidebysig virtual instance bool
+       Test() cil managed
+{
+ // Code size       21 (0x15)
+ .maxstack  1
+ .locals init ([0] bool CS$00000003$00000000)
+ IL_0000:  ldstr      "TestImpl.Test()"
+ IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
+ IL_000a:  ldarg.0
+ IL_000b:  call       instance bool [FaultTestLib]MainSpace.CD::Test()
+ IL_0010:  stloc.0
+ IL_0011:  br.s       IL_0013
+ IL_0013:  ldloc.0
+ IL_0014:  ret
+} // end of method TestImpl::Test
+
+The following IL code is generated using the mcs.exe for the method
+TestImpl.Test:
+.method public hidebysig virtual instance bool
+       Test() cil managed
+{
+ // Code size       17 (0x11)
+ .maxstack  8
+ IL_0000:  ldstr      "TestImpl.Test()"
+ IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
+ IL_000a:  ldarg.0
+ IL_000b:  call       instance bool [FaultTestLib]MainSpace.AC::Test()
+ IL_0010:  ret
+} // end of method TestImpl::Test
+
+Now I can see that the the code produced by the csc.exe calls
+MainSpace.CD::Test()
+whereas code produced by the mcs.exe directly calls MainSpace.AC::Test().
+
+My environment
+OS: Windows/Linux
+.NET: .NET Framework v1.1.4322
+Mono: Mono-1.2.3 for Linux, Mono-1.2.3/4 for Win32
+
+Thanks,
+Alex Makhotin


More information about the mono-bugs mailing list