mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-26 14:43:24 +00:00
Rollup merge of #56966 - varkor:raw-pointer-deref-parens, r=zackmdavis
Correct strings for raw pointer deref and array access suggestions Fixes https://github.com/rust-lang/rust/issues/56714. Fixes https://github.com/rust-lang/rust/issues/56963. r? @zackmdavis
This commit is contained in:
commit
eb24b33b66
@ -3440,7 +3440,9 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
len.assert_usize(self.tcx),
|
||||
field.as_str().parse::<u64>()
|
||||
) {
|
||||
let base = self.tcx.hir().node_to_pretty_string(base.id);
|
||||
let base = self.tcx.sess.source_map()
|
||||
.span_to_snippet(base.span)
|
||||
.unwrap_or_else(|_| self.tcx.hir().node_to_pretty_string(base.id));
|
||||
let help = "instead of using tuple indexing, use array indexing";
|
||||
let suggestion = format!("{}[{}]", base, field);
|
||||
let applicability = if len < user_index {
|
||||
@ -3454,11 +3456,13 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
}
|
||||
ty::RawPtr(..) => {
|
||||
let base = self.tcx.hir().node_to_pretty_string(base.id);
|
||||
let msg = format!("`{}` is a native pointer; try dereferencing it", base);
|
||||
let base = self.tcx.sess.source_map()
|
||||
.span_to_snippet(base.span)
|
||||
.unwrap_or_else(|_| self.tcx.hir().node_to_pretty_string(base.id));
|
||||
let msg = format!("`{}` is a raw pointer; try dereferencing it", base);
|
||||
let suggestion = format!("(*{}).{}", base, field);
|
||||
err.span_suggestion_with_applicability(
|
||||
field.span,
|
||||
expr.span,
|
||||
&msg,
|
||||
suggestion,
|
||||
Applicability::MaybeIncorrect,
|
||||
|
@ -2,13 +2,17 @@ error[E0609]: no field `x` on type `*mut A`
|
||||
--> $DIR/issue-11004.rs:17:21
|
||||
|
|
||||
LL | let x : i32 = n.x; //~ no field `x` on type `*mut A`
|
||||
| ^ help: `n` is a native pointer; try dereferencing it: `(*n).x`
|
||||
| --^
|
||||
| |
|
||||
| help: `n` is a raw pointer; try dereferencing it: `(*n).x`
|
||||
|
||||
error[E0609]: no field `y` on type `*mut A`
|
||||
--> $DIR/issue-11004.rs:18:21
|
||||
|
|
||||
LL | let y : f64 = n.y; //~ no field `y` on type `*mut A`
|
||||
| ^ help: `n` is a native pointer; try dereferencing it: `(*n).y`
|
||||
| --^
|
||||
| |
|
||||
| help: `n` is a raw pointer; try dereferencing it: `(*n).y`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
11
src/test/ui/parenthesised-deref-suggestion.rs
Normal file
11
src/test/ui/parenthesised-deref-suggestion.rs
Normal file
@ -0,0 +1,11 @@
|
||||
struct Session {
|
||||
opts: u8,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let sess: &Session = &Session { opts: 0 };
|
||||
(sess as *const Session).opts; //~ ERROR no field `opts` on type `*const Session`
|
||||
|
||||
let x = [0u32];
|
||||
(x as [u32; 1]).0; //~ ERROR no field `0` on type `[u32; 1]`
|
||||
}
|
21
src/test/ui/parenthesised-deref-suggestion.stderr
Normal file
21
src/test/ui/parenthesised-deref-suggestion.stderr
Normal file
@ -0,0 +1,21 @@
|
||||
error[E0609]: no field `opts` on type `*const Session`
|
||||
--> $DIR/parenthesised-deref-suggestion.rs:7:30
|
||||
|
|
||||
LL | (sess as *const Session).opts; //~ ERROR no field `opts` on type `*const Session`
|
||||
| ^^^^
|
||||
help: `(sess as *const Session)` is a raw pointer; try dereferencing it
|
||||
|
|
||||
LL | (*(sess as *const Session)).opts; //~ ERROR no field `opts` on type `*const Session`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0609]: no field `0` on type `[u32; 1]`
|
||||
--> $DIR/parenthesised-deref-suggestion.rs:10:21
|
||||
|
|
||||
LL | (x as [u32; 1]).0; //~ ERROR no field `0` on type `[u32; 1]`
|
||||
| ----------------^
|
||||
| |
|
||||
| help: instead of using tuple indexing, use array indexing: `(x as [u32; 1])[0]`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0609`.
|
@ -2,7 +2,9 @@ error[E0609]: no field `f` on type `*const Rec`
|
||||
--> $DIR/unsafe-fn-autoderef.rs:29:14
|
||||
|
|
||||
LL | return p.f; //~ ERROR no field `f` on type `*const Rec`
|
||||
| ^ help: `p` is a native pointer; try dereferencing it: `(*p).f`
|
||||
| --^
|
||||
| |
|
||||
| help: `p` is a raw pointer; try dereferencing it: `(*p).f`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user