Skip to content

Commit 721dfc5

Browse files
committed
also test ABI-compatibility for some unsized types
1 parent 10951f3 commit 721dfc5

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

tests/ui/abi/compatibility.rs

+19-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// check-pass
2-
#![feature(rustc_attrs, transparent_unions)]
2+
#![feature(rustc_attrs, unsized_fn_params, transparent_unions)]
33
#![allow(unused, improper_ctypes_definitions)]
44
use std::marker::PhantomData;
55
use std::mem::ManuallyDrop;
@@ -26,7 +26,7 @@ macro_rules! assert_abi_compatible {
2626
struct Zst;
2727

2828
#[repr(C)]
29-
struct ReprC1<T>(T);
29+
struct ReprC1<T: ?Sized>(T);
3030
#[repr(C)]
3131
struct ReprC2Int<T>(i32, T);
3232
#[repr(C)]
@@ -119,6 +119,23 @@ test_transparent!(large_array, [i32; 16]);
119119
test_transparent!(enum_, Option<i32>);
120120
test_transparent!(enum_niched, Option<&'static i32>);
121121

122+
// Some tests with unsized types (not all wrappers are compatible with that).
123+
macro_rules! test_transparent_unsized {
124+
($name:ident, $t:ty) => {
125+
mod $name {
126+
use super::*;
127+
assert_abi_compatible!(wrap1, $t, Wrapper1<$t>);
128+
assert_abi_compatible!(wrap1_reprc, ReprC1<$t>, ReprC1<Wrapper1<$t>>);
129+
assert_abi_compatible!(wrap2, $t, Wrapper2<$t>);
130+
assert_abi_compatible!(wrap2_reprc, ReprC1<$t>, ReprC1<Wrapper2<$t>>);
131+
}
132+
};
133+
}
134+
135+
test_transparent_unsized!(str_, str);
136+
test_transparent_unsized!(slice, [u8]);
137+
test_transparent_unsized!(dyn_trait, dyn std::any::Any);
138+
122139
// RFC 3391 <https://rust-lang.github.io/rfcs/3391-result_ffi_guarantees.html>.
123140
macro_rules! test_nonnull {
124141
($name:ident, $t:ty) => {

0 commit comments

Comments
 (0)