Allow unlabeled breaks from desugared `?` in labeled blocks

This commit is contained in:
Samrat Man Singh 2020-05-25 20:45:26 +05:30
parent ff991d6034
commit 91dcbbbf50
2 changed files with 14 additions and 1 deletions

View File

@ -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,

View File

@ -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;
}
};
}