diff options
| author | Samrat Man Singh <samratmansingh@gmail.com> | 2020-05-25 20:45:26 +0530 |
|---|---|---|
| committer | Samrat Man Singh <samratmansingh@gmail.com> | 2020-05-26 01:18:07 +0530 |
| commit | 91dcbbbf50baa02d0757085bb5a9bd69bae5a5a4 (patch) | |
| tree | 7215fee3b309234c401704659b0e4259168ec4c3 | |
| parent | ff991d60349201a90ca15202dd0323ebdfab8745 (diff) | |
| download | rust-91dcbbbf50baa02d0757085bb5a9bd69bae5a5a4.tar.gz rust-91dcbbbf50baa02d0757085bb5a9bd69bae5a5a4.zip | |
Allow unlabeled breaks from desugared `?` in labeled blocks
| -rw-r--r-- | src/librustc_passes/loops.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/label/label_break_value_desugared_break.rs | 12 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/librustc_passes/loops.rs b/src/librustc_passes/loops.rs index 09b3d44020d..767a6909d31 100644 --- a/src/librustc_passes/loops.rs +++ b/src/librustc_passes/loops.rs @@ -9,6 +9,7 @@ use rustc_middle::hir::map::Map; 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 @@ impl<'a, 'hir> CheckLoopVisitor<'a, 'hir> { 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 index 00000000000..de883b61111 --- /dev/null +++ b/src/test/ui/label/label_break_value_desugared_break.rs @@ -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; + } + }; +} |
