| //@ add-minicore |
| //@ compile-flags: --target armv5te-none-eabi |
| //@ needs-llvm-components: arm |
| //@ ignore-backends: gcc |
| //@ edition: 2024 |
| |
| #![crate_type = "lib"] |
| #![feature(no_core, lang_items,)] |
| #![no_core] |
| |
| extern crate minicore; |
| use minicore::*; |
| |
| |
| |
| |
| #[instruction_set(arm::a32)] |
| fn foo() { |
| } |
| |
| #[instruction_set(arm)] |
| //~^ ERROR malformed `instruction_set` attribute input [E0539] |
| fn bar() { |
| } |
| |
| #[instruction_set(arm::)] |
| //~^ ERROR expected identifier, found `<eof>` |
| fn bazz() { |
| } |
| |
| #[instruction_set(arm::magic)] |
| //~^ ERROR malformed `instruction_set` attribute input [E0539] |
| fn bazzer() { |
| |
| } |
| |
| fn all_instruction_set_cases() { |
| #[instruction_set(arm::a32)] |
| || { |
| 0 |
| }; |
| #[instruction_set(arm::t32)] |
| async || { |
| 0 |
| }; |
| } |
| |
| struct Fooer; |
| |
| impl Fooer { |
| #[instruction_set(arm::a32)] |
| fn fooest() { |
| |
| } |
| } |
| |
| trait Bazzest { |
| fn bazz(); |
| |
| #[instruction_set(arm::a32)] |
| fn bazziest() { |
| |
| } |
| } |
| impl Bazzest for Fooer { |
| #[instruction_set(arm::t32)] |
| fn bazz() {} |
| } |
| |
| |
| // The following lang items need to be defined for the async closure to work |
| #[lang = "ResumeTy"] |
| pub struct ResumeTy(NonNull<Context<'static>>); |
| |
| #[lang = "future_trait"] |
| pub trait Future { |
| /// The type of value produced on completion. |
| #[lang = "future_output"] |
| type Output; |
| |
| // NOTE: misses the `poll` method. |
| } |
| |
| #[lang = "async_drop"] |
| pub trait AsyncDrop { |
| // NOTE: misses the `drop` method. |
| } |
| |
| #[lang = "Poll"] |
| pub enum Poll<T> { |
| #[lang = "Ready"] |
| Ready(T), |
| |
| #[lang = "Pending"] |
| Pending, |
| } |
| |
| #[lang = "Context"] |
| pub struct Context<'a> { |
| // NOTE: misses a bunch of fields. |
| _marker: PhantomData<fn(&'a ()) -> &'a ()>, |
| } |
| |
| #[lang = "get_context"] |
| pub unsafe fn get_context<'a, 'b>(cx: ResumeTy) -> &'a mut Context<'b> { |
| // NOTE: the actual implementation looks different. |
| unsafe {mem::transmute(cx.0)} |
| } |
| |
| #[lang = "pin"] |
| pub struct Pin<T>(T); |