@@ -8,7 +8,7 @@ pub fn zero_sized_elem() {
8
8
// CHECK-NOT: br label %repeat_loop_header{{.*}}
9
9
// CHECK-NOT: call void @llvm.memset.p0
10
10
let x = [ ( ) ; 4 ] ;
11
- drop ( & x) ;
11
+ opaque ( & x) ;
12
12
}
13
13
14
14
// CHECK-LABEL: @zero_len_array
@@ -17,7 +17,7 @@ pub fn zero_len_array() {
17
17
// CHECK-NOT: br label %repeat_loop_header{{.*}}
18
18
// CHECK-NOT: call void @llvm.memset.p0
19
19
let x = [ 4 ; 0 ] ;
20
- drop ( & x) ;
20
+ opaque ( & x) ;
21
21
}
22
22
23
23
// CHECK-LABEL: @byte_array
@@ -26,7 +26,7 @@ pub fn byte_array() {
26
26
// CHECK: call void @llvm.memset.{{.+}}({{i8\*|ptr}} {{.*}}, i8 7, i{{[0-9]+}} 4
27
27
// CHECK-NOT: br label %repeat_loop_header{{.*}}
28
28
let x = [ 7u8 ; 4 ] ;
29
- drop ( & x) ;
29
+ opaque ( & x) ;
30
30
}
31
31
32
32
#[ allow( dead_code) ]
@@ -42,7 +42,7 @@ pub fn byte_enum_array() {
42
42
// CHECK: call void @llvm.memset.{{.+}}({{i8\*|ptr}} {{.*}}, i8 {{.*}}, i{{[0-9]+}} 4
43
43
// CHECK-NOT: br label %repeat_loop_header{{.*}}
44
44
let x = [ Init :: Memset ; 4 ] ;
45
- drop ( & x) ;
45
+ opaque ( & x) ;
46
46
}
47
47
48
48
// CHECK-LABEL: @zeroed_integer_array
@@ -51,7 +51,7 @@ pub fn zeroed_integer_array() {
51
51
// CHECK: call void @llvm.memset.{{.+}}({{i8\*|ptr}} {{.*}}, i8 0, i{{[0-9]+}} 16
52
52
// CHECK-NOT: br label %repeat_loop_header{{.*}}
53
53
let x = [ 0u32 ; 4 ] ;
54
- drop ( & x) ;
54
+ opaque ( & x) ;
55
55
}
56
56
57
57
// CHECK-LABEL: @nonzero_integer_array
@@ -60,5 +60,9 @@ pub fn nonzero_integer_array() {
60
60
// CHECK: br label %repeat_loop_header{{.*}}
61
61
// CHECK-NOT: call void @llvm.memset.p0
62
62
let x = [ 0x1a_2b_3c_4d_u32 ; 4 ] ;
63
- drop ( & x) ;
63
+ opaque ( & x) ;
64
64
}
65
+
66
+ // Use an opaque function to prevent rustc from removing useless drops.
67
+ #[ inline( never) ]
68
+ pub fn opaque ( _: impl Sized ) { }
0 commit comments