http://bugzilla.novell.com/show_bug.cgi?id=609801
http://bugzilla.novell.com/show_bug.cgi?id=609801#c0 Summary: gmcs crash InternalErrorException NotSupportedException with mixture of generics, delegate, inner class Classification: Mono Product: Mono: Compilers Version: 2.6.x Platform: x86 OS/Version: Linux Status: NEW Severity: Major Priority: P5 - None Component: C# AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- Created an attachment (id=365446) --> (http://bugzilla.novell.com/attachment.cgi?id=365446) test code User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2 Running on Debian lenny using mono2.6.4 compiled from tarball gives this problem. 2.4.2.3 from lenny/backports works OK. Test code: (also as attachment) using System; public class CompilerTest1 { private class MyAttribute<T> { private T m_Value; private ConvertMethod<T> m_UpdateMethod; private delegate X ConvertMethod<X>(string stringValue); internal MyAttribute() { if (typeof(T) == typeof(Int32)) { SetUpdateMethod(DefaultInt32ConvertMethod<T>); //m_UpdateMethod = DefaultInt32ConvertMethod<T>; } } private void SetUpdateMethod(ConvertMethod<T> updateMethod) { m_UpdateMethod = updateMethod; } public void Update(string value) { m_Value = m_UpdateMethod(value); } public T GetValue() { return m_Value; } internal static Target DefaultInt32ConvertMethod<Target>(string value) { return (Target)(object)Int32.Parse(value); } } public CompilerTest1() { MyAttribute<Int32> toTest = new MyAttribute<Int32>(); toTest.Update("42"); System.Console.WriteLine("Value is " + toTest.GetValue()); } static void Main() { new CompilerTest1(); } } Backtrace using gmcs: mfuz...@mf-dt:~/work/mono/scratch$ /usr/local/bin/gmcs compilerTest1.cs Unhandled Exception: Mono.CSharp.InternalErrorException: compilerTest1.cs(10,18): CompilerTest1.MyAttribute<T>.MyAttribute() ---> System.NotSupportedException: Operation is not supported. at System.Reflection.Emit.MethodOnTypeBuilderInst.MakeGenericMethod (System.Type[] typeArguments) [0x00000] in <filename unknown>:0 at Mono.CSharp.MethodGroupExpr.IsApplicable (Mono.CSharp.ResolveContext ec, Mono.CSharp.Arguments& arguments, Int32 arg_count, System.Reflection.MethodBase& method, System.Boolean& params_expanded_form) [0x00000] in <filename unknown>:0 at Mono.CSharp.MethodGroupExpr.OverloadResolve (Mono.CSharp.ResolveContext ec, Mono.CSharp.Arguments& Arguments, Boolean may_fail, Location loc) [0x00000] in <filename unknown>:0 at Mono.CSharp.DelegateCreation.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.ImplicitDelegateCreation.Create (Mono.CSharp.ResolveContext ec, Mono.CSharp.MethodGroupExpr mge, System.Type target_type, Location loc) [0x00000] in <filename unknown>:0 at Mono.CSharp.Convert.ImplicitConversionStandard (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression expr, System.Type target_type, Location loc, Boolean explicit_cast) [0x00000] in <filename unknown>:0 at Mono.CSharp.Convert.ImplicitConversionStandard (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression expr, System.Type target_type, Location loc) [0x00000] in <filename unknown>:0 at Mono.CSharp.Convert.ImplicitConversion (Mono.CSharp.ResolveContext ec, Mono.CSharp.Expression expr, System.Type target_type, Location loc) [0x00000] in <filename unknown>:0 at Mono.CSharp.MethodGroupExpr.VerifyArgumentsCompat (Mono.CSharp.ResolveContext ec, Mono.CSharp.Arguments& arguments, Int32 arg_count, System.Reflection.MethodBase method, Boolean chose_params_expanded, Boolean may_fail, Location loc) [0x00000] in <filename unknown>:0 at Mono.CSharp.MethodGroupExpr.OverloadResolve (Mono.CSharp.ResolveContext ec, Mono.CSharp.Arguments& Arguments, Boolean may_fail, Location loc) [0x00000] in <filename unknown>:0 at Mono.CSharp.Invocation.DoResolveOverload (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.Invocation.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec, ResolveFlags flags) [0x00000] in <filename unknown>:0 at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.Block.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.If.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.Block.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0 at Mono.CSharp.ToplevelBlock.Resolve (Mono.CSharp.FlowBranching parent, Mono.CSharp.BlockContext rc, Mono.CSharp.ParametersCompiled ip, IMethodData md) [0x00000] in <filename unknown>:0 --- End of inner exception stack trace --- at Mono.CSharp.TypeContainer.EmitConstructors () [0x00000] in <filename unknown>:0 at Mono.CSharp.TypeContainer.EmitType () [0x00000] in <filename unknown>:0 at Mono.CSharp.RootContext.EmitCode () [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 Problem does not occur if SetUpdateMethod(DefaultInt32ConvertMethod<T>); is replaced by m_UpdateMethod = DefaultInt32ConvertMethod<T>; Problem also does not occur if DefaultInt32ConvertMethod is moved to the outer class Reproducible: Always Steps to Reproduce: 1. 2. 3. -- Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
