Skip to content

Commit

Permalink
Rollup merge of #88450 - notriddle:notriddle/maybe_whole_expr, r=cjgi…
Browse files Browse the repository at this point in the history
…llot

fix(rustc_parse): correct span in `maybe_whole_expr!`

Fixes #87812
  • Loading branch information
m-ou-se authored Aug 31, 2021
2 parents 2013792 + f7c0566 commit 7696aca
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 2 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_parse/src/parser/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ macro_rules! maybe_whole_expr {
let path = path.clone();
$p.bump();
return Ok($p.mk_expr(
$p.token.span,
$p.prev_token.span,
ExprKind::Path(None, path),
AttrVec::new(),
));
Expand All @@ -50,7 +50,7 @@ macro_rules! maybe_whole_expr {
let block = block.clone();
$p.bump();
return Ok($p.mk_expr(
$p.token.span,
$p.prev_token.span,
ExprKind::Block(block, None),
AttrVec::new(),
));
Expand Down
11 changes: 11 additions & 0 deletions src/test/ui/parser/issue-87812-path.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
macro_rules! foo {
( $f:path ) => {{
let _: usize = $f; //~ERROR
}};
}

struct Baz;

fn main() {
foo!(Baz);
}
16 changes: 16 additions & 0 deletions src/test/ui/parser/issue-87812-path.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
error[E0308]: mismatched types
--> $DIR/issue-87812-path.rs:3:24
|
LL | let _: usize = $f;
| ----- ^^ expected `usize`, found struct `Baz`
| |
| expected due to this
...
LL | foo!(Baz);
| ---------- in this macro invocation
|
= note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
13 changes: 13 additions & 0 deletions src/test/ui/parser/issue-87812.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#![deny(break_with_label_and_loop)]

macro_rules! foo {
( $f:block ) => {
'_l: loop {
break '_l $f; //~ERROR
}
};
}

fn main() {
let x = foo!({ 3 });
}
22 changes: 22 additions & 0 deletions src/test/ui/parser/issue-87812.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
error: this labeled break expression is easy to confuse with an unlabeled break with a labeled value expression
--> $DIR/issue-87812.rs:6:13
|
LL | break '_l $f;
| ^^^^^^^^^^^^
...
LL | let x = foo!({ 3 });
| ----------- in this macro invocation
|
note: the lint level is defined here
--> $DIR/issue-87812.rs:1:9
|
LL | #![deny(break_with_label_and_loop)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
help: wrap this expression in parentheses
|
LL | break '_l ($f);
| + +

error: aborting due to previous error

0 comments on commit 7696aca

Please sign in to comment.