Put the RFC behind a feature gate result_ffi_guarantees
· rust-lang/rust@ed532cc (original) (raw)
``
1
`+
#![allow(dead_code)]
`
``
2
`+
#![deny(improper_ctypes)]
`
``
3
`+
#![feature(ptr_internals)]
`
``
4
+
``
5
`+
use std::num;
`
``
6
+
``
7
`+
enum Z {}
`
``
8
+
``
9
`+
#[repr(transparent)]
`
``
10
`+
struct TransparentStruct(T, std:📑:PhantomData);
`
``
11
+
``
12
`+
#[repr(transparent)]
`
``
13
`+
enum TransparentEnum {
`
``
14
`+
Variant(T, std:📑:PhantomData),
`
``
15
`+
}
`
``
16
+
``
17
`+
struct NoField;
`
``
18
+
``
19
`+
extern "C" {
`
``
20
`+
fn result_ref_t(x: Result<&'static u8, ()>);
`
``
21
`` +
//~^ ERROR extern
block uses type `Result
``
``
22
`+
fn result_fn_t(x: Result<extern "C" fn(), ()>);
`
``
23
`` +
//~^ ERROR extern
block uses type `Result
``
``
24
`+
fn result_nonnull_t(x: Result<std::ptr::NonNull, ()>);
`
``
25
`` +
//~^ ERROR extern
block uses type `Result
``
``
26
`+
fn result_unique_t(x: Result<std::ptr::Unique, ()>);
`
``
27
`` +
//~^ ERROR extern
block uses type `Result
``
``
28
`+
fn result_nonzero_u8_t(x: Result<num::NonZero, ()>);
`
``
29
`` +
//~^ ERROR extern
block uses type `Result
``
``
30
`+
fn result_nonzero_u16_t(x: Result<num::NonZero, ()>);
`
``
31
`` +
//~^ ERROR extern
block uses type `Result
``
``
32
`+
fn result_nonzero_u32_t(x: Result<num::NonZero, ()>);
`
``
33
`` +
//~^ ERROR extern
block uses type `Result
``
``
34
`+
fn result_nonzero_u64_t(x: Result<num::NonZero, ()>);
`
``
35
`` +
//~^ ERROR extern
block uses type `Result
``
``
36
`+
fn result_nonzero_usize_t(x: Result<num::NonZero, ()>);
`
``
37
`` +
//~^ ERROR extern
block uses type `Result
``
``
38
`+
fn result_nonzero_i8_t(x: Result<num::NonZero, ()>);
`
``
39
`` +
//~^ ERROR extern
block uses type `Result
``
``
40
`+
fn result_nonzero_i16_t(x: Result<num::NonZero, ()>);
`
``
41
`` +
//~^ ERROR extern
block uses type `Result
``
``
42
`+
fn result_nonzero_i32_t(x: Result<num::NonZero, ()>);
`
``
43
`` +
//~^ ERROR extern
block uses type `Result
``
``
44
`+
fn result_nonzero_i64_t(x: Result<num::NonZero, ()>);
`
``
45
`` +
//~^ ERROR extern
block uses type `Result
``
``
46
`+
fn result_nonzero_isize_t(x: Result<num::NonZero, ()>);
`
``
47
`` +
//~^ ERROR extern
block uses type `Result
``
``
48
`+
fn result_transparent_struct_t(x: Result<TransparentStruct<num::NonZero>, ()>);
`
``
49
`` +
//~^ ERROR extern
block uses type `Result
``
``
50
`+
fn result_transparent_enum_t(x: Result<TransparentEnum<num::NonZero>, ()>);
`
``
51
`` +
//~^ ERROR extern
block uses type `Result
``
``
52
`+
fn result_phantom_t(x: Result<num::NonZero, std:📑:PhantomData<()>>);
`
``
53
`` +
//~^ ERROR extern
block uses type `Result
``
``
54
`+
fn result_1zst_exhaustive_no_variant_t(x: Result<num::NonZero, Z>);
`
``
55
`` +
//~^ ERROR extern
block uses type `Result
``
``
56
`+
fn result_1zst_exhaustive_no_field_t(x: Result<num::NonZero, NoField>);
`
``
57
`` +
//~^ ERROR extern
block uses type `Result
``
``
58
+
``
59
`+
fn result_ref_e(x: Result<(), &'static u8>);
`
``
60
`` +
//~^ ERROR extern
block uses type `Result
``
``
61
`+
fn result_fn_e(x: Result<(), extern "C" fn()>);
`
``
62
`` +
//~^ ERROR extern
block uses type `Result
``
``
63
`+
fn result_nonnull_e(x: Result<(), std::ptr::NonNull>);
`
``
64
`` +
//~^ ERROR extern
block uses type `Result
``
``
65
`+
fn result_unique_e(x: Result<(), std::ptr::Unique>);
`
``
66
`` +
//~^ ERROR extern
block uses type `Result
``
``
67
`+
fn result_nonzero_u8_e(x: Result<(), num::NonZero>);
`
``
68
`` +
//~^ ERROR extern
block uses type `Result
``
``
69
`+
fn result_nonzero_u16_e(x: Result<(), num::NonZero>);
`
``
70
`` +
//~^ ERROR extern
block uses type `Result
``
``
71
`+
fn result_nonzero_u32_e(x: Result<(), num::NonZero>);
`
``
72
`` +
//~^ ERROR extern
block uses type `Result
``
``
73
`+
fn result_nonzero_u64_e(x: Result<(), num::NonZero>);
`
``
74
`` +
//~^ ERROR extern
block uses type `Result
``
``
75
`+
fn result_nonzero_usize_e(x: Result<(), num::NonZero>);
`
``
76
`` +
//~^ ERROR extern
block uses type `Result
``
``
77
`+
fn result_nonzero_i8_e(x: Result<(), num::NonZero>);
`
``
78
`` +
//~^ ERROR extern
block uses type `Result
``
``
79
`+
fn result_nonzero_i16_e(x: Result<(), num::NonZero>);
`
``
80
`` +
//~^ ERROR extern
block uses type `Result
``
``
81
`+
fn result_nonzero_i32_e(x: Result<(), num::NonZero>);
`
``
82
`` +
//~^ ERROR extern
block uses type `Result
``
``
83
`+
fn result_nonzero_i64_e(x: Result<(), num::NonZero>);
`
``
84
`` +
//~^ ERROR extern
block uses type `Result
``
``
85
`+
fn result_nonzero_isize_e(x: Result<(), num::NonZero>);
`
``
86
`` +
//~^ ERROR extern
block uses type `Result
``
``
87
`+
fn result_transparent_struct_e(x: Result<(), TransparentStruct<num::NonZero>>);
`
``
88
`` +
//~^ ERROR extern
block uses type `Result
``
``
89
`+
fn result_transparent_enum_e(x: Result<(), TransparentEnum<num::NonZero>>);
`
``
90
`` +
//~^ ERROR extern
block uses type `Result
``
``
91
`+
fn result_phantom_e(x: Result<num::NonZero, std:📑:PhantomData<()>>);
`
``
92
`` +
//~^ ERROR extern
block uses type `Result
``
``
93
`+
fn result_1zst_exhaustive_no_variant_e(x: Result<Z, num::NonZero>);
`
``
94
`` +
//~^ ERROR extern
block uses type `Result
``
``
95
`+
fn result_1zst_exhaustive_no_field_e(x: Result<NoField, num::NonZero>);
`
``
96
`` +
//~^ ERROR extern
block uses type `Result
``
``
97
`+
}
`
``
98
+
``
99
`+
pub fn main() {}
`