8
8
#![ feature( inline_const) ]
9
9
#![ allow( unreachable_code) ]
10
10
11
- use std:: mem:: MaybeUninit ;
12
11
use std:: intrinsics:: { transmute, transmute_unchecked} ;
12
+ use std:: mem:: MaybeUninit ;
13
13
14
14
// Some of these need custom MIR to not get removed by MIR optimizations.
15
15
use std:: intrinsics:: mir:: * ;
@@ -63,7 +63,7 @@ pub unsafe fn check_to_empty_array(x: [u32; 5]) -> [u32; 0] {
63
63
// CHECK-NOT: trap
64
64
// CHECK: call void @llvm.trap
65
65
// CHECK-NOT: trap
66
- mir ! {
66
+ mir ! {
67
67
{
68
68
RET = CastTransmute ( x) ;
69
69
Return ( )
@@ -78,7 +78,7 @@ pub unsafe fn check_from_empty_array(x: [u32; 0]) -> [u32; 5] {
78
78
// CHECK-NOT: trap
79
79
// CHECK: call void @llvm.trap
80
80
// CHECK-NOT: trap
81
- mir ! {
81
+ mir ! {
82
82
{
83
83
RET = CastTransmute ( x) ;
84
84
Return ( )
@@ -93,7 +93,7 @@ pub unsafe fn check_to_uninhabited(x: u16) {
93
93
// CHECK-NOT: trap
94
94
// CHECK: call void @llvm.trap
95
95
// CHECK-NOT: trap
96
- mir ! {
96
+ mir ! {
97
97
let temp: BigNever ;
98
98
{
99
99
temp = CastTransmute ( x) ;
@@ -107,7 +107,7 @@ pub unsafe fn check_to_uninhabited(x: u16) {
107
107
#[ custom_mir( dialect = "runtime" , phase = "optimized" ) ]
108
108
pub unsafe fn check_from_uninhabited ( x : BigNever ) -> u16 {
109
109
// CHECK: ret i16 poison
110
- mir ! {
110
+ mir ! {
111
111
{
112
112
RET = CastTransmute ( x) ;
113
113
Return ( )
@@ -122,9 +122,7 @@ pub unsafe fn check_intermediate_passthrough(x: u32) -> i32 {
122
122
// CHECK: %[[TMP:.+]] = add i32 1, %x
123
123
// CHECK: %[[RET:.+]] = add i32 %[[TMP]], 1
124
124
// CHECK: ret i32 %[[RET]]
125
- unsafe {
126
- transmute :: < u32 , i32 > ( 1 + x) + 1
127
- }
125
+ unsafe { transmute :: < u32 , i32 > ( 1 + x) + 1 }
128
126
}
129
127
130
128
// CHECK-LABEL: @check_nop_pair(
@@ -134,9 +132,7 @@ pub unsafe fn check_nop_pair(x: (u8, i8)) -> (i8, u8) {
134
132
// CHECK: %0 = insertvalue { i8, i8 } poison, i8 %x.0, 0
135
133
// CHECK: %1 = insertvalue { i8, i8 } %0, i8 %x.1, 1
136
134
// CHECK: ret { i8, i8 } %1
137
- unsafe {
138
- transmute ( x)
139
- }
135
+ unsafe { transmute ( x) }
140
136
}
141
137
142
138
// CHECK-LABEL: @check_to_newtype(
@@ -168,9 +164,9 @@ pub unsafe fn check_aggregate_to_bool(x: Aggregate8) -> bool {
168
164
// CHECK-LABEL: @check_aggregate_from_bool(
169
165
#[ no_mangle]
170
166
pub unsafe fn check_aggregate_from_bool ( x : bool ) -> Aggregate8 {
171
- // CHECK: %0 = alloca %Aggregate8, align 1
167
+ // CHECK: %_0 = alloca %Aggregate8, align 1
172
168
// CHECK: %[[BYTE:.+]] = zext i1 %x to i8
173
- // CHECK: store i8 %[[BYTE]], ptr %0 , align 1
169
+ // CHECK: store i8 %[[BYTE]], ptr %_0 , align 1
174
170
transmute ( x)
175
171
}
176
172
@@ -195,8 +191,8 @@ pub unsafe fn check_byte_from_bool(x: bool) -> u8 {
195
191
// CHECK-LABEL: @check_to_pair(
196
192
#[ no_mangle]
197
193
pub unsafe fn check_to_pair ( x : u64 ) -> Option < i32 > {
198
- // CHECK: %0 = alloca { i32, i32 }, align 4
199
- // CHECK: store i64 %x, ptr %0 , align 4
194
+ // CHECK: %_0 = alloca { i32, i32 }, align 4
195
+ // CHECK: store i64 %x, ptr %_0 , align 4
200
196
transmute ( x)
201
197
}
202
198
@@ -207,37 +203,37 @@ pub unsafe fn check_from_pair(x: Option<i32>) -> u64 {
207
203
// immediates so we can write using the destination alloca's alignment.
208
204
const { assert ! ( std:: mem:: align_of:: <Option <i32 >>( ) == 4 ) } ;
209
205
210
- // CHECK: %0 = alloca i64, align 8
211
- // CHECK: store i32 %x.0, ptr %1 , align 8
212
- // CHECK: store i32 %x.1, ptr %2 , align 4
213
- // CHECK: %3 = load i64, ptr %0 , align 8
214
- // CHECK: ret i64 %3
206
+ // CHECK: %_0 = alloca i64, align 8
207
+ // CHECK: store i32 %x.0, ptr %0 , align 8
208
+ // CHECK: store i32 %x.1, ptr %1 , align 4
209
+ // CHECK: %2 = load i64, ptr %_0 , align 8
210
+ // CHECK: ret i64 %2
215
211
transmute ( x)
216
212
}
217
213
218
214
// CHECK-LABEL: @check_to_float(
219
215
#[ no_mangle]
220
216
pub unsafe fn check_to_float ( x : u32 ) -> f32 {
221
217
// CHECK-NOT: alloca
222
- // CHECK: %0 = bitcast i32 %x to float
223
- // CHECK: ret float %0
218
+ // CHECK: %_0 = bitcast i32 %x to float
219
+ // CHECK: ret float %_0
224
220
transmute ( x)
225
221
}
226
222
227
223
// CHECK-LABEL: @check_from_float(
228
224
#[ no_mangle]
229
225
pub unsafe fn check_from_float ( x : f32 ) -> u32 {
230
226
// CHECK-NOT: alloca
231
- // CHECK: %0 = bitcast float %x to i32
232
- // CHECK: ret i32 %0
227
+ // CHECK: %_0 = bitcast float %x to i32
228
+ // CHECK: ret i32 %_0
233
229
transmute ( x)
234
230
}
235
231
236
232
// CHECK-LABEL: @check_to_bytes(
237
233
#[ no_mangle]
238
234
pub unsafe fn check_to_bytes ( x : u32 ) -> [ u8 ; 4 ] {
239
- // CHECK: %0 = alloca [4 x i8], align 1
240
- // CHECK: store i32 %x, ptr %0 , align 1
235
+ // CHECK: %_0 = alloca [4 x i8], align 1
236
+ // CHECK: store i32 %x, ptr %_0 , align 1
241
237
transmute ( x)
242
238
}
243
239
@@ -253,10 +249,10 @@ pub unsafe fn check_from_bytes(x: [u8; 4]) -> u32 {
253
249
// CHECK-LABEL: @check_to_aggregate(
254
250
#[ no_mangle]
255
251
pub unsafe fn check_to_aggregate ( x : u64 ) -> Aggregate64 {
256
- // CHECK: %0 = alloca %Aggregate64, align 4
257
- // CHECK: store i64 %x, ptr %0 , align 4
258
- // CHECK: %1 = load i64, ptr %0 , align 4
259
- // CHECK: ret i64 %1
252
+ // CHECK: %_0 = alloca %Aggregate64, align 4
253
+ // CHECK: store i64 %x, ptr %_0 , align 4
254
+ // CHECK: %0 = load i64, ptr %_0 , align 4
255
+ // CHECK: ret i64 %0
260
256
transmute ( x)
261
257
}
262
258
@@ -273,7 +269,7 @@ pub unsafe fn check_from_aggregate(x: Aggregate64) -> u64 {
273
269
#[ no_mangle]
274
270
pub unsafe fn check_long_array_less_aligned ( x : [ u64 ; 100 ] ) -> [ u16 ; 400 ] {
275
271
// CHECK-NEXT: start
276
- // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 2 %0 , ptr align 8 %x, i64 800, i1 false)
272
+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 2 %_0 , ptr align 8 %x, i64 800, i1 false)
277
273
// CHECK-NEXT: ret void
278
274
transmute ( x)
279
275
}
@@ -282,7 +278,7 @@ pub unsafe fn check_long_array_less_aligned(x: [u64; 100]) -> [u16; 400] {
282
278
#[ no_mangle]
283
279
pub unsafe fn check_long_array_more_aligned ( x : [ u8 ; 100 ] ) -> [ u32 ; 25 ] {
284
280
// CHECK-NEXT: start
285
- // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0 , ptr align 1 %x, i64 100, i1 false)
281
+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %_0 , ptr align 1 %x, i64 100, i1 false)
286
282
// CHECK-NEXT: ret void
287
283
transmute ( x)
288
284
}
@@ -301,8 +297,8 @@ pub unsafe fn check_pair_with_bool(x: (u8, bool)) -> (bool, i8) {
301
297
pub unsafe fn check_float_to_pointer ( x : f64 ) -> * const ( ) {
302
298
// CHECK-NOT: alloca
303
299
// CHECK: %0 = bitcast double %x to i64
304
- // CHECK: %1 = inttoptr i64 %0 to ptr
305
- // CHECK: ret ptr %1
300
+ // CHECK: %_0 = inttoptr i64 %0 to ptr
301
+ // CHECK: ret ptr %_0
306
302
transmute ( x)
307
303
}
308
304
@@ -311,8 +307,8 @@ pub unsafe fn check_float_to_pointer(x: f64) -> *const () {
311
307
pub unsafe fn check_float_from_pointer ( x : * const ( ) ) -> f64 {
312
308
// CHECK-NOT: alloca
313
309
// CHECK: %0 = ptrtoint ptr %x to i64
314
- // CHECK: %1 = bitcast i64 %0 to double
315
- // CHECK: ret double %1
310
+ // CHECK: %_0 = bitcast i64 %0 to double
311
+ // CHECK: ret double %_0
316
312
transmute ( x)
317
313
}
318
314
@@ -376,10 +372,10 @@ pub unsafe fn check_issue_110005(x: (usize, bool)) -> Option<Box<[u8]>> {
376
372
// CHECK-LABEL: @check_pair_to_dst_ref(
377
373
#[ no_mangle]
378
374
pub unsafe fn check_pair_to_dst_ref < ' a > ( x : ( usize , usize ) ) -> & ' a [ u8 ] {
379
- // CHECK: %0 = inttoptr i64 %x.0 to ptr
380
- // CHECK: %1 = insertvalue { ptr, i64 } poison, ptr %0, 0
381
- // CHECK: %2 = insertvalue { ptr, i64 } %1 , i64 %x.1, 1
382
- // CHECK: ret { ptr, i64 } %2
375
+ // CHECK: %_0. 0 = inttoptr i64 %x.0 to ptr
376
+ // CHECK: %0 = insertvalue { ptr, i64 } poison, ptr %_0. 0, 0
377
+ // CHECK: %1 = insertvalue { ptr, i64 } %0 , i64 %x.1, 1
378
+ // CHECK: ret { ptr, i64 } %1
383
379
transmute ( x)
384
380
}
385
381
@@ -391,7 +387,7 @@ pub unsafe fn check_issue_109992(x: ()) -> [(); 1] {
391
387
392
388
// CHECK: start
393
389
// CHECK-NEXT: ret void
394
- mir ! {
390
+ mir ! {
395
391
{
396
392
RET = CastTransmute ( x) ;
397
393
Return ( )
@@ -408,7 +404,7 @@ pub unsafe fn check_unit_to_never(x: ()) {
408
404
// CHECK-NOT: trap
409
405
// CHECK: call void @llvm.trap
410
406
// CHECK-NOT: trap
411
- mir ! {
407
+ mir ! {
412
408
let temp: ZstNever ;
413
409
{
414
410
temp = CastTransmute ( x) ;
@@ -425,7 +421,7 @@ pub unsafe fn check_unit_from_never(x: ZstNever) -> () {
425
421
426
422
// CHECK: start
427
423
// CHECK-NEXT: ret void
428
- mir ! {
424
+ mir ! {
429
425
{
430
426
RET = CastTransmute ( x) ;
431
427
Return ( )
@@ -457,10 +453,10 @@ pub struct HighAlignScalar(u8);
457
453
// CHECK-LABEL: @check_to_overalign(
458
454
#[ no_mangle]
459
455
pub unsafe fn check_to_overalign ( x : u64 ) -> HighAlignScalar {
460
- // CHECK: %0 = alloca %HighAlignScalar, align 8
461
- // CHECK: store i64 %x, ptr %0 , align 8
462
- // CHECK: %1 = load i64, ptr %0 , align 8
463
- // CHECK: ret i64 %1
456
+ // CHECK: %_0 = alloca %HighAlignScalar, align 8
457
+ // CHECK: store i64 %x, ptr %_0 , align 8
458
+ // CHECK: %0 = load i64, ptr %_0 , align 8
459
+ // CHECK: ret i64 %0
464
460
transmute ( x)
465
461
}
466
462
0 commit comments