diff --git a/src/expr.rs b/src/expr.rs index db8d5b9211..8216191c2f 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1284,7 +1284,7 @@ pub(crate) mod parsing { if precedence == Precedence::Compare { if let Expr::Binary(lhs) = &lhs { if Precedence::of_binop(&lhs.op) == Precedence::Compare { - break; + return Err(input.error("comparison operators cannot be chained")); } } } @@ -1346,7 +1346,7 @@ pub(crate) mod parsing { if precedence == Precedence::Compare { if let Expr::Binary(lhs) = &lhs { if Precedence::of_binop(&lhs.op) == Precedence::Compare { - break; + return Err(input.error("comparison operators cannot be chained")); } } } diff --git a/tests/test_expr.rs b/tests/test_expr.rs index f79e4fafda..399972c424 100644 --- a/tests/test_expr.rs +++ b/tests/test_expr.rs @@ -646,6 +646,9 @@ fn test_assign_range_precedence() { fn test_chained_comparison() { // https://github.com/dtolnay/syn/issues/1738 let _ = syn::parse_str::("a = a < a <"); + + let err = syn::parse_str::("a < a < a").unwrap_err(); + assert_eq!("comparison operators cannot be chained", err.to_string()); } #[test]