-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
Remove support for -Zprofile
(gcov-style coverage instrumentation)
#131829
Conversation
r? @chenyukang rustbot has assigned @chenyukang. Use |
This PR modifies cc @jieyouxu |
c543244
to
ce3e14a
Compare
Rebased; MCP accepted. @rustbot ready |
@bors r+ rollup |
Technically this is unstable flag, but should this get compat relnotes still? |
…ukang Remove support for `-Zprofile` (gcov-style coverage instrumentation) Tracking issue: rust-lang#42524 MCP: rust-lang/compiler-team#798 --- This PR removes the unstable `-Zprofile` flag, which enables ”gcov-style” coverage instrumentation, along with its associated `-Zprofile-emit` configuration flag. (The profile flag predates and is almost entirely separate from the stable `-Cinstrument-coverage` flag.) Notably, the `-Zprofile` flag: - Is largely untested in-tree, having only one run-make test that does not check whether its output is correct or useful. - Has no known maintainer. - Has seen no push towards stabilization. - Has at least one severe regression reported in 2022 that apparently remains unaddressed. - rust-lang#100125 - Is confusingly named, since it appears to be more about coverage than performance profiling, and has nothing to do with PGO. - Is fundamentally limited by relying on counters auto-inserted by LLVM, with no knowledge of Rust beyond debuginfo.
Given the flag’s age and former importance (?), a mention in relnotes is probably warranted. I’ll try to come up with a suggested wording. |
@rustbot label +relnotes |
…iaskrgr Rollup of 6 pull requests Successful merges: - rust-lang#131829 (Remove support for `-Zprofile` (gcov-style coverage instrumentation)) - rust-lang#132341 (Reject raw lifetime followed by `'`, like regular lifetimes do) - rust-lang#132369 (style-guide: Only use the new binop heuristic for assignments) - rust-lang#132383 (Implement suggestion for never type fallback lints) - rust-lang#132437 (coverage: Regression test for inlining into an uninstrumented crate) - rust-lang#132438 (Remove unncessary option for default rust-analyzer setting) r? `@ghost` `@rustbot` modify labels: rollup
…ukang Remove support for `-Zprofile` (gcov-style coverage instrumentation) Tracking issue: rust-lang#42524 MCP: rust-lang/compiler-team#798 --- This PR removes the unstable `-Zprofile` flag, which enables ”gcov-style” coverage instrumentation, along with its associated `-Zprofile-emit` configuration flag. (The profile flag predates and is almost entirely separate from the stable `-Cinstrument-coverage` flag.) Notably, the `-Zprofile` flag: - Is largely untested in-tree, having only one run-make test that does not check whether its output is correct or useful. - Has no known maintainer. - Has seen no push towards stabilization. - Has at least one severe regression reported in 2022 that apparently remains unaddressed. - rust-lang#100125 - Is confusingly named, since it appears to be more about coverage than performance profiling, and has nothing to do with PGO. - Is fundamentally limited by relying on counters auto-inserted by LLVM, with no knowledge of Rust beyond debuginfo.
Rollup of 13 pull requests Successful merges: - rust-lang#131829 (Remove support for `-Zprofile` (gcov-style coverage instrumentation)) - rust-lang#132369 (style-guide: Only use the new binop heuristic for assignments) - rust-lang#132383 (Implement suggestion for never type fallback lints) - rust-lang#132437 (coverage: Regression test for inlining into an uninstrumented crate) - rust-lang#132438 (Remove unncessary option for default rust-analyzer setting) - rust-lang#132439 (Add `f16` and `f128` to `invalid_nan_comparison`) - rust-lang#132445 (Cleanup attributes around unchecked shifts and unchecked negation in const) - rust-lang#132448 (Add missing backtick) - rust-lang#132450 (Show actual MIR when MIR building forgot to terminate block) - rust-lang#132451 (remove some unnecessary rustc_allow_const_fn_unstable) - rust-lang#132455 (make const_alloc_layout feature gate only about functions that are already stable) - rust-lang#132456 (Move remaining inline assembly test files into asm directory) - rust-lang#132459 (feat(byte_sub_ptr): unstably add ptr::byte_sub_ptr) r? `@ghost` `@rustbot` modify labels: rollup
Support for -Zprofile has been removed: rust-lang/rust#131829
Support for -Zprofile has been removed: rust-lang/rust#131829
Support for -Zprofile has been removed from Rust nightly: rust-lang/rust#131829
Support for -Zprofile has been removed: rust-lang/rust#131829
Support for -Zprofile has been removed: rust-lang/rust#131829
Support for -Zprofile has been removed in rust-lang/rust#131829
Support for -Zprofile has been removed in rust-lang/rust#131829
Support for -Zprofile has been removed in rust-lang/rust#131829
Support for -Zprofile has been removed in rust-lang/rust#131829
Support for -Zprofile has been removed: rust-lang/rust#131829
and use cargo-llvm-cov instead of grcov. Support for -Zprofile has been removed from Rust nightly: rust-lang/rust#131829
Support for -Zprofile has been removed in rust-lang/rust#131829
Support for -Zprofile has been removed in rust-lang/rust#131829
@Zalathar While not perfect, -Zprofile had advantages over the other option. Am I missing something? If not, would it be possible to reconsider this removal ? Thanks :) |
Agreed with @sylvestre, there are many users, and some large projects might have difficulties switching to source-based coverage as it can be more resource intensive. |
My understanding is that the "limitations" are coverage info that can be incorrect by a factor greater than 10, right? It's based on debuginfo, but either not in a way that seems to be very accurate for Rust code, or we are emitting debuginfo in a way that is not useful for it, right? |
We used to rely on `-Zprofile`, but it was recently removed from Rust Nightly: rust-lang/rust#131829 This commit switches to a stable alternative; cf. mozilla/grcov#1240 This change is accompanied by a change in the build environment: instead of using Clang 18 with Rust Nightly, we now use Clang 18 with Rust 1.81. That's the last Rust version based on LLVM 18. Previously we tried to match LLVM versions between C++ and Rust to avoid weird coverage results. Now, it's *required* to match them, otherwise no coverage is gathered at all. Fixes #2912.
Unfortunately, the existing code was causing real maintenance problems in other parts of the compiler, which was one of the reasons for removing it. |
To add, removal of (1) It uses a more accurate name (one that's not confusing like i.e.
|
It would also be nice if someone reported to LLVM about the storage usage being excessive. I feel it is doubtful they have done any optimizations on the profdata format's space usage. |
The rustc's -Zprofile compiler flag was removed on nightly [1], which means gcov-style coverage instrumentation is no longer possible. [1] rust-lang/rust#131829 Signed-off-by: Renato Westphal <[email protected]>
The rustc's -Zprofile compiler flag was removed on nightly [1], which means gcov-style coverage instrumentation is no longer possible. [1] rust-lang/rust#131829 Signed-off-by: Renato Westphal <[email protected]>
Tracking issue: #42524
MCP: rust-lang/compiler-team#798
This PR removes the unstable
-Zprofile
flag, which enables ”gcov-style” coverage instrumentation, along with its associated-Zprofile-emit
configuration flag.(The profile flag predates and is almost entirely separate from the stable
-Cinstrument-coverage
flag.)Notably, the
-Zprofile
flag:-Zprofile
) at some point afternightly-2021-11-11
#100125