Skip to content

Commit

Permalink
Rollup merge of #75350 - estebank:foreign-fn-with-body-ice, r=davidtwco
Browse files Browse the repository at this point in the history
Do not ICE when lowering invalid extern fn with bodies

Fix #75283.
  • Loading branch information
JohnTitor authored Aug 10, 2020
2 parents 64d7109 + bdf426a commit 5369619
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/librustc_ast_lowering/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
.resolver
.trait_map()
.iter()
.map(|(&k, v)| (self.node_id_to_hir_id[k].unwrap(), v.clone()))
.filter_map(|(&k, v)| {
self.node_id_to_hir_id.get(k).and_then(|id| id.as_ref()).map(|id| (*id, v.clone()))
})
.collect();

let mut def_id_to_hir_id = IndexVec::default();
Expand Down
6 changes: 6 additions & 0 deletions src/test/ui/issues/issue-75283.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
extern "C" {
fn lol() { //~ ERROR incorrect function inside `extern` block
println!("");
}
}
fn main() {}
18 changes: 18 additions & 0 deletions src/test/ui/issues/issue-75283.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
error: incorrect function inside `extern` block
--> $DIR/issue-75283.rs:2:8
|
LL | extern "C" {
| ---------- `extern` blocks define existing foreign functions and functions inside of them cannot have a body
LL | fn lol() {
| ________^^^___-
| | |
| | cannot have a body
LL | | println!("");
LL | | }
| |_____- help: remove the invalid body: `;`
|
= help: you might have meant to write a function accessible through FFI, which can be done by writing `extern fn` outside of the `extern` block
= note: for more information, visit https://doc.rust-lang.org/std/keyword.extern.html

error: aborting due to previous error

0 comments on commit 5369619

Please sign in to comment.