diff options
| author | bors <bors@rust-lang.org> | 2022-08-17 14:49:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-08-17 14:49:05 +0000 |
| commit | 9c20b2a8cc7588decb6de25ac6a7912dcef24d65 (patch) | |
| tree | 099d3858d3f4e681d153efb1761fb8951b08afa5 /compiler/rustc_trait_selection/src | |
| parent | 86c6ebee8fa0a5ad1e18e375113b06bd2849b634 (diff) | |
| parent | 1199dbdcf5f651060c1cf1ab089c3feafcd54100 (diff) | |
| download | rust-9c20b2a8cc7588decb6de25ac6a7912dcef24d65.tar.gz rust-9c20b2a8cc7588decb6de25ac6a7912dcef24d65.zip | |
Auto merge of #100677 - matthiaskrgr:rollup-au41ho1, r=matthiaskrgr
Rollup of 15 pull requests
Successful merges:
- #99474 (Rustdoc json tests: New `@hasexact` test command)
- #99972 (interpret: only consider 1-ZST when searching for receiver)
- #100018 (Clean up `LitKind`)
- #100379 (triagebot: add translation-related mention groups)
- #100389 (Do not report cycle error when inferring return type for suggestion)
- #100489 (`is_knowable` use `Result` instead of `Option`)
- #100532 (unwind: don't build dependency when building for Miri)
- #100608 (needless separation of impl blocks)
- #100621 (Pass +atomics-32 feature for {arm,thumb}v4t-none-eabi)
- #100646 (Migrate emoji identifier diagnostics to `SessionDiagnostic` in rustc_interface)
- #100652 (Remove deferred sized checks (make them eager))
- #100655 (Update books)
- #100656 (Update cargo)
- #100660 (Fixed a few documentation errors)
- #100661 (Fixed a few documentation errors)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_trait_selection/src')
3 files changed, 8 insertions, 8 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/coherence.rs b/compiler/rustc_trait_selection/src/traits/coherence.rs index 9bb41b900b8..985600d9ebc 100644 --- a/compiler/rustc_trait_selection/src/traits/coherence.rs +++ b/compiler/rustc_trait_selection/src/traits/coherence.rs @@ -404,12 +404,12 @@ fn resolve_negative_obligation<'cx, 'tcx>( pub fn trait_ref_is_knowable<'tcx>( tcx: TyCtxt<'tcx>, trait_ref: ty::TraitRef<'tcx>, -) -> Option<Conflict> { +) -> Result<(), Conflict> { debug!("trait_ref_is_knowable(trait_ref={:?})", trait_ref); if orphan_check_trait_ref(tcx, trait_ref, InCrate::Remote).is_ok() { // A downstream or cousin crate is allowed to implement some // substitution of this trait-ref. - return Some(Conflict::Downstream); + return Err(Conflict::Downstream); } if trait_ref_is_local_or_fundamental(tcx, trait_ref) { @@ -418,7 +418,7 @@ pub fn trait_ref_is_knowable<'tcx>( // allowed to implement a substitution of this trait ref, which // means impls could only come from dependencies of this crate, // which we already know about. - return None; + return Ok(()); } // This is a remote non-fundamental trait, so if another crate @@ -431,10 +431,10 @@ pub fn trait_ref_is_knowable<'tcx>( // we are an owner. if orphan_check_trait_ref(tcx, trait_ref, InCrate::Local).is_ok() { debug!("trait_ref_is_knowable: orphan check passed"); - None + Ok(()) } else { debug!("trait_ref_is_knowable: nonlocal, nonfundamental, unowned"); - Some(Conflict::Upstream) + Err(Conflict::Upstream) } } diff --git a/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs b/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs index 50e9b95a445..d67bd6292b4 100644 --- a/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs +++ b/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs @@ -75,7 +75,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { &mut self, stack: &TraitObligationStack<'o, 'tcx>, ) -> SelectionResult<'tcx, SelectionCandidate<'tcx>> { - if let Some(conflict) = self.is_knowable(stack) { + if let Err(conflict) = self.is_knowable(stack) { debug!("coherence stage: not knowable"); if self.intercrate_ambiguity_causes.is_some() { debug!("evaluate_stack: intercrate_ambiguity_causes is some"); diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index c01ac197991..46b50dd92f1 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -1265,11 +1265,11 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { Ok(Some(candidate)) } - fn is_knowable<'o>(&mut self, stack: &TraitObligationStack<'o, 'tcx>) -> Option<Conflict> { + fn is_knowable<'o>(&mut self, stack: &TraitObligationStack<'o, 'tcx>) -> Result<(), Conflict> { debug!("is_knowable(intercrate={:?})", self.intercrate); if !self.intercrate || stack.obligation.polarity() == ty::ImplPolarity::Negative { - return None; + return Ok(()); } let obligation = &stack.obligation; |
