[Mono-bugs] [Bug 67711][Nor] Changed - MCS errors when compile a cast in switch/case.

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Sun, 10 Oct 2004 13:04:17 -0400 (EDT)


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@ximian.com.

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

--- shadow/67711	2004-10-10 13:02:25.000000000 -0400
+++ shadow/67711.tmp.20853	2004-10-10 13:04:17.000000000 -0400
@@ -68,6 +68,133 @@
 
 
 ------- Additional Comments From miguel@ximian.com  2004-10-10 13:02 -------
 Created an attachment (id=12320)
 Constant patch.
 
+
+------- Additional Comments From miguel@ximian.com  2004-10-10 13:04 -------
+After applying my patch, corlib will compile fine, but System will
+have a problem, the stack trace looks like this:
+
+Unhandled Exception: System.OverflowException: Number overflow.
+in <0xc71e0f4c> (wrapper managed-to-native)
+System.MonoEnumInfo:get_enum_info (System.Type,System.MonoEnumInfo&)
+in <0x00004> (wrapper managed-to-native)
+System.MonoEnumInfo:get_enum_info (System.Type,System.MonoEnumInfo&)
+in <0x00101> System.MonoEnumInfo:GetInfo
+(System.Type,System.MonoEnumInfo&)
+in <0x00087> System.Enum:GetUnderlyingType (System.Type)
+in <0x00467> Mono.CSharp.Expression:Constantify (object,System.Type)
+in <0x00236> Mono.CSharp.MemberAccess:ResolveMemberAccess
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression,Mono.CSharp.Expression,Mono.CSharp.Location,Mono.CSharp.Expression)
+in <0x003e3> Mono.CSharp.SimpleName:DoSimpleNameResolve
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression,bool,bool)
+in <0x00029> Mono.CSharp.SimpleName:SimpleNameResolve
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression,bool,bool)
+in <0x0001a> Mono.CSharp.SimpleName:DoResolveAllowStatic
+(Mono.CSharp.EmitContext,bool)
+in <0x000d4> Mono.CSharp.Expression:Resolve
+(Mono.CSharp.EmitContext,Mono.CSharp.ResolveFlags)
+in <0x00013> Mono.CSharp.Expression:Resolve (Mono.CSharp.EmitContext)
+in <0x000f6> Mono.CSharp.Binary:DoResolve (Mono.CSharp.EmitContext)
+in <0x000e8> Mono.CSharp.Expression:Resolve
+(Mono.CSharp.EmitContext,Mono.CSharp.ResolveFlags)
+in <0x00013> Mono.CSharp.Expression:Resolve (Mono.CSharp.EmitContext)
+in <0x000d8> Mono.CSharp.Binary:DoResolve (Mono.CSharp.EmitContext)
+in <0x000e8> Mono.CSharp.Expression:Resolve
+(Mono.CSharp.EmitContext,Mono.CSharp.ResolveFlags)
+in <0x00013> Mono.CSharp.Expression:Resolve (Mono.CSharp.EmitContext)
+in <0x000f6> Mono.CSharp.Binary:DoResolve (Mono.CSharp.EmitContext)
+in <0x000e8> Mono.CSharp.Expression:Resolve
+(Mono.CSharp.EmitContext,Mono.CSharp.ResolveFlags)
+in <0x00013> Mono.CSharp.Expression:Resolve (Mono.CSharp.EmitContext)
+in <0x00027> Mono.CSharp.Expression:ResolveBoolean
+(Mono.CSharp.EmitContext,Mono.CSharp.Expression,Mono.CSharp.Location)
+in <0x00023> Mono.CSharp.If:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00038> Mono.CSharp.Do:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x00100> Mono.CSharp.Lock:Resolve (Mono.CSharp.EmitContext)
+in <0x00181> Mono.CSharp.Block:Resolve (Mono.CSharp.EmitContext)
+in <0x000b7> Mono.CSharp.EmitContext:EmitTopBlock
+(Mono.CSharp.Block,Mono.CSharp.InternalParameters,Mono.CSharp.Location)
+in <0x00457> Mono.CSharp.MethodData:Emit
+(Mono.CSharp.TypeContainer,Mono.CSharp.Attributable)
+in <0x00015> Mono.CSharp.Method:Emit ()
+in <0x0062b> Mono.CSharp.TypeContainer:EmitType ()
+in <0x004a5> Mono.CSharp.RootContext:EmitCode ()
+in <0x00cee> Mono.CSharp.Driver:MainDriver (string[])
+in <0x0000f> Mono.CSharp.Driver:Main (string[])
+ 
+Breakpoint 2, ves_icall_get_enum_info (type=0x8f36b60,
+info=0x40b44034) at icall.c:2576
+2576            MonoDomain *domain = mono_object_domain (type);
+(gdb) n
+2577            MonoClass *enumc = mono_class_from_mono_type (type->type);
+(gdb)
+2583            info->utype = mono_type_get_object (domain,
+enumc->enum_basetype);
+(gdb) p *enumc
+$9 = {image = 0x9623000, enum_basetype = 0x81efca0, element_class =
+0x81efbf8, cast_class = 0x0, rank = 0, inited = 1,
+  init_pending = 0, size_inited = 1, valuetype = 1, enumtype = 1,
+blittable = 0, unicode = 0, wastypebuilder = 0, min_align = 0,
+  packing_size = 0, ghcimpl = 0, has_finalize = 0, marshalbyref = 0,
+contextbound = 0, delegate = 0, gc_descr_inited = 1, dummy = 0,
+  parent = 0x81f0a38, nested_in = 0x0, nested_classes = 0x0,
+type_token = 33555042, name = 0x86ffd38 "NotifyFilters",
+  name_space = 0x86ffd50 "System.IO", interface_count = 0,
+interface_id = 0, max_interface_id = 2, interface_offsets = 0x86ffd80,
+  interfaces = 0x0, idepth = 4, supertypes = 0x86ffd60, instance_size
+= 12, class_size = 0, vtable_size = 23, flags = 257, field = {
+    first = 0, last = 0, count = 0}, method = {first = 0, last = 0,
+count = 0}, property = {first = 0, last = 0, count = 0}, event = {
+    first = 0, last = 0, count = 0}, marshal_info = 0x0, fields = 0x0,
+properties = 0x0, events = 0x0, methods = 0x0, this_arg = {
+    data = {klass = 0x86ffc58, type = 0x86ffc58, array = 0x86ffc58,
+method = 0x86ffc58, generic_param = 0x86ffc58,
+      generic_inst = 0x86ffc58}, attrs = 0, type = 17, num_mods = 0,
+byref = 1, pinned = 0, modifiers = 0x86ffd00}, byval_arg = {
+    data = {klass = 0x86ffc58, type = 0x86ffc58, array = 0x86ffc58,
+method = 0x86ffc58, generic_param = 0x86ffc58,
+      generic_inst = 0x86ffc58}, attrs = 0, type = 17, num_mods = 0,
+byref = 0, pinned = 0, modifiers = 0x86ffd08}, generic_inst = 0x0,
+  generic_container = 0x0, reflection_info = 0x8f36b60, gc_descr =
+0x40000001, gc_bitmap = 2, ptr_to_str = 0x0, str_to_ptr = 0x0,
+  cached_vtable = 0xa390d38, vtable = 0x86ffd90}
+
+(gdb) n
+2585            info->names = mono_array_new (domain,
+mono_defaults.string_class, nvalues);
+(gdb) p nvalues
+Variable "nvalues" is not available.
+(gdb) n
+2583            info->utype = mono_type_get_object (domain,
+enumc->enum_basetype);
+(gdb)
+2584            nvalues = enumc->field.count - 1;
+(gdb) list
+2579            MonoClassField *field;
+2580
+2581            MONO_ARCH_SAVE_REGS;
+2582
+2583            info->utype = mono_type_get_object (domain,
+enumc->enum_basetype);
+2584            nvalues = enumc->field.count - 1;
+2585            info->names = mono_array_new (domain,
+mono_defaults.string_class, nvalues);
+2586            info->values = mono_array_new (domain, enumc, nvalues);
+2587
+2588            crow = -1;
+(gdb) p enumc->field.count
+$11 = 0
+
+Notice that `enumc->field,count' is zero, so after this patch is
+applied no fields are added to this enumeration, must investigate.
+
+