Structured suggestion for missing mut/const in pointer
This commit is contained in:
parent
f3fafbb006
commit
594134d873
5 changed files with 38 additions and 8 deletions
|
@ -397,10 +397,13 @@ impl<'a> Parser<'a> {
|
||||||
fn parse_ty_ptr(&mut self) -> PResult<'a, TyKind> {
|
fn parse_ty_ptr(&mut self) -> PResult<'a, TyKind> {
|
||||||
let mutbl = self.parse_const_or_mut().unwrap_or_else(|| {
|
let mutbl = self.parse_const_or_mut().unwrap_or_else(|| {
|
||||||
let span = self.prev_token.span;
|
let span = self.prev_token.span;
|
||||||
let msg = "expected mut or const in raw pointer type";
|
self.struct_span_err(span, "expected `mut` or `const` keyword in raw pointer type")
|
||||||
self.struct_span_err(span, msg)
|
.span_suggestions(
|
||||||
.span_label(span, msg)
|
span.shrink_to_hi(),
|
||||||
.help("use `*mut T` or `*const T` as appropriate")
|
"add `mut` or `const` here",
|
||||||
|
["mut ".to_string(), "const ".to_string()].into_iter(),
|
||||||
|
Applicability::HasPlaceholders,
|
||||||
|
)
|
||||||
.emit();
|
.emit();
|
||||||
Mutability::Not
|
Mutability::Not
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
fn foo(_: *()) {
|
fn foo(_: *()) {
|
||||||
//~^ ERROR expected mut or const in raw pointer type
|
//~^ ERROR expected `mut` or `const` keyword in raw pointer type
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
error: expected mut or const in raw pointer type
|
error: expected `mut` or `const` keyword in raw pointer type
|
||||||
--> $DIR/bad-pointer-type.rs:1:11
|
--> $DIR/bad-pointer-type.rs:1:11
|
||||||
|
|
|
|
||||||
LL | fn foo(_: *()) {
|
LL | fn foo(_: *()) {
|
||||||
| ^ expected mut or const in raw pointer type
|
| ^
|
||||||
|
|
|
|
||||||
= help: use `*mut T` or `*const T` as appropriate
|
help: add `mut` or `const` here
|
||||||
|
|
|
||||||
|
LL | fn foo(_: *const ()) {
|
||||||
|
| +++++
|
||||||
|
LL | fn foo(_: *mut ()) {
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
7
src/test/ui/parser/double-pointer.rs
Normal file
7
src/test/ui/parser/double-pointer.rs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
fn main() {
|
||||||
|
let x: i32 = 5;
|
||||||
|
let ptr: *const i32 = &x;
|
||||||
|
let dptr: **const i32 = &ptr;
|
||||||
|
//~^ ERROR expected `mut` or `const` keyword in raw pointer type
|
||||||
|
//~| HELP add `mut` or `const` here
|
||||||
|
}
|
15
src/test/ui/parser/double-pointer.stderr
Normal file
15
src/test/ui/parser/double-pointer.stderr
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
error: expected `mut` or `const` keyword in raw pointer type
|
||||||
|
--> $DIR/double-pointer.rs:4:15
|
||||||
|
|
|
||||||
|
LL | let dptr: **const i32 = &ptr;
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
help: add `mut` or `const` here
|
||||||
|
|
|
||||||
|
LL | let dptr: *const *const i32 = &ptr;
|
||||||
|
| +++++
|
||||||
|
LL | let dptr: *mut *const i32 = &ptr;
|
||||||
|
| +++
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue