| // Test that the `cs` prefix is (not) added into a `call` and a `jmp` to the |
| // indirect thunk when the `-Zindirect-branch-cs-prefix` flag is (not) set. |
| |
| //@ revisions: unset set |
| //@ assembly-output: emit-asm |
| //@ compile-flags: -Copt-level=3 -Cunsafe-allow-abi-mismatch=retpoline,retpoline-external-thunk,indirect-branch-cs-prefix -Zretpoline-external-thunk |
| //@ [set] compile-flags: -Zindirect-branch-cs-prefix |
| //@ only-x86_64 |
| //@ ignore-apple Symbol is called `___x86_indirect_thunk` (Darwin's extra underscore) |
| |
| #![crate_type = "lib"] |
| |
| // CHECK-LABEL: foo: |
| #[no_mangle] |
| pub fn foo(g: fn()) { |
| // unset-NOT: cs |
| // unset: callq {{__x86_indirect_thunk.*}} |
| // set: cs |
| // set-NEXT: callq {{__x86_indirect_thunk.*}} |
| g(); |
| |
| // unset-NOT: cs |
| // unset: jmp {{__x86_indirect_thunk.*}} |
| // set: cs |
| // set-NEXT: jmp {{__x86_indirect_thunk.*}} |
| g(); |
| } |