Skip to content

Commit 88024c7

Browse files
committed
Auto merge of rust-lang#12444 - XFFXFF:fix_12442, r=Veykril
fix: parsing of `?` opt-out trait bounds fixes rust-lang#12442
2 parents 2f0814e + df67bbd commit 88024c7

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

crates/parser/src/grammar/generic_params.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@ fn type_bound(p: &mut Parser) -> bool {
133133
match p.current() {
134134
LIFETIME_IDENT => lifetime(p),
135135
T![for] => types::for_type(p, false),
136+
T![?] if p.nth_at(1, T![for]) => {
137+
// test question_for_type_trait_bound
138+
// fn f<T>() where T: ?for<> Sized {}
139+
p.bump_any();
140+
types::for_type(p, false)
141+
}
136142
current => {
137143
match current {
138144
T![?] => p.bump_any(),
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
SOURCE_FILE
2+
FN
3+
FN_KW "fn"
4+
WHITESPACE " "
5+
NAME
6+
IDENT "f"
7+
GENERIC_PARAM_LIST
8+
L_ANGLE "<"
9+
TYPE_PARAM
10+
NAME
11+
IDENT "T"
12+
R_ANGLE ">"
13+
PARAM_LIST
14+
L_PAREN "("
15+
R_PAREN ")"
16+
WHITESPACE " "
17+
WHERE_CLAUSE
18+
WHERE_KW "where"
19+
WHITESPACE " "
20+
WHERE_PRED
21+
PATH_TYPE
22+
PATH
23+
PATH_SEGMENT
24+
NAME_REF
25+
IDENT "T"
26+
COLON ":"
27+
WHITESPACE " "
28+
TYPE_BOUND_LIST
29+
TYPE_BOUND
30+
QUESTION "?"
31+
FOR_TYPE
32+
FOR_KW "for"
33+
GENERIC_PARAM_LIST
34+
L_ANGLE "<"
35+
R_ANGLE ">"
36+
WHITESPACE " "
37+
PATH_TYPE
38+
PATH
39+
PATH_SEGMENT
40+
NAME_REF
41+
IDENT "Sized"
42+
WHITESPACE " "
43+
BLOCK_EXPR
44+
STMT_LIST
45+
L_CURLY "{"
46+
R_CURLY "}"
47+
WHITESPACE "\n"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn f<T>() where T: ?for<> Sized {}

0 commit comments

Comments
 (0)