-
Notifications
You must be signed in to change notification settings - Fork 2.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test(pgo): ensure PGO works #14859
test(pgo): ensure PGO works #14859
Conversation
This is how LLVM warnings look like if we hash RUSTFLAGS into
|
This is a regression test to prevent issues like rust-lang#7416. The test only run on Linux, as other platforms have different requirements for PGO, or emit different PGO function missing warnings.
} | ||
|
||
let Some(llvm_profdata) = llvm_profdata() else { | ||
return; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be possible to enforce that this exists in CI? Otherwise we don't know if this test is ever actually running.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I've considered that and found it needs more work than the current one.
I'll try to improve it!
#[cargo_test] | ||
fn pgo_works() { | ||
if cfg!(not(target_os = "linux")) { | ||
// macOS may emit different LLVM PGO warnings. | ||
// Windows LLVM has different requirements. | ||
return; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you make sure to use the ignore
attribute when disabling a test? Otherwise it can be confusing when tests don't seem to change when you expect them to, are say that they are passing when you expect them to fail.
I realize there's still a big hole when llvm-profdata is missing. We could maybe add that to our requires mechanism?
#[cargo_test] | |
fn pgo_works() { | |
if cfg!(not(target_os = "linux")) { | |
// macOS may emit different LLVM PGO warnings. | |
// Windows LLVM has different requirements. | |
return; | |
} | |
#[cargo_test] | |
// macOS may emit different LLVM PGO warnings. | |
// Windows LLVM has different requirements. | |
#[cfg_attr(not(target_os = "linux"), ignore = "linux only")] | |
fn pgo_works() { |
Update cargo 8 commits in 4c39aaff66862cc0da52fe529aa1990bb8bb9a22..3908f64086a3d7b9af8d87b4da2bd100776c3e61 2024-11-25 16:36:17 +0000 to 2024-11-29 17:32:44 +0000 - chore(deps): update msrv (rust-lang/cargo#14867) - fix(fix): Migrate cargo script manifests across editions (rust-lang/cargo#14864) - feat(toml): Allow adding/removing from cargo scripts (rust-lang/cargo#14857) - Add future-incompat warning against keywords in cfgs and add raw-idents (rust-lang/cargo#14671) - test(build-std): download deps first (rust-lang/cargo#14861) - test(pgo): ensure PGO works (rust-lang/cargo#14859) - git-fetch-with-cli: Set `GIT_DIR` for bare repository compatibility (rust-lang/cargo#14860) - fix(build-std): always link to std when testing proc-macros (rust-lang/cargo#14850)
### What does this PR try to resolve? The new syntax is key-value pair like `requires = "rustfmt"`, comparing to the previous `requires_<cmd>`. This enables `cargo_test` to require that the CLI contains non-alphabetic names, such as `llvm-profdata`. ### How should we test and review this PR? CI passes ### Additional information This is a request from <#14859 (comment)>, but I found it a bit tricky so split off this change first.
### What does this PR try to resolve? Address #14859 (comment) I found that detecting llvm-profdata [requires more works](weihanglo#73), so do this first.
Update cargo 17 commits in 4c39aaff66862cc0da52fe529aa1990bb8bb9a22..05f54fdc34310f458033af8a63ce1d699fae8bf6 2024-11-25 16:36:17 +0000 to 2024-12-03 03:14:12 +0000 - test(pgo): only run on nightly (rust-lang/cargo#14887) - chore: Bump to 0.86.0; update changelog (rust-lang/cargo#14885) - docs(ref): Finish a sentence on rust-versions (rust-lang/cargo#14884) - chore(deps): update rust crate cargo_metadata to 0.19.0 (rust-lang/cargo#14878) - chore(deps): update rust crate gix to 0.68.0 (rust-lang/cargo#14879) - fix: Remove default registry reference in `info` cmd docs (rust-lang/cargo#14880) - test(pgo): determine test runnability at compile time (rust-lang/cargo#14874) - test: `requires` attribute accepts string literals for cmds (rust-lang/cargo#14875) - chore(deps): update msrv (3 versions) to v1.81 (rust-lang/cargo#14871) - chore(deps): update msrv (rust-lang/cargo#14867) - fix(fix): Migrate cargo script manifests across editions (rust-lang/cargo#14864) - feat(toml): Allow adding/removing from cargo scripts (rust-lang/cargo#14857) - Add future-incompat warning against keywords in cfgs and add raw-idents (rust-lang/cargo#14671) - test(build-std): download deps first (rust-lang/cargo#14861) - test(pgo): ensure PGO works (rust-lang/cargo#14859) - git-fetch-with-cli: Set `GIT_DIR` for bare repository compatibility (rust-lang/cargo#14860) - fix(build-std): always link to std when testing proc-macros (rust-lang/cargo#14850)
Update cargo 17 commits in 4c39aaff66862cc0da52fe529aa1990bb8bb9a22..05f54fdc34310f458033af8a63ce1d699fae8bf6 2024-11-25 16:36:17 +0000 to 2024-12-03 03:14:12 +0000 - test(pgo): only run on nightly (rust-lang/cargo#14887) - chore: Bump to 0.86.0; update changelog (rust-lang/cargo#14885) - docs(ref): Finish a sentence on rust-versions (rust-lang/cargo#14884) - chore(deps): update rust crate cargo_metadata to 0.19.0 (rust-lang/cargo#14878) - chore(deps): update rust crate gix to 0.68.0 (rust-lang/cargo#14879) - fix: Remove default registry reference in `info` cmd docs (rust-lang/cargo#14880) - test(pgo): determine test runnability at compile time (rust-lang/cargo#14874) - test: `requires` attribute accepts string literals for cmds (rust-lang/cargo#14875) - chore(deps): update msrv (3 versions) to v1.81 (rust-lang/cargo#14871) - chore(deps): update msrv (rust-lang/cargo#14867) - fix(fix): Migrate cargo script manifests across editions (rust-lang/cargo#14864) - feat(toml): Allow adding/removing from cargo scripts (rust-lang/cargo#14857) - Add future-incompat warning against keywords in cfgs and add raw-idents (rust-lang/cargo#14671) - test(build-std): download deps first (rust-lang/cargo#14861) - test(pgo): ensure PGO works (rust-lang/cargo#14859) - git-fetch-with-cli: Set `GIT_DIR` for bare repository compatibility (rust-lang/cargo#14860) - fix(build-std): always link to std when testing proc-macros (rust-lang/cargo#14850)
What does this PR try to resolve?
This is a regression test to prevent issues like #7416.
The test only run on Linux,
as other platforms have different requirements for PGO,
or emit different PGO function missing warnings.
How should we test and review this PR?
Not sure how brittle it is. We can optionally run it only on Cargo's CI?
cc #14830