diff --git a/src/librustc_const_eval/check_match.rs b/src/librustc_const_eval/check_match.rs
index da4445ef68947..a1e7d0a1e34de 100644
--- a/src/librustc_const_eval/check_match.rs
+++ b/src/librustc_const_eval/check_match.rs
@@ -410,10 +410,13 @@ fn check_exhaustive<'a, 'tcx>(cx: &MatchCheckCtxt<'a, 'tcx>,
                         },
                         _ => bug!(),
                     };
-                    span_err!(cx.tcx.sess, sp, E0297,
+                    let pattern_string = pat_to_string(witness);
+                    struct_span_err!(cx.tcx.sess, sp, E0297,
                         "refutable pattern in `for` loop binding: \
                                 `{}` not covered",
-                                pat_to_string(witness));
+                                pattern_string)
+                        .span_label(sp, &format!("pattern `{}` not covered", pattern_string))
+                        .emit();
                 },
                 _ => {
                     let pattern_strings: Vec<_> = witnesses.iter().map(|w| {
diff --git a/src/test/compile-fail/E0297.rs b/src/test/compile-fail/E0297.rs
index 43166c1a9e83e..32c129b22a166 100644
--- a/src/test/compile-fail/E0297.rs
+++ b/src/test/compile-fail/E0297.rs
@@ -11,5 +11,7 @@
 fn main() {
     let xs : Vec<Option<i32>> = vec!(Some(1), None);
 
-    for Some(x) in xs {} //~ ERROR E0297
+    for Some(x) in xs {}
+    //~^ ERROR E0297
+    //~| NOTE pattern `None` not covered
 }