@@ -681,13 +681,20 @@ impl<'a> LoweringContext<'a> {
681
681
Ident :: with_empty_ctxt ( Symbol :: gensym ( s) )
682
682
}
683
683
684
- fn allow_internal_unstable ( & self , reason : CompilerDesugaringKind , span : Span ) -> Span {
684
+ /// Reuses the span but adds information like the kind of the desugaring and features that are
685
+ /// allowed inside this span.
686
+ fn mark_span_with_reason (
687
+ & self ,
688
+ reason : CompilerDesugaringKind ,
689
+ span : Span ,
690
+ allow_internal_unstable : Vec < Symbol > ,
691
+ ) -> Span {
685
692
let mark = Mark :: fresh ( Mark :: root ( ) ) ;
686
693
mark. set_expn_info ( source_map:: ExpnInfo {
687
694
call_site : span,
688
695
def_site : Some ( span) ,
689
696
format : source_map:: CompilerDesugaring ( reason) ,
690
- allow_internal_unstable : true ,
697
+ allow_internal_unstable,
691
698
allow_internal_unsafe : false ,
692
699
local_inner_macros : false ,
693
700
edition : source_map:: hygiene:: default_edition ( ) ,
@@ -964,7 +971,13 @@ impl<'a> LoweringContext<'a> {
964
971
attrs : ThinVec :: new ( ) ,
965
972
} ;
966
973
967
- let unstable_span = self . allow_internal_unstable ( CompilerDesugaringKind :: Async , span) ;
974
+ let unstable_span = self . mark_span_with_reason (
975
+ CompilerDesugaringKind :: Async ,
976
+ span,
977
+ vec ! [
978
+ Symbol :: intern( "gen_future" ) ,
979
+ ] ,
980
+ ) ;
968
981
let gen_future = self . expr_std_path (
969
982
unstable_span, & [ "future" , "from_generator" ] , None , ThinVec :: new ( ) ) ;
970
983
hir:: ExprKind :: Call ( P ( gen_future) , hir_vec ! [ generator] )
@@ -1351,9 +1364,10 @@ impl<'a> LoweringContext<'a> {
1351
1364
// desugaring that explicitly states that we don't want to track that.
1352
1365
// Not tracking it makes lints in rustc and clippy very fragile as
1353
1366
// frequently opened issues show.
1354
- let exist_ty_span = self . allow_internal_unstable (
1367
+ let exist_ty_span = self . mark_span_with_reason (
1355
1368
CompilerDesugaringKind :: ExistentialReturnType ,
1356
1369
span,
1370
+ Vec :: new ( ) , // doesn'c actually allow anything unstable
1357
1371
) ;
1358
1372
1359
1373
let exist_ty_def_index = self
@@ -3912,8 +3926,13 @@ impl<'a> LoweringContext<'a> {
3912
3926
} ) ,
3913
3927
ExprKind :: TryBlock ( ref body) => {
3914
3928
self . with_catch_scope ( body. id , |this| {
3915
- let unstable_span =
3916
- this. allow_internal_unstable ( CompilerDesugaringKind :: TryBlock , body. span ) ;
3929
+ let unstable_span = this. mark_span_with_reason (
3930
+ CompilerDesugaringKind :: TryBlock ,
3931
+ body. span ,
3932
+ vec ! [
3933
+ Symbol :: intern( "try_trait" ) ,
3934
+ ] ,
3935
+ ) ;
3917
3936
let mut block = this. lower_block ( body, true ) . into_inner ( ) ;
3918
3937
let tail = block. expr . take ( ) . map_or_else (
3919
3938
|| {
@@ -4345,9 +4364,10 @@ impl<'a> LoweringContext<'a> {
4345
4364
// expand <head>
4346
4365
let head = self . lower_expr ( head) ;
4347
4366
let head_sp = head. span ;
4348
- let desugared_span = self . allow_internal_unstable (
4367
+ let desugared_span = self . mark_span_with_reason (
4349
4368
CompilerDesugaringKind :: ForLoop ,
4350
4369
head_sp,
4370
+ Vec :: new ( ) ,
4351
4371
) ;
4352
4372
4353
4373
let iter = self . str_to_ident ( "iter" ) ;
@@ -4510,8 +4530,13 @@ impl<'a> LoweringContext<'a> {
4510
4530
// return Try::from_error(From::from(err)),
4511
4531
// }
4512
4532
4513
- let unstable_span =
4514
- self . allow_internal_unstable ( CompilerDesugaringKind :: QuestionMark , e. span ) ;
4533
+ let unstable_span = self . mark_span_with_reason (
4534
+ CompilerDesugaringKind :: QuestionMark ,
4535
+ e. span ,
4536
+ vec ! [
4537
+ Symbol :: intern( "try_trait" )
4538
+ ] ,
4539
+ ) ;
4515
4540
4516
4541
// `Try::into_result(<expr>)`
4517
4542
let discr = {
0 commit comments