diff options
| author | bors <bors@rust-lang.org> | 2022-11-19 09:30:35 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-11-19 09:30:35 +0000 |
| commit | 5e6de2369c82ed0b36e6b651b041bad5cb5e1ef8 (patch) | |
| tree | 8ce407daee6639beba2944c9563ec040afb69598 /src | |
| parent | 2f8d8040166a730d0da7bba0f2864f0ef7ff6364 (diff) | |
| parent | 6ae4e5e2d48e1a968c121c03b9aec84fc3a58b3e (diff) | |
| download | rust-5e6de2369c82ed0b36e6b651b041bad5cb5e1ef8.tar.gz rust-5e6de2369c82ed0b36e6b651b041bad5cb5e1ef8.zip | |
Auto merge of #103509 - compiler-errors:opaques-w-bound-vars-r-hard, r=oli-obk
Revert "Normalize opaques with escaping bound vars" This caused a perf regression in #103423, cc `@skyzh` this should fix #103423. reverts #100980 r? `@oli-obk`
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/impl-trait/normalize-tait-in-const.rs | 39 | ||||
| -rw-r--r-- | src/test/ui/impl-trait/normalize-tait-in-const.stderr | 8 | ||||
| -rw-r--r-- | src/tools/miri/tests/pass/issues/issue-miri-2433.rs | 24 |
3 files changed, 47 insertions, 24 deletions
diff --git a/src/test/ui/impl-trait/normalize-tait-in-const.rs b/src/test/ui/impl-trait/normalize-tait-in-const.rs new file mode 100644 index 00000000000..020bcbb8396 --- /dev/null +++ b/src/test/ui/impl-trait/normalize-tait-in-const.rs @@ -0,0 +1,39 @@ +// known-bug: #103507 +// failure-status: 101 +// normalize-stderr-test "note: .*\n\n" -> "" +// normalize-stderr-test "thread 'rustc' panicked.*\n" -> "" +// rustc-env:RUST_BACKTRACE=0 + +#![feature(type_alias_impl_trait)] +#![feature(const_trait_impl)] +#![feature(const_refs_to_cell)] +#![feature(inline_const)] + +use std::marker::Destruct; + +trait T { + type Item; +} + +type Alias<'a> = impl T<Item = &'a ()>; + +struct S; +impl<'a> T for &'a S { + type Item = &'a (); +} + +const fn filter_positive<'a>() -> &'a Alias<'a> { + &&S +} + +const fn with_positive<F: ~const for<'a> Fn(&'a Alias<'a>) + ~const Destruct>(fun: F) { + fun(filter_positive()); +} + +const fn foo(_: &Alias<'_>) {} + +const BAR: () = { + with_positive(foo); +}; + +fn main() {} diff --git a/src/test/ui/impl-trait/normalize-tait-in-const.stderr b/src/test/ui/impl-trait/normalize-tait-in-const.stderr new file mode 100644 index 00000000000..b9fc8726ffc --- /dev/null +++ b/src/test/ui/impl-trait/normalize-tait-in-const.stderr @@ -0,0 +1,8 @@ +error: internal compiler error: compiler/rustc_middle/src/ty/normalize_erasing_regions.rs:198:90: Failed to normalize <for<'a, 'b> fn(&'a Alias<'b>) {foo} as std::ops::FnOnce<(&&S,)>>::Output, maybe try to call `try_normalize_erasing_regions` instead + +query stack during panic: +#0 [eval_to_allocation_raw] const-evaluating + checking `BAR` +#1 [eval_to_const_value_raw] simplifying constant for the type system `BAR` +end of query stack +error: aborting due to previous error + diff --git a/src/tools/miri/tests/pass/issues/issue-miri-2433.rs b/src/tools/miri/tests/pass/issues/issue-miri-2433.rs deleted file mode 100644 index a8281d30bac..00000000000 --- a/src/tools/miri/tests/pass/issues/issue-miri-2433.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![feature(type_alias_impl_trait)] - -trait T { - type Item; -} - -type Alias<'a> = impl T<Item = &'a ()>; - -struct S; -impl<'a> T for &'a S { - type Item = &'a (); -} - -fn filter_positive<'a>() -> Alias<'a> { - &S -} - -fn with_positive(fun: impl Fn(Alias<'_>)) { - fun(filter_positive()); -} - -fn main() { - with_positive(|_| ()); -} |
