Skip to content

Commit

Permalink
Unrolled build for rust-lang#127349
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#127349 - estebank:negative-unsigned-literal, r=petrochenkov

Tweak `-1 as usize` suggestion

When writing a negative unsigned integer literal, use a verbose suggestion and account for `as` casting.
  • Loading branch information
rust-timer authored Jul 5, 2024
2 parents 2ad6630 + 86a1946 commit 6cc6054
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 18 deletions.
13 changes: 11 additions & 2 deletions compiler/rustc_hir_typeck/src/op.rs
Original file line number Diff line number Diff line change
Expand Up @@ -838,8 +838,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
},
) = ex.kind
{
err.span_suggestion(
ex.span,
let span = if let hir::Node::Expr(parent) =
self.tcx.parent_hir_node(ex.hir_id)
&& let hir::ExprKind::Cast(..) = parent.kind
{
// `-1 as usize` -> `usize::MAX`
parent.span
} else {
ex.span
};
err.span_suggestion_verbose(
span,
format!(
"you may have meant the maximum value of `{actual}`",
),
Expand Down
9 changes: 5 additions & 4 deletions tests/ui/feature-gates/feature-gate-negate-unsigned.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ error[E0600]: cannot apply unary operator `-` to type `usize`
--> $DIR/feature-gate-negate-unsigned.rs:10:23
|
LL | let _max: usize = -1;
| ^^
| |
| cannot apply unary operator `-`
| help: you may have meant the maximum value of `usize`: `usize::MAX`
| ^^ cannot apply unary operator `-`
|
= note: unsigned values cannot be negated
help: you may have meant the maximum value of `usize`
|
LL | let _max: usize = usize::MAX;
| ~~~~~~~~~~

error[E0600]: cannot apply unary operator `-` to type `u8`
--> $DIR/feature-gate-negate-unsigned.rs:14:14
Expand Down
27 changes: 15 additions & 12 deletions tests/ui/unsigned-literal-negation.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,37 @@ error[E0600]: cannot apply unary operator `-` to type `usize`
--> $DIR/unsigned-literal-negation.rs:2:13
|
LL | let x = -1 as usize;
| ^^
| |
| cannot apply unary operator `-`
| help: you may have meant the maximum value of `usize`: `usize::MAX`
| ^^ cannot apply unary operator `-`
|
= note: unsigned values cannot be negated
help: you may have meant the maximum value of `usize`
|
LL | let x = usize::MAX;
| ~~~~~~~~~~

error[E0600]: cannot apply unary operator `-` to type `usize`
--> $DIR/unsigned-literal-negation.rs:3:13
|
LL | let x = (-1) as usize;
| ^^^^
| |
| cannot apply unary operator `-`
| help: you may have meant the maximum value of `usize`: `usize::MAX`
| ^^^^ cannot apply unary operator `-`
|
= note: unsigned values cannot be negated
help: you may have meant the maximum value of `usize`
|
LL | let x = usize::MAX;
| ~~~~~~~~~~

error[E0600]: cannot apply unary operator `-` to type `u32`
--> $DIR/unsigned-literal-negation.rs:4:18
|
LL | let x: u32 = -1;
| ^^
| |
| cannot apply unary operator `-`
| help: you may have meant the maximum value of `u32`: `u32::MAX`
| ^^ cannot apply unary operator `-`
|
= note: unsigned values cannot be negated
help: you may have meant the maximum value of `u32`
|
LL | let x: u32 = u32::MAX;
| ~~~~~~~~

error: aborting due to 3 previous errors

Expand Down

0 comments on commit 6cc6054

Please sign in to comment.