mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Normalize opaques during codegen in new solver
This commit is contained in:
parent
713f9bb5d1
commit
f55b046931
@ -167,9 +167,7 @@ impl<'tcx> FallibleTypeFolder<TyCtxt<'tcx>> for NormalizationFolder<'_, 'tcx> {
|
||||
// We don't normalize opaque types unless we have
|
||||
// `Reveal::All`, even if we're in the defining scope.
|
||||
let data = match *ty.kind() {
|
||||
ty::Alias(kind, alias_ty) if kind != ty::Opaque || reveal == Reveal::UserFacing => {
|
||||
alias_ty
|
||||
}
|
||||
ty::Alias(kind, alias_ty) if kind != ty::Opaque || reveal == Reveal::All => alias_ty,
|
||||
_ => return ty.try_super_fold_with(self),
|
||||
};
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/param-env-region-infer.rs:16:10
|
||||
--> $DIR/param-env-region-infer.rs:18:10
|
||||
|
|
||||
LL | t as _
|
||||
| ^ 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
|
||||
//[next] compile-flags: -Ztrait-solver=next
|
||||
//[next] check-pass
|
||||
// Need `-Zdeduplicate-diagnostics=yes` because the number of cycle errors
|
||||
// emitted is for some horrible reason platform-specific.
|
||||
//[next] compile-flags: -Ztrait-solver=next -Zdeduplicate-diagnostics=yes
|
||||
// incremental
|
||||
|
||||
// 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;
|
||||
|
||||
fn make_dyn_star<'a, T: PointerLike + Debug + 'a>(t: T) -> impl PointerLike + Debug + 'a {
|
||||
//[next]~^ ERROR cycle detected when computing
|
||||
t as _
|
||||
//[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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user