From c8d9cd99fa2f389a69c0c42de9945f46977b11d7 Mon Sep 17 00:00:00 2001 From: Esteban Küber Date: Sat, 13 Jul 2019 21:15:21 -0700 Subject: Detect `fn` with a body in an `extern` block --- src/test/ui/extern/extern-ffi-fn-with-body.rs | 11 +++++++++++ src/test/ui/extern/extern-ffi-fn-with-body.stderr | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/test/ui/extern/extern-ffi-fn-with-body.rs create mode 100644 src/test/ui/extern/extern-ffi-fn-with-body.stderr (limited to 'src/test') diff --git a/src/test/ui/extern/extern-ffi-fn-with-body.rs b/src/test/ui/extern/extern-ffi-fn-with-body.rs new file mode 100644 index 00000000000..4cf563514ea --- /dev/null +++ b/src/test/ui/extern/extern-ffi-fn-with-body.rs @@ -0,0 +1,11 @@ +extern "C" { + fn foo() -> i32 { //~ ERROR incorrect `fn` inside `extern` block + return 0; + } +} + +extern "C" fn bar() -> i32 { + return 0; +} + +fn main() {} diff --git a/src/test/ui/extern/extern-ffi-fn-with-body.stderr b/src/test/ui/extern/extern-ffi-fn-with-body.stderr new file mode 100644 index 00000000000..02d1ee5a753 --- /dev/null +++ b/src/test/ui/extern/extern-ffi-fn-with-body.stderr @@ -0,0 +1,18 @@ +error: incorrect `fn` inside `extern` block + --> $DIR/extern-ffi-fn-with-body.rs:2:8 + | +LL | extern "C" { + | ------ `extern` blocks define existing foreign functions and `fn`s inside of them can't have a body +LL | fn foo() -> i32 { + | ________^^^__________- + | | | + | | can't have a body +LL | | return 0; +LL | | } + | |_____- this body is invalid here + | + = 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 + -- cgit 1.4.1-3-g733a5