about summary refs log tree commit diff
path: root/compiler/rustc_parse/src/parser
diff options
context:
space:
mode:
authorYuki Okushi <yuki.okushi@huawei.com>2021-07-29 05:49:56 +0900
committerYuki Okushi <yuki.okushi@huawei.com>2021-09-17 14:02:00 +0900
commit9342be5538ad5c97e8d2496e1cbbf2530d377e5e (patch)
tree1d3514980dcc024dfabfa556e0aa7feafcd25954 /compiler/rustc_parse/src/parser
parent78a46efff06558674b51c10d8d81758285746ab5 (diff)
downloadrust-9342be5538ad5c97e8d2496e1cbbf2530d377e5e.tar.gz
rust-9342be5538ad5c97e8d2496e1cbbf2530d377e5e.zip
Recover invalid assoc type bounds using `==`
Diffstat (limited to 'compiler/rustc_parse/src/parser')
-rw-r--r--compiler/rustc_parse/src/parser/diagnostics.rs14
1 files changed, 13 insertions, 1 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs
index 4fccfc287fd..39651bd5e67 100644
--- a/compiler/rustc_parse/src/parser/diagnostics.rs
+++ b/compiler/rustc_parse/src/parser/diagnostics.rs
@@ -1955,7 +1955,19 @@ impl<'a> Parser<'a> {
         }
         match self.parse_expr_res(Restrictions::CONST_EXPR, None) {
             Ok(expr) => {
-                if token::Comma == self.token.kind || self.token.kind.should_end_const_arg() {
+                // Find a mistake like `MyTrait<Assoc == S::Assoc>`.
+                if token::EqEq == snapshot.token.kind {
+                    err.span_suggestion(
+                        snapshot.token.span,
+                        "replace `==` with `=`",
+                        "=".to_string(),
+                        Applicability::MaybeIncorrect,
+                    );
+                    let value = self.mk_expr_err(expr.span);
+                    err.emit();
+                    return Ok(GenericArg::Const(AnonConst { id: ast::DUMMY_NODE_ID, value }));
+                } else if token::Comma == self.token.kind || self.token.kind.should_end_const_arg()
+                {
                     // Avoid the following output by checking that we consumed a full const arg:
                     // help: expressions must be enclosed in braces to be used as const generic
                     //       arguments