Make LintExpectationId stable between compilation sessions (RFC-2383)

This commit is contained in:
xFrednet
2021-11-20 20:45:27 +01:00
parent 44cb8fa482
commit 33a5945069
10 changed files with 171 additions and 39 deletions

View File

@@ -6,10 +6,9 @@ use rustc_errors::{Diagnostic, DiagnosticBuilder, DiagnosticId};
use rustc_hir::HirId;
use rustc_index::vec::IndexVec;
use rustc_query_system::ich::StableHashingContext;
use rustc_session::lint::LintExpectationId;
use rustc_session::lint::{
builtin::{self, FORBIDDEN_LINT_GROUPS},
FutureIncompatibilityReason, Level, Lint, LintId,
FutureIncompatibilityReason, Level, Lint, LintExpectationId, LintId,
};
use rustc_session::{DiagnosticMessageId, Session};
use rustc_span::hygiene::MacroKind;

View File

@@ -49,7 +49,7 @@ use rustc_middle::mir::FakeReadCause;
use rustc_query_system::ich::{NodeIdHashingMode, StableHashingContext};
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
use rustc_session::config::{BorrowckMode, CrateType, OutputFilenames};
use rustc_session::lint::{Level, Lint};
use rustc_session::lint::{Level, Lint, LintExpectationId};
use rustc_session::Limit;
use rustc_session::Session;
use rustc_span::def_id::{DefPathHash, StableCrateId};
@@ -2755,11 +2755,13 @@ impl<'tcx> TyCtxt<'tcx> {
return bound;
}
if hir
.attrs(id)
.iter()
.any(|attr| Level::from_symbol(attr.name_or_empty(), attr.id.as_u32()).is_some())
{
if hir.attrs(id).iter().enumerate().any(|(attr_index, attr)| {
Level::from_symbol(attr.name_or_empty(), || LintExpectationId::Stable {
hir_id: id,
attr_index,
})
.is_some()
}) {
return id;
}
let next = hir.get_parent_node(id);