[Issue 16699] [REG 2.070] stack corruption with scope(exit)
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Nov 17 12:12:32 PST 2016
https://issues.dlang.org/show_bug.cgi?id=16699
--- Comment #3 from hsteoh at quickfur.ath.cx ---
P.S., in the bad code case, %rax contains the address of a local variable used
to store the static array, but %rdx appears to contain the correct return
value. Did the codegen somehow fail to leave the return value in the right
register?
-------
00000000004274e8 <ulong[1] test.parseDateRange()>:
4274e8: 55 push %rbp
4274e9: 48 8b ec mov %rsp,%rbp
4274ec: 48 83 ec 20 sub $0x20,%rsp
4274f0: 48 8d 45 e8 lea -0x18(%rbp),%rax
// %rax := &(%rbp - 0x18)
4274f4: 31 c9 xor %ecx,%ecx
4274f6: 48 89 08 mov %rcx,(%rax)
// local var (*%eax) := 0
4274f9: 48 89 4d e8 mov %rcx,-0x18(%rbp)
// local var (%rbp - 0x18) := 0 (redundant store?)
4274fd: 48 8b 55 e8 mov -0x18(%rbp),%rdx
// %rdx := *(%rbp - 0x18)
427501: c7 45 f0 01 00 00 00 movl $0x1,-0x10(%rbp)
427508: eb 0d jmp 427517 <ulong[1]
test.parseDateRange()+0x2f>
42750a: eb 0b jmp 427517 <ulong[1]
test.parseDateRange()+0x2f>
// dead code?
42750c: 48 89 45 f8 mov %rax,-0x8(%rbp)
427510: c7 45 f0 00 00 00 00 movl $0x0,-0x10(%rbp)
// dead code?
427517: 83 7d f0 00 cmpl $0x0,-0x10(%rbp)
42751b: 75 09 jne 427526 <ulong[1]
test.parseDateRange()+0x3e>
// if (*(%rbp - 0x10) != 0)
42751d: 48 8b 7d f8 mov -0x8(%rbp),%rdi
427521: e8 7a fe ff ff callq 4273a0 <_Unwind_Resume at plt>
427526: 83 7d f0 01 cmpl $0x1,-0x10(%rbp)
// if (*(%rbp - 0x10) == 1) return;
42752a: 74 06 je 427532 <ulong[1]
test.parseDateRange()+0x4a>
42752c: 83 7d f0 02 cmpl $0x2,-0x10(%rbp)
427530: c9 leaveq
427531: c3 retq
427532: c9 leaveq
427533: c3 retq
-------
--
More information about the Digitalmars-d-bugs
mailing list