//@ compile-flags: -C opt-level=3 //@ min-llvm-version: 21 #![crate_type = "lib"] #![allow(unused_assignments, unused_variables)] // Check that the old string is deallocated, but a new one is not initialized. #[unsafe(no_mangle)] pub fn test_str_new(mut s: String) { // CHECK-LABEL: @test_str_new // CHECK: __rust_dealloc // CHECK-NOT: store s = String::new(); } #[unsafe(no_mangle)] pub fn test_str_take(mut x: String) -> String { // CHECK-LABEL: @test_str_take // CHECK-NEXT: {{.*}}: // CHECK-NEXT: call void @llvm.memcpy // CHECK-NEXT: ret core::mem::take(&mut x) } #[unsafe(no_mangle)] pub fn test_array_store(mut x: [u32; 100]) { // CHECK-LABEL: @test_array_store // CHECK-NEXT: {{.*}}: // CHECK-NEXT: ret x[0] = 1; }