[Mono-dev] Empty IEnumerable Implementation Crashes C# Compiler

Petr Onderka gsvick at gmail.com
Wed Jan 30 17:18:22 UTC 2013


As a workaround, you can use the simpler:

IEnumerator IEnumerable.GetEnumerator ()
{
        yield break;
}

Petr Onderka

On Wed, Jan 30, 2013 at 5:50 PM, shmuelie <shmueli.yosef at englard.net> wrote:
> I needed to create a quick and dirty IEnumerable that that had no elements.
> To do so I used the following code:
>
> IEnumerator IEnumerable.GetEnumerator ()
> {
>         while(false)
>         {
>                 yield return string.Empty;
>         }
> }
>
> It compiled and work in .NET 4.0 but when I tried to use the same code in
> Mono 4.0 I got the following crash report from the compiler:
>
> Unhandled Exception: Mono.CSharp.InternalErrorException:
> /.../MyClass.cs(16,17): <IEnumerable.GetEnumerator>c__Iterator0 --->
> System.ArgumentException: Label not marked
>   at System.Reflection.Emit.ILGenerator.label_fixup () [0x00000] in
> <filename unknown>:0
>   at System.Reflection.Emit.MethodBuilder.fixup () [0x00000] in <filename
> unknown>:0
>   at System.Reflection.Emit.TypeBuilder.CreateType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.TypeContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   --- End of inner exception stack trace ---
>   at Mono.CSharp.TypeContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.TypeContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.ModuleContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0
>   at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename
> unknown>:0
> [ERROR] FATAL UNHANDLED EXCEPTION: Mono.CSharp.InternalErrorException:
> /Users/shmuelienglard/Projects/Learn/DummyEnumeratorCrash/MyClass.cs(16,17):
> <IEnumerable.GetEnumerator>c__Iterator0 ---> System.ArgumentException: Label
> not marked
>   at System.Reflection.Emit.ILGenerator.label_fixup () [0x00000] in
> <filename unknown>:0
>   at System.Reflection.Emit.MethodBuilder.fixup () [0x00000] in <filename
> unknown>:0
>   at System.Reflection.Emit.TypeBuilder.CreateType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.TypeContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   --- End of inner exception stack trace ---
>   at Mono.CSharp.TypeContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.TypeContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.ModuleContainer.CloseType () [0x00000] in <filename
> unknown>:0
>   at Mono.CSharp.Driver.Compile () [0x00000] in <filename unknown>:0
>   at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] in <filename
> unknown>:0
>
>
>
> --
> View this message in context: http://mono.1490590.n4.nabble.com/Empty-IEnumerable-Implementation-Crashes-C-Compiler-tp4658346.html
> Sent from the Mono - Dev mailing list archive at Nabble.com.
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list


More information about the Mono-devel-list mailing list