From 7afb32557da945ec70fc926dbd91006089005fa4 Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Sun, 3 Jan 2021 09:19:16 -0500 Subject: [PATCH] Enforce that query results implement Debug --- compiler/rustc_attr/src/builtin.rs | 6 +++--- compiler/rustc_data_structures/src/stable_hasher.rs | 1 + compiler/rustc_data_structures/src/steal.rs | 1 + compiler/rustc_feature/src/active.rs | 2 +- compiler/rustc_hir/src/lang_items.rs | 2 +- compiler/rustc_middle/src/hir/map/mod.rs | 2 ++ compiler/rustc_middle/src/hir/mod.rs | 4 +++- compiler/rustc_middle/src/lint.rs | 5 ++++- compiler/rustc_middle/src/middle/codegen_fn_attrs.rs | 2 +- compiler/rustc_middle/src/middle/cstore.rs | 2 +- compiler/rustc_middle/src/middle/mod.rs | 2 +- compiler/rustc_middle/src/middle/resolve_lifetime.rs | 2 +- compiler/rustc_middle/src/middle/stability.rs | 4 ++-- compiler/rustc_middle/src/mir/interpret/value.rs | 2 +- compiler/rustc_middle/src/mir/mono.rs | 1 + compiler/rustc_middle/src/mir/query.rs | 8 ++++---- compiler/rustc_middle/src/traits/specialization_graph.rs | 4 ++-- compiler/rustc_middle/src/ty/mod.rs | 8 ++++---- compiler/rustc_middle/src/ty/trait_def.rs | 2 +- compiler/rustc_query_system/src/query/caches.rs | 9 +++++---- compiler/rustc_query_system/src/query/plumbing.rs | 5 +++-- compiler/rustc_session/src/config.rs | 4 ++-- 22 files changed, 45 insertions(+), 33 deletions(-) diff --git a/compiler/rustc_attr/src/builtin.rs b/compiler/rustc_attr/src/builtin.rs index ead90f23ce7..b0f3781046c 100644 --- a/compiler/rustc_attr/src/builtin.rs +++ b/compiler/rustc_attr/src/builtin.rs @@ -67,7 +67,7 @@ fn handle_errors(sess: &ParseSess, span: Span, error: AttrError) { } } -#[derive(Copy, Clone, PartialEq, Encodable, Decodable)] +#[derive(Copy, Clone, PartialEq, Encodable, Decodable, Debug)] pub enum InlineAttr { None, Hint, @@ -75,13 +75,13 @@ pub enum InlineAttr { Never, } -#[derive(Clone, Encodable, Decodable)] +#[derive(Clone, Encodable, Decodable, Debug)] pub enum InstructionSetAttr { ArmA32, ArmT32, } -#[derive(Clone, Encodable, Decodable)] +#[derive(Clone, Encodable, Decodable, Debug)] pub enum OptimizeAttr { None, Speed, diff --git a/compiler/rustc_data_structures/src/stable_hasher.rs b/compiler/rustc_data_structures/src/stable_hasher.rs index 579eb1cb7da..3850c9b74fd 100644 --- a/compiler/rustc_data_structures/src/stable_hasher.rs +++ b/compiler/rustc_data_structures/src/stable_hasher.rs @@ -552,6 +552,7 @@ pub fn hash_stable_hashmap( /// A vector container that makes sure that its items are hashed in a stable /// order. +#[derive(Debug)] pub struct StableVec(Vec); impl StableVec { diff --git a/compiler/rustc_data_structures/src/steal.rs b/compiler/rustc_data_structures/src/steal.rs index e532a84cea3..a70ca926383 100644 --- a/compiler/rustc_data_structures/src/steal.rs +++ b/compiler/rustc_data_structures/src/steal.rs @@ -21,6 +21,7 @@ /// -- once the value is stolen -- it will never be read from again. // // FIXME(#41710): what is the best way to model linear queries? +#[derive(Debug)] pub struct Steal { value: RwLock>, } diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 3b54ffbc3f0..8849033ede7 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -36,7 +36,7 @@ macro_rules! declare_features { ),+]; /// A set of features to be used by later passes. - #[derive(Clone, Default)] + #[derive(Clone, Default, Debug)] pub struct Features { /// `#![feature]` attrs for language features, for error reporting. pub declared_lang_features: Vec<(Symbol, Span, Option)>, diff --git a/compiler/rustc_hir/src/lang_items.rs b/compiler/rustc_hir/src/lang_items.rs index e82ea310b8c..26ce30cb511 100644 --- a/compiler/rustc_hir/src/lang_items.rs +++ b/compiler/rustc_hir/src/lang_items.rs @@ -67,7 +67,7 @@ pub fn group(self) -> Option { } } - #[derive(HashStable_Generic)] + #[derive(HashStable_Generic, Debug)] pub struct LanguageItems { /// Mappings from lang items to their possibly found `DefId`s. /// The index corresponds to the order in `LangItem`. diff --git a/compiler/rustc_middle/src/hir/map/mod.rs b/compiler/rustc_middle/src/hir/map/mod.rs index 06bb1347dc1..ef79b52b1e7 100644 --- a/compiler/rustc_middle/src/hir/map/mod.rs +++ b/compiler/rustc_middle/src/hir/map/mod.rs @@ -86,11 +86,13 @@ fn is_body_owner<'hir>(node: Node<'hir>, hir_id: HirId) -> bool { } } +#[derive(Debug)] pub(super) struct HirOwnerData<'hir> { pub(super) signature: Option<&'hir Owner<'hir>>, pub(super) with_bodies: Option<&'hir mut OwnerNodes<'hir>>, } +#[derive(Debug)] pub struct IndexedHir<'hir> { /// The SVH of the local crate. pub crate_hash: Svh, diff --git a/compiler/rustc_middle/src/hir/mod.rs b/compiler/rustc_middle/src/hir/mod.rs index ae3b30217cc..c4be9883a81 100644 --- a/compiler/rustc_middle/src/hir/mod.rs +++ b/compiler/rustc_middle/src/hir/mod.rs @@ -16,6 +16,7 @@ use rustc_hir::*; use rustc_index::vec::IndexVec; +#[derive(Debug)] pub struct Owner<'tcx> { parent: HirId, node: Node<'tcx>, @@ -31,12 +32,13 @@ fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHas } } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct ParentedNode<'tcx> { parent: ItemLocalId, node: Node<'tcx>, } +#[derive(Debug)] pub struct OwnerNodes<'tcx> { hash: Fingerprint, nodes: IndexVec>>, diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index 80c87dddd56..0bdccf7b5f0 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -12,7 +12,7 @@ use rustc_span::{symbol, Span, Symbol, DUMMY_SP}; /// How a lint level was set. -#[derive(Clone, Copy, PartialEq, Eq, HashStable)] +#[derive(Clone, Copy, PartialEq, Eq, HashStable, Debug)] pub enum LintLevelSource { /// Lint is at the default level as declared /// in rustc or a plugin. @@ -48,11 +48,13 @@ pub fn span(&self) -> Span { /// A tuple of a lint level and its source. pub type LevelAndSource = (Level, LintLevelSource); +#[derive(Debug)] pub struct LintLevelSets { pub list: Vec, pub lint_cap: Level, } +#[derive(Debug)] pub enum LintSet { CommandLine { // -A,-W,-D flags, a `Symbol` for the flag itself and `Level` for which @@ -139,6 +141,7 @@ pub fn get_lint_id_level( } } +#[derive(Debug)] pub struct LintLevelMap { pub sets: LintLevelSets, pub id_to_set: FxHashMap, diff --git a/compiler/rustc_middle/src/middle/codegen_fn_attrs.rs b/compiler/rustc_middle/src/middle/codegen_fn_attrs.rs index a4363bb580a..5f2ffda642c 100644 --- a/compiler/rustc_middle/src/middle/codegen_fn_attrs.rs +++ b/compiler/rustc_middle/src/middle/codegen_fn_attrs.rs @@ -3,7 +3,7 @@ use rustc_session::config::SanitizerSet; use rustc_span::symbol::Symbol; -#[derive(Clone, TyEncodable, TyDecodable, HashStable)] +#[derive(Clone, TyEncodable, TyDecodable, HashStable, Debug)] pub struct CodegenFnAttrs { pub flags: CodegenFnAttrFlags, /// Parsed representation of the `#[inline]` attribute diff --git a/compiler/rustc_middle/src/middle/cstore.rs b/compiler/rustc_middle/src/middle/cstore.rs index 6d2c43874bc..4f1ca968c30 100644 --- a/compiler/rustc_middle/src/middle/cstore.rs +++ b/compiler/rustc_middle/src/middle/cstore.rs @@ -96,7 +96,7 @@ pub struct NativeLib { pub wasm_import_module: Option, } -#[derive(Clone, TyEncodable, TyDecodable, HashStable)] +#[derive(Clone, TyEncodable, TyDecodable, HashStable, Debug)] pub struct ForeignModule { pub foreign_items: Vec, pub def_id: DefId, diff --git a/compiler/rustc_middle/src/middle/mod.rs b/compiler/rustc_middle/src/middle/mod.rs index 9bc9ca6707a..a369e85306b 100644 --- a/compiler/rustc_middle/src/middle/mod.rs +++ b/compiler/rustc_middle/src/middle/mod.rs @@ -7,7 +7,7 @@ pub mod lib_features { use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_span::symbol::Symbol; - #[derive(HashStable)] + #[derive(HashStable, Debug)] pub struct LibFeatures { // A map from feature to stabilisation version. pub stable: FxHashMap, diff --git a/compiler/rustc_middle/src/middle/resolve_lifetime.rs b/compiler/rustc_middle/src/middle/resolve_lifetime.rs index 3d0144e9c8a..1b7d0e620a4 100644 --- a/compiler/rustc_middle/src/middle/resolve_lifetime.rs +++ b/compiler/rustc_middle/src/middle/resolve_lifetime.rs @@ -68,7 +68,7 @@ pub fn insert(&mut self, value: T) { /// Maps the id of each lifetime reference to the lifetime decl /// that it corresponds to. -#[derive(Default, HashStable)] +#[derive(Default, HashStable, Debug)] pub struct ResolveLifetimes { /// Maps from every use of a named (not anonymous) lifetime to a /// `Region` describing how that region is bound diff --git a/compiler/rustc_middle/src/middle/stability.rs b/compiler/rustc_middle/src/middle/stability.rs index 4f08057a7e3..89ca8eed39a 100644 --- a/compiler/rustc_middle/src/middle/stability.rs +++ b/compiler/rustc_middle/src/middle/stability.rs @@ -36,7 +36,7 @@ pub fn from_attr_level(level: &attr::StabilityLevel) -> Self { } /// An entry in the `depr_map`. -#[derive(Clone, HashStable)] +#[derive(Clone, HashStable, Debug)] pub struct DeprecationEntry { /// The metadata of the attribute associated with this entry. pub attr: Deprecation, @@ -63,7 +63,7 @@ pub fn same_origin(&self, other: &DeprecationEntry) -> bool { } /// A stability index, giving the stability level for items and methods. -#[derive(HashStable)] +#[derive(HashStable, Debug)] pub struct Index<'tcx> { /// This is mostly a cache, except the stabilities of local items /// are filled by the annotator. diff --git a/compiler/rustc_middle/src/mir/interpret/value.rs b/compiler/rustc_middle/src/mir/interpret/value.rs index 5e97862ecf2..f288ad8d1d4 100644 --- a/compiler/rustc_middle/src/mir/interpret/value.rs +++ b/compiler/rustc_middle/src/mir/interpret/value.rs @@ -13,7 +13,7 @@ use super::{AllocId, Allocation, InterpResult, Pointer, PointerArithmetic}; /// Represents the result of const evaluation via the `eval_to_allocation` query. -#[derive(Clone, HashStable, TyEncodable, TyDecodable)] +#[derive(Clone, HashStable, TyEncodable, TyDecodable, Debug)] pub struct ConstAlloc<'tcx> { // the value lives here, at offset 0, and that allocation definitely is a `AllocKind::Memory` // (so you can use `AllocMap::unwrap_memory`). diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index 6d5d408f86c..eb13c89544c 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -216,6 +216,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { } } +#[derive(Debug)] pub struct CodegenUnit<'tcx> { /// A name for this CGU. Incremental compilation requires that /// name be unique amongst **all** crates. Therefore, it should diff --git a/compiler/rustc_middle/src/mir/query.rs b/compiler/rustc_middle/src/mir/query.rs index a7b847fc5e0..c293fbe4ef8 100644 --- a/compiler/rustc_middle/src/mir/query.rs +++ b/compiler/rustc_middle/src/mir/query.rs @@ -17,7 +17,7 @@ use super::{Field, SourceInfo}; -#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable)] +#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable, Debug)] pub enum UnsafetyViolationKind { /// Only permitted in regular `fn`s, prohibited in `const fn`s. General, @@ -36,7 +36,7 @@ pub enum UnsafetyViolationKind { UnsafeFnBorrowPacked, } -#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable)] +#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable, Debug)] pub enum UnsafetyViolationDetails { CallToUnsafeFunction, UseOfInlineAssembly, @@ -121,7 +121,7 @@ pub fn description_and_note(&self) -> (&'static str, &'static str) { } } -#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable)] +#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable, Debug)] pub struct UnsafetyViolation { pub source_info: SourceInfo, pub lint_root: hir::HirId, @@ -129,7 +129,7 @@ pub struct UnsafetyViolation { pub details: UnsafetyViolationDetails, } -#[derive(Clone, TyEncodable, TyDecodable, HashStable)] +#[derive(Clone, TyEncodable, TyDecodable, HashStable, Debug)] pub struct UnsafetyCheckResult { /// Violations that are propagated *upwards* from this function. pub violations: Lrc<[UnsafetyViolation]>, diff --git a/compiler/rustc_middle/src/traits/specialization_graph.rs b/compiler/rustc_middle/src/traits/specialization_graph.rs index ec6010e6eec..cb60bfa4c54 100644 --- a/compiler/rustc_middle/src/traits/specialization_graph.rs +++ b/compiler/rustc_middle/src/traits/specialization_graph.rs @@ -23,7 +23,7 @@ /// parents of a given specializing impl, which is needed for extracting /// default items amongst other things. In the simple "chain" rule, every impl /// has at most one parent. -#[derive(TyEncodable, TyDecodable, HashStable)] +#[derive(TyEncodable, TyDecodable, HashStable, Debug)] pub struct Graph { /// All impls have a parent; the "root" impls have as their parent the `def_id` /// of the trait. @@ -50,7 +50,7 @@ pub fn parent(&self, child: DefId) -> DefId { /// Children of a given impl, grouped into blanket/non-blanket varieties as is /// done in `TraitDef`. -#[derive(Default, TyEncodable, TyDecodable)] +#[derive(Default, TyEncodable, TyDecodable, Debug)] pub struct Children { // Impls of a trait (or specializations of a given impl). To allow for // quicker lookup, the impls are indexed by a simplified version of their diff --git a/compiler/rustc_middle/src/ty/mod.rs b/compiler/rustc_middle/src/ty/mod.rs index 1399fc76e02..1a88f460e36 100644 --- a/compiler/rustc_middle/src/ty/mod.rs +++ b/compiler/rustc_middle/src/ty/mod.rs @@ -183,7 +183,7 @@ pub struct ImplHeader<'tcx> { pub predicates: Vec>, } -#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable)] +#[derive(Copy, Clone, PartialEq, TyEncodable, TyDecodable, HashStable, Debug)] pub enum ImplPolarity { /// `impl Trait for Type` Positive, @@ -433,7 +433,7 @@ pub enum Variance { /// HIR of every item in the local crate. Instead, use /// `tcx.variances_of()` to get the variance for a *particular* /// item. -#[derive(HashStable)] +#[derive(HashStable, Debug)] pub struct CrateVariancesMap<'tcx> { /// For each item with generics, maps to a vector of the variance /// of its generics. If an item has no generics, it will have no @@ -1208,7 +1208,7 @@ pub fn potentially_quantified( /// HIR of every item in the local crate. Instead, use /// `tcx.inferred_outlives_of()` to get the outlives for a *particular* /// item. -#[derive(HashStable)] +#[derive(HashStable, Debug)] pub struct CratePredicatesMap<'tcx> { /// For each struct with outlive bounds, maps to a vector of the /// predicate of its outlive bounds. If an item has no outlives @@ -3150,7 +3150,7 @@ pub fn is_object_safe(self, key: DefId) -> bool { } } -#[derive(Clone, HashStable)] +#[derive(Clone, HashStable, Debug)] pub struct AdtSizedConstraint<'tcx>(pub &'tcx [Ty<'tcx>]); /// Yields the parent function's `DefId` if `def_id` is an `impl Trait` definition. diff --git a/compiler/rustc_middle/src/ty/trait_def.rs b/compiler/rustc_middle/src/ty/trait_def.rs index 86476dffc03..f4d7eac0ae2 100644 --- a/compiler/rustc_middle/src/ty/trait_def.rs +++ b/compiler/rustc_middle/src/ty/trait_def.rs @@ -63,7 +63,7 @@ pub enum TraitSpecializationKind { AlwaysApplicable, } -#[derive(Default)] +#[derive(Default, Debug)] pub struct TraitImpls { blanket_impls: Vec, /// Impls indexed by their simplified self type, for fast lookup. diff --git a/compiler/rustc_query_system/src/query/caches.rs b/compiler/rustc_query_system/src/query/caches.rs index 7bc6ae1d1c6..f17551c0e18 100644 --- a/compiler/rustc_query_system/src/query/caches.rs +++ b/compiler/rustc_query_system/src/query/caches.rs @@ -15,7 +15,7 @@ pub trait CacheSelector { } pub trait QueryStorage: Default { - type Value; + type Value: Debug; type Stored: Clone; /// Store a value without putting it in the cache. @@ -75,7 +75,7 @@ fn default() -> Self { } } -impl QueryStorage for DefaultCache { +impl QueryStorage for DefaultCache { type Value = V; type Stored = V; @@ -89,7 +89,7 @@ fn store_nocache(&self, value: Self::Value) -> Self::Stored { impl QueryCache for DefaultCache where K: Eq + Hash + Clone + Debug, - V: Clone, + V: Clone + Debug, { type Key = K; type Sharded = FxHashMap; @@ -156,7 +156,7 @@ fn default() -> Self { } } -impl<'tcx, K: Eq + Hash, V: 'tcx> QueryStorage for ArenaCache<'tcx, K, V> { +impl<'tcx, K: Eq + Hash, V: Debug + 'tcx> QueryStorage for ArenaCache<'tcx, K, V> { type Value = V; type Stored = &'tcx V; @@ -171,6 +171,7 @@ fn store_nocache(&self, value: Self::Value) -> Self::Stored { impl<'tcx, K, V: 'tcx> QueryCache for ArenaCache<'tcx, K, V> where K: Eq + Hash + Clone + Debug, + V: Debug { type Key = K; type Sharded = FxHashMap; diff --git a/compiler/rustc_query_system/src/query/plumbing.rs b/compiler/rustc_query_system/src/query/plumbing.rs index d17af6120c7..5fab62dc82a 100644 --- a/compiler/rustc_query_system/src/query/plumbing.rs +++ b/compiler/rustc_query_system/src/query/plumbing.rs @@ -21,6 +21,7 @@ use rustc_span::Span; use std::collections::hash_map::Entry; use std::hash::{Hash, Hasher}; +use std::fmt::Debug; use std::mem; use std::num::NonZeroU32; use std::ptr; @@ -478,7 +479,7 @@ fn try_execute_query( result } -fn load_from_disk_and_cache_in_memory( +fn load_from_disk_and_cache_in_memory( tcx: CTX, key: K, prev_dep_node_index: SerializedDepNodeIndex, @@ -539,7 +540,7 @@ fn load_from_disk_and_cache_in_memory( #[inline(never)] #[cold] -fn incremental_verify_ich( +fn incremental_verify_ich( tcx: CTX, result: &V, dep_node: &DepNode, diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index 0cafdec1495..3aa728439b8 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -361,7 +361,7 @@ fn default() -> Self { /// Use tree-based collections to cheaply get a deterministic `Hash` implementation. /// *Do not* switch `BTreeMap` out for an unsorted container type! That would break /// dependency tracking for command-line arguments. -#[derive(Clone, Hash)] +#[derive(Clone, Hash, Debug)] pub struct OutputTypes(BTreeMap>); impl_stable_hash_via_hash!(OutputTypes); @@ -538,7 +538,7 @@ pub fn source_name(&self) -> FileName { } } -#[derive(Clone, Hash)] +#[derive(Clone, Hash, Debug)] pub struct OutputFilenames { pub out_directory: PathBuf, filestem: String,