[Mono-bugs] [Bug 418312] New: gmcs crashes with complex lambda expressions
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Tue Aug 19 09:21:26 EDT 2008
https://bugzilla.novell.com/show_bug.cgi?id=418312
Summary: gmcs crashes with complex lambda expressions
Product: Mono: Compilers
Version: SVN
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: P5 - None
Component: C#
AssignedTo: msafar at novell.com
ReportedBy: jbevain at novell.com
QAContact: mono-bugs at lists.ximian.com
Found By: ---
Repro:
<<<<<<<<<<<<<
using System;
using System.Linq;
using System.Collections.Generic;
static class CurryBug
{ // curry for function of arity 3
//
// this compiles
public static Func<int,Func<int, Func<int,int>>>
curry_for_int_func (this Func<int,int,int,int> f)
{
return arg1 => arg2 => arg3 => f(arg1 , arg2 , arg3);
}
// but his does not
static Func<A,Func<B,Func<C,D>>> curry<A,B,C,D> (this Func<A,B,C,D> f)
{
return arg1 => arg2 => arg3 => f(arg1, arg2, arg3);
}
static void Main ()
{
Func<int,int,int,int> plus = (x, y, z) => x + y + z;
Console.WriteLine(plus.curry()(7)(23)(47));
}
}
<<<<<<<<<<
Compiles with csc and outputs 77.
Stacktrace:
<<<<<<<<<<
[mono] ~/Desktop @ gmcs curry_bug.cs
Exception caught by the compiler while emitting:
Block that caused the problem begin at: curry_bug.cs(12,40):
System.Exception: Trying to emit a local from a different ILGenerator.
Internal compiler error at curry_bug.cs(12,37):: exception caught while
emitting MethodBuilder [<curry_for_int_func>c__AnonStorey1::<>m__3]
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 local) [0x00000]
at Mono.CSharp.LocalTemporary.Emit (Mono.CSharp.EmitContext ec) [0x00000]
at Mono.CSharp.FieldExpr.EmitAssign (Mono.CSharp.EmitContext ec,
Mono.CSharp.Expression source, Boolean leave_copy, Boolean prepare_for_load)
[0x00000]
at Mono.CSharp.Assign.Emit (Mono.CSharp.EmitContext ec, Boolean is_statement)
[0x00000]
at Mono.CSharp.Assign.EmitStatement (Mono.CSharp.EmitContext ec) [0x00000]
at Mono.CSharp.AnonymousMethodStorey.EmitHoistedFieldsInitialization
(Mono.CSharp.EmitContext ec) [0x00000]
at Mono.CSharp.AnonymousMethodStorey.EmitHoistedVariables
(Mono.CSharp.EmitContext ec) [0x00000]
at Mono.CSharp.ExplicitBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000]
at Mono.CSharp.ToplevelBlock.Emit (Mono.CSharp.EmitContext ec) [0x00000]
at Mono.CSharp.EmitContext.EmitResolvedTopBlock (Mono.CSharp.ToplevelBlock
block, Boolean unreachable) [0x00000]
at Mono.CSharp.EmitContext.EmitTopBlock (IMethodData md,
Mono.CSharp.ToplevelBlock block) [0x00000]
<<<<<<<<<<
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list