summary refs log tree commit diff
path: root/src/test/ui/parser
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2019-09-29 19:22:18 -0400
committerAaron Hill <aa1ronham@gmail.com>2019-10-02 00:38:52 -0400
commit73b50d211b254bf72ce10b5ea4c3e0033e3189f4 (patch)
treeffd2406f05d8bae7607cac2399493bbd331657ef /src/test/ui/parser
parent7130fc54e05e247f93c7ecc2d10f56b314c97831 (diff)
downloadrust-73b50d211b254bf72ce10b5ea4c3e0033e3189f4.tar.gz
rust-73b50d211b254bf72ce10b5ea4c3e0033e3189f4.zip
Add support for 'extern const fn'
This works just as you might expect - an 'extern const fn' is a 'const
fn' that is callable from foreign code.

Currently, panicking is not allowed in consts. When RFC 2345 is
stabilized, then panicking in an 'extern const fn' will produce a
compile-time error when invoked at compile time, and an abort when
invoked at runtime.

Since this is extending the language (we're allowing the `const` keyword
in a new context), I believe that this will need an FCP. However, it's a
very minor change, so I didn't think that filing an RFC was necessary.

This will allow libc (and other FFI crates) to make many functions
`const`, without having to give up on making them `extern` as well.
Diffstat (limited to 'src/test/ui/parser')
-rw-r--r--src/test/ui/parser/no-const-fn-in-extern-block.rs8
-rw-r--r--src/test/ui/parser/no-const-fn-in-extern-block.stderr14
2 files changed, 22 insertions, 0 deletions
diff --git a/src/test/ui/parser/no-const-fn-in-extern-block.rs b/src/test/ui/parser/no-const-fn-in-extern-block.rs
new file mode 100644
index 00000000000..29f26389ded
--- /dev/null
+++ b/src/test/ui/parser/no-const-fn-in-extern-block.rs
@@ -0,0 +1,8 @@
+extern {
+    const fn foo();
+    //~^ ERROR extern items cannot be `const`
+    const unsafe fn bar();
+    //~^ ERROR extern items cannot be `const`
+}
+
+fn main() {}
diff --git a/src/test/ui/parser/no-const-fn-in-extern-block.stderr b/src/test/ui/parser/no-const-fn-in-extern-block.stderr
new file mode 100644
index 00000000000..5b4663a702f
--- /dev/null
+++ b/src/test/ui/parser/no-const-fn-in-extern-block.stderr
@@ -0,0 +1,14 @@
+error: extern items cannot be `const`
+  --> $DIR/no-const-fn-in-extern-block.rs:2:5
+   |
+LL |     const fn foo();
+   |     ^^^^^
+
+error: extern items cannot be `const`
+  --> $DIR/no-const-fn-in-extern-block.rs:4:5
+   |
+LL |     const unsafe fn bar();
+   |     ^^^^^
+
+error: aborting due to 2 previous errors
+