Closed
Description
The code:
pub fn foo() {
let a: Vec<_> = [1, 2, 3].iter().collect();
assert!(a.len() == 3);
}
With rustc 1.25.0:
example::foo:
push rbp
mov rbp, rsp
pop rbp
ret
With rustc 1.26.0:
;...
example::foo:
push rbp
mov rbp, rsp
push rbx
sub rsp, 88
mov qword ptr [rbp - 56], 8
xorps xmm0, xmm0
movups xmmword ptr [rbp - 48], xmm0
lea rdx, [rbp - 32]
mov edi, 24
mov esi, 8
call __rust_alloc@PLT
test rax, rax
je .LBB6_6
mov qword ptr [rbp - 56], rax
mov qword ptr [rbp - 48], 3
jmp .LBB6_2
.LBB6_6:
movups xmm0, xmmword ptr [rbp - 24]
movaps xmmword ptr [rbp - 96], xmm0
mov qword ptr [rbp - 32], 0
movaps xmm0, xmmword ptr [rbp - 96]
movups xmmword ptr [rbp - 24], xmm0
lea rdi, [rbp - 80]
lea rsi, [rbp - 32]
call <core::heap::CollectionAllocErr as core::convert::From<core::heap::AllocErr>>::from@PLT
mov rax, qword ptr [rbp - 80]
cmp rax, 3
jne .LBB6_9
mov eax, 8
.LBB6_2:
xor ecx, ecx
test cl, cl
jne .LBB6_4
lea rcx, [rip + .Lbyte_str.c]
mov qword ptr [rax], rcx
lea rcx, [rip + .Lbyte_str.c+4]
mov qword ptr [rax + 8], rcx
lea rcx, [rip + .Lbyte_str.c+8]
mov qword ptr [rax + 16], rcx
mov ecx, 3
.LBB6_4:
mov qword ptr [rbp - 40], rcx
movups xmm0, xmmword ptr [rbp - 56]
movaps xmmword ptr [rbp - 32], xmm0
mov qword ptr [rbp - 16], rcx
cmp qword ptr [rbp - 16], 3
jne .LBB6_5
mov rsi, qword ptr [rbp - 24]
test rsi, rsi
je .LBB6_15
shl rsi, 3
mov rdi, qword ptr [rbp - 32]
mov edx, 8
call __rust_dealloc@PLT
.LBB6_15:
add rsp, 88
pop rbx
pop rbp
ret
.LBB6_5:
call std::panicking::begin_panic
jmp .LBB6_11
.LBB6_9:
cmp rax, 2
jne .LBB6_12
lea rdi, [rip + .Lbyte_str.6]
call core::panicking::panic@PLT
.LBB6_11:
ud2
.LBB6_12:
mov rcx, qword ptr [rbp - 72]
mov rdx, qword ptr [rbp - 64]
mov qword ptr [rbp - 32], rax
mov qword ptr [rbp - 24], rcx
mov qword ptr [rbp - 16], rdx
lea rdi, [rbp - 32]
call <alloc::heap::Heap as core::heap::Alloc>::oom
ud2
mov rbx, rax
lea rdi, [rbp - 32]
jmp .LBB6_18
mov rbx, rax
lea rdi, [rbp - 56]
.LBB6_18:
call core::ptr::drop_in_place
mov rdi, rbx
call _Unwind_Resume@PLT
ud2
;...