diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2022-08-03 22:29:30 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-03 22:29:30 +0200 |
| commit | 02fcec2ac8d8be83103b9a954adc79dc6271e0e9 (patch) | |
| tree | f6a610d996e7ba853e976615431d93b1c7368171 /compiler/rustc_trait_selection/src/traits | |
| parent | 9c18fdc71f867d7a9269051867bd73983f80d4be (diff) | |
| parent | 16a3601f62e1a2e2ae34668005a317d931e13a09 (diff) | |
| download | rust-02fcec2ac8d8be83103b9a954adc79dc6271e0e9.tar.gz rust-02fcec2ac8d8be83103b9a954adc79dc6271e0e9.zip | |
Rollup merge of #99795 - compiler-errors:delay-specialization-normalize-error, r=spastorino
Delay a bug when failed to normalize trait ref during specialization The error messages still kinda suck here but they don't ICE anymore... Fixes #45814 Fixes #43037 r? types
Diffstat (limited to 'compiler/rustc_trait_selection/src/traits')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/specialize/mod.rs | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/specialize/mod.rs b/compiler/rustc_trait_selection/src/traits/specialize/mod.rs index 28a1cb273a7..6223c5ea339 100644 --- a/compiler/rustc_trait_selection/src/traits/specialize/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/specialize/mod.rs @@ -151,8 +151,6 @@ pub(super) fn specializes(tcx: TyCtxt<'_>, (impl1_def_id, impl2_def_id): (DefId, // Create an infcx, taking the predicates of impl1 as assumptions: tcx.infer_ctxt().enter(|infcx| { - // Normalize the trait reference. The WF rules ought to ensure - // that this always succeeds. let impl1_trait_ref = match traits::fully_normalize( &infcx, FulfillmentContext::new(), @@ -161,8 +159,12 @@ pub(super) fn specializes(tcx: TyCtxt<'_>, (impl1_def_id, impl2_def_id): (DefId, impl1_trait_ref, ) { Ok(impl1_trait_ref) => impl1_trait_ref, - Err(err) => { - bug!("failed to fully normalize {:?}: {:?}", impl1_trait_ref, err); + Err(_errors) => { + tcx.sess.delay_span_bug( + tcx.def_span(impl1_def_id), + format!("failed to fully normalize {impl1_trait_ref}"), + ); + impl1_trait_ref } }; |
