diff options
| author | Michael Bradshaw <mjbshaw@google.com> | 2019-05-22 06:49:43 -0700 |
|---|---|---|
| committer | Michael Bradshaw <mjbshaw@google.com> | 2019-05-22 07:24:28 -0700 |
| commit | a31dc8e3b153ac3073f9fb14d8e523a350fe10f2 (patch) | |
| tree | b167a1dabb4ded350807e1245a9b99dfd5019938 /src/test/ui/thinlto | |
| parent | 37ff5d388f8c004ca248adb635f1cc84d347eda0 (diff) | |
| download | rust-a31dc8e3b153ac3073f9fb14d8e523a350fe10f2.tar.gz rust-a31dc8e3b153ac3073f9fb14d8e523a350fe10f2.zip | |
Allow null-pointer-optimized enums in FFI if their underlying representation is FFI safe
This allows types like Option<NonZeroU8> to be used in FFI without triggering the improper_ctypes lint. This works by changing the is_repr_nullable_ptr function to consider an enum E to be FFI-safe if: - E has no explicit #[repr(...)]. - It only has two variants. - One of those variants is empty (meaning it has no fields). - The other variant has only one field. - That field is one of the following: - &T - &mut T - extern "C" fn - core::num::NonZero* - core::ptr::NonNull<T> - #[repr(transparent)] struct wrapper around one of the types in this list. - The size of E and its field are both known and are both the same size (implying E is participating in the nonnull optimization).
Diffstat (limited to 'src/test/ui/thinlto')
0 files changed, 0 insertions, 0 deletions
