[Mono-bugs] [Bug 75096][Min] New - mcs barfs InvalidCastException during for(and foreach) access to illegal constant (CS0133)

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Mon May 30 05:57:14 EDT 2005


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 atsushi at ximian.com.

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

--- shadow/75096	2005-05-30 05:57:14.000000000 -0400
+++ shadow/75096.tmp.6431	2005-05-30 05:57:14.000000000 -0400
@@ -0,0 +1,84 @@
+Bug#: 75096
+Product: Mono: Compilers
+Version: 1.1
+OS: 
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Minor
+Component: C#
+AssignedTo: mono-bugs at ximian.com                            
+ReportedBy: atsushi at ximian.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: mcs barfs InvalidCastException during for(and foreach) access to illegal constant (CS0133)
+
+When an expression code block tries to acccess to "invalid" constant array
+(which is reported as CS0133), mcs barfs InvalidCastException and
+compilation stops unexpectedly.
+
+example:
+
+class Test
+{
+        const char [] chars = new char [] {'A', 'B', 'C'};
+        public void Foo ()
+        {
+                foreach (char c in chars)
+//              for (int i = 0; i < chars.Length; i++) // same result
+                        Console.WriteLine (chars [i]);
+        }
+}
+
+It happens only when we use certain kind of expressions. Only "for" and
+"foreach" are known for now. It won't happen when it is just a simple
+access to such an array.
+
+
+Actual Results:
+
+mcs illegalconstaccess.cs
+illegalconstaccess.cs(3) error CS0133: Arrays can not be constant
+
+Unhandled Exception: System.InvalidCastException: Cannot cast from source
+type to destination type.
+in <0x00143> Mono.CSharp.FieldExpr:ResolveMemberAccess
+(Mono.CSharp.EmitContext ec, Mono.CSharp.Expression left, Location loc,
+Mono.CSharp.SimpleName original)
+in <0x00450> Mono.CSharp.SimpleName:DoSimpleNameResolve
+(Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side, Boolean
+intermediate)
+in <0x00034> Mono.CSharp.SimpleName:SimpleNameResolve
+(Mono.CSharp.EmitContext ec, Mono.CSharp.Expression right_side, Boolean
+intermediate)
+in <0x00017> Mono.CSharp.SimpleName:DoResolve (Mono.CSharp.EmitContext ec,
+Boolean intermediate)
+in <0x000c3> Mono.CSharp.Expression:Resolve (Mono.CSharp.EmitContext ec,
+ResolveFlags flags)
+in <0x00012> Mono.CSharp.Expression:Resolve (Mono.CSharp.EmitContext ec)
+in <0x0002e> Mono.CSharp.Foreach:Resolve (Mono.CSharp.EmitContext ec)
+in <0x0014b> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext ec)
+in <0x0014b> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext ec)
+in <0x000e2> Mono.CSharp.EmitContext:ResolveTopBlock
+(Mono.CSharp.EmitContext anonymous_method_host, Mono.CSharp.ToplevelBlock
+block, Mono.CSharp.InternalParameters ip, Location loc, System.Boolean
+unreachable)
+in <0x00030> Mono.CSharp.EmitContext:EmitTopBlock
+(Mono.CSharp.ToplevelBlock block, Mono.CSharp.InternalParameters ip,
+Location loc)
+in <0x00335> Mono.CSharp.MethodData:Emit (Mono.CSharp.TypeContainer
+container, Mono.CSharp.Attributable kind)
+in <0x00022> Mono.CSharp.Method:Emit ()
+in <0x0067d> Mono.CSharp.TypeContainer:EmitType ()
+in <0x00249> Mono.CSharp.RootContext:EmitCode ()
+in <0x00c0c> Mono.CSharp.Driver:MainDriver (System.String[] args)
+in <0x0000f> Mono.CSharp.Driver:Main (System.String[] args)
+
+Expected Results:
+It should just report CS0133 and finish without aborting.
+
+How often does this happen? 
+consistently.


More information about the mono-bugs mailing list