|
58 | 58 | //@ revisions: nvptx64
|
59 | 59 | //@[nvptx64] compile-flags: --target nvptx64-nvidia-cuda
|
60 | 60 | //@[nvptx64] needs-llvm-components: nvptx
|
61 |
| -#![feature(rustc_attrs, unsized_fn_params, transparent_unions)] |
62 |
| -#![cfg_attr(not(host), feature(no_core, lang_items), no_std, no_core)] |
63 |
| -#![allow(unused, improper_ctypes_definitions, internal_features)] |
64 | 61 |
|
65 | 62 | // FIXME: some targets are broken in various ways.
|
66 | 63 | // Hence there are `cfg` throughout this test to disable parts of it on those targets.
|
67 | 64 | // sparc64: https://github.com/rust-lang/rust/issues/115336
|
68 | 65 | // mips64: https://github.com/rust-lang/rust/issues/115404
|
69 | 66 |
|
70 |
| -#[cfg(host)] |
71 |
| -use std::{ |
72 |
| - any::Any, marker::PhantomData, mem::ManuallyDrop, num::NonZero, ptr::NonNull, rc::Rc, sync::Arc, |
73 |
| -}; |
74 |
| - |
75 |
| -/// To work cross-target this test must be no_core. |
76 |
| -/// This little prelude supplies what we need. |
77 |
| -#[cfg(not(host))] |
78 |
| -mod prelude { |
79 |
| - #[lang = "sized"] |
80 |
| - pub trait Sized {} |
81 |
| - |
82 |
| - #[lang = "receiver"] |
83 |
| - pub trait Receiver {} |
84 |
| - impl<T: ?Sized> Receiver for &T {} |
85 |
| - impl<T: ?Sized> Receiver for &mut T {} |
86 |
| - |
87 |
| - #[lang = "copy"] |
88 |
| - pub trait Copy: Sized {} |
89 |
| - impl Copy for i32 {} |
90 |
| - impl Copy for f32 {} |
91 |
| - impl<T: ?Sized> Copy for &T {} |
92 |
| - impl<T: ?Sized> Copy for *const T {} |
93 |
| - impl<T: ?Sized> Copy for *mut T {} |
94 |
| - |
95 |
| - #[lang = "clone"] |
96 |
| - pub trait Clone: Sized { |
97 |
| - fn clone(&self) -> Self; |
98 |
| - } |
99 |
| - |
100 |
| - #[lang = "phantom_data"] |
101 |
| - pub struct PhantomData<T: ?Sized>; |
102 |
| - impl<T: ?Sized> Copy for PhantomData<T> {} |
103 |
| - |
104 |
| - #[lang = "unsafe_cell"] |
105 |
| - #[repr(transparent)] |
106 |
| - pub struct UnsafeCell<T: ?Sized> { |
107 |
| - value: T, |
108 |
| - } |
109 |
| - |
110 |
| - pub trait Any: 'static {} |
111 |
| - |
112 |
| - pub enum Option<T> { |
113 |
| - None, |
114 |
| - Some(T), |
115 |
| - } |
116 |
| - impl<T: Copy> Copy for Option<T> {} |
117 |
| - |
118 |
| - pub enum Result<T, E> { |
119 |
| - Ok(T), |
120 |
| - Err(E), |
121 |
| - } |
122 |
| - impl<T: Copy, E: Copy> Copy for Result<T, E> {} |
123 |
| - |
124 |
| - #[lang = "manually_drop"] |
125 |
| - #[repr(transparent)] |
126 |
| - pub struct ManuallyDrop<T: ?Sized> { |
127 |
| - value: T, |
128 |
| - } |
129 |
| - impl<T: Copy + ?Sized> Copy for ManuallyDrop<T> {} |
| 67 | +#![feature(no_core)] |
| 68 | +#![no_core] |
| 69 | +#![no_std] |
130 | 70 |
|
131 |
| - #[repr(transparent)] |
132 |
| - #[rustc_layout_scalar_valid_range_start(1)] |
133 |
| - #[rustc_nonnull_optimization_guaranteed] |
134 |
| - pub struct NonNull<T: ?Sized> { |
135 |
| - pointer: *const T, |
136 |
| - } |
137 |
| - impl<T: ?Sized> Copy for NonNull<T> {} |
138 |
| - |
139 |
| - #[repr(transparent)] |
140 |
| - #[rustc_layout_scalar_valid_range_start(1)] |
141 |
| - #[rustc_nonnull_optimization_guaranteed] |
142 |
| - pub struct NonZero<T>(T); |
143 |
| - |
144 |
| - // This just stands in for a non-trivial type. |
145 |
| - pub struct Vec<T> { |
146 |
| - ptr: NonNull<T>, |
147 |
| - cap: usize, |
148 |
| - len: usize, |
149 |
| - } |
150 |
| - |
151 |
| - pub struct Unique<T: ?Sized> { |
152 |
| - pub pointer: NonNull<T>, |
153 |
| - pub _marker: PhantomData<T>, |
154 |
| - } |
155 |
| - |
156 |
| - #[lang = "global_alloc_ty"] |
157 |
| - pub struct Global; |
158 |
| - |
159 |
| - #[lang = "owned_box"] |
160 |
| - pub struct Box<T: ?Sized, A = Global>(Unique<T>, A); |
161 |
| - |
162 |
| - #[repr(C)] |
163 |
| - struct RcBox<T: ?Sized> { |
164 |
| - strong: UnsafeCell<usize>, |
165 |
| - weak: UnsafeCell<usize>, |
166 |
| - value: T, |
167 |
| - } |
168 |
| - pub struct Rc<T: ?Sized, A = Global> { |
169 |
| - ptr: NonNull<RcBox<T>>, |
170 |
| - phantom: PhantomData<RcBox<T>>, |
171 |
| - alloc: A, |
172 |
| - } |
| 71 | +#![feature(unsized_fn_params, transparent_unions, rustc_attrs)] |
| 72 | +#![allow(unused, improper_ctypes_definitions, internal_features)] |
173 | 73 |
|
174 |
| - #[repr(C, align(8))] |
175 |
| - struct AtomicUsize(usize); |
176 |
| - #[repr(C)] |
177 |
| - struct ArcInner<T: ?Sized> { |
178 |
| - strong: AtomicUsize, |
179 |
| - weak: AtomicUsize, |
180 |
| - data: T, |
181 |
| - } |
182 |
| - pub struct Arc<T: ?Sized, A = Global> { |
183 |
| - ptr: NonNull<ArcInner<T>>, |
184 |
| - phantom: PhantomData<ArcInner<T>>, |
185 |
| - alloc: A, |
186 |
| - } |
187 |
| -} |
188 |
| -#[cfg(not(host))] |
189 |
| -use prelude::*; |
| 74 | +//@ use-minicore |
| 75 | +extern crate minicore; |
| 76 | +use minicore as _; |
| 77 | +use minicore::*; |
190 | 78 |
|
191 | 79 | macro_rules! test_abi_compatible {
|
192 | 80 | ($name:ident, $t1:ty, $t2:ty) => {
|
|
0 commit comments