Files
rust/tests/ui
Matthias Krüger a1c98ca160 Rollup merge of #132832 - compiler-errors:late-ty, r=cjgillot
Deny capturing late-bound ty/const params in nested opaques

First, this reverts a7f609504c. I can't exactly remember why I approved this specific bit of https://github.com/rust-lang/rust/pull/132466; specifically, I don't know that the purpose of that commit is, and afaict we will never have an opaque that captures late-bound params through a const because opaques can't be used inside of anon consts. Am I missing something `@cjgillot?` Since I can't see a case where this matters, and no tests seem to fail.

The second commit adds a `deny_late_regions: bool` to distinguish `Scope::LateBoundary` which should deny *any* late-bound params or just ty/consts. Then, when resolving opaques we wrap ourselves in a `Scope::LateBoundary { deny_late_regions: false }` so that we deny late-bound ty/const, which fixes a bunch of ICEs that all vaguely look like `impl for<T> Trait<Assoc = impl OtherTrait<T>>`.

I guess this could be achieved other ways; for example, with a different scope kind, or maybe we could just reuse `Scope::Opaque`. But this seems a bit more verbose. I'm open to feedback anyways.

Fixes #131535
Fixes #131637
Fixes #132530

I opted to remove those crashes tests ^ without adding them as regular tests, since they're basically triggering uninteresting late-bound ICEs far off in the trait solver, and the reason that existing tests such as `tests/ui/type-alias-impl-trait/non-lifetime-binder-in-constraint.rs` don't ICE are kinda just coincidental (i.e. due to a missing impl block). I don't really feel motivated to add random permutations to tests just to exercise non-lifetime binders.

r? cjgillot
2024-11-16 21:05:46 +01:00
..
2024-10-28 14:20:28 +11:00
2024-11-10 17:43:46 +09:00
2024-07-18 00:00:04 +00:00
2024-09-20 10:02:14 -07:00
2024-04-21 15:43:43 -03:00
2024-11-05 21:54:45 +00:00
2024-08-10 12:07:17 +02:00
2024-11-03 18:59:31 +00:00
2024-09-20 01:20:10 +03:00
2024-09-05 06:37:38 -04:00
2024-11-13 22:35:39 +02:00
2024-10-30 16:47:47 -07:00
2024-07-12 03:22:32 +00:00
2024-10-30 16:47:47 -07:00
2024-09-20 10:02:14 -07:00
2024-04-29 14:53:38 +02:00
2024-11-12 13:28:05 +00:00
2024-10-24 04:33:14 +08:00
2024-10-28 14:20:28 +11:00
2024-11-04 12:06:19 +01:00
2024-08-18 19:46:53 +02:00
2024-05-28 12:31:12 +02:00
2024-09-27 14:40:38 +01:00
2024-11-02 21:29:59 +01:00
2024-10-22 12:55:16 +00:00
2024-08-03 07:57:31 -04:00
2024-10-12 13:01:36 +02:00
2024-10-11 11:30:08 -04:00
2024-10-30 10:48:08 +00:00
2024-11-07 18:18:34 -08:00
2024-11-02 03:08:04 +00:00
2024-11-15 16:37:18 +01:00
2024-10-28 14:12:17 +08:00
2024-11-07 20:56:36 +00:00
2024-10-28 14:20:28 +11:00
2024-10-28 14:20:28 +11:00
2024-06-25 18:06:22 +02:00
2024-10-30 16:47:47 -07: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>.