diff --git a/src/expr.rs b/src/expr.rs
index 75a7ff21abe..5876409a9fa 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -570,19 +570,6 @@ fn rewrite_closure(capture: ast::CaptureBy,
         rewrite.map(|rw| format!("{} {}", prefix, rw))
     }
 
-    fn no_weird_visual_indent(block_str: &str, context: &RewriteContext) -> bool {
-        let mut prev_indent_width = 0;
-        for line in block_str.lines() {
-            let cur_indent_width = line.find(|c: char| !c.is_whitespace()).unwrap_or(0);
-            if prev_indent_width > cur_indent_width + context.config.tab_spaces &&
-               line.find('}').unwrap_or(0) != cur_indent_width {
-                return false;
-            }
-            prev_indent_width = cur_indent_width;
-        }
-        true
-    }
-
     fn rewrite_closure_block(block: &ast::Block,
                              prefix: String,
                              context: &RewriteContext,
@@ -592,9 +579,7 @@ fn rewrite_closure(capture: ast::CaptureBy,
         // closure is large.
         if let Some(block_str) = block.rewrite(&context, shape) {
             let block_threshold = context.config.closure_block_indent_threshold;
-            if (block_threshold < 0 ||
-                block_str.matches('\n').count() <= block_threshold as usize) &&
-               no_weird_visual_indent(&block_str, context) {
+            if block_threshold < 0 || block_str.matches('\n').count() <= block_threshold as usize {
                 if let Some(block_str) = block_str.rewrite(context, shape) {
                     return Some(format!("{} {}", prefix, block_str));
                 }
@@ -697,8 +682,11 @@ impl Rewrite for ast::Block {
         };
 
         visitor.visit_block(self);
-
-        Some(format!("{}{}", prefix, visitor.buffer))
+        if visitor.failed {
+            None
+        } else {
+            Some(format!("{}{}", prefix, visitor.buffer))
+        }
     }
 }
 
diff --git a/src/visitor.rs b/src/visitor.rs
index 86fb1bce9d9..71013d085d5 100644
--- a/src/visitor.rs
+++ b/src/visitor.rs
@@ -39,6 +39,7 @@ pub struct FmtVisitor<'a> {
     // FIXME: use an RAII util or closure for indenting
     pub block_indent: Indent,
     pub config: &'a Config,
+    pub failed: bool,
 }
 
 impl<'a> FmtVisitor<'a> {
@@ -65,6 +66,9 @@ impl<'a> FmtVisitor<'a> {
                                            Shape::legacy(self.config.max_width -
                                                          self.block_indent.width(),
                                                          self.block_indent));
+                if rewrite.is_none() {
+                    self.failed = true;
+                }
                 self.push_rewrite(stmt.span, rewrite);
             }
             ast::StmtKind::Mac(ref mac) => {
@@ -457,6 +461,7 @@ impl<'a> FmtVisitor<'a> {
                 alignment: 0,
             },
             config: config,
+            failed: false,
         }
     }