Skip to content

Conversation

Kivooeo
Copy link
Member

@Kivooeo Kivooeo commented Aug 26, 2025

This adds a check for when user wrote const* T instead of *const T, I just saw how a C-person made this typo and compiler suggests this

 --> src/main.rs:2:17
  |
2 |     let p: const* u8 = 0 as _;
  |                 ^
  |
help: add `mut` or `const` here
  |
2 |     let p: const*mut  u8 = 0 as _;
  |                  +++
2 |     let p: const*const  u8 = 0 as _;
  |                  +++++

which is very incorrect

in my current approach we don't recover from this because otherwise we will get a wall from errors which is very verbose and 0 helpful

also fixes #136602

r? compiler

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 26, 2025

return Ok(self.mk_ty(kw_span.to(star_span), TyKind::Err(guar)));
}
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}
}

)
.emit();

return Ok(self.mk_ty(kw_span.to(star_span), TyKind::Err(guar)));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not recover this like a TyKind::RawPtr? Recovering like TyKind::Err seems to be strictly worse.

let kw_span = self.token.span;
self.bump();

if self.eat(exp!(Star)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should try to parse a subsequent type via a snapshot. Or at least check that lookahead(2) can begin a type

let kw_span = self.token.span;
self.bump();

if self.eat(exp!(Star)) {
Copy link
Member

@compiler-errors compiler-errors Aug 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This eat is always true, since we checked the lookahead above

.dcx()
.struct_span_err(
kw_span,
"raw pointer type must have a star before the mutability keyword",
Copy link
Member

@compiler-errors compiler-errors Aug 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"raw pointer type must have a star before the mutability keyword",
"raw pointer types are written like `*{...} T`",

I find the phrasing kind of awkward -- "must have a star before the mutability keyword" doesn't really point to the fact that there is a star, and it's just misplaced. And also I wouldn't call "const" to be a mutability keyword.

I'm not sure if what I suggested is any better, but I wonder if there's a way to suggest the change here that sounds more descriptive.

@@ -276,6 +276,34 @@ impl<'a> Parser<'a> {
) -> PResult<'a, Box<Ty>> {
let allow_qpath_recovery = recover_qpath == RecoverQPath::Yes;
maybe_recover_from_interpolated_ty_qpath!(self, allow_qpath_recovery);

if (self.token.is_keyword(kw::Const) || self.token.is_keyword(kw::Mut))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (self.token.is_keyword(kw::Const) || self.token.is_keyword(kw::Mut))
// Comment that describes what we're trying to do here.
if (self.token.is_keyword(kw::Const) || self.token.is_keyword(kw::Mut))

@@ -276,6 +276,34 @@ impl<'a> Parser<'a> {
) -> PResult<'a, Box<Ty>> {
let allow_qpath_recovery = recover_qpath == RecoverQPath::Yes;
maybe_recover_from_interpolated_ty_qpath!(self, allow_qpath_recovery);

if (self.token.is_keyword(kw::Const) || self.token.is_keyword(kw::Mut))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This probably should also be moved into a separate function and also moved way down into the actually if else chain below rather than being hit first on every call to parse_ty_common

@compiler-errors compiler-errors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

const* suggestions won't compile, and no suggestion for *const
4 participants