|
1 | 1 | //@ check-pass |
| 2 | +//@ add-core-stubs |
2 | 3 | //@ revisions: host |
3 | 4 | //@ revisions: i686 |
4 | 5 | //@[i686] compile-flags: --target i686-unknown-linux-gnu |
|
58 | 59 | //@ revisions: nvptx64 |
59 | 60 | //@[nvptx64] compile-flags: --target nvptx64-nvidia-cuda |
60 | 61 | //@[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)] |
| 62 | +#![feature(no_core, rustc_attrs, lang_items)] |
| 63 | +#![feature(unsized_fn_params, transparent_unions)] |
| 64 | +#![no_std] |
| 65 | +#![no_core] |
63 | 66 | #![allow(unused, improper_ctypes_definitions, internal_features)] |
64 | 67 |
|
65 | 68 | // FIXME: some targets are broken in various ways. |
66 | 69 | // Hence there are `cfg` throughout this test to disable parts of it on those targets. |
67 | 70 | // sparc64: https://github.com/rust-lang/rust/issues/115336 |
68 | 71 | // mips64: https://github.com/rust-lang/rust/issues/115404 |
69 | 72 |
|
70 | | -#[cfg(host)] |
71 | | -use std::{ |
72 | | - any::Any, marker::PhantomData, mem::ManuallyDrop, num::NonZero, ptr::NonNull, rc::Rc, sync::Arc, |
73 | | -}; |
| 73 | +extern crate minicore; |
| 74 | +use minicore::*; |
74 | 75 |
|
75 | | -/// To work cross-target this test must be no_core. |
76 | | -/// This little prelude supplies what we need. |
77 | | -#[cfg(not(host))] |
| 76 | +/// To work cross-target this test must be no_core. This little prelude supplies what we need. |
| 77 | +/// |
| 78 | +/// Note that `minicore` provides a very minimal subset of `core` items (not yet complete). This |
| 79 | +/// prelude contains `alloc` and non-`core` (but in `std`) items that minicore does not stub out. |
78 | 80 | mod prelude { |
79 | | - #[lang = "sized"] |
80 | | - pub trait Sized {} |
| 81 | + use minicore::*; |
81 | 82 |
|
82 | | - #[lang = "legacy_receiver"] |
83 | | - pub trait LegacyReceiver {} |
84 | | - impl<T: ?Sized> LegacyReceiver for &T {} |
85 | | - impl<T: ?Sized> LegacyReceiver 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 {} |
| 83 | + // Trait stub, no `type_id` method. |
| 84 | + pub trait Any: 'static {} |
94 | 85 |
|
95 | 86 | #[lang = "clone"] |
96 | 87 | pub trait Clone: Sized { |
97 | 88 | fn clone(&self) -> Self; |
98 | 89 | } |
99 | 90 |
|
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> {} |
130 | | - |
131 | 91 | #[repr(transparent)] |
132 | 92 | #[rustc_layout_scalar_valid_range_start(1)] |
133 | 93 | #[rustc_nonnull_optimization_guaranteed] |
@@ -185,7 +145,6 @@ mod prelude { |
185 | 145 | alloc: A, |
186 | 146 | } |
187 | 147 | } |
188 | | -#[cfg(not(host))] |
189 | 148 | use prelude::*; |
190 | 149 |
|
191 | 150 | macro_rules! test_abi_compatible { |
|
0 commit comments