Skip to content

Commit 920b5ee

Browse files
Lint on extern in item declaration position
1 parent 8a3edb1 commit 920b5ee

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

compiler/rustc_ast_lowering/src/item.rs

+13-8
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
310310
);
311311
let sig = hir::FnSig {
312312
decl,
313-
header: this.lower_fn_header(header),
313+
header: this.lower_fn_header(header, fn_sig_span, id),
314314
span: fn_sig_span,
315315
};
316316
hir::ItemKind::Fn(sig, generics, body_id)
@@ -806,13 +806,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
806806
AssocItemKind::Fn(_, ref sig, ref generics, None) => {
807807
let names = self.lower_fn_params_to_names(&sig.decl);
808808
let (generics, sig) =
809-
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);
810810
(generics, hir::TraitItemKind::Fn(sig, hir::TraitFn::Required(names)))
811811
}
812812
AssocItemKind::Fn(_, ref sig, ref generics, Some(ref body)) => {
813813
let body_id = self.lower_fn_body_block(i.span, &sig.decl, Some(body));
814814
let (generics, sig) =
815-
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);
816816
(generics, hir::TraitItemKind::Fn(sig, hir::TraitFn::Provided(body_id)))
817817
}
818818
AssocItemKind::TyAlias(_, ref generics, ref bounds, ref default) => {
@@ -882,6 +882,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
882882
impl_item_def_id,
883883
impl_trait_return_allow,
884884
asyncness.opt_return_id(),
885+
i.id,
885886
);
886887

887888
(generics, hir::ImplItemKind::Fn(sig, body_id))
@@ -1275,8 +1276,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
12751276
fn_def_id: LocalDefId,
12761277
impl_trait_return_allow: bool,
12771278
is_async: Option<NodeId>,
1279+
id: NodeId,
12781280
) -> (hir::Generics<'hir>, hir::FnSig<'hir>) {
1279-
let header = self.lower_fn_header(sig.header);
1281+
let header = self.lower_fn_header(sig.header, sig.span, id);
12801282
let (generics, decl) = self.add_in_band_defs(
12811283
generics,
12821284
fn_def_id,
@@ -1293,12 +1295,12 @@ impl<'hir> LoweringContext<'_, 'hir> {
12931295
(generics, hir::FnSig { header, decl, span: sig.span })
12941296
}
12951297

1296-
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 {
12971299
hir::FnHeader {
12981300
unsafety: self.lower_unsafety(h.unsafety),
12991301
asyncness: self.lower_asyncness(h.asyncness),
13001302
constness: self.lower_constness(h.constness),
1301-
abi: self.lower_extern(h.ext),
1303+
abi: self.lower_extern(h.ext, span, id),
13021304
}
13031305
}
13041306

@@ -1309,10 +1311,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
13091311
})
13101312
}
13111313

1312-
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 {
13131315
match ext {
13141316
Extern::None => abi::Abi::Rust,
1315-
Extern::Implicit => abi::Abi::C,
1317+
Extern::Implicit => {
1318+
self.maybe_lint_missing_abi(span, id, abi::Abi::C);
1319+
abi::Abi::C
1320+
}
13161321
Extern::Explicit(abi) => self.lower_abi(abi),
13171322
}
13181323
}

compiler/rustc_ast_lowering/src/lib.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1290,14 +1290,15 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
12901290
}
12911291
TyKind::BareFn(ref f) => self.with_in_scope_lifetime_defs(&f.generic_params, |this| {
12921292
this.with_anonymous_lifetime_mode(AnonymousLifetimeMode::PassThrough, |this| {
1293+
let span = this.sess.source_map().next_point(t.span.shrink_to_lo());
12931294
hir::TyKind::BareFn(this.arena.alloc(hir::BareFnTy {
12941295
generic_params: this.lower_generic_params(
12951296
&f.generic_params,
12961297
&NodeMap::default(),
12971298
ImplTraitContext::disallowed(),
12981299
),
12991300
unsafety: this.lower_unsafety(f.unsafety),
1300-
abi: this.lower_extern(f.ext),
1301+
abi: this.lower_extern(f.ext, span, t.id),
13011302
decl: this.lower_fn_decl(&f.decl, None, false, None),
13021303
param_names: this.lower_fn_params_to_names(&f.decl),
13031304
}))

0 commit comments

Comments
 (0)