mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-21 17:52:12 +03:00
coherence: check builtin impls after the specialization graph is ready
Fixes #33187.
This commit is contained in:
@@ -39,14 +39,10 @@ struct CoherenceChecker<'a, 'tcx: 'a> {
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
}
|
||||
|
||||
struct CoherenceCheckVisitor<'a, 'tcx: 'a> {
|
||||
cc: &'a CoherenceChecker<'a, 'tcx>,
|
||||
}
|
||||
|
||||
impl<'a, 'tcx, 'v> ItemLikeVisitor<'v> for CoherenceCheckVisitor<'a, 'tcx> {
|
||||
impl<'a, 'tcx, 'v> ItemLikeVisitor<'v> for CoherenceChecker<'a, 'tcx> {
|
||||
fn visit_item(&mut self, item: &Item) {
|
||||
if let ItemImpl(..) = item.node {
|
||||
self.cc.check_implementation(item)
|
||||
self.check_implementation(item)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,14 +77,11 @@ fn get_base_type_def_id(&self, span: Span, ty: Ty<'tcx>) -> Option<DefId> {
|
||||
}
|
||||
}
|
||||
|
||||
fn check(&self) {
|
||||
fn check(&mut self) {
|
||||
// Check implementations and traits. This populates the tables
|
||||
// containing the inherent methods and extension methods. It also
|
||||
// builds up the trait inheritance table.
|
||||
self.tcx.visit_all_item_likes_in_krate(
|
||||
DepNode::CoherenceCheckImpl,
|
||||
&mut CoherenceCheckVisitor { cc: self });
|
||||
builtin::check(self.tcx);
|
||||
self.tcx.visit_all_item_likes_in_krate(DepNode::CoherenceCheckImpl, self);
|
||||
}
|
||||
|
||||
fn check_implementation(&self, item: &Item) {
|
||||
@@ -174,4 +167,5 @@ pub fn check_coherence(ccx: &CrateCtxt) {
|
||||
unsafety::check(ccx.tcx);
|
||||
orphan::check(ccx.tcx);
|
||||
overlap::check(ccx.tcx);
|
||||
builtin::check(ccx.tcx);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user