forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#122192 - oli-obk:type_of_opaque_for_const_c…
…hecks, r=lcnr Do not try to reveal hidden types when trying to prove Freeze in the defining scope fixes rust-lang#99793 this avoids the cycle error by just causing a selection error, which is not fatal. We pessimistically assume that freeze does not hold, which is always a safe assumption.
- Loading branch information
Showing
16 changed files
with
211 additions
and
68 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
22 changes: 22 additions & 0 deletions
22
tests/ui/impl-trait/auto-trait-selection-freeze.next.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
error[E0283]: type annotations needed | ||
--> $DIR/auto-trait-selection-freeze.rs:19:16 | ||
| | ||
LL | if false { is_trait(foo()) } else { Default::default() } | ||
| ^^^^^^^^ ----- type must be known at this point | ||
| | | ||
| cannot infer type of the type parameter `T` declared on the function `is_trait` | ||
| | ||
= note: cannot satisfy `_: Trait<_>` | ||
note: required by a bound in `is_trait` | ||
--> $DIR/auto-trait-selection-freeze.rs:11:16 | ||
| | ||
LL | fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | ||
| ^^^^^^^^ required by this bound in `is_trait` | ||
help: consider specifying the generic arguments | ||
| | ||
LL | if false { is_trait::<T, U>(foo()) } else { Default::default() } | ||
| ++++++++ | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0283`. |
26 changes: 26 additions & 0 deletions
26
tests/ui/impl-trait/auto-trait-selection-freeze.old.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
error[E0283]: type annotations needed | ||
--> $DIR/auto-trait-selection-freeze.rs:19:16 | ||
| | ||
LL | if false { is_trait(foo()) } else { Default::default() } | ||
| ^^^^^^^^ cannot infer type of the type parameter `U` declared on the function `is_trait` | ||
| | ||
note: multiple `impl`s satisfying `impl Sized: Trait<_>` found | ||
--> $DIR/auto-trait-selection-freeze.rs:16:1 | ||
| | ||
LL | impl<T: Freeze> Trait<u32> for T {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
LL | impl<T> Trait<i32> for T {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^ | ||
note: required by a bound in `is_trait` | ||
--> $DIR/auto-trait-selection-freeze.rs:11:16 | ||
| | ||
LL | fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | ||
| ^^^^^^^^ required by this bound in `is_trait` | ||
help: consider specifying the generic arguments | ||
| | ||
LL | if false { is_trait::<_, U>(foo()) } else { Default::default() } | ||
| ++++++++ | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0283`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
//! This test shows how we fail selection in a way that can influence | ||
//! selection in a code path that succeeds. | ||
//@ revisions: next old | ||
//@[next] compile-flags: -Znext-solver | ||
|
||
#![feature(freeze)] | ||
|
||
use std::marker::Freeze; | ||
|
||
fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | ||
Default::default() | ||
} | ||
|
||
trait Trait<T> {} | ||
impl<T: Freeze> Trait<u32> for T {} | ||
impl<T> Trait<i32> for T {} | ||
fn foo() -> impl Sized { | ||
if false { is_trait(foo()) } else { Default::default() } | ||
//~^ ERROR: type annotations needed | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
error[E0283]: type annotations needed | ||
--> $DIR/auto-trait-selection.rs:15:16 | ||
| | ||
LL | if false { is_trait(foo()) } else { Default::default() } | ||
| ^^^^^^^^ ----- type must be known at this point | ||
| | | ||
| cannot infer type of the type parameter `T` declared on the function `is_trait` | ||
| | ||
= note: cannot satisfy `_: Trait<_>` | ||
note: required by a bound in `is_trait` | ||
--> $DIR/auto-trait-selection.rs:7:16 | ||
| | ||
LL | fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | ||
| ^^^^^^^^ required by this bound in `is_trait` | ||
help: consider specifying the generic arguments | ||
| | ||
LL | if false { is_trait::<T, U>(foo()) } else { Default::default() } | ||
| ++++++++ | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0283`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
error[E0283]: type annotations needed | ||
--> $DIR/auto-trait-selection.rs:15:16 | ||
| | ||
LL | if false { is_trait(foo()) } else { Default::default() } | ||
| ^^^^^^^^ cannot infer type of the type parameter `U` declared on the function `is_trait` | ||
| | ||
note: multiple `impl`s satisfying `impl Sized: Trait<_>` found | ||
--> $DIR/auto-trait-selection.rs:12:1 | ||
| | ||
LL | impl<T: Send> Trait<u32> for T {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
LL | impl<T> Trait<i32> for T {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^ | ||
note: required by a bound in `is_trait` | ||
--> $DIR/auto-trait-selection.rs:7:16 | ||
| | ||
LL | fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | ||
| ^^^^^^^^ required by this bound in `is_trait` | ||
help: consider specifying the generic arguments | ||
| | ||
LL | if false { is_trait::<_, U>(foo()) } else { Default::default() } | ||
| ++++++++ | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0283`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
//! This test shows how we fail selection in a way that can influence | ||
//! selection in a code path that succeeds. | ||
//@ revisions: next old | ||
//@[next] compile-flags: -Znext-solver | ||
|
||
fn is_trait<T: Trait<U>, U: Default>(_: T) -> U { | ||
Default::default() | ||
} | ||
|
||
trait Trait<T> {} | ||
impl<T: Send> Trait<u32> for T {} | ||
impl<T> Trait<i32> for T {} | ||
fn foo() -> impl Sized { | ||
if false { is_trait(foo()) } else { Default::default() } | ||
//~^ ERROR: type annotations needed | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
//! This test caused a cycle error when checking whether the | ||
//! return type is `Freeze` during const checking, even though | ||
//! the information is readily available. | ||
//@ revisions: current next | ||
//@[next] compile-flags: -Znext-solver | ||
//@ check-pass | ||
|
||
const fn f() -> impl Eq { | ||
g() | ||
} | ||
const fn g() {} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters