]> git.lizzy.rs Git - rust.git/commitdiff
Allow unlabeled breaks from desugared `?` in labeled blocks
authorSamrat Man Singh <samratmansingh@gmail.com>
Mon, 25 May 2020 15:15:26 +0000 (20:45 +0530)
committerSamrat Man Singh <samratmansingh@gmail.com>
Mon, 25 May 2020 19:48:07 +0000 (01:18 +0530)
src/librustc_passes/loops.rs
src/test/ui/label/label_break_value_desugared_break.rs [new file with mode: 0644]

index 09b3d44020d8160b486cfaa94e70ad1796a4f87e..767a6909d31d44f26b53a5d54dc933ae5b660be5 100644 (file)
@@ -9,6 +9,7 @@
 use rustc_middle::ty::query::Providers;
 use rustc_middle::ty::TyCtxt;
 use rustc_session::Session;
+use rustc_span::hygiene::DesugaringKind;
 use rustc_span::Span;
 
 #[derive(Clone, Copy, Debug, PartialEq)]
@@ -203,7 +204,7 @@ fn require_label_in_labeled_block(
         label: &Destination,
         cf_type: &str,
     ) -> bool {
-        if self.cx == LabeledBlock {
+        if !span.is_desugaring(DesugaringKind::QuestionMark) && self.cx == LabeledBlock {
             if label.label.is_none() {
                 struct_span_err!(
                     self.sess,
diff --git a/src/test/ui/label/label_break_value_desugared_break.rs b/src/test/ui/label/label_break_value_desugared_break.rs
new file mode 100644 (file)
index 0000000..de883b6
--- /dev/null
@@ -0,0 +1,12 @@
+// compile-flags: --edition 2018
+#![feature(label_break_value, try_blocks)]
+
+// run-pass
+fn main() {
+    let _: Result<(), ()> = try {
+        'foo: {
+            Err(())?;
+            break 'foo;
+        }
+    };
+}