Skip to content

Commit 62d762e

Browse files
authored
Documentation: Split Rust feature support section (rust-lang#1142)
* Subsection for intrinsics and unstable features * Updates for Rust feature support * Update link in "Undefined behavior"
1 parent 993b847 commit 62d762e

File tree

5 files changed

+254
-239
lines changed

5 files changed

+254
-239
lines changed

docs/src/SUMMARY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@
2828
- [Limitations](./limitations.md)
2929
- [Undefined behaviour](./undefined-behaviour.md)
3030
- [Rust feature support](./rust-feature-support.md)
31+
- [Intrinsics](./rust-feature-support/intrinsics.md)
32+
- [Unstable features](./rust-feature-support/unstable.md)
3133
- [Overrides](./overrides.md)

docs/src/rust-feature-support.md

Lines changed: 6 additions & 236 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ affected if the statement is not reachable from the code under verification, so
121121
users can still verify components of their code that do not use unsupported
122122
features.
123123

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+
124127
### Assembly
125128

126129
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:
168171
in projections type in
169172
[#448](https://github.com/model-checking/kani/issues/448).
170173
* Unexpected fat pointer results in
171-
[#82](https://github.com/model-checking/kani/issues/82),
172174
[#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
175176
[#676](https://github.com/model-checking/kani/issues/676).
176177

177178
We are particularly interested in bug reports concerning
@@ -209,236 +210,5 @@ related to [advanced features](#advanced-features).
209210

210211
### Intrinsics
211212

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

Comments
 (0)