diff --git a/src/tools/rustfmt/src/expr.rs b/src/tools/rustfmt/src/expr.rs index 51b73351fe6a5..d34706a2ba5cd 100644 --- a/src/tools/rustfmt/src/expr.rs +++ b/src/tools/rustfmt/src/expr.rs @@ -1553,7 +1553,10 @@ pub(crate) fn can_be_overflowed_expr( } // Handle always block-like expressions - ast::ExprKind::Gen(..) | ast::ExprKind::Block(..) | ast::ExprKind::Closure(..) => true, + ast::ExprKind::Gen(..) + | ast::ExprKind::Block(..) + | ast::ExprKind::Closure(..) + | ast::ExprKind::TryBlock(..) => true, // Handle `[]` and `{}`-like expressions ast::ExprKind::Array(..) | ast::ExprKind::Struct(..) => { diff --git a/src/tools/rustfmt/tests/source/try_block.rs b/src/tools/rustfmt/tests/source/try_block.rs index e324a13317584..62f0492f96620 100644 --- a/src/tools/rustfmt/tests/source/try_block.rs +++ b/src/tools/rustfmt/tests/source/try_block.rs @@ -27,5 +27,13 @@ fn baz() -> Option { let x: Option = try { baz()?; baz()?; baz()?; 7 }; + let _ = overflowed_expr( + x, + try { + foo()?; + bar()?; + }, + ); + return None; } diff --git a/src/tools/rustfmt/tests/source/try_blocks_heterogeneous.rs b/src/tools/rustfmt/tests/source/try_blocks_heterogeneous.rs index 7a1135cfbc764..056bedafef6cb 100644 --- a/src/tools/rustfmt/tests/source/try_blocks_heterogeneous.rs +++ b/src/tools/rustfmt/tests/source/try_blocks_heterogeneous.rs @@ -35,5 +35,15 @@ fn baz() -> Option { let x = try bikeshed Foo {}; + let x = try bikeshed Result {}; + + let _ = overflowed_expr( + x, + try bikeshed Option<_> { + foo()?; + bar()?; + }, + ); + return None; } diff --git a/src/tools/rustfmt/tests/target/try_block.rs b/src/tools/rustfmt/tests/target/try_block.rs index 61da123b735d8..f9d9909f524fe 100644 --- a/src/tools/rustfmt/tests/target/try_block.rs +++ b/src/tools/rustfmt/tests/target/try_block.rs @@ -26,5 +26,10 @@ fn baz() -> Option { 7 }; + let _ = overflowed_expr(x, try { + foo()?; + bar()?; + }); + return None; } diff --git a/src/tools/rustfmt/tests/target/try_blocks_heterogeneous.rs b/src/tools/rustfmt/tests/target/try_blocks_heterogeneous.rs index 018d53ed35e41..ce0a3cf704bbf 100644 --- a/src/tools/rustfmt/tests/target/try_blocks_heterogeneous.rs +++ b/src/tools/rustfmt/tests/target/try_blocks_heterogeneous.rs @@ -37,5 +37,16 @@ fn baz() -> Option { let x = try bikeshed Foo {}; + let x = try bikeshed Result< + VeryVeryVeryVeryVeryLongTypeForSuccess, + VeryVeryVeryVeryVeryLongTypeForFailure, + > { + }; + + let _ = overflowed_expr(x, try bikeshed Option<_> { + foo()?; + bar()?; + }); + return None; }