diff options
| author | bors <bors@rust-lang.org> | 2021-03-14 04:09:02 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-03-14 04:09:02 +0000 |
| commit | 1381dcfdc5da806e0907a6f9534b97b59a6e971f (patch) | |
| tree | 18d422e623aa82ca72544dd4c495aeb0d9931652 /compiler/rustc_interface/src | |
| parent | acca818928654807ed3bc1ce0e97df118f8716c8 (diff) | |
| parent | f8206ac63d001fdadbdfc4ec38806f892e4fc2d9 (diff) | |
| download | rust-1381dcfdc5da806e0907a6f9534b97b59a6e971f.tar.gz rust-1381dcfdc5da806e0907a6f9534b97b59a6e971f.zip | |
Auto merge of #83105 - JohnTitor:rollup-tqpm8pb, r=JohnTitor
Rollup of 10 pull requests Successful merges: - #81465 (Add documentation about formatting `Duration` values) - #82121 (Implement Extend and FromIterator for OsString) - #82617 (Document `everybody_loops`) - #82789 (Get with field index from pattern slice instead of directly indexing) - #82798 (Rename `rustdoc` to `rustdoc::all`) - #82804 (std: Fix a bug on the wasm32-wasi target opening files) - #82943 (Demonstrate best practice for feeding stdin of a child processes) - #83066 (Add `reverse` search alias for Iterator::rev()) - #83070 (Update cargo) - #83081 (Fix panic message of `assert_failed_inner`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_interface/src')
| -rw-r--r-- | compiler/rustc_interface/src/util.rs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/compiler/rustc_interface/src/util.rs b/compiler/rustc_interface/src/util.rs index 0a30eda1ec4..341cfa47900 100644 --- a/compiler/rustc_interface/src/util.rs +++ b/compiler/rustc_interface/src/util.rs @@ -712,16 +712,24 @@ pub fn non_durable_rename(src: &Path, dst: &Path) -> std::io::Result<()> { std::fs::rename(src, dst) } -// Note: Also used by librustdoc, see PR #43348. Consider moving this struct elsewhere. -// -// FIXME: Currently the `everybody_loops` transformation is not applied to: -// * `const fn`, due to issue #43636 that `loop` is not supported for const evaluation. We are -// waiting for miri to fix that. -// * `impl Trait`, due to issue #43869 that functions returning impl Trait cannot be diverging. -// Solving this may require `!` to implement every trait, which relies on the an even more -// ambitious form of the closed RFC #1637. See also [#34511]. -// -// [#34511]: https://github.com/rust-lang/rust/issues/34511#issuecomment-322340401 +/// Replaces function bodies with `loop {}` (an infinite loop). This gets rid of +/// all semantic errors in the body while still satisfying the return type, +/// except in certain cases, see below for more. +/// +/// This pass is known as `everybody_loops`. Very punny. +/// +/// As of March 2021, `everybody_loops` is only used for the +/// `-Z unpretty=everybody_loops` debugging option. +/// +/// FIXME: Currently the `everybody_loops` transformation is not applied to: +/// * `const fn`; support could be added, but hasn't. Originally `const fn` +/// was skipped due to issue #43636 that `loop` was not supported for +/// const evaluation. +/// * `impl Trait`, due to issue #43869 that functions returning impl Trait cannot be diverging. +/// Solving this may require `!` to implement every trait, which relies on the an even more +/// ambitious form of the closed RFC #1637. See also [#34511]. +/// +/// [#34511]: https://github.com/rust-lang/rust/issues/34511#issuecomment-322340401 pub struct ReplaceBodyWithLoop<'a, 'b> { within_static_or_const: bool, nested_blocks: Option<Vec<ast::Block>>, |
