Rollup merge of #113335 - compiler-errors:reveal-opaques-in-new-solver, r=lcnr
Reveal opaques in new solver
We were testing against the wrong reveal mode 😨
Also a couple of misc commits that I don't want to really put in separate prs
r? ``@lcnr``
This commit is contained in:
commit
f3f1b0394d
9 changed files with 50 additions and 38 deletions
|
@ -167,9 +167,7 @@ impl<'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for NormalizationFolder<'_, 'tcx> {
|
||||||
// We don't normalize opaque types unless we have
|
// We don't normalize opaque types unless we have
|
||||||
// `Reveal::All`, even if we're in the defining scope.
|
// `Reveal::All`, even if we're in the defining scope.
|
||||||
let data = match *ty.kind() {
|
let data = match *ty.kind() {
|
||||||
ty::Alias(kind, alias_ty) if kind != ty::Opaque || reveal == Reveal::UserFacing => {
|
ty::Alias(kind, alias_ty) if kind != ty::Opaque || reveal == Reveal::All => alias_ty,
|
||||||
alias_ty
|
|
||||||
}
|
|
||||||
_ => return ty.try_super_fold_with(self),
|
_ => return ty.try_super_fold_with(self),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
// check-pass
|
|
||||||
// edition: 2021
|
|
||||||
// [next] compile-flags: -Zlower-impl-trait-in-trait-to-assoc-ty
|
|
||||||
// revisions: current next
|
|
||||||
|
|
||||||
#![feature(async_fn_in_trait)]
|
|
||||||
#![feature(impl_trait_in_assoc_type)]
|
|
||||||
#![allow(incomplete_features)]
|
|
||||||
|
|
||||||
use std::future::Future;
|
|
||||||
|
|
||||||
trait MyTrait {
|
|
||||||
type Fut<'a>: Future<Output = i32>
|
|
||||||
where
|
|
||||||
Self: 'a;
|
|
||||||
|
|
||||||
fn foo<'a>(&'a self) -> Self::Fut<'a>;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl MyTrait for i32 {
|
|
||||||
type Fut<'a> = impl Future<Output = i32> + 'a
|
|
||||||
where
|
|
||||||
Self: 'a;
|
|
||||||
|
|
||||||
fn foo<'a>(&'a self) -> Self::Fut<'a> {
|
|
||||||
async { *self }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {}
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0282]: type annotations needed
|
error[E0282]: type annotations needed
|
||||||
--> $DIR/param-env-region-infer.rs:16:10
|
--> $DIR/param-env-region-infer.rs:18:10
|
||||||
|
|
|
|
||||||
LL | t as _
|
LL | t as _
|
||||||
| ^ cannot infer type
|
| ^ cannot infer type
|
||||||
|
|
29
tests/ui/dyn-star/param-env-region-infer.next.stderr
Normal file
29
tests/ui/dyn-star/param-env-region-infer.next.stderr
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
error[E0391]: cycle detected when computing type of `make_dyn_star::{opaque#0}`
|
||||||
|
--> $DIR/param-env-region-infer.rs:16:60
|
||||||
|
|
|
||||||
|
LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
note: ...which requires type-checking `make_dyn_star`...
|
||||||
|
--> $DIR/param-env-region-infer.rs:16:1
|
||||||
|
|
|
||||||
|
LL | fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
= note: ...which requires computing layout of `make_dyn_star::{opaque#0}`...
|
||||||
|
= note: ...which requires normalizing `make_dyn_star::{opaque#0}`...
|
||||||
|
= note: ...which again requires computing type of `make_dyn_star::{opaque#0}`, completing the cycle
|
||||||
|
note: cycle used when checking item types in top-level module
|
||||||
|
--> $DIR/param-env-region-infer.rs:10:1
|
||||||
|
|
|
||||||
|
LL | / #![feature(dyn_star, pointer_like_trait)]
|
||||||
|
LL | | #![allow(incomplete_features)]
|
||||||
|
LL | |
|
||||||
|
LL | | use std::fmt::Debug;
|
||||||
|
... |
|
||||||
|
LL | |
|
||||||
|
LL | | fn main() {}
|
||||||
|
| |____________^
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0391`.
|
|
@ -1,6 +1,7 @@
|
||||||
// revisions: current next
|
// revisions: current next
|
||||||
//[next] compile-flags: -Ztrait-solver=next
|
// Need `-Zdeduplicate-diagnostics=yes` because the number of cycle errors
|
||||||
//[next] check-pass
|
// emitted is for some horrible reason platform-specific.
|
||||||
|
//[next] compile-flags: -Ztrait-solver=next -Zdeduplicate-diagnostics=yes
|
||||||
// incremental
|
// incremental
|
||||||
|
|
||||||
// checks that we don't ICE if there are region inference variables in the environment
|
// checks that we don't ICE if there are region inference variables in the environment
|
||||||
|
@ -13,6 +14,7 @@ use std::fmt::Debug;
|
||||||
use std::marker::PointerLike;
|
use std::marker::PointerLike;
|
||||||
|
|
||||||
fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
|
fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
|
||||||
|
//[next]~^ ERROR cycle detected when computing
|
||||||
t as _
|
t as _
|
||||||
//[current]~^ ERROR type annotations needed
|
//[current]~^ ERROR type annotations needed
|
||||||
}
|
}
|
||||||
|
|
11
tests/ui/impl-trait/reveal-during-codegen.rs
Normal file
11
tests/ui/impl-trait/reveal-during-codegen.rs
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
// build-pass
|
||||||
|
// revisions: current next
|
||||||
|
//[next] compile-flags: -Ztrait-solver=next
|
||||||
|
|
||||||
|
fn test() -> Option<impl Sized> {
|
||||||
|
Some("")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
test();
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
// build-fail
|
// build-fail
|
||||||
// compile-flags: -Copt-level=0
|
// compile-flags: -Copt-level=0
|
||||||
// normalize-stderr-test: ".nll/" -> "/"
|
// normalize-stderr-test: ".nll/" -> "/"
|
||||||
|
// ignore-compare-mode-next-solver (hangs)
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
rec(Empty);
|
rec(Empty);
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
error: reached the recursion limit while instantiating `rec::<&mut &mut &mut &mut &mut ...>`
|
error: reached the recursion limit while instantiating `rec::<&mut &mut &mut &mut &mut ...>`
|
||||||
--> $DIR/issue-67552.rs:29:9
|
--> $DIR/issue-67552.rs:30:9
|
||||||
|
|
|
|
||||||
LL | rec(identity(&mut it))
|
LL | rec(identity(&mut it))
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
note: `rec` defined here
|
note: `rec` defined here
|
||||||
--> $DIR/issue-67552.rs:22:1
|
--> $DIR/issue-67552.rs:23:1
|
||||||
|
|
|
|
||||||
LL | / fn rec<T>(mut it: T)
|
LL | / fn rec<T>(mut it: T)
|
||||||
LL | | where
|
LL | | where
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
// compile-flags: -Copt-level=0
|
// compile-flags: -Copt-level=0
|
||||||
// dont-check-failure-status
|
// dont-check-failure-status
|
||||||
// dont-check-compiler-stderr
|
// dont-check-compiler-stderr
|
||||||
|
// ignore-compare-mode-next-solver (hangs)
|
||||||
|
|
||||||
pub fn encode_num<Writer: ExampleWriter>(n: u32, mut writer: Writer) -> Result<(), Writer::Error> {
|
pub fn encode_num<Writer: ExampleWriter>(n: u32, mut writer: Writer) -> Result<(), Writer::Error> {
|
||||||
if n > 15 {
|
if n > 15 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue