Skip to content

Commit 1fac8a0

Browse files
committed
Treat StatementKind::Coverage as completely opaque for SMIR purposes
Coverage statements in MIR are heavily tied to internal details of the coverage implementation that are likely to change, and are unlikely to be useful to third-party tools for the foreseeable future.
1 parent b4d09f3 commit 1fac8a0

File tree

2 files changed

+5
-94
lines changed

2 files changed

+5
-94
lines changed

compiler/rustc_smir/src/rustc_smir/mod.rs

+1-55
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ use crate::stable_mir::ty::{
1414
};
1515
use crate::stable_mir::{self, Context};
1616
use rustc_hir as hir;
17-
use rustc_middle::mir::coverage::CodeRegion;
1817
use rustc_middle::mir::interpret::alloc_range;
1918
use rustc_middle::mir::{self, ConstantKind};
2019
use rustc_middle::ty::{self, Ty, TyCtxt, Variance};
@@ -168,10 +167,7 @@ impl<'tcx> Stable<'tcx> for mir::Statement<'tcx> {
168167
variance: variance.stable(tables),
169168
}
170169
}
171-
Coverage(coverage) => stable_mir::mir::Statement::Coverage(stable_mir::mir::Coverage {
172-
kind: coverage.kind.stable(tables),
173-
code_region: coverage.code_region.as_ref().map(|reg| reg.stable(tables)),
174-
}),
170+
Coverage(coverage) => stable_mir::mir::Statement::Coverage(opaque(coverage)),
175171
Intrinsic(intrinstic) => {
176172
stable_mir::mir::Statement::Intrinsic(intrinstic.stable(tables))
177173
}
@@ -472,30 +468,6 @@ impl<'tcx> Stable<'tcx> for mir::Place<'tcx> {
472468
}
473469
}
474470

475-
impl<'tcx> Stable<'tcx> for mir::coverage::CoverageKind {
476-
type T = stable_mir::mir::CoverageKind;
477-
fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
478-
use rustc_middle::mir::coverage::CoverageKind;
479-
match self {
480-
CoverageKind::Counter { function_source_hash, id } => {
481-
stable_mir::mir::CoverageKind::Counter {
482-
function_source_hash: *function_source_hash as usize,
483-
id: opaque(id),
484-
}
485-
}
486-
CoverageKind::Expression { id, lhs, op, rhs } => {
487-
stable_mir::mir::CoverageKind::Expression {
488-
id: opaque(id),
489-
lhs: opaque(lhs),
490-
op: op.stable(tables),
491-
rhs: opaque(rhs),
492-
}
493-
}
494-
CoverageKind::Unreachable => stable_mir::mir::CoverageKind::Unreachable,
495-
}
496-
}
497-
}
498-
499471
impl<'tcx> Stable<'tcx> for mir::UserTypeProjection {
500472
type T = stable_mir::mir::UserTypeProjection;
501473

@@ -504,18 +476,6 @@ impl<'tcx> Stable<'tcx> for mir::UserTypeProjection {
504476
}
505477
}
506478

507-
impl<'tcx> Stable<'tcx> for mir::coverage::Op {
508-
type T = stable_mir::mir::Op;
509-
510-
fn stable(&self, _: &mut Tables<'tcx>) -> Self::T {
511-
use rustc_middle::mir::coverage::Op::*;
512-
match self {
513-
Subtract => stable_mir::mir::Op::Subtract,
514-
Add => stable_mir::mir::Op::Add,
515-
}
516-
}
517-
}
518-
519479
impl<'tcx> Stable<'tcx> for mir::Local {
520480
type T = stable_mir::mir::Local;
521481
fn stable(&self, _: &mut Tables<'tcx>) -> Self::T {
@@ -562,20 +522,6 @@ impl<'tcx> Stable<'tcx> for ty::UserTypeAnnotationIndex {
562522
}
563523
}
564524

565-
impl<'tcx> Stable<'tcx> for CodeRegion {
566-
type T = stable_mir::mir::CodeRegion;
567-
568-
fn stable(&self, _: &mut Tables<'tcx>) -> Self::T {
569-
stable_mir::mir::CodeRegion {
570-
file_name: self.file_name.as_str().to_string(),
571-
start_line: self.start_line as usize,
572-
start_col: self.start_col as usize,
573-
end_line: self.end_line as usize,
574-
end_col: self.end_col as usize,
575-
}
576-
}
577-
}
578-
579525
impl<'tcx> Stable<'tcx> for mir::UnwindAction {
580526
type T = stable_mir::mir::UnwindAction;
581527
fn stable(&self, _: &mut Tables<'tcx>) -> Self::T {

compiler/rustc_smir/src/stable_mir/mir/body.rs

+4-39
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,10 @@ pub enum AsyncGeneratorKind {
135135
}
136136

137137
pub(crate) type LocalDefId = Opaque;
138-
pub(crate) type CounterValueReference = Opaque;
139-
pub(crate) type InjectedExpressionId = Opaque;
140-
pub(crate) type ExpressionOperandId = Opaque;
138+
/// [`rustc_middle::mir::Coverage`] is heavily tied to internal details of the
139+
/// coverage implementation that are likely to change, and are unlikely to be
140+
/// useful to third-party tools for the foreseeable future.
141+
pub(crate) type Coverage = Opaque;
141142

142143
/// The FakeReadCause describes the type of pattern why a FakeRead statement exists.
143144
#[derive(Clone, Debug)]
@@ -166,42 +167,6 @@ pub enum Variance {
166167
Bivariant,
167168
}
168169

169-
#[derive(Clone, Debug)]
170-
pub enum Op {
171-
Subtract,
172-
Add,
173-
}
174-
175-
#[derive(Clone, Debug)]
176-
pub enum CoverageKind {
177-
Counter {
178-
function_source_hash: usize,
179-
id: CounterValueReference,
180-
},
181-
Expression {
182-
id: InjectedExpressionId,
183-
lhs: ExpressionOperandId,
184-
op: Op,
185-
rhs: ExpressionOperandId,
186-
},
187-
Unreachable,
188-
}
189-
190-
#[derive(Clone, Debug)]
191-
pub struct CodeRegion {
192-
pub file_name: String,
193-
pub start_line: usize,
194-
pub start_col: usize,
195-
pub end_line: usize,
196-
pub end_col: usize,
197-
}
198-
199-
#[derive(Clone, Debug)]
200-
pub struct Coverage {
201-
pub kind: CoverageKind,
202-
pub code_region: Option<CodeRegion>,
203-
}
204-
205170
#[derive(Clone, Debug)]
206171
pub struct CopyNonOverlapping {
207172
pub src: Operand,

0 commit comments

Comments
 (0)