summaryrefslogtreecommitdiffstats
path: root/src/test/ui/structs-enums/enum-clike-ffi-as-int.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/structs-enums/enum-clike-ffi-as-int.rs')
-rw-r--r--src/test/ui/structs-enums/enum-clike-ffi-as-int.rs33
1 files changed, 0 insertions, 33 deletions
diff --git a/src/test/ui/structs-enums/enum-clike-ffi-as-int.rs b/src/test/ui/structs-enums/enum-clike-ffi-as-int.rs
deleted file mode 100644
index e2b2b43de..000000000
--- a/src/test/ui/structs-enums/enum-clike-ffi-as-int.rs
+++ /dev/null
@@ -1,33 +0,0 @@
-// run-pass
-#![allow(dead_code)]
-
-/*!
- * C-like enums have to be represented as LLVM ints, not wrapped in a
- * struct, because it's important for the FFI that they interoperate
- * with C integers/enums, and the ABI can treat structs differently.
- * For example, on i686-linux-gnu, a struct return value is passed by
- * storing to a hidden out parameter, whereas an integer would be
- * returned in a register.
- *
- * This test just checks that the ABIs for the enum and the plain
- * integer are compatible, rather than actually calling C code.
- * The unused parameter to `foo` is to increase the likelihood of
- * crashing if something goes wrong here.
- */
-
-#[repr(u32)]
-enum Foo {
- A = 0,
- B = 23
-}
-
-#[inline(never)]
-extern "C" fn foo(_x: usize) -> Foo { Foo::B }
-
-pub fn main() {
- unsafe {
- let f: extern "C" fn(usize) -> u32 =
- ::std::mem::transmute(foo as extern "C" fn(usize) -> Foo);
- assert_eq!(f(0xDEADBEEF), Foo::B as u32);
- }
-}