[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