diff --git a/src/expr.rs b/src/expr.rs index cf0fa0af96..fbab681474 100644 --- a/src/expr.rs +++ b/src/expr.rs @@ -1727,7 +1727,10 @@ pub(crate) mod parsing { || input.peek(Token![move]) { expr_closure(input, allow_struct).map(Expr::Closure) - } else if input.peek(Token![for]) && input.peek2(Token![<]) && input.peek3(Lifetime) { + } else if input.peek(Token![for]) + && input.peek2(Token![<]) + && (input.peek3(Lifetime) || input.peek3(Token![>])) + { let begin = input.fork(); input.parse::()?; expr_closure(input, allow_struct)?; @@ -2010,7 +2013,9 @@ pub(crate) mod parsing { Expr::If(input.parse()?) } else if input.peek(Token![while]) { Expr::While(input.parse()?) - } else if input.peek(Token![for]) { + } else if input.peek(Token![for]) + && !(input.peek2(Token![<]) && (input.peek3(Lifetime) || input.peek3(Token![>]))) + { Expr::ForLoop(input.parse()?) } else if input.peek(Token![loop]) { Expr::Loop(input.parse()?) diff --git a/tests/repo/mod.rs b/tests/repo/mod.rs index 01a8bade54..a584f6b867 100644 --- a/tests/repo/mod.rs +++ b/tests/repo/mod.rs @@ -14,10 +14,6 @@ const REVISION: &str = "98ad6a5519651af36e246c0335c964dd52c554ba"; #[rustfmt::skip] static EXCLUDE_FILES: &[&str] = &[ - // TODO: for<> closures with empty lifetime list - "src/tools/rustfmt/tests/source/closure.rs", - "src/tools/rustfmt/tests/target/closure.rs", - // TODO: dyn* "src/test/ui/dyn-star/const.rs", "src/test/ui/dyn-star/drop.rs",