diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-11-13 17:37:36 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-13 17:37:36 +0100 |
| commit | a1b0702ea5efd2f1bacc2bb5cfac7b82abc58bc5 (patch) | |
| tree | 08aac459556ddc8fc45fde8331e90a206b6d4eea /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp | |
| parent | afd7977c850d9ce06f1dd2bebb40db8cc2224a51 (diff) | |
| parent | 28ea0023408d9edcc61e89b9f511528e4757a53e (diff) | |
| download | rust-a1b0702ea5efd2f1bacc2bb5cfac7b82abc58bc5.tar.gz rust-a1b0702ea5efd2f1bacc2bb5cfac7b82abc58bc5.zip | |
Rollup merge of #103996 - SUPERCILEX:docs, r=RalfJung
Add small clarification around using pointers derived from references
r? `@RalfJung`
One question about your example from https://github.com/rust-lang/libs-team/issues/122: at what point does UB arise? If writing 0 does not cause UB and the reference `x` is never read or written to (explicitly or implicitly by being wrapped in another data structure) after the call to `foo`, does UB only arise when dropping the value? I don't really get that since I thought references were always supposed to point to valid data?
```rust
fn foo(x: &mut NonZeroI32) {
let ptr = x as *mut NonZeroI32;
unsafe { ptr.cast::<i32>().write(0); } // no UB here
// What now? x is considered garbage when?
}
```
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
