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=78311 --- shadow/78311 2006-05-05 20:09:57.000000000 -0400 +++ shadow/78311.tmp.3906 2006-05-05 20:09:57.000000000 -0400 @@ -0,0 +1,81 @@ +Bug#: 78311 +Product: Mono: Runtime +Version: 1.1 +OS: other +OS Details: Red Hat Enterprise Linux 4 +Status: NEW +Resolution: +Severity: +Priority: Major +Component: JIT +AssignedTo: [EMAIL PROTECTED] +ReportedBy: [EMAIL PROTECTED] +QAContact: [EMAIL PROTECTED] +TargetMilestone: --- +URL: +Cc: +Summary: Dead code elimination breaks testcase involving Interlocked.Increment + +The following testcase fails with dead code elimination turned on. The +return value of Interlocked.Increment is incorrect. Without the +optimization, the testcase can be executed successfully. + +using System; +using System.Threading; + +public class Test +{ + public static void Main() + { + int test = 1; + int result = Interlocked.Increment(ref test); + + if (result != 2) { + Console.WriteLine("Incorrect Increment result: " + result); + } + } +} + +Steps to reproduce the problem: +1. mono --optimize=deadce testcase.cs + +Actual Results: + +A return value of 1. + +Expected Results: + +A return value of 2. + +How often does this happen? + +100 out of 100 times + +Additional Information: + +Comparing the generated assembly reveals that the dead code elimination +pass removes the initialization of the local variable test. As a result, +the initial value of 'test' is undefined and the result of +Interlocked.Increment is thus equally undefined and incorrect. + +Dead code elimination DISABLED: + + // Initialization of 'test' + 495: c7 45 f0 00 00 00 00 movl $0x0,0xfffffff0(%ebp) + 49c: 33 f6 xor %esi,%esi + // Assignment of immediate value '1' + 49e: c7 45 f0 01 00 00 00 movl $0x1,0xfffffff0(%ebp) + 4a5: b8 01 00 00 00 mov $0x1,%eax + 4aa: 8b f0 mov %eax,%esi + 4ac: f0 0f c1 75 f0 lock xadd %esi,0xfffffff0(%ebp) + 4b1: 03 f0 add %eax,%esi + 4b3: 83 fe 02 cmp $0x2,%esi + +Dead code elimination ENABLED: + + 495: b8 01 00 00 00 mov $0x1,%eax + 49a: 8b f0 mov %eax,%esi + // Use of uninitialized local variable 'test' + 49c: f0 0f c1 75 f0 lock xadd %esi,0xfffffff0(%ebp) + 4a1: 03 f0 add %eax,%esi + 4a3: 83 fe 02 cmp $0x2,%esi _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
