[Mono-bugs] [Bug 54209][Maj] Changed - this.bool = (DateTime.Ticks != 0) in DateTime Property

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Tue, 2 Mar 2004 16:27:59 -0500 (EST)


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 vargaz@freemail.hu.

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

--- shadow/54209	2004-03-02 08:48:10.000000000 -0500
+++ shadow/54209.tmp.28354	2004-03-02 16:27:59.000000000 -0500
@@ -1,16 +1,16 @@
 Bug#: 54209
-Product: Mono/Class Libraries
+Product: Mono/Runtime
 Version: unspecified
 OS: Debian Woody
 OS Details: 
 Status: NEW   
 Resolution: 
 Severity: Unknown
 Priority: Major
-Component: CORLIB
+Component: misc
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: simon.steele@softel.co.uk               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
 URL: 
 Cc: 
@@ -58,6 +58,35 @@
 ------- Additional Comments From simon.steele@softel.co.uk  2004-02-11 11:47 -------
 Also, the bug can be hidden by including: System.Console.WriteLine
 (_dt.ToString()) before the check on the Ticks property.
 
 ------- Additional Comments From simon.steele@softel.co.uk  2004-03-02 08:48 -------
 This code now causes a segfault on the latest mono.
+
+------- Additional Comments From vargaz@freemail.hu  2004-03-02 16:27 -------
+This is a code generation problem in the JIT. The body of the 
+set_Start method is emitted in one basic block, but the block will
+contain branches, so it is not a real basic block. 
+
+The problem is in the local register allocator: 
+
+processing:	29 x86_seteq_membase R18
+	assigned sreg1 %eax to R18
+processing:	28 compare_imm R19
+	assigned sreg1 %ecx to R19
+processing:	27 label
+processing:	26 iconst R19 <-
+	assigned dreg %ecx to dest R19
+processing:	25 bne.un
+processing:	24 compare R20 R22
+	assigned sreg1 %edx to R20
+start regmask to assign R22: 0x00000007 (R-1 <- R2 R22)
+excluding sreg1 %edx
+available regmask: 0x00000003
+selected register %eax has assignment 0
+SPILLED LOAD (1 at 0xffffffe8(%ebp)) R18 (freed %eax)
+	assigned sreg2 %eax to R22
+
+Here, eax is spilled at instruction 24, so a load instruction is
+generated there. But since the code contains branches, this load
+might not be executed, meaning that eax will not contain the value of
+the R18 register at instruction 29.