[Mono-bugs] [Bug 81917][Min] New - Crash compiling code that casts fixed-size array to pointer

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Wed Jun 20 14:41:47 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 makosoft at googlemail.com.

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

--- shadow/81917	2007-06-20 14:41:47.000000000 -0400
+++ shadow/81917.tmp.16021	2007-06-20 14:41:47.000000000 -0400
@@ -0,0 +1,114 @@
+Bug#: 81917
+Product: Mono: Compilers
+Version: 1.2
+OS: 
+OS Details: Gentoo Linux
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Minor
+Component: C#
+AssignedTo: rharinath at novell.com                            
+ReportedBy: makosoft at googlemail.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Crash compiling code that casts fixed-size array to pointer
+
+Description of Problem:
+
+In Mono 1.2.4, mcs/gmcs crash when attempting to compile code that 
+implicitly casts from a fixed-size char array within a struct to a char 
+pointer.
+
+Steps to reproduce the problem:
+1. Create a struct containing a fixed-sized char array.
+2. Write code that attempts to implicitly cast the char array in the 
+struct to a char pointer.
+3. Attempt to compile the code with mcs or gmcs.
+
+Example code (compile with the -unsafe command line option):
+
+public class aClass
+{
+        public struct foo_t
+        {
+		public fixed char b[16];
+	};
+
+
+	public unsafe static void Main(string[] args) {
+		foo_t bar;
+		char* b_ptr = bar.b;
+	}
+}
+
+Actual Results:
+mcs/gmcs crashes with a System.NullReferenceException:
+
+Unhandled Exception: System.NullReferenceException: Object reference not 
+set to an instance of an object
+  at Mono.CSharp.TypeManager.MemberLookup_FindMembers (System.Type t, 
+MemberTypes mt, BindingFlags bf, System.String name, System.Boolean& 
+used_cache) [0x00000]
+  at Mono.CSharp.TypeManager.RealMemberLookup (System.Type 
+invocation_type, System.Type qualifier_type, System.Type queried_type, 
+MemberTypes mt, BindingFlags original_bf, System.String name, IList 
+almost_match) [0x00000]
+  at Mono.CSharp.TypeManager.MemberLookup (System.Type invocation_type, 
+System.Type qualifier_type, System.Type queried_type, MemberTypes mt, 
+BindingFlags original_bf, System.String name, IList almost_match) 
+[0x00000]
+  at Mono.CSharp.Expression.MemberLookup (System.Type container_type, 
+System.Type qualifier_type, System.Type queried_type, System.String name, 
+MemberTypes mt, BindingFlags bf, Location loc) [0x00000]
+  at Mono.CSharp.Expression.MethodLookup (System.Type container_type, 
+System.Type queried_type, System.String name, Location loc) [0x00000]
+  at Mono.CSharp.Convert.GetConversionOperator (System.Type 
+container_type, Mono.CSharp.Expression source, System.Type target_type, 
+Boolean look_for_explicit) [0x00000]
+  at Mono.CSharp.Convert.UserDefinedConversion (Mono.CSharp.EmitContext 
+ec, Mono.CSharp.Expression source, System.Type target, Location loc, 
+Boolean look_for_explicit) [0x00000]
+  at Mono.CSharp.Convert.ImplicitUserConversion (Mono.CSharp.EmitContext 
+ec, Mono.CSharp.Expression source, System.Type target, Location loc) 
+[0x00000]
+  at Mono.CSharp.Convert.ImplicitConversion (Mono.CSharp.EmitContext ec, 
+Mono.CSharp.Expression expr, System.Type target_type, Location loc) 
+[0x00000]
+  at Mono.CSharp.Convert.ImplicitConversionRequired 
+(Mono.CSharp.EmitContext ec, Mono.CSharp.Expression source, System.Type 
+target_type, Location loc) [0x00000]
+  at Mono.CSharp.Assign.DoResolve (Mono.CSharp.EmitContext ec) [0x00000]
+  at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec, 
+ResolveFlags flags) [0x00000]
+  at Mono.CSharp.Expression.Resolve (Mono.CSharp.EmitContext ec) 
+[0x00000]
+  at Mono.CSharp.ExpressionStatement.ResolveStatement 
+(Mono.CSharp.EmitContext ec) [0x00000]
+  at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.EmitContext ec) 
+[0x00000]
+  at Mono.CSharp.Block.Resolve (Mono.CSharp.EmitContext ec) [0x00000]
+  at Mono.CSharp.EmitContext.ResolveTopBlock (Mono.CSharp.EmitContext 
+anonymous_method_host, Mono.CSharp.ToplevelBlock block, 
+Mono.CSharp.Parameters ip, IMethodData md, System.Boolean& unreachable) 
+[0x00000]
+  at Mono.CSharp.EmitContext.EmitTopBlock (IMethodData md, 
+Mono.CSharp.ToplevelBlock block) [0x00000]
+  at Mono.CSharp.MethodData.Emit (Mono.CSharp.DeclSpace parent) [0x00000]
+  at Mono.CSharp.Method.Emit () [0x00000]
+  at Mono.CSharp.TypeContainer.EmitType () [0x00000]
+  at Mono.CSharp.RootContext.EmitCode () [0x00000]
+  at Mono.CSharp.Driver.MainDriver (System.String[] args) [0x00000]
+  at Mono.CSharp.Driver.Main (System.String[] args) [0x00000]
+
+Expected Results:
+The compiler should either compile the code successfully or fail 
+gracefully with an error message.
+
+How often does this happen? 
+
+Every time.
+
+Additional Information:


More information about the mono-bugs mailing list