Matthias Krüger 1fd0c71818
Rollup merge of #120221 - compiler-errors:statements-are-not-patterns, r=nnethercote
Don't make statement nonterminals match pattern nonterminals

Right now, the heuristic we use to check if a token may begin a pattern nonterminal falls back to `may_be_ident`:
ef71f1047e/compiler/rustc_parse/src/parser/nonterminal.rs (L21-L37)

This has the unfortunate side effect that a `stmt` nonterminal eagerly matches against a `pat` nonterminal, leading to a parse error:
```rust
macro_rules! m {
    ($pat:pat) => {};
    ($stmt:stmt) => {};
}

macro_rules! m2 {
    ($stmt:stmt) => {
        m! { $stmt }
    };
}

m2! { let x = 1 }
```

This PR fixes it by more accurately reflecting the set of nonterminals that may begin a pattern nonterminal.

As a side-effect, I modified `Token::can_begin_pattern` to work correctly and used that in `Parser::nonterminal_may_begin_with`.
2024-08-31 10:08:51 +02:00
..
2024-07-28 03:11:54 +08:00
2024-07-29 21:47:19 -04:00
2024-08-28 23:32:40 +01:00
2024-07-19 23:27:42 +03:00
2024-08-10 12:07:17 +02:00
2024-08-09 22:02:23 -04:00
2024-08-10 12:07:17 +02:00
2024-08-28 23:32:40 +01:00
2024-08-02 11:34:54 +00:00
2024-08-08 00:41:39 +08:00
2024-08-18 19:46:53 +02:00
2024-08-18 19:46:53 +02:00
2024-08-10 12:07:17 +02:00
2024-08-17 12:43:25 -04:00
2024-08-18 19:46:53 +02:00
2024-08-02 11:34:54 +00:00
2024-08-12 13:00:12 +10:00
2024-08-02 11:34:54 +00:00
2024-08-03 07:57:31 -04:00
2024-08-18 19:46:53 +02:00
2024-08-17 12:43:25 -04:00
2024-08-18 19:46:53 +02:00
2024-07-22 22:51:53 +00:00
2024-08-18 19:46:53 +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>.