@@ -310,19 +310,24 @@ impl<'hir> LoweringContext<'_, 'hir> {
310
310
) ;
311
311
let sig = hir:: FnSig {
312
312
decl,
313
- header : this. lower_fn_header ( header) ,
313
+ header : this. lower_fn_header ( header, fn_sig_span , id ) ,
314
314
span : fn_sig_span,
315
315
} ;
316
316
hir:: ItemKind :: Fn ( sig, generics, body_id)
317
317
} )
318
318
}
319
319
ItemKind :: Mod ( ref m) => hir:: ItemKind :: Mod ( self . lower_mod ( m) ) ,
320
- ItemKind :: ForeignMod ( ref fm) => hir:: ItemKind :: ForeignMod {
321
- abi : fm. abi . map_or ( abi:: Abi :: C , |abi| self . lower_abi ( abi) ) ,
322
- items : self
323
- . arena
324
- . alloc_from_iter ( fm. items . iter ( ) . map ( |x| self . lower_foreign_item_ref ( x) ) ) ,
325
- } ,
320
+ ItemKind :: ForeignMod ( ref fm) => {
321
+ if fm. abi . is_none ( ) {
322
+ self . maybe_lint_missing_abi ( span, id, abi:: Abi :: C ) ;
323
+ }
324
+ hir:: ItemKind :: ForeignMod {
325
+ abi : fm. abi . map_or ( abi:: Abi :: C , |abi| self . lower_abi ( abi) ) ,
326
+ items : self
327
+ . arena
328
+ . alloc_from_iter ( fm. items . iter ( ) . map ( |x| self . lower_foreign_item_ref ( x) ) ) ,
329
+ }
330
+ }
326
331
ItemKind :: GlobalAsm ( ref ga) => hir:: ItemKind :: GlobalAsm ( self . lower_global_asm ( ga) ) ,
327
332
ItemKind :: TyAlias ( _, ref gen, _, Some ( ref ty) ) => {
328
333
// We lower
@@ -801,13 +806,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
801
806
AssocItemKind :: Fn ( _, ref sig, ref generics, None ) => {
802
807
let names = self . lower_fn_params_to_names ( & sig. decl ) ;
803
808
let ( generics, sig) =
804
- self . lower_method_sig ( generics, sig, trait_item_def_id, false , None ) ;
809
+ self . lower_method_sig ( generics, sig, trait_item_def_id, false , None , i . id ) ;
805
810
( generics, hir:: TraitItemKind :: Fn ( sig, hir:: TraitFn :: Required ( names) ) )
806
811
}
807
812
AssocItemKind :: Fn ( _, ref sig, ref generics, Some ( ref body) ) => {
808
813
let body_id = self . lower_fn_body_block ( i. span , & sig. decl , Some ( body) ) ;
809
814
let ( generics, sig) =
810
- self . lower_method_sig ( generics, sig, trait_item_def_id, false , None ) ;
815
+ self . lower_method_sig ( generics, sig, trait_item_def_id, false , None , i . id ) ;
811
816
( generics, hir:: TraitItemKind :: Fn ( sig, hir:: TraitFn :: Provided ( body_id) ) )
812
817
}
813
818
AssocItemKind :: TyAlias ( _, ref generics, ref bounds, ref default) => {
@@ -877,6 +882,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
877
882
impl_item_def_id,
878
883
impl_trait_return_allow,
879
884
asyncness. opt_return_id ( ) ,
885
+ i. id ,
880
886
) ;
881
887
882
888
( generics, hir:: ImplItemKind :: Fn ( sig, body_id) )
@@ -1270,8 +1276,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
1270
1276
fn_def_id : LocalDefId ,
1271
1277
impl_trait_return_allow : bool ,
1272
1278
is_async : Option < NodeId > ,
1279
+ id : NodeId ,
1273
1280
) -> ( hir:: Generics < ' hir > , hir:: FnSig < ' hir > ) {
1274
- let header = self . lower_fn_header ( sig. header ) ;
1281
+ let header = self . lower_fn_header ( sig. header , sig . span , id ) ;
1275
1282
let ( generics, decl) = self . add_in_band_defs (
1276
1283
generics,
1277
1284
fn_def_id,
@@ -1288,12 +1295,12 @@ impl<'hir> LoweringContext<'_, 'hir> {
1288
1295
( generics, hir:: FnSig { header, decl, span : sig. span } )
1289
1296
}
1290
1297
1291
- fn lower_fn_header ( & mut self , h : FnHeader ) -> hir:: FnHeader {
1298
+ fn lower_fn_header ( & mut self , h : FnHeader , span : Span , id : NodeId ) -> hir:: FnHeader {
1292
1299
hir:: FnHeader {
1293
1300
unsafety : self . lower_unsafety ( h. unsafety ) ,
1294
1301
asyncness : self . lower_asyncness ( h. asyncness ) ,
1295
1302
constness : self . lower_constness ( h. constness ) ,
1296
- abi : self . lower_extern ( h. ext ) ,
1303
+ abi : self . lower_extern ( h. ext , span , id ) ,
1297
1304
}
1298
1305
}
1299
1306
@@ -1304,10 +1311,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
1304
1311
} )
1305
1312
}
1306
1313
1307
- pub ( super ) fn lower_extern ( & mut self , ext : Extern ) -> abi:: Abi {
1314
+ pub ( super ) fn lower_extern ( & mut self , ext : Extern , span : Span , id : NodeId ) -> abi:: Abi {
1308
1315
match ext {
1309
1316
Extern :: None => abi:: Abi :: Rust ,
1310
- Extern :: Implicit => abi:: Abi :: C ,
1317
+ Extern :: Implicit => {
1318
+ self . maybe_lint_missing_abi ( span, id, abi:: Abi :: C ) ;
1319
+ abi:: Abi :: C
1320
+ }
1311
1321
Extern :: Explicit ( abi) => self . lower_abi ( abi) ,
1312
1322
}
1313
1323
}
0 commit comments