[Mono-bugs] [Bug 70140][Maj] New - Constructor base initialiser using out parameter causes compiler exception

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Thu, 2 Dec 2004 11:28:48 -0500 (EST)


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 sgroot@liacs.nl.

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

--- shadow/70140	2004-12-02 11:28:48.000000000 -0500
+++ shadow/70140.tmp.9409	2004-12-02 11:28:48.000000000 -0500
@@ -0,0 +1,84 @@
+Bug#: 70140
+Product: Mono: Compilers
+Version: 1.1
+OS: 
+OS Details: Fedora Core 3
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Major
+Component: C#
+AssignedTo: mono-bugs@ximian.com                            
+ReportedBy: sgroot@liacs.nl               
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Constructor base initialiser using out parameter causes compiler exception
+
+Description of Problem:
+Consider the following C# code:
+---BEGIN CODE---
+public class test
+{
+  public test(out bool hello)
+  {
+    hello = true;
+  }
+}
+
+public class testchild : test {
+  public testchild(out bool hello) : base(out hello)
+  {
+  }
+}
+---END CODE---
+
+This is valid C# code and compiles with the Microsoft C# compiler. The Mono
+C# compiler however generates an exception when presented with this code.
+The following exception occurs:
+Unhandled Exception: System.Exception: Variables have not been initialized yet
+in <0x00043> Mono.CSharp.Block:get_ParameterMap ()
+in <0x00065> Mono.CSharp.ParameterReference:DoResolveBase
+(Mono.CSharp.EmitContext)
+in <0x0001f> Mono.CSharp.ParameterReference:DoResolveLValue
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression)
+in <0x00028> Mono.CSharp.Expression:ResolveLValue
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression)
+in <0x0011e> Mono.CSharp.SimpleName:DoSimpleNameResolve
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression,bool,bool)
+in <0x00030> Mono.CSharp.SimpleName:SimpleNameResolve
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression,bool,bool)
+in <0x00022> Mono.CSharp.SimpleName:DoResolveLValue
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression)
+in <0x00028> Mono.CSharp.Expression:ResolveLValue
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression)
+in <0x00176> Mono.CSharp.Argument:Resolve
+(Mono.CSharp.EmitContext,Mono.CSharp.Location)
+in <0x000eb> Mono.CSharp.ConstructorInitializer:Resolve
+(System.Reflection.Emit.ConstructorBuilder,Mono.CSharp.EmitContext)
+in <0x001f4> Mono.CSharp.Constructor:Emit ()
+in <0x00442> Mono.CSharp.TypeContainer:EmitType ()
+in <0x004a4> Mono.CSharp.RootContext:EmitCode ()
+in <0x00cff> Mono.CSharp.Driver:MainDriver (string[])
+in <0x00019> Mono.CSharp.Driver:Main (string[])
+
+This has been observed in 1.0.4 and 1.1.2, although the message differed
+(in 1.0.4 is just said "A System.Exception has been thrown.")
+
+The problem does not occur with ref parameters.
+
+Steps to reproduce the problem:
+1. Create a source file called test.cs which contains the code listed above
+2. Compile the source file using the command 'mcs test.cs'
+
+Actual Results:
+The exception specified above is shown.
+
+Expected Results:
+If the compiler is presented with just the source above, it should complain
+no entry point is present. In a more complete example, or with -t:library,
+it should compile correctly.
+
+How often does this happen? 
+Always.