diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-11-16 15:39:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-16 15:39:46 +0100 |
| commit | e033a389e1b375e45799398c2c58ece1e23bbb3b (patch) | |
| tree | c985e5f0eb9d4dfbce9765c7f207bbd0b63e9080 /src/test/ui | |
| parent | 353b915fecd7feb30127b3107ea091a1a28f5e4a (diff) | |
| parent | b7b67228f9cd4fab4462ebe4d4d05ad10bf5a7d7 (diff) | |
Rollup merge of #104335 - Nilstrieb:macrowo, r=compiler-errors
Only do parser recovery on retried macro matching Eager parser recovery can break macros, so we don't do it at first. But when we already know that the macro failed, we can retry it with recovery enabled to still emit useful diagnostics. Helps with #103534
Diffstat (limited to 'src/test/ui')
| -rw-r--r-- | src/test/ui/macros/recovery-allowed.rs | 8 | ||||
| -rw-r--r-- | src/test/ui/macros/recovery-allowed.stderr | 10 | ||||
| -rw-r--r-- | src/test/ui/macros/recovery-forbidden.rs | 13 |
3 files changed, 31 insertions, 0 deletions
diff --git a/src/test/ui/macros/recovery-allowed.rs b/src/test/ui/macros/recovery-allowed.rs new file mode 100644 index 00000000000..ebf65f1cc01 --- /dev/null +++ b/src/test/ui/macros/recovery-allowed.rs @@ -0,0 +1,8 @@ +macro_rules! please_recover { + ($a:expr) => {}; +} + +please_recover! { not 1 } +//~^ ERROR unexpected `1` after identifier + +fn main() {} diff --git a/src/test/ui/macros/recovery-allowed.stderr b/src/test/ui/macros/recovery-allowed.stderr new file mode 100644 index 00000000000..ec036e8b1e2 --- /dev/null +++ b/src/test/ui/macros/recovery-allowed.stderr @@ -0,0 +1,10 @@ +error: unexpected `1` after identifier + --> $DIR/recovery-allowed.rs:5:23 + | +LL | please_recover! { not 1 } + | ----^ + | | + | help: use `!` to perform bitwise not + +error: aborting due to previous error + diff --git a/src/test/ui/macros/recovery-forbidden.rs b/src/test/ui/macros/recovery-forbidden.rs new file mode 100644 index 00000000000..5dd2619330c --- /dev/null +++ b/src/test/ui/macros/recovery-forbidden.rs @@ -0,0 +1,13 @@ +// check-pass + +macro_rules! dont_recover_here { + ($e:expr) => { + compile_error!("Must not recover to single !1 expr"); + }; + + (not $a:literal) => {}; +} + +dont_recover_here! { not 1 } + +fn main() {} |
