Skip to content

Commit e97848f

Browse files
RenjiSannZalathar
authored andcommitted
coverage: Add CLI 'condition' coverage option
1 parent da159eb commit e97848f

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

compiler/rustc_session/src/config.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,24 @@ pub enum CoverageLevel {
159159
Block,
160160
/// Also instrument branch points (includes block coverage).
161161
Branch,
162-
/// Instrument for MC/DC. Mostly a superset of branch coverage, but might
163-
/// differ in some corner cases.
162+
/// Same as branch condition, with a single different case:
163+
/// In boolean expressions that are not inside a control-flow decision,
164+
/// it will intentionally insert an instrumented branch for the last operand.
165+
///
166+
/// Example:
167+
/// ```
168+
/// # let (a, b) = (false, true);
169+
/// let x = a && b;
170+
/// // ^ last operand
171+
/// ```
172+
/// Condition coverage does track true/false coverage for `b`,
173+
/// but branch coverage doesn't.
174+
///
175+
/// The main purpose of this coverage level is to be reused by MCDC.
176+
Condition,
177+
/// Instrument for MC/DC. Enables condition coverage under the hood.
178+
/// Mostly a superset of branch coverage, but might differ in some
179+
/// corner cases.
164180
Mcdc,
165181
}
166182

compiler/rustc_session/src/options.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -961,6 +961,7 @@ mod parse {
961961
match option {
962962
"block" => slot.level = CoverageLevel::Block,
963963
"branch" => slot.level = CoverageLevel::Branch,
964+
"condition" => slot.level = CoverageLevel::Condition,
964965
"mcdc" => slot.level = CoverageLevel::Mcdc,
965966
_ => return false,
966967
}

compiler/rustc_session/src/session.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,11 @@ impl Session {
353353
&& self.opts.unstable_opts.coverage_options.level >= CoverageLevel::Branch
354354
}
355355

356+
pub fn instrument_coverage_condition(&self) -> bool {
357+
self.instrument_coverage()
358+
&& self.opts.unstable_opts.coverage_options.level >= CoverageLevel::Condition
359+
}
360+
356361
pub fn instrument_coverage_mcdc(&self) -> bool {
357362
self.instrument_coverage()
358363
&& self.opts.unstable_opts.coverage_options.level >= CoverageLevel::Mcdc

0 commit comments

Comments
 (0)