summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Hill <aa1ronham@gmail.com>2021-12-26 17:45:21 -0500
committerAaron Hill <aa1ronham@gmail.com>2022-01-05 10:13:29 -0500
commit560c90f5df4ecfbb75e20ae19bf10028756a3613 (patch)
tree9bd2891778c42e0996cc5104326cb28c762c7943
parent5580e5e1dda4557bdbda14cdb4255a3e6facfe86 (diff)
downloadrust-560c90f5df4ecfbb75e20ae19bf10028756a3613.tar.gz
Adjust assert_default_hashing_controls
-rw-r--r--compiler/rustc_query_system/src/ich/hcx.rs7
-rw-r--r--compiler/rustc_span/src/hygiene.rs18
-rw-r--r--compiler/rustc_span/src/lib.rs3
3 files changed, 22 insertions, 6 deletions
diff --git a/compiler/rustc_query_system/src/ich/hcx.rs b/compiler/rustc_query_system/src/ich/hcx.rs
index 9f9de707e7a..6838a32c7b3 100644
--- a/compiler/rustc_query_system/src/ich/hcx.rs
+++ b/compiler/rustc_query_system/src/ich/hcx.rs
@@ -27,6 +27,7 @@ fn compute_ignored_attr_names() -> FxHashSet<Symbol> {
pub struct StableHashingContext<'a> {
definitions: &'a Definitions,
cstore: &'a dyn CrateStore,
+ sess: &'a Session,
pub(super) body_resolver: BodyResolver<'a>,
// Very often, we are hashing something that does not need the
// `CachingSourceMapView`, so we initialize it lazily.
@@ -63,6 +64,7 @@ impl<'a> StableHashingContext<'a> {
body_resolver: BodyResolver::Forbidden,
definitions,
cstore,
+ sess,
caching_source_map: None,
raw_source_map: sess.source_map(),
hashing_controls: HashingControls {
@@ -198,6 +200,11 @@ impl<'a> rustc_span::HashStableContext for StableHashingContext<'a> {
}
#[inline]
+ fn debug_opts_incremental_ignore_spans(&self) -> bool {
+ self.sess.opts.debugging_opts.incremental_ignore_spans
+ }
+
+ #[inline]
fn def_path_hash(&self, def_id: DefId) -> DefPathHash {
self.def_path_hash(def_id)
}
diff --git a/compiler/rustc_span/src/hygiene.rs b/compiler/rustc_span/src/hygiene.rs
index 6bb4f31cbff..7b70c20d307 100644
--- a/compiler/rustc_span/src/hygiene.rs
+++ b/compiler/rustc_span/src/hygiene.rs
@@ -89,11 +89,11 @@ rustc_index::newtype_index! {
}
}
-// Assert that the provided `HashStableContext` is configured with the 'default'
-// `HashingControls`. We should always have bailed out before getting to here
-// with a non-default mode. With this check in place, we can avoid the need
-// to maintain separate versions of `ExpnData` hashes for each permutation
-// of `HashingControls` settings.
+/// Assert that the provided `HashStableContext` is configured with the 'default'
+/// `HashingControls`. We should always have bailed out before getting to here
+/// with a non-default mode. With this check in place, we can avoid the need
+/// to maintain separate versions of `ExpnData` hashes for each permutation
+/// of `HashingControls` settings.
fn assert_default_hashing_controls<CTX: HashStableContext>(ctx: &CTX, msg: &str) {
match ctx.hashing_controls() {
// Ideally, we would also check that `node_id_hashing_mode` was always
@@ -105,7 +105,13 @@ fn assert_default_hashing_controls<CTX: HashStableContext>(ctx: &CTX, msg: &str)
// FIXME: Enforce that we don't end up transitively hashing any `HirId`s,
// or ensure that this method is always invoked with the same
// `NodeIdHashingMode`
- HashingControls { hash_spans: true, node_id_hashing_mode: _ } => {}
+ //
+ // Note that we require that `hash_spans` be set according to the global
+ // `-Z incremental-ignore-spans` option. Normally, this option is disabled,
+ // which will cause us to require that this method always be called with `Span` hashing
+ // enabled.
+ HashingControls { hash_spans, node_id_hashing_mode: _ }
+ if hash_spans == !ctx.debug_opts_incremental_ignore_spans() => {}
other => panic!("Attempted hashing of {msg} with non-default HashingControls: {:?}", other),
}
}
diff --git a/compiler/rustc_span/src/lib.rs b/compiler/rustc_span/src/lib.rs
index 4d60ca481a0..9602bc5d0b7 100644
--- a/compiler/rustc_span/src/lib.rs
+++ b/compiler/rustc_span/src/lib.rs
@@ -2058,6 +2058,9 @@ impl InnerSpan {
pub trait HashStableContext {
fn def_path_hash(&self, def_id: DefId) -> DefPathHash;
fn hash_spans(&self) -> bool;
+ /// Accesses `sess.opts.debugging_opts.incremental_ignore_spans` since
+ /// we don't have easy access to a `Session`
+ fn debug_opts_incremental_ignore_spans(&self) -> bool;
fn def_span(&self, def_id: LocalDefId) -> Span;
fn span_data_to_lines_and_cols(
&mut self,