@@ -121,6 +121,9 @@ affected if the statement is not reachable from the code under verification, so
121
121
users can still verify components of their code that do not use unsupported
122
122
features.
123
123
124
+ In a few cases, Kani aborts execution if the analysis could be affected in
125
+ some way because of an unsupported feature (e.g., global ASM).
126
+
124
127
### Assembly
125
128
126
129
Kani does not support assembly code for now. We may add it in the future but at
@@ -168,10 +171,8 @@ In particular, there are some outstanding issues to note here:
168
171
in projections type in
169
172
[ #448 ] ( https://github.com/model-checking/kani/issues/448 ) .
170
173
* Unexpected fat pointer results in
171
- [ #82 ] ( https://github.com/model-checking/kani/issues/82 ) ,
172
174
[ #277 ] ( https://github.com/model-checking/kani/issues/277 ) ,
173
- [ #327 ] ( https://github.com/model-checking/kani/issues/327 ) ,
174
- [ #378 ] ( https://github.com/model-checking/kani/issues/378 ) and
175
+ [ #327 ] ( https://github.com/model-checking/kani/issues/327 ) and
175
176
[ #676 ] ( https://github.com/model-checking/kani/issues/676 ) .
176
177
177
178
We are particularly interested in bug reports concerning
@@ -209,236 +210,5 @@ related to [advanced features](#advanced-features).
209
210
210
211
### Intrinsics
211
212
212
- The table below tries to summarize the current support in Kani for Rust
213
- intrinsics.
214
-
215
- In general, code generation for unsupported intrinsics follows the rule
216
- described in [ Code generation for unsupported
217
- features] ( #code-generation-for-unsupported-features ) .
218
-
219
- Name | Support | Notes |
220
- --- | --- | --- |
221
- abort | Yes | |
222
- add_with_overflow | Yes | |
223
- arith_offset | No | |
224
- assert_inhabited | Partial | [ #751 ] ( https://github.com/model-checking/kani/issues/751 ) |
225
- assert_uninit_valid | Yes | |
226
- assert_zero_valid | Yes | |
227
- assume | Yes | |
228
- atomic_and | Partial | See [ Atomics] ( #atomics ) |
229
- atomic_and_acq | Partial | See [ Atomics] ( #atomics ) |
230
- atomic_and_acqrel | Partial | See [ Atomics] ( #atomics ) |
231
- atomic_and_rel | Partial | See [ Atomics] ( #atomics ) |
232
- atomic_and_relaxed | Partial | See [ Atomics] ( #atomics ) |
233
- atomic_cxchg | Partial | See [ Atomics] ( #atomics ) |
234
- atomic_cxchg_acq | Partial | See [ Atomics] ( #atomics ) |
235
- atomic_cxchg_acq_failrelaxed | Partial | See [ Atomics] ( #atomics ) |
236
- atomic_cxchg_acqrel | Partial | See [ Atomics] ( #atomics ) |
237
- atomic_cxchg_acqrel_failrelaxed | Partial | See [ Atomics] ( #atomics ) |
238
- atomic_cxchg_failacq | Partial | See [ Atomics] ( #atomics ) |
239
- atomic_cxchg_failrelaxed | Partial | See [ Atomics] ( #atomics ) |
240
- atomic_cxchg_rel | Partial | See [ Atomics] ( #atomics ) |
241
- atomic_cxchg_relaxed | Partial | See [ Atomics] ( #atomics ) |
242
- atomic_cxchgweak | Partial | See [ Atomics] ( #atomics ) |
243
- atomic_cxchgweak_acq | Partial | See [ Atomics] ( #atomics ) |
244
- atomic_cxchgweak_acq_failrelaxed | Partial | See [ Atomics] ( #atomics ) |
245
- atomic_cxchgweak_acqrel | Partial | See [ Atomics] ( #atomics ) |
246
- atomic_cxchgweak_acqrel_failrelaxed | Partial | See [ Atomics] ( #atomics ) |
247
- atomic_cxchgweak_failacq | Partial | See [ Atomics] ( #atomics ) |
248
- atomic_cxchgweak_failrelaxed | Partial | See [ Atomics] ( #atomics ) |
249
- atomic_cxchgweak_rel | Partial | See [ Atomics] ( #atomics ) |
250
- atomic_cxchgweak_relaxed | Partial | See [ Atomics] ( #atomics ) |
251
- atomic_fence | Partial | See [ Atomics] ( #atomics ) |
252
- atomic_fence_acq | Partial | See [ Atomics] ( #atomics ) |
253
- atomic_fence_acqrel | Partial | See [ Atomics] ( #atomics ) |
254
- atomic_fence_rel | Partial | See [ Atomics] ( #atomics ) |
255
- atomic_load | Partial | See [ Atomics] ( #atomics ) |
256
- atomic_load_acq | Partial | See [ Atomics] ( #atomics ) |
257
- atomic_load_relaxed | Partial | See [ Atomics] ( #atomics ) |
258
- atomic_load_unordered | Partial | See [ Atomics] ( #atomics ) |
259
- atomic_max | No | See [ Atomics] ( #atomics ) |
260
- atomic_max_acq | No | See [ Atomics] ( #atomics ) |
261
- atomic_max_acqrel | No | See [ Atomics] ( #atomics ) |
262
- atomic_max_rel | No | See [ Atomics] ( #atomics ) |
263
- atomic_max_relaxed | No | See [ Atomics] ( #atomics ) |
264
- atomic_min | No | See [ Atomics] ( #atomics ) |
265
- atomic_min_acq | No | See [ Atomics] ( #atomics ) |
266
- atomic_min_acqrel | No | See [ Atomics] ( #atomics ) |
267
- atomic_min_rel | No | See [ Atomics] ( #atomics ) |
268
- atomic_min_relaxed | No | See [ Atomics] ( #atomics ) |
269
- atomic_nand | Partial | See [ Atomics] ( #atomics ) |
270
- atomic_nand_acq | Partial | See [ Atomics] ( #atomics ) |
271
- atomic_nand_acqrel | Partial | See [ Atomics] ( #atomics ) |
272
- atomic_nand_rel | Partial | See [ Atomics] ( #atomics ) |
273
- atomic_nand_relaxed | Partial | See [ Atomics] ( #atomics ) |
274
- atomic_or | Partial | See [ Atomics] ( #atomics ) |
275
- atomic_or_acq | Partial | See [ Atomics] ( #atomics ) |
276
- atomic_or_acqrel | Partial | See [ Atomics] ( #atomics ) |
277
- atomic_or_rel | Partial | See [ Atomics] ( #atomics ) |
278
- atomic_or_relaxed | Partial | See [ Atomics] ( #atomics ) |
279
- atomic_singlethreadfence | Partial | See [ Atomics] ( #atomics ) |
280
- atomic_singlethreadfence_acq | Partial | See [ Atomics] ( #atomics ) |
281
- atomic_singlethreadfence_acqrel | Partial | See [ Atomics] ( #atomics ) |
282
- atomic_singlethreadfence_rel | Partial | See [ Atomics] ( #atomics ) |
283
- atomic_store | Partial | See [ Atomics] ( #atomics ) |
284
- atomic_store_rel | Partial | See [ Atomics] ( #atomics ) |
285
- atomic_store_relaxed | Partial | See [ Atomics] ( #atomics ) |
286
- atomic_store_unordered | Partial | See [ Atomics] ( #atomics ) |
287
- atomic_umax | No | See [ Atomics] ( #atomics ) |
288
- atomic_umax_acq | No | See [ Atomics] ( #atomics ) |
289
- atomic_umax_acqrel | No | See [ Atomics] ( #atomics ) |
290
- atomic_umax_rel | No | See [ Atomics] ( #atomics ) |
291
- atomic_umax_relaxed | No | See [ Atomics] ( #atomics ) |
292
- atomic_umin | No | See [ Atomics] ( #atomics ) |
293
- atomic_umin_acq | No | See [ Atomics] ( #atomics ) |
294
- atomic_umin_acqrel | No | See [ Atomics] ( #atomics ) |
295
- atomic_umin_rel | No | See [ Atomics] ( #atomics ) |
296
- atomic_umin_relaxed | No | See [ Atomics] ( #atomics ) |
297
- atomic_xadd | Partial | See [ Atomics] ( #atomics ) |
298
- atomic_xadd_acq | Partial | See [ Atomics] ( #atomics ) |
299
- atomic_xadd_acqrel | Partial | See [ Atomics] ( #atomics ) |
300
- atomic_xadd_rel | Partial | See [ Atomics] ( #atomics ) |
301
- atomic_xadd_relaxed | Partial | See [ Atomics] ( #atomics ) |
302
- atomic_xchg | Partial | See [ Atomics] ( #atomics ) |
303
- atomic_xchg_acq | Partial | See [ Atomics] ( #atomics ) |
304
- atomic_xchg_acqrel | Partial | See [ Atomics] ( #atomics ) |
305
- atomic_xchg_rel | Partial | See [ Atomics] ( #atomics ) |
306
- atomic_xchg_relaxed | Partial | See [ Atomics] ( #atomics ) |
307
- atomic_xor | Partial | See [ Atomics] ( #atomics ) |
308
- atomic_xor_acq | Partial | See [ Atomics] ( #atomics ) |
309
- atomic_xor_acqrel | Partial | See [ Atomics] ( #atomics ) |
310
- atomic_xor_rel | Partial | See [ Atomics] ( #atomics ) |
311
- atomic_xor_relaxed | Partial | See [ Atomics] ( #atomics ) |
312
- atomic_xsub | Partial | See [ Atomics] ( #atomics ) |
313
- atomic_xsub_acq | Partial | See [ Atomics] ( #atomics ) |
314
- atomic_xsub_acqrel | Partial | See [ Atomics] ( #atomics ) |
315
- atomic_xsub_rel | Partial | See [ Atomics] ( #atomics ) |
316
- atomic_xsub_relaxed | Partial | See [ Atomics] ( #atomics ) |
317
- blackbox | Yes | |
318
- bitreverse | Yes | |
319
- breakpoint | Yes | |
320
- bswap | Yes | |
321
- caller_location | No | |
322
- ceilf32 | No | |
323
- ceilf64 | No | |
324
- copy | No | |
325
- copy_nonoverlapping | No | |
326
- copysignf32 | No | |
327
- copysignf64 | No | |
328
- cosf32 | Yes | |
329
- cosf64 | Yes | |
330
- ctlz | Yes | |
331
- ctlz_nonzero | Yes | |
332
- ctpop | Yes | |
333
- cttz | Yes | |
334
- cttz_nonzero | Yes | |
335
- discriminant_value | Yes | |
336
- drop_in_place | No | |
337
- exact_div | Yes | |
338
- exp2f32 | No | |
339
- exp2f64 | No | |
340
- expf32 | No | |
341
- expf64 | No | |
342
- fabsf32 | Yes | |
343
- fabsf64 | Yes | |
344
- fadd_fast | Yes | |
345
- fdiv_fast | Partial | [ #809 ] ( https://github.com/model-checking/kani/issues/809 ) |
346
- float_to_int_unchecked | No | |
347
- floorf32 | No | |
348
- floorf64 | No | |
349
- fmaf32 | No | |
350
- fmaf64 | No | |
351
- fmul_fast | Partial | [ #809 ] ( https://github.com/model-checking/kani/issues/809 ) |
352
- forget | Yes | |
353
- frem_fast | No | |
354
- fsub_fast | Yes | |
355
- likely | Yes | |
356
- log10f32 | No | |
357
- log10f64 | No | |
358
- log2f32 | No | |
359
- log2f64 | No | |
360
- logf32 | No | |
361
- logf64 | No | |
362
- maxnumf32 | No | |
363
- maxnumf64 | No | |
364
- min_align_of | Yes | |
365
- min_align_of_val | Yes | |
366
- minnumf32 | No | |
367
- minnumf64 | No | |
368
- move_val_init | No | |
369
- mul_with_overflow | Yes | |
370
- nearbyintf32 | No | |
371
- nearbyintf64 | No | |
372
- needs_drop | Yes | |
373
- nontemporal_store | No | |
374
- offset | Yes | |
375
- powf32 | No | |
376
- powf64 | No | |
377
- powif32 | No | |
378
- powif64 | No | |
379
- pref_align_of | Yes | |
380
- prefetch_read_data | No | |
381
- prefetch_read_instruction | No | |
382
- prefetch_write_data | No | |
383
- prefetch_write_instruction | No | |
384
- ptr_guaranteed_eq | Yes | |
385
- ptr_guaranteed_ne | Yes | |
386
- ptr_offset_from | Partial | Missing undefined behavior checks |
387
- raw_eq | Partial | Cannot detect [ uninitialized memory] ( #uninitialized-memory ) |
388
- rintf32 | No | |
389
- rintf64 | No | |
390
- rotate_left | Yes | |
391
- rotate_right | Yes | |
392
- roundf32 | No | |
393
- roundf64 | No | |
394
- rustc_peek | No | |
395
- saturating_add | Yes | |
396
- saturating_sub | Yes | |
397
- sinf32 | Yes | |
398
- sinf64 | Yes | |
399
- size_of | Yes | |
400
- size_of_val | Yes | |
401
- sqrtf32 | No | |
402
- sqrtf64 | No | |
403
- sub_with_overflow | Yes | |
404
- transmute | Yes | |
405
- truncf32 | No | |
406
- truncf64 | No | |
407
- try | No | [ #267 ] ( https://github.com/model-checking/kani/issues/267 ) |
408
- type_id | Yes | |
409
- type_name | Yes | |
410
- unaligned_volatile_load | No | See [ Notes - Concurrency] ( #concurrency ) |
411
- unaligned_volatile_store | No | See [ Notes - Concurrency] ( #concurrency ) |
412
- unchecked_add | Yes | |
413
- unchecked_div | Yes | |
414
- unchecked_mul | Yes | |
415
- unchecked_rem | Yes | |
416
- unchecked_shl | Yes | |
417
- unchecked_shr | Yes | |
418
- unchecked_sub | Yes | |
419
- unlikely | Yes | |
420
- unreachable | Yes | |
421
- variant_count | No | |
422
- volatile_copy_memory | No | See [ Notes - Concurrency] ( #concurrency ) |
423
- volatile_copy_nonoverlapping_memory | No | See [ Notes - Concurrency] ( #concurrency ) |
424
- volatile_load | No | See [ Notes - Concurrency] ( #concurrency ) |
425
- volatile_set_memory | No | See [ Notes - Concurrency] ( #concurrency ) |
426
- volatile_store | Partial | See [ Notes - Concurrency] ( #concurrency ) |
427
- wrapping_add | Yes | |
428
- wrapping_mul | Yes | |
429
- wrapping_sub | Yes | |
430
- write_bytes | Yes | |
431
-
432
- #### Atomics
433
-
434
- All atomic intrinsics are compiled as an atomic block where the operation is
435
- performed. But as noted in [ Notes - Concurrency] ( #concurrency ) , Kani support for
436
- concurrent verification is limited and not used by default. Verification on code
437
- containing atomic intrinsics should not be trusted given that Kani assumes the
438
- code to be sequential.
439
-
440
- #### SIMD instructions
441
-
442
- While Kani is capable of generating code for SIMD instructions, unfortunately, it
443
- does not provide support for the verification of some operations like vector
444
- comparison (e.g., ` simd_eq ` ).
213
+ Please refer to [ Intrinsics] ( rust-feature-support/intrinsics.md ) for information
214
+ on the current support in Kani for Rust compiler intrinsics.
0 commit comments