[Mono-bugs] [Bug 77963][Cri] Changed - [GMCS] NRE on class X : Y<X.Z> - derived class of a generic type whose generic argument is its nested child class

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Fri Sep 1 20:20:18 EDT 2006


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 jan.oravec at 6com.sk.

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

--- shadow/77963	2006-08-02 11:13:34.000000000 -0400
+++ shadow/77963.tmp.31899	2006-09-01 20:20:18.000000000 -0400
@@ -1,22 +1,21 @@
 Bug#: 77963
 Product: Mono: Compilers
 Version: 1.1
 OS: unknown
 OS Details: 
-Status: RESOLVED   
-Resolution: FIXED
+Status: REOPENED   
+Resolution: 
 Severity: Unknown
 Priority: Critical
 Component: C#
 AssignedTo: rharinath at novell.com                            
 ReportedBy: atsushi at ximian.com               
 QAContact: mono-bugs at ximian.com
 TargetMilestone: ---
 URL: 
-Cc: 
 Summary: [GMCS] NRE on class X : Y<X.Z> - derived class of a generic type whose generic argument is its nested child class
 BugsThisDependsOn: 77396[FIXED], 77403
 
 The example code below causes NullReferenceException due to incomplete type
 resolution. Bar is derived from a generic class whose generic argument is
 the nested child class of Bar (i.e. Bar.Baz).
@@ -74,6 +73,67 @@
 
 ------- Additional Comments From martin at ximian.com  2006-07-03 08:12 -------
 Increasing the priority doesn't help here - look at the dependency graph.
 
 ------- Additional Comments From rharinath at novell.com  2006-08-02 10:45 -------
 Should be fixed in SVN r63251.
+
+------- Additional Comments From jan.oravec at 6com.sk  2006-09-01 20:20 -------
+The more generic variation of this still doesn't work (current SVN):
+
+public class Foo<K>
+{
+}
+
+public class Bar<Q> : Foo<Bar<Q>.Baz>
+{
+        public class Baz
+        {
+        }
+}
+
+a.cs(5,27): error CS0426: The nested type `Baz' does not exist in the
+type `Bar<Q>'
+Compilation failed: 1 error(s), 0 warnings
+
+
+The similar example not involving cyclic dependency (Bar -> Foo<Baz>
+-> Baz -> Bar) works fine:
+
+public class Foo<K>
+{
+}
+
+public class Bar<Q>
+{
+        public class Baz
+        {
+        }
+}
+
+public class Goo<Q> : Foo<Bar<Q>.Baz>
+{
+}
+
+Closing the cycle again with:
+
+public class Foo<K>
+{
+}
+
+public class Bar<Q> : Goo<Q>
+{
+        public class Baz
+        {
+        }
+}
+
+public class Goo<Q> : Foo<Bar<Q>.Baz>
+{
+}
+
+Fails again with:
+
+c.cs(12,27): error CS0426: The nested type `Baz' does not exist in the
+type `Bar<Q>'
+Compilation failed: 1 error(s), 0 warnings
+


More information about the mono-bugs mailing list