This looks like a mcs bug. mcs don't generate a return statement at the
end of Main:

    .method public static 
           default void Main()  cil managed 
    {
        // Method begins at RVA 0x20f4
        .entrypoint
        // Code size 25 (0x19)
        .maxstack 8
        IL_0000: br IL_0005

        IL_0005: ldstr "Breaking..."
        IL_000a: call void class [corlib]System.Console::WriteLine(string)
        IL_000f: br IL_0019

        IL_0014: br IL_0005

    } // end of method default void Main() 

csc generates correct code wit a return at the end:

    .method public static  hidebysig 
           default void Main()  cil managed 
    {
        // Method begins at RVA 0x2050
        .entrypoint
        // Code size 17 (0x11)
        .maxstack 1
        IL_0000: br.s IL_000e

        IL_0002: ldstr "Breaking..."
        IL_0007: call void class [corlib]System.Console::WriteLine(string)
        IL_000c: br.s IL_0010

        IL_000e: br.s IL_0002

        IL_0010: ret 
    } // end of method default void Main() 

csc also generates much shorter code!

- Dietmar

On Wed, 2002-07-03 at 08:29, Leigh Dyer wrote:
> Hey guys,
> 
> I think I've found a minor bug in either mcs or the runtime. I was
> writing a small app that has just has a Main() and a small while(true)
> loop, with a break condition inside it. However, when I compiled my app
> with mcs and ran it with mono, after breaking out of the while(true)
> loop my program kept running - it seems to just keep re-running Main().
> Running with mint exits at the end of the first run, but with a
> "Trace/breakpoint trap" message.
> 
> However, if I change my Main() so that it returns int instead of void,
> and add a "return 0;" to the end, everything works as expected.
> 
> I tried to isolate the problem with a small test case, and while it
> doesn't exhibit exactly the same behaviour, it still doesn't work as
> expected with Main() returning void - mint segfaults and mono returns
> the following error:
> 
> ** (process:18686): WARNING (recursed) **: unhandled exception
> System.NullReferenceException: "A null value was found where an object
> instance was required"
> 
> RESULT: -1
> 
> and then needs to be sent a ctrl-c.
> 
> I'm running the mono CVS debs from http://www.atoker.com/mono/ as of
> yesterday on a Debian sid system.
> 
> I've attached both my small test case and the original app (it's very
> small - all it does is iterate over the bytes of a text file looking for
> non-ascii chars) - I hope they're of some use.
> 
> Thanks
> Leigh
> ----
> 

> using System;
> 
> public class BreakTest
> {
>       public static void Main()
>       //public static int Main()
>       {
>               while(true)
>               {
>                       Console.WriteLine("Breaking...");
>                       break;
>               }
>               //return 0;
>       }
> }
> ----
> 

> using System;
> using System.IO;
> 
> public class NonAscii
> {
>       public static void Main(string[] args)
>       //public static int Main(string[] args)
>       {
>               FileStream s = new FileStream(args[0], FileMode.Open, FileAccess.Read);
>               int line=0, ch=0;
>               int x=0;
>               
>               while(true)
>               {
>                       int c = s.ReadByte();
>                       Console.WriteLine("char " + x + ": " + c);
>                       if(c == -1) break;
> 
>                       if(c == '\n')
>                       {
>                               line++; ch=0;
>                       } else {
>                               if(c > 127)
>                               {
>                                       Console.WriteLine("Non-ASCII char: line " + 
>line + ", char " + ch);
>                               }
>                               ch++;
>                       }
>                       x++;
>               }
>               //return 0;
>       }
> }



_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to