[Mono-bugs] [Bug 80256][Nor] New - Switch with different types crashes the compiler
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Wed Dec 13 17:34:22 EST 2006
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 miguel at ximian.com.
http://bugzilla.ximian.com/show_bug.cgi?id=80256
--- shadow/80256 2006-12-13 17:34:22.000000000 -0500
+++ shadow/80256.tmp.26318 2006-12-13 17:34:22.000000000 -0500
@@ -0,0 +1,74 @@
+Bug#: 80256
+Product: Mono: Compilers
+Version: 1.0
+OS:
+OS Details:
+Status: NEW
+Resolution:
+Severity:
+Priority: Normal
+Component: C#
+AssignedTo: rharinath at novell.com
+ReportedBy: miguel at ximian.com
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: Switch with different types crashes the compiler
+
+The following test crashes the compiler because our there are mixed data
+types in the resulting array:
+enum ByteEnum : byte {
+ One = 1,
+ Two = 2
+}
+
+class X {
+ static void Main ()
+ {
+ ByteEnum b = ByteEnum.One;
+
+ switch (b){
+ case ByteEnum.One : return;
+ case ByteEnum.One | ByteEnum.Two: return;
+ }
+ }
+}
+
+Stacktrace:
+Unhandled Exception: System.InvalidOperationException: The comparer threw
+an exception. ---> System.ArgumentException: Value is not a System.Byte.
+ at System.Byte.CompareTo (System.Object value) [0x00000]
+ at System.Array.compare (System.Object value1, System.Object value2,
+IComparer comparer) [0x00000]
+ at System.Array.qsort (System.Array keys, System.Array items, Int32 low0,
+Int32 high0, IComparer comparer) [0x00000]
+ at System.Array.Sort (System.Array keys, System.Array items, Int32 index,
+Int32 length, IComparer comparer) [0x00000] --- End of inner exception
+stack trace ---
+
+ at System.Array.Sort (System.Array keys, System.Array items, Int32 index,
+Int32 length, IComparer comparer) [0x00000]
+ at System.Array.Sort (System.Array array) [0x00000]
+ at Mono.CSharp.Switch.TableSwitchEmit (Mono.CSharp.EmitContext ec,
+System.Reflection.Emit.LocalBuilder val) [0x00000]
+ at Mono.CSharp.Switch.DoEmit (Mono.CSharp.EmitContext ec) [0x00000]
+ at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x00000]
+ at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00000]
+ at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x00000]
+ at Mono.CSharp.EmitContext.EmitResolvedTopBlock
+(Mono.CSharp.ToplevelBlock block, 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]
+
+An instrumented version of the compiler shows:
+
+mono$ gmcs cs.cs
+Value 1 System.Byte
+Value 3 System.Int32
More information about the mono-bugs
mailing list