| // Regression test for <https://github.com/rust-lang/rust/issues/140373>. |
| // Test that we're properly monomorphizing sym args in naked asm blocks |
| // that point to associated items. |
| |
| //@ edition: 2021 |
| //@ needs-asm-support |
| //@ only-x86_64 |
| //@ build-pass |
| |
| trait Tr { |
| extern "C" fn t(); |
| } |
| |
| enum E<const C: usize> {} |
| |
| impl<const C: usize> Tr for E<C> { |
| extern "C" fn t() { |
| println!("Const generic: {}", C); |
| } |
| } |
| |
| #[unsafe(naked)] |
| extern "C" fn foo<U: Tr>() { |
| core::arch::naked_asm!( |
| "push rax", |
| "call {fn}", |
| "pop rax", |
| "ret", |
| fn = sym <U as Tr>::t, |
| ); |
| } |
| |
| fn main() { |
| foo::<E<42>>(); |
| } |