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 [EMAIL PROTECTED] 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: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +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. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
