forked from rust-lang/rust
-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#7396 - ranweiler:zero-offset, r=Manishearth
Fix invocation of `zst_offset` lint The `zst_offset` lint was broken by a refactoring regression in 2108387. In the invocation of the `zst_offset` check [here](rust-lang/rust-clippy@2108387#diff-7f73f6fe28c04b654223c09c42fe02937d2351fc58a91d21ab812aaf6f9b185dR1927), we shadow the already-destructured receiver `recv`, and accidentally pass the first argument of the method as if it were the receiver. This was not caught because the UI test expectation was never correct (a bad cast obscured the actual test result). This PR: - Fixes the existing test expectation - Tests both `const` and `mut` raw pointers - Passes the actual receiver to the lint's implementation Fixes rust-lang#7395. changelog: Fix [`zst_offset`] invocation and test
- Loading branch information
Showing
3 changed files
with
63 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,18 @@ | ||
fn main() { | ||
unsafe { | ||
let x = &() as *const (); | ||
x.offset(0); | ||
x.wrapping_add(0); | ||
x.sub(0); | ||
x.wrapping_sub(0); | ||
let m = &mut () as *mut (); | ||
m.offset(0); | ||
m.wrapping_add(0); | ||
m.sub(0); | ||
m.wrapping_sub(0); | ||
|
||
let y = &1 as *const u8; | ||
y.offset(0); | ||
let c = &() as *const (); | ||
c.offset(0); | ||
c.wrapping_add(0); | ||
c.sub(0); | ||
c.wrapping_sub(0); | ||
|
||
let sized = &1 as *const i32; | ||
sized.offset(0); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,52 @@ | ||
error[E0606]: casting `&i32` as `*const u8` is invalid | ||
--> $DIR/zero_offset.rs:9:17 | ||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:4:9 | ||
| | ||
LL | let y = &1 as *const u8; | ||
| ^^^^^^^^^^^^^^^ | ||
LL | m.offset(0); | ||
| ^^^^^^^^^^^ | ||
| | ||
= note: `#[deny(clippy::zst_offset)]` on by default | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:5:9 | ||
| | ||
LL | m.wrapping_add(0); | ||
| ^^^^^^^^^^^^^^^^^ | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:6:9 | ||
| | ||
LL | m.sub(0); | ||
| ^^^^^^^^ | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:7:9 | ||
| | ||
LL | m.wrapping_sub(0); | ||
| ^^^^^^^^^^^^^^^^^ | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:10:9 | ||
| | ||
LL | c.offset(0); | ||
| ^^^^^^^^^^^ | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:11:9 | ||
| | ||
LL | c.wrapping_add(0); | ||
| ^^^^^^^^^^^^^^^^^ | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:12:9 | ||
| | ||
LL | c.sub(0); | ||
| ^^^^^^^^ | ||
|
||
error: offset calculation on zero-sized value | ||
--> $DIR/zero_offset.rs:13:9 | ||
| | ||
LL | c.wrapping_sub(0); | ||
| ^^^^^^^^^^^^^^^^^ | ||
|
||
error: aborting due to previous error | ||
error: aborting due to 8 previous errors | ||
|
||
For more information about this error, try `rustc --explain E0606`. |