]>
Commit | Line | Data |
---|---|---|
dfeec247 | 1 | #![feature(transparent_unions)] |
e1599b0c | 2 | #![feature(ptr_internals)] |
1a4d82fc JJ |
3 | #![deny(improper_ctypes)] |
4 | #![allow(dead_code)] | |
223e47cc | 5 | |
dc9dc135 XL |
6 | use std::num; |
7 | ||
5869c6ff XL |
8 | enum Z {} |
9 | enum U { | |
10 | A, | |
11 | } | |
12 | enum B { | |
13 | C, | |
14 | D, | |
15 | } | |
16 | enum T { | |
17 | E, | |
18 | F, | |
19 | G, | |
20 | } | |
970d7e83 | 21 | |
0531ce1d | 22 | #[repr(C)] |
5869c6ff XL |
23 | enum ReprC { |
24 | A, | |
25 | B, | |
26 | C, | |
27 | } | |
0531ce1d XL |
28 | |
29 | #[repr(u8)] | |
5869c6ff XL |
30 | enum U8 { |
31 | A, | |
32 | B, | |
33 | C, | |
34 | } | |
0531ce1d XL |
35 | |
36 | #[repr(isize)] | |
5869c6ff XL |
37 | enum Isize { |
38 | A, | |
39 | B, | |
40 | C, | |
41 | } | |
0531ce1d | 42 | |
dc9dc135 XL |
43 | #[repr(transparent)] |
44 | struct TransparentStruct<T>(T, std::marker::PhantomData<Z>); | |
45 | ||
46 | #[repr(transparent)] | |
47 | enum TransparentEnum<T> { | |
5869c6ff | 48 | Variant(T, std::marker::PhantomData<Z>), |
dc9dc135 XL |
49 | } |
50 | ||
51 | #[repr(transparent)] | |
52 | union TransparentUnion<T: Copy> { | |
5869c6ff | 53 | field: T, |
dc9dc135 XL |
54 | } |
55 | ||
56 | struct Rust<T>(T); | |
57 | ||
5869c6ff | 58 | extern "C" { |
1a4d82fc | 59 | fn zf(x: Z); |
e1599b0c XL |
60 | fn uf(x: U); //~ ERROR `extern` block uses type `U` |
61 | fn bf(x: B); //~ ERROR `extern` block uses type `B` | |
62 | fn tf(x: T); //~ ERROR `extern` block uses type `T` | |
dc9dc135 XL |
63 | fn repr_c(x: ReprC); |
64 | fn repr_u8(x: U8); | |
65 | fn repr_isize(x: Isize); | |
66 | fn option_ref(x: Option<&'static u8>); | |
67 | fn option_fn(x: Option<extern "C" fn()>); | |
68 | fn nonnull(x: Option<std::ptr::NonNull<u8>>); | |
e1599b0c | 69 | fn unique(x: Option<std::ptr::Unique<u8>>); |
dc9dc135 XL |
70 | fn nonzero_u8(x: Option<num::NonZeroU8>); |
71 | fn nonzero_u16(x: Option<num::NonZeroU16>); | |
72 | fn nonzero_u32(x: Option<num::NonZeroU32>); | |
73 | fn nonzero_u64(x: Option<num::NonZeroU64>); | |
74 | fn nonzero_u128(x: Option<num::NonZeroU128>); | |
e1599b0c | 75 | //~^ ERROR `extern` block uses type `u128` |
dc9dc135 XL |
76 | fn nonzero_usize(x: Option<num::NonZeroUsize>); |
77 | fn nonzero_i8(x: Option<num::NonZeroI8>); | |
78 | fn nonzero_i16(x: Option<num::NonZeroI16>); | |
79 | fn nonzero_i32(x: Option<num::NonZeroI32>); | |
80 | fn nonzero_i64(x: Option<num::NonZeroI64>); | |
81 | fn nonzero_i128(x: Option<num::NonZeroI128>); | |
e1599b0c | 82 | //~^ ERROR `extern` block uses type `i128` |
dc9dc135 XL |
83 | fn nonzero_isize(x: Option<num::NonZeroIsize>); |
84 | fn transparent_struct(x: Option<TransparentStruct<num::NonZeroU8>>); | |
85 | fn transparent_enum(x: Option<TransparentEnum<num::NonZeroU8>>); | |
86 | fn transparent_union(x: Option<TransparentUnion<num::NonZeroU8>>); | |
e1599b0c XL |
87 | //~^ ERROR `extern` block uses type |
88 | fn repr_rust(x: Option<Rust<num::NonZeroU8>>); //~ ERROR `extern` block uses type | |
89 | fn no_result(x: Result<(), num::NonZeroI32>); //~ ERROR `extern` block uses type | |
223e47cc | 90 | } |
970d7e83 | 91 | |
e1599b0c | 92 | pub fn main() {} |