diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2023-12-14 13:26:46 +0000 |
|---|---|---|
| committer | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2023-12-14 13:26:46 +0000 |
| commit | bb7a126ecde37114c8b19cd9bcd77a2d9dc6125f (patch) | |
| tree | 1836059b6f48065d30e6c27a4039682511e95095 | |
| parent | 45fab3a8bb91be93afb7180209a840dd14ad95b2 (diff) | |
| parent | e3d2831ff4fb15520d21856c91c2d9233724bdd5 (diff) | |
| download | rust-bb7a126ecde37114c8b19cd9bcd77a2d9dc6125f.tar.gz rust-bb7a126ecde37114c8b19cd9bcd77a2d9dc6125f.zip | |
Sync from rust eeff92ad32c2627876112ccfe812e19d38494087
| -rw-r--r-- | build_system/tests.rs | 5 | ||||
| -rw-r--r-- | example/issue-91827-extern-types.rs | 55 |
2 files changed, 0 insertions, 60 deletions
diff --git a/build_system/tests.rs b/build_system/tests.rs index fb857ad1c06..cb7b2454cd5 100644 --- a/build_system/tests.rs +++ b/build_system/tests.rs @@ -75,11 +75,6 @@ const BASE_SYSROOT_SUITE: &[TestCase] = &[ "example/arbitrary_self_types_pointers_and_wrappers.rs", &[], ), - TestCase::build_bin_and_run( - "aot.issue_91827_extern_types", - "example/issue-91827-extern-types.rs", - &[], - ), TestCase::build_lib("build.alloc_system", "example/alloc_system.rs", "lib"), TestCase::build_bin_and_run("aot.alloc_example", "example/alloc_example.rs", &[]), TestCase::jit_bin("jit.std_example", "example/std_example.rs", ""), diff --git a/example/issue-91827-extern-types.rs b/example/issue-91827-extern-types.rs deleted file mode 100644 index 6f39c5edcad..00000000000 --- a/example/issue-91827-extern-types.rs +++ /dev/null @@ -1,55 +0,0 @@ -// Copied from rustc ui test suite - -// run-pass -// -// Test that we can handle unsized types with an extern type tail part. -// Regression test for issue #91827. - -#![feature(extern_types)] - -use std::ptr::addr_of; - -extern "C" { - type Opaque; -} - -unsafe impl Sync for Opaque {} - -#[repr(C)] -pub struct List<T> { - len: usize, - data: [T; 0], - tail: Opaque, -} - -#[repr(C)] -pub struct ListImpl<T, const N: usize> { - len: usize, - data: [T; N], -} - -impl<T> List<T> { - const fn as_slice(&self) -> &[T] { - unsafe { std::slice::from_raw_parts(self.data.as_ptr(), self.len) } - } -} - -impl<T, const N: usize> ListImpl<T, N> { - const fn as_list(&self) -> &List<T> { - unsafe { std::mem::transmute(self) } - } -} - -pub static A: ListImpl<u128, 3> = ListImpl { len: 3, data: [5, 6, 7] }; -pub static A_REF: &'static List<u128> = A.as_list(); -pub static A_TAIL_OFFSET: isize = tail_offset(A.as_list()); - -const fn tail_offset<T>(list: &List<T>) -> isize { - unsafe { (addr_of!(list.tail) as *const u8).offset_from(list as *const List<T> as *const u8) } -} - -fn main() { - assert_eq!(A_REF.as_slice(), &[5, 6, 7]); - // Check that interpreter and code generation agree about the position of the tail field. - assert_eq!(A_TAIL_OFFSET, tail_offset(A_REF)); -} |
