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=78899

--- shadow/78899        2006-07-19 08:15:49.000000000 -0400
+++ shadow/78899.tmp.7377       2006-07-19 08:15:49.000000000 -0400
@@ -0,0 +1,84 @@
+Bug#: 78899
+Product: Mono: Compilers
+Version: unspecified
+OS: All
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: C#
+AssignedTo: [EMAIL PROTECTED]                            
+ReportedBy: [EMAIL PROTECTED]               
+QAContact: [EMAIL PROTECTED]
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: C# compiler should use unsigned arithmetic and should support 
overflow check on pointers
+
+The CheckPtr method in the attached source code is compiled to the 
+following using MS csc.exe that is exactly what I expect:
+
+  IL_0000:  ldarg.0
+  IL_0001:  ldarg.1
+  IL_0002:  add
+  IL_0003:  ldarg.0
+  IL_0004:  bge.un.s   IL_000c
+  IL_0006:  newobj     instance void [mscorlib]System.Exception::.ctor()
+  IL_000b:  throw
+  IL_000c:  ldarg.0
+  IL_000d:  ldarg.1
+  IL_000e:  add
+  IL_000f:  ldarg.0
+  IL_0010:  bge.un.s   IL_0018
+  IL_0012:  newobj     instance void [mscorlib]System.Exception::.ctor()
+  IL_0017:  throw
+  IL_0018:  ldarg.0
+  IL_0019:  ldarg.1
+  IL_001a:  add.ovf.un
+  IL_001b:  ldarg.0
+  IL_001c:  bge.un.s   IL_0024
+  IL_001e:  newobj     instance void [mscorlib]System.Exception::.ctor()
+  IL_0023:  throw
+  IL_0024:  ret
+
+mcs on the other hand compiles the same code to the following:
+
+  IL_0000:  ldarg.0
+  IL_0001:  conv.i
+  IL_0002:  ldarg.1
+  IL_0003:  add
+  IL_0004:  ldarg.0
+  IL_0005:  bge        IL_0010
+  IL_000a:  newobj     instance void [mscorlib]System.Exception::.ctor()
+  IL_000f:  throw
+  IL_0010:  ldarg.0
+  IL_0011:  conv.i
+  IL_0012:  ldarg.1
+  IL_0013:  add
+  IL_0014:  ldarg.0
+  IL_0015:  clt
+  IL_0017:  brfalse    IL_0022
+  IL_001c:  newobj     instance void [mscorlib]System.Exception::.ctor()
+  IL_0021:  throw
+  IL_0022:  ldarg.0
+  IL_0023:  conv.i
+  IL_0024:  ldarg.1
+  IL_0025:  add
+  IL_0026:  ldarg.0
+  IL_0027:  clt
+  IL_0029:  brfalse    IL_0034
+  IL_002e:  newobj     instance void [mscorlib]System.Exception::.ctor()
+  IL_0033:  throw
+  IL_0034:  ret
+
+The result is that no exception is thrown.
+
+Some key bugs in the compiled IL code:
+- conv.i is unnecessary
+- bge.un should be used instead of bge
+- add.ovf.un should be used in checked context
+
+Some optimization bugs:
+- bge.un.s could be used instead of bge.un
+- when unchecked or checked is used clt and brfalse is used instead of bge
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to