Files
rust/tests/ui
bors 730d5d4095 Auto merge of #128572 - compiler-errors:fix-elaborate-box-derefs-on-debug, r=saethlin
Fix `ElaborateBoxDerefs` on debug varinfo

Slightly simplifies the `ElaborateBoxDerefs` pass to fix cases where it was applying the wrong projections to debug var infos containing places that deref boxes.

From what I can tell[^1], we don't actually have any tests (or code anywhere, really) that exercise `debug x => *(...: Box<T>)`, and it's very difficult to trigger this in surface Rust, so I wrote a custom MIR test.

What happens is that the pass was turning `*(SOME_PLACE: Box<T>)` into `*(*((((SOME_PLACE).0: Unique<T>).0: NonNull<T>).0: *const T))` in debug var infos. In particular, notice the *double deref*, which was wrong.

This is the root cause of #128554, so this PR fixes #128554 as well. The reason that async closures was affected is because of the way that we compute the [`ByMove` body](https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_transform/src/coroutine/by_move_body.rs), which resulted in `*(...: Box<T>)` in debug var info. But this really has nothing to do with async closures.

[^1]: Validated by literally replacing the `if elem == PlaceElem::Deref && base_ty.is_box() { ... }` innards with a `panic!()`, which compiled all of stage2 without panicking.
2024-08-10 21:24:25 +00:00
..
2024-07-28 03:11:54 +08:00
2024-07-29 21:47:19 -04:00
2024-05-02 19:42:31 -04:00
2024-07-18 00:00:04 +00:00
2024-08-10 12:07:17 +02:00
2024-07-18 14:32:10 +02:00
2024-07-19 23:27:42 +03:00
2024-08-10 12:07:17 +02:00
2024-08-10 12:07:17 +02:00
2024-04-21 15:43:43 -03:00
2024-08-10 12:07:17 +02:00
2024-08-02 11:34:54 +00:00
2024-08-10 12:07:17 +02:00
2024-04-12 20:57:07 +00:00
2024-08-02 11:34:54 +00:00
2024-06-01 09:40:46 +08:00
2024-08-08 00:41:39 +08:00
2024-06-21 19:00:18 -04:00
2024-07-12 03:22:32 +00:00
2024-04-29 14:53:38 +02:00
2024-05-20 11:13:10 -04:00
2024-07-21 21:42:10 +08:00
2024-04-07 17:38:07 -03:00
2024-08-10 12:07:17 +02:00
2024-05-28 12:31:12 +02:00
2024-08-02 11:34:54 +00:00
2024-04-11 17:53:27 -04:00
2024-08-02 11:34:54 +00:00
2024-08-03 07:57:31 -04:00
2024-08-10 12:07:17 +02:00
2024-08-02 23:24:50 -04:00
2024-07-24 21:03:27 +00:00
2024-08-10 12:07:17 +02:00
2024-07-22 22:51:53 +00:00
2024-08-10 12:07:17 +02:00
2024-05-21 20:16:39 +00:00
2024-06-25 18:06:22 +02:00

UI Tests

This folder contains rustc's UI tests.

Test Directives (Headers)

Typically, a UI test will have some test directives / headers which are special comments that tell compiletest how to build and intepret a test.

As part of an on-going effort to rewrite compiletest (see https://github.com/rust-lang/compiler-team/issues/536), a major change proposal to change legacy compiletest-style headers // <directive> to ui_test-style headers //@ <directive> was accepted (see https://github.com/rust-lang/compiler-team/issues/512.

An example directive is ignore-test. In legacy compiletest style, the header would be written as

// ignore-test

but in ui_test style, the header would be written as

//@ ignore-test

compiletest is changed to accept only //@ directives for UI tests (currently), and will reject and report an error if it encounters any comments // <content> that may be parsed as an legacy compiletest-style test header. To fix this, you should migrate to the ui_test-style header //@ <content>.