Implement `needs_async_drop` in rustc and optimize async drop glue
This PR expands on #121801 and implements `Ty::needs_async_drop` which works almost exactly the same as `Ty::needs_drop`, which is needed for #123948.
Also made compiler's async drop code to look more like compiler's regular drop code, which enabled me to write an optimization where types which do not use `AsyncDrop` can simply forward async drop glue to `drop_in_place`. This made size of the async block from the [async_drop test](
|
||
|---|---|---|
| .. | ||
| rmeta | ||
| creader.rs | ||
| dependency_format.rs | ||
| errors.rs | ||
| foreign_modules.rs | ||
| fs.rs | ||
| lib.rs | ||
| locator.rs | ||
| native_libs.rs | ||