@@ -37,6 +37,7 @@ use crate::{
37
37
RecordFieldPat , RecordLitField , Statement ,
38
38
} ,
39
39
item_scope:: BuiltinShadowMode ,
40
+ item_tree:: ItemTree ,
40
41
lang_item:: LangItem ,
41
42
path:: { GenericArgs , Path } ,
42
43
type_ref:: { Mutability , Rawness , TypeRef } ,
@@ -888,16 +889,24 @@ impl ExprCollector<'_> {
888
889
fn collect_block_ (
889
890
& mut self ,
890
891
block : ast:: BlockExpr ,
891
- mk_block : impl FnOnce ( BlockId , Box < [ Statement ] > , Option < ExprId > ) -> Expr ,
892
+ mk_block : impl FnOnce ( Option < BlockId > , Box < [ Statement ] > , Option < ExprId > ) -> Expr ,
892
893
) -> ExprId {
893
894
let file_local_id = self . ast_id_map . ast_id ( & block) ;
894
895
let ast_id = AstId :: new ( self . expander . current_file_id , file_local_id) ;
895
- let block_loc =
896
- BlockLoc { ast_id, module : self . expander . def_map . module_id ( self . expander . module ) } ;
897
- let block_id = self . db . intern_block ( block_loc) ;
898
896
899
- let ( module, def_map) = match self . db . block_def_map ( block_id) {
900
- Some ( def_map) => {
897
+ let block_id = if ItemTree :: block_has_items ( self . db , ast_id. file_id , & block) {
898
+ Some ( self . db . intern_block ( BlockLoc {
899
+ ast_id,
900
+ module : self . expander . def_map . module_id ( self . expander . module ) ,
901
+ } ) )
902
+ } else {
903
+ None
904
+ } ;
905
+
906
+ let ( module, def_map) = match block_id
907
+ . and_then ( |block_id| self . db . block_def_map ( block_id) . zip ( Some ( block_id) ) )
908
+ {
909
+ Some ( ( def_map, block_id) ) => {
901
910
self . body . block_scopes . push ( block_id) ;
902
911
( def_map. root ( ) , def_map)
903
912
}
0 commit comments