about summary refs log tree commit diff
path: root/src/librustc_middle
diff options
context:
space:
mode:
authorRich Kadel <richkadel@google.com>2020-06-22 19:21:56 -0700
committerRich Kadel <richkadel@google.com>2020-06-22 19:21:56 -0700
commit08ec4cbb9e0672118946c85f410b50ea4001b1dd (patch)
tree166d348dcb72b5d1a03f91425b9bc67132262bf1 /src/librustc_middle
parent994d9d03272363d57a655ebacbf58f0069b3b177 (diff)
downloadrust-08ec4cbb9e0672118946c85f410b50ea4001b1dd.tar.gz
rust-08ec4cbb9e0672118946c85f410b50ea4001b1dd.zip
moves coverage data computation from pass to query
Diffstat (limited to 'src/librustc_middle')
-rw-r--r--src/librustc_middle/mir/mod.rs34
-rw-r--r--src/librustc_middle/query/mod.rs2
2 files changed, 16 insertions, 20 deletions
diff --git a/src/librustc_middle/mir/mod.rs b/src/librustc_middle/mir/mod.rs
index e88329db992..854fda095b6 100644
--- a/src/librustc_middle/mir/mod.rs
+++ b/src/librustc_middle/mir/mod.rs
@@ -88,19 +88,6 @@ impl MirPhase {
     }
 }
 
-/// Coverage data computed by the `InstrumentCoverage` MIR pass, when compiling with
-/// `-Zinstrument_coverage`.
-#[derive(Clone, RustcEncodable, RustcDecodable, Debug, HashStable, TypeFoldable)]
-pub struct CoverageData {
-    /// A hash value that can be used by the consumer of the coverage profile data to detect
-    /// changes to the instrumented source of the associated MIR body (typically, for an
-    /// individual function).
-    pub hash: u64,
-
-    /// The total number of coverage region counters added to this MIR Body.
-    pub num_counters: u32,
-}
-
 /// The lowered representation of a single function.
 #[derive(Clone, RustcEncodable, RustcDecodable, Debug, HashStable, TypeFoldable)]
 pub struct Body<'tcx> {
@@ -184,10 +171,6 @@ pub struct Body<'tcx> {
     /// FIXME(oli-obk): rewrite the promoted during promotion to eliminate the cell components.
     pub ignore_interior_mut_in_const_validation: bool,
 
-    /// If compiling with `-Zinstrument_coverage`, the `InstrumentCoverage` pass stores summary
-    /// information associated with the MIR, used in code generation of the coverage counters.
-    pub coverage_data: Option<CoverageData>,
-
     predecessor_cache: PredecessorCache,
 }
 
@@ -228,7 +211,6 @@ impl<'tcx> Body<'tcx> {
             required_consts: Vec::new(),
             ignore_interior_mut_in_const_validation: false,
             control_flow_destroyed,
-            coverage_data: None,
             predecessor_cache: PredecessorCache::new(),
         }
     }
@@ -256,7 +238,6 @@ impl<'tcx> Body<'tcx> {
             generator_kind: None,
             var_debug_info: Vec::new(),
             ignore_interior_mut_in_const_validation: false,
-            coverage_data: None,
             predecessor_cache: PredecessorCache::new(),
         }
     }
@@ -2938,3 +2919,18 @@ impl Location {
         }
     }
 }
+
+/// Coverage data associated with each function (MIR) instrumented with coverage counters, when
+/// compiled with `-Zinstrument_coverage`. The query `tcx.coverage_data(DefId)` computes these
+/// values on demand (during code generation). This query is only valid after executing the MIR pass
+/// `InstrumentCoverage`.
+#[derive(Clone, RustcEncodable, RustcDecodable, Debug, HashStable)]
+pub struct CoverageData {
+    /// A hash value that can be used by the consumer of the coverage profile data to detect
+    /// changes to the instrumented source of the associated MIR body (typically, for an
+    /// individual function).
+    pub hash: u64,
+
+    /// The total number of coverage region counters added to the MIR `Body`.
+    pub num_counters: u32,
+}
diff --git a/src/librustc_middle/query/mod.rs b/src/librustc_middle/query/mod.rs
index 993b48afb7a..4815f2617b6 100644
--- a/src/librustc_middle/query/mod.rs
+++ b/src/librustc_middle/query/mod.rs
@@ -214,7 +214,7 @@ rustc_queries! {
             cache_on_disk_if { key.is_local() }
         }
 
-        query coverage_data(key: DefId) -> Option<mir::CoverageData> {
+        query coverage_data(key: DefId) -> mir::CoverageData {
             desc { |tcx| "retrieving coverage data from MIR for `{}`", tcx.def_path_str(key) }
             storage(ArenaCacheSelector<'tcx>)
             cache_on_disk_if { key.is_local() }