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 _______________________________________________ Mono-devel-list mailing list Mono-devel-list@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-devel-list