This repository was archived by the owner on May 28, 2025. It is now read-only.
  
  
  
  
    
    
    
      
    
  
  
    
File tree Expand file tree Collapse file tree 2 files changed +22
-0
lines changed 
compiler/rustc_trait_selection/src/solve 
tests/ui/traits/new-solver Expand file tree Collapse file tree 2 files changed +22
-0
lines changed Original file line number Diff line number Diff line change @@ -89,6 +89,20 @@ impl<'tcx> assembly::GoalKind<'tcx> for TraitPredicate<'tcx> {
8989        ecx: &mut EvalCtxt<'_, 'tcx>,
9090        goal: Goal<'tcx, Self>,
9191    ) -> QueryResult<'tcx> {
92+         // This differs from the current stable behavior and
93+         // fixes #84857. Due to breakage found via crater, we
94+         // currently instead lint patterns which can be used to
95+         // exploit this unsoundness on stable, see #93367 for
96+         // more details.
97+         if let Some(def_id) = ecx.tcx().find_map_relevant_impl(
98+             goal.predicate.def_id(),
99+             goal.predicate.self_ty(),
100+             Some,
101+         ) {
102+             debug!(?def_id, ?goal, "disqualified auto-trait implementation");
103+             return Err(NoSolution);
104+         }
105+ 
92106        ecx.probe_and_evaluate_goal_for_constituent_tys(
93107            goal,
94108            structural_traits::instantiate_constituent_tys_for_auto_trait,
Original file line number Diff line number Diff line change 1+ // compile-flags: -Ztrait-solver=next
2+ // check-pass
3+ 
4+ struct Foo(*mut ());
5+ 
6+ unsafe impl Sync for Foo {}
7+ 
8+ fn main() {}
    
 
   
 
     
   
   
          
     
  
    
     
 
    
      
     
 
     
    You can’t perform that action at this time.
  
 
    
  
     
    
      
        
     
 
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments