From 371060b5988158fdaa3b7abd6167a28d95d74b38 Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Sun, 9 Feb 2020 23:01:23 -0500 Subject: [PATCH] [parser] change an instance of span_bug() to struct_span_err() to avoid ICE --- src/librustc_parse/parser/ty.rs | 5 ++++- src/test/ui/parser/issue-68890.rs | 4 ++++ src/test/ui/parser/issue-68890.stderr | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/parser/issue-68890.rs create mode 100644 src/test/ui/parser/issue-68890.stderr diff --git a/src/librustc_parse/parser/ty.rs b/src/librustc_parse/parser/ty.rs index 990661bf6b5..a573a1ee699 100644 --- a/src/librustc_parse/parser/ty.rs +++ b/src/librustc_parse/parser/ty.rs @@ -214,7 +214,10 @@ impl<'a> Parser<'a> { let path = match bounds.remove(0) { GenericBound::Trait(pt, ..) => pt.trait_ref.path, GenericBound::Outlives(..) => { - self.span_bug(ty.span, "unexpected lifetime bound") + return Err(self.struct_span_err( + ty.span, + "expected trait bound, not lifetime bound", + )); } }; self.parse_remaining_bounds(Vec::new(), path, lo, true) diff --git a/src/test/ui/parser/issue-68890.rs b/src/test/ui/parser/issue-68890.rs new file mode 100644 index 00000000000..a7c5a5e1300 --- /dev/null +++ b/src/test/ui/parser/issue-68890.rs @@ -0,0 +1,4 @@ +enum e{A((?'a a+?+l))} +//~^ ERROR `?` may only modify trait bounds, not lifetime bounds +//~| ERROR expected one of `)`, `+`, or `,` +//~| ERROR expected trait bound, not lifetime bound diff --git a/src/test/ui/parser/issue-68890.stderr b/src/test/ui/parser/issue-68890.stderr new file mode 100644 index 00000000000..9bb8761b67b --- /dev/null +++ b/src/test/ui/parser/issue-68890.stderr @@ -0,0 +1,20 @@ +error: `?` may only modify trait bounds, not lifetime bounds + --> $DIR/issue-68890.rs:1:11 + | +LL | enum e{A((?'a a+?+l))} + | ^ + +error: expected one of `)`, `+`, or `,`, found `a` + --> $DIR/issue-68890.rs:1:15 + | +LL | enum e{A((?'a a+?+l))} + | ^ expected one of `)`, `+`, or `,` + +error: expected trait bound, not lifetime bound + --> $DIR/issue-68890.rs:1:11 + | +LL | enum e{A((?'a a+?+l))} + | ^^^ + +error: aborting due to 3 previous errors +