@@ -136,211 +136,4 @@ fn main() {
136
136
137
137
let slice = & [ 0 , 1 ] as & [ i32 ] ;
138
138
let slice_ptr = slice as * const [ i32 ] as * const i32 ;
139
-
140
- assert_eq ! ( slice_ptr as usize % 4 , 0 ) ;
141
-
142
- //return;
143
-
144
- unsafe {
145
- printf ( "Hello %s\n \0 " as * const str as * const i8 , "printf\0 " as * const str as * const i8 ) ;
146
-
147
- let hello: & [ u8 ] = b"Hello\0 " as & [ u8 ; 6 ] ;
148
- let ptr: * const u8 = hello as * const [ u8 ] as * const u8 ;
149
- puts ( ptr) ;
150
-
151
- let world: Box < & str > = box "World!\0 " ;
152
- puts ( * world as * const str as * const u8 ) ;
153
- world as Box < dyn SomeTrait > ;
154
-
155
- assert_eq ! ( intrinsics:: bitreverse( 0b10101000u8 ) , 0b00010101u8 ) ;
156
-
157
- assert_eq ! ( intrinsics:: bswap( 0xabu8 ) , 0xabu8 ) ;
158
- assert_eq ! ( intrinsics:: bswap( 0xddccu16 ) , 0xccddu16 ) ;
159
- assert_eq ! ( intrinsics:: bswap( 0xffee_ddccu32 ) , 0xccdd_eeffu32 ) ;
160
- assert_eq ! ( intrinsics:: bswap( 0x1234_5678_ffee_ddccu64 ) , 0xccdd_eeff_7856_3412u64 ) ;
161
-
162
- assert_eq ! ( intrinsics:: size_of_val( hello) as u8 , 6 ) ;
163
-
164
- let chars = & [ 'C' , 'h' , 'a' , 'r' , 's' ] ;
165
- let chars = chars as & [ char ] ;
166
- assert_eq ! ( intrinsics:: size_of_val( chars) as u8 , 4 * 5 ) ;
167
-
168
- let a: & dyn SomeTrait = & "abc\0 " ;
169
- a. object_safe ( ) ;
170
-
171
- assert_eq ! ( intrinsics:: size_of_val( a) as u8 , 16 ) ;
172
- assert_eq ! ( intrinsics:: size_of_val( & 0u32 ) as u8 , 4 ) ;
173
-
174
- assert_eq ! ( intrinsics:: min_align_of:: <u16 >( ) as u8 , 2 ) ;
175
- assert_eq ! ( intrinsics:: min_align_of_val( & a) as u8 , intrinsics:: min_align_of:: <& str >( ) as u8 ) ;
176
-
177
- assert ! ( !intrinsics:: needs_drop:: <u8 >( ) ) ;
178
- assert ! ( intrinsics:: needs_drop:: <NoisyDrop >( ) ) ;
179
-
180
- Unique {
181
- pointer : 0 as * const & str ,
182
- _marker : PhantomData ,
183
- } as Unique < dyn SomeTrait > ;
184
-
185
- struct MyDst < T : ?Sized > ( T ) ;
186
-
187
- intrinsics:: size_of_val ( & MyDst ( [ 0u8 ; 4 ] ) as & MyDst < [ u8 ] > ) ;
188
-
189
- struct Foo {
190
- x : u8 ,
191
- y : !,
192
- }
193
-
194
- unsafe fn zeroed < T > ( ) -> T {
195
- intrinsics:: init :: < T > ( )
196
- }
197
-
198
- unsafe fn uninitialized < T > ( ) -> T {
199
- MaybeUninit { uninit : ( ) } . value . value
200
- }
201
-
202
- zeroed :: < ( u8 , u8 ) > ( ) ;
203
- #[ allow( unreachable_code) ]
204
- {
205
- if false {
206
- zeroed :: < !> ( ) ;
207
- zeroed :: < Foo > ( ) ;
208
- uninitialized :: < Foo > ( ) ;
209
- }
210
- }
211
- }
212
-
213
- let _ = box NoisyDrop {
214
- text : "Boxed outer got dropped!\0 " ,
215
- inner : NoisyDropInner ,
216
- } as Box < dyn SomeTrait > ;
217
-
218
- const FUNC_REF : Option < fn ( ) > = Some ( main) ;
219
- match FUNC_REF {
220
- Some ( _) => { } ,
221
- None => assert ! ( false ) ,
222
- }
223
-
224
- match Ordering :: Less {
225
- Ordering :: Less => { } ,
226
- _ => assert ! ( false ) ,
227
- }
228
-
229
- [ NoisyDropInner , NoisyDropInner ] ;
230
-
231
- let x = & [ 0u32 , 42u32 ] as & [ u32 ] ;
232
- match x {
233
- [ ] => assert_eq ! ( 0u32 , 1 ) ,
234
- [ _, ref y @ ..] => assert_eq ! ( & x[ 1 ] as * const u32 as usize , & y[ 0 ] as * const u32 as usize ) ,
235
- }
236
-
237
- assert_eq ! ( ( ( |( ) | 42u8 ) as fn ( ( ) ) -> u8 ) ( ( ) ) , 42 ) ;
238
-
239
- extern {
240
- #[ linkage = "weak" ]
241
- static ABC : * const u8 ;
242
- }
243
-
244
- {
245
- extern {
246
- #[ linkage = "weak" ]
247
- static ABC : * const u8 ;
248
- }
249
- }
250
-
251
- unsafe { assert_eq ! ( ABC as usize , 0 ) ; }
252
-
253
- & mut ( || Some ( 0 as * const ( ) ) ) as & mut dyn FnMut ( ) -> Option < * const ( ) > ;
254
-
255
- let f = 1000.0 ;
256
- assert_eq ! ( f as u8 , 255 ) ;
257
- let f2 = -1000.0 ;
258
- assert_eq ! ( f2 as i8 , -128 ) ;
259
- assert_eq ! ( f2 as u8 , 0 ) ;
260
-
261
- static ANOTHER_STATIC : & u8 = & A_STATIC ;
262
- assert_eq ! ( * ANOTHER_STATIC , 42 ) ;
263
-
264
- check_niche_behavior ( ) ;
265
-
266
- extern "C" {
267
- type ExternType ;
268
- }
269
-
270
- struct ExternTypeWrapper {
271
- _a : ExternType ,
272
- }
273
-
274
- let nullptr = 0 as * const ( ) ;
275
- let extern_nullptr = nullptr as * const ExternTypeWrapper ;
276
- extern_nullptr as * const ( ) ;
277
- let slice_ptr = & [ ] as * const [ u8 ] ;
278
- slice_ptr as * const u8 ;
279
- }
280
-
281
- // Copied ui/issues/issue-61696.rs
282
-
283
- pub enum Infallible { }
284
-
285
- // The check that the `bool` field of `V1` is encoding a "niche variant"
286
- // (i.e. not `V1`, so `V3` or `V4`) used to be mathematically incorrect,
287
- // causing valid `V1` values to be interpreted as other variants.
288
- pub enum E1 {
289
- V1 { f : bool } ,
290
- V2 { f : Infallible } ,
291
- V3 ,
292
- V4 ,
293
- }
294
-
295
- // Computing the discriminant used to be done using the niche type (here `u8`,
296
- // from the `bool` field of `V1`), overflowing for variants with large enough
297
- // indices (`V3` and `V4`), causing them to be interpreted as other variants.
298
- pub enum E2 < X > {
299
- V1 { f : bool } ,
300
-
301
- /*_00*/ _01( X ) , _02( X ) , _03( X ) , _04( X ) , _05( X ) , _06( X ) , _07( X ) ,
302
- _08( X ) , _09( X ) , _0A( X ) , _0B( X ) , _0C( X ) , _0D( X ) , _0E( X ) , _0F( X ) ,
303
- _10( X ) , _11( X ) , _12( X ) , _13( X ) , _14( X ) , _15( X ) , _16( X ) , _17( X ) ,
304
- _18( X ) , _19( X ) , _1A( X ) , _1B( X ) , _1C( X ) , _1D( X ) , _1E( X ) , _1F( X ) ,
305
- _20( X ) , _21( X ) , _22( X ) , _23( X ) , _24( X ) , _25( X ) , _26( X ) , _27( X ) ,
306
- _28( X ) , _29( X ) , _2A( X ) , _2B( X ) , _2C( X ) , _2D( X ) , _2E( X ) , _2F( X ) ,
307
- _30( X ) , _31( X ) , _32( X ) , _33( X ) , _34( X ) , _35( X ) , _36( X ) , _37( X ) ,
308
- _38( X ) , _39( X ) , _3A( X ) , _3B( X ) , _3C( X ) , _3D( X ) , _3E( X ) , _3F( X ) ,
309
- _40( X ) , _41( X ) , _42( X ) , _43( X ) , _44( X ) , _45( X ) , _46( X ) , _47( X ) ,
310
- _48( X ) , _49( X ) , _4A( X ) , _4B( X ) , _4C( X ) , _4D( X ) , _4E( X ) , _4F( X ) ,
311
- _50( X ) , _51( X ) , _52( X ) , _53( X ) , _54( X ) , _55( X ) , _56( X ) , _57( X ) ,
312
- _58( X ) , _59( X ) , _5A( X ) , _5B( X ) , _5C( X ) , _5D( X ) , _5E( X ) , _5F( X ) ,
313
- _60( X ) , _61( X ) , _62( X ) , _63( X ) , _64( X ) , _65( X ) , _66( X ) , _67( X ) ,
314
- _68( X ) , _69( X ) , _6A( X ) , _6B( X ) , _6C( X ) , _6D( X ) , _6E( X ) , _6F( X ) ,
315
- _70( X ) , _71( X ) , _72( X ) , _73( X ) , _74( X ) , _75( X ) , _76( X ) , _77( X ) ,
316
- _78( X ) , _79( X ) , _7A( X ) , _7B( X ) , _7C( X ) , _7D( X ) , _7E( X ) , _7F( X ) ,
317
- _80( X ) , _81( X ) , _82( X ) , _83( X ) , _84( X ) , _85( X ) , _86( X ) , _87( X ) ,
318
- _88( X ) , _89( X ) , _8A( X ) , _8B( X ) , _8C( X ) , _8D( X ) , _8E( X ) , _8F( X ) ,
319
- _90( X ) , _91( X ) , _92( X ) , _93( X ) , _94( X ) , _95( X ) , _96( X ) , _97( X ) ,
320
- _98( X ) , _99( X ) , _9A( X ) , _9B( X ) , _9C( X ) , _9D( X ) , _9E( X ) , _9F( X ) ,
321
- _A0( X ) , _A1( X ) , _A2( X ) , _A3( X ) , _A4( X ) , _A5( X ) , _A6( X ) , _A7( X ) ,
322
- _A8( X ) , _A9( X ) , _AA( X ) , _AB( X ) , _AC( X ) , _AD( X ) , _AE( X ) , _AF( X ) ,
323
- _B0( X ) , _B1( X ) , _B2( X ) , _B3( X ) , _B4( X ) , _B5( X ) , _B6( X ) , _B7( X ) ,
324
- _B8( X ) , _B9( X ) , _BA( X ) , _BB( X ) , _BC( X ) , _BD( X ) , _BE( X ) , _BF( X ) ,
325
- _C0( X ) , _C1( X ) , _C2( X ) , _C3( X ) , _C4( X ) , _C5( X ) , _C6( X ) , _C7( X ) ,
326
- _C8( X ) , _C9( X ) , _CA( X ) , _CB( X ) , _CC( X ) , _CD( X ) , _CE( X ) , _CF( X ) ,
327
- _D0( X ) , _D1( X ) , _D2( X ) , _D3( X ) , _D4( X ) , _D5( X ) , _D6( X ) , _D7( X ) ,
328
- _D8( X ) , _D9( X ) , _DA( X ) , _DB( X ) , _DC( X ) , _DD( X ) , _DE( X ) , _DF( X ) ,
329
- _E0( X ) , _E1( X ) , _E2( X ) , _E3( X ) , _E4( X ) , _E5( X ) , _E6( X ) , _E7( X ) ,
330
- _E8( X ) , _E9( X ) , _EA( X ) , _EB( X ) , _EC( X ) , _ED( X ) , _EE( X ) , _EF( X ) ,
331
- _F0( X ) , _F1( X ) , _F2( X ) , _F3( X ) , _F4( X ) , _F5( X ) , _F6( X ) , _F7( X ) ,
332
- _F8( X ) , _F9( X ) , _FA( X ) , _FB( X ) , _FC( X ) , _FD( X ) , _FE( X ) , _FF( X ) ,
333
-
334
- V3 ,
335
- V4 ,
336
- }
337
-
338
- fn check_niche_behavior ( ) {
339
- if let E1 :: V2 { .. } = ( E1 :: V1 { f : true } ) {
340
- unsafe { intrinsics:: abort ( ) ; }
341
- }
342
-
343
- if let E2 :: V1 { .. } = E2 :: V3 :: < Infallible > {
344
- unsafe { intrinsics:: abort ( ) ; }
345
- }
346
139
}
0 commit comments