| // Test that the correct module flags are emitted with different control-flow protection flags. |
| |
| //@ revisions: undefined none branch return full |
| //@ needs-llvm-components: x86 |
| //@ [undefined] compile-flags: |
| //@ [none] compile-flags: -Z cf-protection=none |
| //@ [branch] compile-flags: -Z cf-protection=branch |
| //@ [return] compile-flags: -Z cf-protection=return |
| //@ [full] compile-flags: -Z cf-protection=full |
| //@ compile-flags: --target x86_64-unknown-linux-gnu |
| |
| #![crate_type = "lib"] |
| #![feature(no_core, lang_items)] |
| #![no_core] |
| |
| #[lang="sized"] |
| trait Sized { } |
| |
| // A basic test function. |
| pub fn test() { |
| } |
| |
| // undefined-NOT: !"cf-protection-branch" |
| // undefined-NOT: !"cf-protection-return" |
| |
| // none-NOT: !"cf-protection-branch" |
| // none-NOT: !"cf-protection-return" |
| |
| // branch-NOT: !"cf-protection-return" |
| // branch: !"cf-protection-branch", i32 1 |
| // branch-NOT: !"cf-protection-return" |
| |
| // return-NOT: !"cf-protection-branch" |
| // return: !"cf-protection-return", i32 1 |
| // return-NOT: !"cf-protection-branch" |
| |
| // full: !"cf-protection-branch", i32 1 |
| // full: !"cf-protection-return", i32 1 |