From 8dfed4ec980a0c6559cffeeea614f13b361170c2 Mon Sep 17 00:00:00 2001 From: Michael Goulet Date: Fri, 22 Nov 2024 03:12:50 +0000 Subject: [PATCH] Bail in effects in old solver if self ty is ty var --- .../rustc_trait_selection/src/traits/effects.rs | 5 +++++ .../dont-prefer-param-env-for-infer-self-ty.rs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 tests/ui/traits/const-traits/effects/dont-prefer-param-env-for-infer-self-ty.rs diff --git a/compiler/rustc_trait_selection/src/traits/effects.rs b/compiler/rustc_trait_selection/src/traits/effects.rs index cb36f1a62dbfd..27d3ec160cab1 100644 --- a/compiler/rustc_trait_selection/src/traits/effects.rs +++ b/compiler/rustc_trait_selection/src/traits/effects.rs @@ -27,6 +27,11 @@ pub fn evaluate_host_effect_obligation<'tcx>( ); } + // Force ambiguity for infer self ty. + if obligation.predicate.self_ty().is_ty_var() { + return Err(EvaluationFailure::Ambiguous); + } + match evaluate_host_effect_from_bounds(selcx, obligation) { Ok(result) => return Ok(result), Err(EvaluationFailure::Ambiguous) => return Err(EvaluationFailure::Ambiguous), diff --git a/tests/ui/traits/const-traits/effects/dont-prefer-param-env-for-infer-self-ty.rs b/tests/ui/traits/const-traits/effects/dont-prefer-param-env-for-infer-self-ty.rs new file mode 100644 index 0000000000000..08dcd7d80b344 --- /dev/null +++ b/tests/ui/traits/const-traits/effects/dont-prefer-param-env-for-infer-self-ty.rs @@ -0,0 +1,16 @@ +//@ check-pass + +#![feature(const_trait_impl)] + +#[const_trait] +trait Foo {} + +impl const Foo for (T,) where T: ~const Foo {} + +const fn needs_const_foo(_: impl ~const Foo + Copy) {} + +const fn test(t: T) { + needs_const_foo((t,)); +} + +fn main() {}