[Mono-bugs] [Bug 82111][Nor] New - mcs/gmcs fails to throw errors CS053/CS054 when abstract child of abstract class hides abstract members improperly
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Mon Jul 16 14:33:23 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 sanfordarmstrong at gmail.com.
http://bugzilla.ximian.com/show_bug.cgi?id=82111
--- shadow/82111 2007-07-16 14:33:23.000000000 -0400
+++ shadow/82111.tmp.11255 2007-07-16 14:33:23.000000000 -0400
@@ -0,0 +1,106 @@
+Bug#: 82111
+Product: Mono: Compilers
+Version: 1.2
+OS: All
+OS Details:
+Status: NEW
+Resolution:
+Severity:
+Priority: Normal
+Component: C#
+AssignedTo: rharinath at novell.com
+ReportedBy: sanfordarmstrong at gmail.com
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: mcs/gmcs fails to throw errors CS053/CS054 when abstract child of abstract class hides abstract members improperly
+
+Description of Problem:
+
+See summary. Here's a test case that should fail to compile, but does not
+fail with (g)mcs 1.2.3.0:
+
+namespace AbstractTest
+{
+ public abstract class MyAbstractBase
+ {
+ public abstract void Initialize();
+ }
+
+ public abstract class MyAbstract : MyAbstractBase
+ {
+ public virtual void Initialize() {
+ System.Console.WriteLine("MyAbstract Initialized!");
+ }
+ }
+
+ public class MyConcrete : MyAbstract { }
+
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ MyAbstractBase gonnaFail = new MyConcrete();
+ gonnaFail.Initialize();
+ }
+ }
+}
+
+
+Actual Results:
+
+Compilation succeeded with both gmcs and mcs, version 1.2.3.0, with the
+following output:
+
+X:\sandbox\AbstractTest\AbstractTest>c:\mono-1.2.3\bin\gmcs Program.cs
+Program.cs(10,29): warning CS0114: `AbstractTest.MyAbstract.Initialize()'
+hides inherited member `AbstractTest.MyAbstractBase.Initialize()'. To make
+the current member override that implementation, add the override keyword.
+Otherwise add the new keyword
+Program.cs(5,30): (Location of the symbol related to previous warning)
+Compilation succeeded - 1 warning(s)
+
+Of course it then fails at runtime. On Linux, with a similar test case, I
+received a very cryptic native stacktrace (I can attach later if
+necessary). On Windows with this test case I simply receive:
+Unhandled Exception: System.TypeLoadException: Method 'Initialize' in type
+'AbstractTest.MyConcrete' from assembly 'Program,
+Version=0.0.0.0,Culture=neutral, PublicKeyToken=null' does not have an
+implementation.
+ at AbstractTest.Program.Main(String[] args)
+
+
+Expected Results:
+
+In Visual Studio 2005, compilation fails, with the following output:
+
+C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig
+/nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE
+/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
+/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll
+/reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll
+/debug+ /debug:full /optimize- /out:obj\Debug\AbstractTest.exe /target:exe
+Program.cs Properties\AssemblyInfo.cs
+x:\sandbox\AbstractTest\AbstractTest\Program.cs(10,29): warning CS0114:
+'AbstractTest.MyAbstract.Initialize()' hides inherited member
+'AbstractTest.MyAbstractBase.Initialize()'. To make the current member
+override that implementation, add the override keyword. Otherwise add the
+new keyword.
+x:\sandbox\AbstractTest\AbstractTest\Program.cs(5,30): (Related location)
+x:\sandbox\AbstractTest\AbstractTest\Program.cs(10,29): error CS0533:
+'AbstractTest.MyAbstract.Initialize()' hides inherited abstract member
+'AbstractTest.MyAbstractBase.Initialize()'
+x:\sandbox\AbstractTest\AbstractTest\Program.cs(5,30): (Related location)
+x:\sandbox\AbstractTest\AbstractTest\Program.cs(15,18): error CS0534:
+'AbstractTest.MyConcrete' does not implement inherited abstract member
+'AbstractTest.MyAbstractBase.Initialize()'
+x:\sandbox\AbstractTest\AbstractTest\Program.cs(5,30): (Related location)
+
+Compile complete -- 2 errors, 1 warnings
+
+
+How often does this happen?
+
+Every time. I first noticed it with gmcs 1.2.3.1 on Ubuntu 6.10. I have
+not tested with 1.2.4.x.
More information about the mono-bugs
mailing list