Auto merge of #89045 - oli-obk:lazy_normalization_in_opaque_types, r=nikomatsakis
Register normalization obligations instead of immediately normalizing in opaque type instantiation For lazy TAIT we will need to instantiate opaque types from within `rustc_infer`, which cannot invoke normalization methods (they are in `rustc_trait_resolution`). So before we move the logic over to `rustc_infer`, we need make sure no normalization happens anymore. This PR resolves that by just registering normalization obligations and continuing. This PR is best reviewed commit by commit I also included f7ad36e which is just an independent cleanup that touches the same code and reduces diagnostics noise a bit r? `@nikomatsakis` cc `@spastorino`
This commit is contained in:
commit
dda2a0eca4
8 changed files with 77 additions and 75 deletions
|
|
@ -6,7 +6,6 @@ async fn copy() -> Result<()>
|
|||
//~^ ERROR this enum takes 2 generic arguments
|
||||
{
|
||||
Ok(())
|
||||
//~^ ERROR type annotations needed
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
|
|||
|
|
@ -16,13 +16,6 @@ help: add missing generic argument
|
|||
LL | async fn copy() -> Result<(), E>
|
||||
| +++
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/issue-65159.rs:8:5
|
||||
|
|
||||
LL | Ok(())
|
||||
| ^^ cannot infer type for type parameter `E` declared on the enum `Result`
|
||||
error: aborting due to previous error
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0282.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
For more information about this error, try `rustc --explain E0107`.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_> {
|
|||
//~^ ERROR this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
|
||||
//~^^ ERROR this struct takes 1 generic argument but 0 generic arguments were supplied
|
||||
LockedMarket(generator.lock().unwrap().buy())
|
||||
//~^ ERROR cannot return value referencing temporary value
|
||||
}
|
||||
|
||||
struct LockedMarket<T>(T);
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
|
|||
| expected 0 lifetime arguments
|
||||
|
|
||||
note: struct defined here, with 0 lifetime parameters
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:23:8
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:22:8
|
||||
|
|
||||
LL | struct LockedMarket<T>(T);
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
@ -19,7 +19,7 @@ LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
|
|||
| ^^^^^^^^^^^^ expected 1 generic argument
|
||||
|
|
||||
note: struct defined here, with 1 generic parameter: `T`
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:23:8
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:22:8
|
||||
|
|
||||
LL | struct LockedMarket<T>(T);
|
||||
| ^^^^^^^^^^^^ -
|
||||
|
|
@ -28,16 +28,6 @@ help: add missing generic argument
|
|||
LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_, T> {
|
||||
| +++
|
||||
|
||||
error[E0515]: cannot return value referencing temporary value
|
||||
--> $DIR/issue-82126-mismatched-subst-and-hir.rs:19:5
|
||||
|
|
||||
LL | LockedMarket(generator.lock().unwrap().buy())
|
||||
| ^^^^^^^^^^^^^-------------------------^^^^^^^
|
||||
| | |
|
||||
| | temporary value created here
|
||||
| returns a value referencing data owned by the current function
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0107, E0515.
|
||||
For more information about an error, try `rustc --explain E0107`.
|
||||
For more information about this error, try `rustc --explain E0107`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue