about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2020-06-28 08:30:27 -0700
committerGitHub <noreply@github.com>2020-06-28 08:30:27 -0700
commit2c1b7329611f0310ed18dd9bb6dea99cd42302c1 (patch)
tree9910000e78770c7b7ca3e256002af4e1498b5209 /src
parent3f826a89740d6437f9ebd57d70f591a3ba8bbb1b (diff)
parent1d16aed7f0993a07dcd7302487fa5781468b5f69 (diff)
downloadrust-2c1b7329611f0310ed18dd9bb6dea99cd42302c1.tar.gz
rust-2c1b7329611f0310ed18dd9bb6dea99cd42302c1.zip
Rollup merge of #73795 - JohnTitor:tests-for-const-fn-ptrs, r=oli-obk
Add some `const_compare_raw_pointers`-related regression tests

Closes #71381
Closes #71382
Closes #71611
Closes #72352

r? @oli-obk, the author of #73398
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/const-generics/issues/issue-71381.rs33
-rw-r--r--src/test/ui/const-generics/issues/issue-71381.stderr14
-rw-r--r--src/test/ui/const-generics/issues/issue-71382.rs24
-rw-r--r--src/test/ui/const-generics/issues/issue-71382.stderr8
-rw-r--r--src/test/ui/const-generics/issues/issue-71611.rs9
-rw-r--r--src/test/ui/const-generics/issues/issue-71611.stderr8
-rw-r--r--src/test/ui/const-generics/issues/issue-72352.rs21
-rw-r--r--src/test/ui/const-generics/issues/issue-72352.stderr8
8 files changed, 125 insertions, 0 deletions
diff --git a/src/test/ui/const-generics/issues/issue-71381.rs b/src/test/ui/const-generics/issues/issue-71381.rs
new file mode 100644
index 00000000000..c32bd2847f8
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-71381.rs
@@ -0,0 +1,33 @@
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+struct Test(*const usize);
+
+type PassArg = ();
+
+unsafe extern "C" fn pass(args: PassArg) {
+    println!("Hello, world!");
+}
+
+impl Test {
+    pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "C" fn(Args)>(&self) {
+        //~^ ERROR: using function pointers as const generic parameters is forbidden
+        self.0 = Self::trampiline::<Args, IDX, FN> as _
+    }
+
+    unsafe extern "C" fn trampiline<
+        Args: Sized,
+        const IDX: usize,
+        const FN: unsafe extern "C" fn(Args),
+        //~^ ERROR: using function pointers as const generic parameters is forbidden
+    >(
+        args: Args,
+    ) {
+        FN(args)
+    }
+}
+
+fn main() {
+    let x = Test();
+    x.call_me::<PassArg, 30, pass>()
+}
diff --git a/src/test/ui/const-generics/issues/issue-71381.stderr b/src/test/ui/const-generics/issues/issue-71381.stderr
new file mode 100644
index 00000000000..6bb776fcfc0
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-71381.stderr
@@ -0,0 +1,14 @@
+error: using function pointers as const generic parameters is forbidden
+  --> $DIR/issue-71381.rs:13:61
+   |
+LL |     pub fn call_me<Args: Sized, const IDX: usize, const FN: unsafe extern "C" fn(Args)>(&self) {
+   |                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: using function pointers as const generic parameters is forbidden
+  --> $DIR/issue-71381.rs:21:19
+   |
+LL |         const FN: unsafe extern "C" fn(Args),
+   |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/const-generics/issues/issue-71382.rs b/src/test/ui/const-generics/issues/issue-71382.rs
new file mode 100644
index 00000000000..e0cf9812d95
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-71382.rs
@@ -0,0 +1,24 @@
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+struct Test();
+
+fn pass() {
+    println!("Hello, world!");
+}
+
+impl Test {
+    pub fn call_me(&self) {
+        self.test::<pass>();
+    }
+
+    fn test<const FN: fn()>(&self) {
+        //~^ ERROR: using function pointers as const generic parameters is forbidden
+        FN();
+    }
+}
+
+fn main() {
+    let x = Test();
+    x.call_me()
+}
diff --git a/src/test/ui/const-generics/issues/issue-71382.stderr b/src/test/ui/const-generics/issues/issue-71382.stderr
new file mode 100644
index 00000000000..1652b0bdfa8
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-71382.stderr
@@ -0,0 +1,8 @@
+error: using function pointers as const generic parameters is forbidden
+  --> $DIR/issue-71382.rs:15:23
+   |
+LL |     fn test<const FN: fn()>(&self) {
+   |                       ^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/const-generics/issues/issue-71611.rs b/src/test/ui/const-generics/issues/issue-71611.rs
new file mode 100644
index 00000000000..64a049e743f
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-71611.rs
@@ -0,0 +1,9 @@
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+fn func<A, const F: fn(inner: A)>(outer: A) {
+    //~^ ERROR: using function pointers as const generic parameters is forbidden
+    F(outer);
+}
+
+fn main() {}
diff --git a/src/test/ui/const-generics/issues/issue-71611.stderr b/src/test/ui/const-generics/issues/issue-71611.stderr
new file mode 100644
index 00000000000..9a7bf1c0a88
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-71611.stderr
@@ -0,0 +1,8 @@
+error: using function pointers as const generic parameters is forbidden
+  --> $DIR/issue-71611.rs:4:21
+   |
+LL | fn func<A, const F: fn(inner: A)>(outer: A) {
+   |                     ^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/const-generics/issues/issue-72352.rs b/src/test/ui/const-generics/issues/issue-72352.rs
new file mode 100644
index 00000000000..e977af8deb7
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-72352.rs
@@ -0,0 +1,21 @@
+#![feature(const_generics)]
+#![allow(incomplete_features)]
+
+use std::ffi::{CStr, CString};
+
+unsafe fn unsafely_do_the_thing<const F: fn(&CStr) -> usize>(ptr: *const i8) -> usize {
+    //~^ ERROR: using function pointers as const generic parameters is forbidden
+    F(CStr::from_ptr(ptr))
+}
+
+fn safely_do_the_thing(s: &CStr) -> usize {
+    s.to_bytes().len()
+}
+
+fn main() {
+    let baguette = CString::new("baguette").unwrap();
+    let ptr = baguette.as_ptr();
+    println!("{}", unsafe {
+        unsafely_do_the_thing::<safely_do_the_thing>(ptr)
+    });
+}
diff --git a/src/test/ui/const-generics/issues/issue-72352.stderr b/src/test/ui/const-generics/issues/issue-72352.stderr
new file mode 100644
index 00000000000..bc48da10393
--- /dev/null
+++ b/src/test/ui/const-generics/issues/issue-72352.stderr
@@ -0,0 +1,8 @@
+error: using function pointers as const generic parameters is forbidden
+  --> $DIR/issue-72352.rs:6:42
+   |
+LL | unsafe fn unsafely_do_the_thing<const F: fn(&CStr) -> usize>(ptr: *const i8) -> usize {
+   |                                          ^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+