rust/tests
Matthias Krüger 20b1dadf92
Rollup merge of #130350 - RalfJung:strict-provenance, r=dtolnay
stabilize Strict Provenance and Exposed Provenance APIs

Given that [RFC 3559](https://rust-lang.github.io/rfcs/3559-rust-has-provenance.html) has been accepted, t-lang has approved the concept of provenance to exist in the language. So I think it's time that we stabilize the strict provenance and exposed provenance APIs, and discuss provenance explicitly in the docs:
```rust
// core::ptr
pub const fn without_provenance<T>(addr: usize) -> *const T;
pub const fn dangling<T>() -> *const T;
pub const fn without_provenance_mut<T>(addr: usize) -> *mut T;
pub const fn dangling_mut<T>() -> *mut T;
pub fn with_exposed_provenance<T>(addr: usize) -> *const T;
pub fn with_exposed_provenance_mut<T>(addr: usize) -> *mut T;

impl<T: ?Sized> *const T {
    pub fn addr(self) -> usize;
    pub fn expose_provenance(self) -> usize;
    pub fn with_addr(self, addr: usize) -> Self;
    pub fn map_addr(self, f: impl FnOnce(usize) -> usize) -> Self;
}

impl<T: ?Sized> *mut T {
    pub fn addr(self) -> usize;
    pub fn expose_provenance(self) -> usize;
    pub fn with_addr(self, addr: usize) -> Self;
    pub fn map_addr(self, f: impl FnOnce(usize) -> usize) -> Self;
}

impl<T: ?Sized> NonNull<T> {
    pub fn addr(self) -> NonZero<usize>;
    pub fn with_addr(self, addr: NonZero<usize>) -> Self;
    pub fn map_addr(self, f: impl FnOnce(NonZero<usize>) -> NonZero<usize>) -> Self;
}
```

I also did a pass over the docs to adjust them, because this is no longer an "experiment". The `ptr` docs now discuss the concept of provenance in general, and then they go into the two families of APIs for dealing with provenance: Strict Provenance and Exposed Provenance. I removed the discussion of how pointers also have an associated "address space" -- that is not actually tracked in the pointer value, it is tracked in the type, so IMO it just distracts from the core point of provenance. I also adjusted the docs for `with_exposed_provenance` to make it clear that we cannot guarantee much about this function, it's all best-effort.

There are two unstable lints associated with the strict_provenance feature gate; I moved them to a new [strict_provenance_lints](https://github.com/rust-lang/rust/issues/130351) feature since I didn't want this PR to have an even bigger FCP. ;)

`@rust-lang/opsem` Would be great to get some feedback on the docs here. :)
Nominating for `@rust-lang/libs-api.`

Part of https://github.com/rust-lang/rust/issues/95228.

[FCP comment](https://github.com/rust-lang/rust/pull/130350#issuecomment-2395114536)
2024-10-21 18:11:19 +02:00
..
assembly Auto merge of #131211 - bjorn3:rust_abi_follow_c_rules, r=nikic,jieyouxu 2024-10-19 14:21:46 +00:00
auxiliary
codegen move strict provenance lints to new feature gate, remove old feature gates 2024-10-21 15:22:17 +01:00
codegen-units Fix and enable disabled codegen-units tests 2024-08-10 14:03:27 -04:00
coverage Dont ICE when computing coverage of synthetic async closure body 2024-10-18 20:14:02 +11:00
coverage-run-rustdoc coverage: Extract hole spans from HIR instead of MIR 2024-07-08 21:22:56 +10:00
crashes Rollup merge of #131964 - matthiaskrgr:crashes2010, r=jieyouxu 2024-10-20 16:54:12 +02:00
debuginfo Rollup merge of #131521 - jdonszelmann:rc, r=joboet 2024-10-15 12:33:36 -04:00
incremental Bless incremental tests. 2024-10-04 23:50:01 +00:00
mir-opt Rollup merge of #130350 - RalfJung:strict-provenance, r=dtolnay 2024-10-21 18:11:19 +02:00
pretty Add pretty, ui, and feature-gate tests for the enzyme/autodiff frontend 2024-10-11 20:38:43 +02:00
run-make Rollup merge of #131755 - jfrimmel:avr-rjmp-offset-regression-test, r=jieyouxu 2024-10-18 12:00:50 +01:00
rustdoc Auto merge of #131797 - matthiaskrgr:rollup-lzpze2k, r=matthiaskrgr 2024-10-16 20:50:53 +00:00
rustdoc-gui Strengthen some GUI tests 2024-10-09 21:23:20 +02:00
rustdoc-js rustdoc-search: allow trailing Foo -> arg search 2024-09-05 17:58:05 -07:00
rustdoc-js-std Fix rustdoc-js-std path-ordering test due to API removal 2024-10-02 11:15:48 +02:00
rustdoc-json rustdoc-JSON: Rename "object safe" to "dyn compatible" 2024-10-16 23:00:49 +02:00
rustdoc-ui Rollup merge of #131691 - GuillaumeGomez:intra-doc-link-filter-out-2, r=notriddle 2024-10-16 20:15:53 +02:00
ui Rollup merge of #130350 - RalfJung:strict-provenance, r=dtolnay 2024-10-21 18:11:19 +02:00
ui-fulldeps update bootstrap configs 2024-10-15 20:30:23 -07:00
COMPILER_TESTS.md