diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-05-09 06:04:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-09 06:04:40 +0200 |
| commit | 48b1e1a280284766ab50720cb71a27451c8a512b (patch) | |
| tree | 10d47ba6a33fc3857dfc987b593ee1955bafd3fe /compiler/rustc_codegen_cranelift/example/std_example.rs | |
| parent | c49436df4c7d59af58a11b9bf30292853ef48008 (diff) | |
| parent | 0ca1a94b2bd58d19a1bd492300abd5bffe5263fb (diff) | |
| download | rust-48b1e1a280284766ab50720cb71a27451c8a512b.tar.gz rust-48b1e1a280284766ab50720cb71a27451c8a512b.zip | |
Rollup merge of #124908 - saethlin:ref-casting_bigger_place_projection, r=fee1-dead
Handle field projections like slice indexing in invalid_reference_casting
r? `@Urgau`
I saw the implementation in https://github.com/rust-lang/rust/pull/124761, and I was wondering if we also need to handle field access. We do. Without this PR, we get this errant diagnostic:
```
error: casting references to a bigger memory layout than the backing allocation is undefined behavior, even if the reference is unused
--> /home/ben/rust/tests/ui/lint/reference_casting.rs:262:18
|
LL | let r = &mut v.0;
| --- backing allocation comes from here
LL | let ptr = r as *mut i32 as *mut Vec3<i32>;
| ------------------------------- casting happend here
LL | unsafe { *ptr = Vec3(0, 0, 0) }
| ^^^^^^^^^^^^^^^^^^^^
|
= note: casting from `i32` (4 bytes) to `Vec3<i32>` (12 bytes)
```
Diffstat (limited to 'compiler/rustc_codegen_cranelift/example/std_example.rs')
0 files changed, 0 insertions, 0 deletions
