[Mono-bugs] [Bug 81666][Nor] New - gmcs 1.2.3.1 dies with a NullException when calling Mono.CSharp.Iterator.CheckType() when having IEnumerable<T> in the source code

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Thu May 17 22:14:26 EDT 2007


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by adrien.dessemond at softhome.net.

http://bugzilla.ximian.com/show_bug.cgi?id=81666

--- shadow/81666	2007-05-17 22:14:26.000000000 -0400
+++ shadow/81666.tmp.3999	2007-05-17 22:14:26.000000000 -0400
@@ -0,0 +1,79 @@
+Bug#: 81666
+Product: Mono: Compilers
+Version: 1.2
+OS: 
+OS Details: Ubuntu 7.04
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: C#
+AssignedTo: rharinath at novell.com                            
+ReportedBy: adrien.dessemond at softhome.net               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: gmcs 1.2.3.1 dies with a NullException when calling Mono.CSharp.Iterator.CheckType() when having IEnumerable<T> in the source code
+
+The following code makes gmcs gracefuly die with a NullReferenceException :
+
+<sample code from MSDN>
+
+using System;
+using System.Collections;
+public class List
+{
+    // Changed IEnumerable for IEnumerable<int>
+    public static IEnumerable<int> Power(int number, int exponent)
+    {
+        int counter = 0;
+        int result = 1;
+        while (counter++ < exponent)
+        {
+            result = result * number;
+            yield return result;
+        }
+    }
+
+
+    static void Main()
+    {
+        // Display powers of 2 up to the exponent 8:
+        foreach (int i in Power(2, 8))
+        {
+            Console.Write("{0} ", i);
+        }
+    }
+}
+
+</sample code from MSDN>
+
+When the above code is compiled with gmcs 1.2.3.1, the compiler dies and 
+its output is :
+
+
+test.cs(6,19): error CS0246: The type or namespace name `IEnumerable`1'
+could not be found. Are you missing a using directive or an assembly reference?
+
+Unhandled Exception: System.NullReferenceException: Object reference not
+set to an instance of an object
+  at Mono.CSharp.Iterator.CheckType (System.Type ret, System.Type&
+original_iterator_type, System.Boolean& is_enumerable) [0x00000] 
+  at Mono.CSharp.Iterator.CreateIterator (IMethodData method,
+Mono.CSharp.DeclSpace parent, Mono.CSharp.GenericMethod generic, Int32
+modifiers) [0x00000] 
+  at Mono.CSharp.MethodOrOperator.ResolveMembers () [0x00000] 
+  at Mono.CSharp.TypeContainer.DoResolveMembers () [0x00000] 
+  at Mono.CSharp.TypeContainer.ResolveMembers () [0x00000] 
+  at Mono.CSharp.TypeContainer.DefineType () [0x00000] 
+  at Mono.CSharp.Class.DefineType () [0x00000] 
+  at Mono.CSharp.RootContext.ResolveTree () [0x00000] 
+  at Mono.CSharp.Driver.MainDriver (System.String[] args) [0x00000] 
+  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000] 
+
+Perfectly reproducable
+
+Changing IEnumerable<int> for IEnumerable makes the compiler happy and the
+sample executes perfectly. I do not if this feature is still there in Mono
+1.2.4...


More information about the mono-bugs mailing list