[Mono-dev] gmcs: System.Exception: Trying to emit a local from a different ILGenerator.

Casey Marshall cmarshall at pacificbiosciences.com
Tue Jun 24 13:42:43 EDT 2008


With SVN sources as of today (but it's been this way for a while): 

using System;
using System.Threading;

public interface x<T>
{
        T Value { get; }
}

public class y<T>
{
        x<T>[] xs;
        int l;

        public y(int n, int l)
        {
                xs = new x<T>[n];
                this.l = l;
        }

        public x<T> this[int n] {
                get {
                        if (l > 0)
                        {
                                ThreadStart ts = new ThreadStart(() =>
                                {
                                        T thing;
                                        for (int i = Math.Min(n, xs.Length-1); i < Math.Min(n+l, xs.Length-1); i++)
                                                thing = xs[i].Value;
                                });
                                Thread t = new Thread(ts);
                                t.Start();
                        }
                        return xs[n];
                }

                set { xs[n] = value; }
        }
}


Results in:

x.cs(26,43): warning CS0219: The variable `thing' is assigned but its value is never used
Exception caught by the compiler while emitting:
   Block that caused the problem begin at: x.cs(36,21):
System.Exception: Trying to emit a local from a different ILGenerator.

Unhandled Exception: System.Exception: Trying to emit a local from a different ILGenerator.
  at System.Reflection.Emit.ILGenerator.Emit (OpCode opcode, System.Reflection.Emit.LocalBuilder lbuilder) [0x00331] in /home/csm/Source/mono-2.0/mcs/class/corlib/System.Reflection.Emit/ILGenerator.cs:722 
  at Mono.CSharp.LocalTemporary.Emit (Mono.CSharp.EmitContext ec) [0x0001d] in /home/csm/Source/mono-2.0/mcs/mcs/assign.cs:228 
  at Mono.CSharp.MemberExpr.EmitInstance (Mono.CSharp.EmitContext ec, Boolean prepare_for_load) [0x0009c] in /home/csm/Source/mono-2.0/mcs/mcs/ecore.cs:3213 
  at Mono.CSharp.FieldExpr.Emit (Mono.CSharp.EmitContext ec, Boolean leave_copy) [0x00076] in /home/csm/Source/mono-2.0/mcs/mcs/ecore.cs:4956 
  at Mono.CSharp.HoistedVariable.Emit (Mono.CSharp.EmitContext ec, Boolean leave_copy) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/anonymous.cs:562 
  at Mono.CSharp.VariableReference.Emit (Mono.CSharp.EmitContext ec, Boolean leave_copy) [0x0000c] in /home/csm/Source/mono-2.0/mcs/mcs/expression.cs:4051 
  at Mono.CSharp.VariableReference.Emit (Mono.CSharp.EmitContext ec) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/expression.cs:4027 
  at Mono.CSharp.ArrayIndexCast.Emit (Mono.CSharp.EmitContext ec) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/expression.cs:9018 
  at Mono.CSharp.Argument.Emit (Mono.CSharp.EmitContext ec) [0x00018] in /home/csm/Source/mono-2.0/mcs/mcs/expression.cs:4601 
  at Mono.CSharp.ArrayAccess.LoadArrayAndArguments (Mono.CSharp.EmitContext ec) [0x00018] in /home/csm/Source/mono-2.0/mcs/mcs/expression.cs:8041 
  at Mono.CSharp.ArrayAccess.EmitAssign (Mono.CSharp.EmitContext ec, Mono.CSharp.Expression source, Boolean leave_copy, Boolean prepare_for_load) [0x00054] in /home/csm/Source/mono-2.0/mcs/mcs/expression.cs:8080 
  at Mono.CSharp.Assign.Emit (Mono.CSharp.EmitContext ec, Boolean is_statement) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/assign.cs:368 
  at Mono.CSharp.Assign.EmitStatement (Mono.CSharp.EmitContext ec) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/assign.cs:378 
  at Mono.CSharp.StatementExpression.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/statement.cs:752 
  at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x0000d] in /home/csm/Source/mono-2.0/mcs/mcs/statement.cs:87 
  at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00019] in /home/csm/Source/mono-2.0/mcs/mcs/statement.cs:2283 
  at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x00095] in /home/csm/Source/mono-2.0/mcs/mcs/statement.cs:2305 
  at Mono.CSharp.ExplicitBlock.Emit (Mono.CSharp.EmitContext ec) [0x0004f] in /home/csm/Source/mono-2.0/mcs/mcs/statement.cs:2472 
  at Mono.CSharp.ToplevelBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000] in /home/csm/Source/mono-2.0/mcs/mcs/statement.cs:2870 
  at Mono.CSharp.EmitContext.EmitResolvedTopBlock (Mono.CSharp.ToplevelBlock block, Boolean unreachable) [0x00006] in /home/csm/Source/mono-2.0/mcs/mcs/codegen.cs:826 
  at Mono.CSharp.EmitContext.EmitTopBlock (IMethodData md, Mono.CSharp.ToplevelBlock block) [0x00037] in /home/csm/Source/mono-2.0/mcs/mcs/codegen.cs:733


More information about the Mono-devel-list mailing list