File tree Expand file tree Collapse file tree 3 files changed +44
-2
lines changed
compiler/rustc_parse/src/parser Expand file tree Collapse file tree 3 files changed +44
-2
lines changed Original file line number Diff line number Diff line change @@ -137,14 +137,37 @@ impl<'a> Parser<'a> {
137
137
/// The difference from `parse_ty` is that this version allows `...`
138
138
/// (`CVarArgs`) at the top level of the type.
139
139
pub ( super ) fn parse_ty_for_param ( & mut self ) -> PResult < ' a , Box < Ty > > {
140
- self . parse_ty_common (
140
+ let ty = self . parse_ty_common (
141
141
AllowPlus :: Yes ,
142
142
AllowCVariadic :: Yes ,
143
143
RecoverQPath :: Yes ,
144
144
RecoverReturnSign :: Yes ,
145
145
None ,
146
146
RecoverQuestionMark :: Yes ,
147
- )
147
+ ) ?;
148
+
149
+ // Recover a trailing `= EXPR` if present.
150
+ if self . may_recover ( )
151
+ && self . check_noexpect ( & token:: Eq )
152
+ && self . look_ahead ( 1 , |tok| tok. can_begin_expr ( ) )
153
+ {
154
+ let snapshot = self . create_snapshot_for_diagnostic ( ) ;
155
+ self . bump ( ) ;
156
+ let eq_span = self . prev_token . span ;
157
+ match self . parse_expr ( ) {
158
+ Ok ( e) => {
159
+ self . dcx ( )
160
+ . struct_span_err ( eq_span. to ( e. span ) , "parameter defaults are not supported" )
161
+ . emit ( ) ;
162
+ }
163
+ Err ( diag) => {
164
+ diag. cancel ( ) ;
165
+ self . restore_snapshot ( snapshot) ;
166
+ }
167
+ }
168
+ }
169
+
170
+ Ok ( ty)
148
171
}
149
172
150
173
/// Parses a type in restricted contexts where `+` is not permitted.
Original file line number Diff line number Diff line change
1
+ fn foo ( x : i32 = 1 ) { } //~ ERROR parameter defaults are not supported
2
+
3
+ type Foo = fn ( i32 = 0 ) ; //~ ERROR parameter defaults are not supported
4
+
5
+ fn main ( ) { }
Original file line number Diff line number Diff line change
1
+ error: parameter defaults are not supported
2
+ --> $DIR/param-default.rs:1:15
3
+ |
4
+ LL | fn foo(x: i32 = 1) {}
5
+ | ^^^
6
+
7
+ error: parameter defaults are not supported
8
+ --> $DIR/param-default.rs:3:19
9
+ |
10
+ LL | type Foo = fn(i32 = 0);
11
+ | ^^^
12
+
13
+ error: aborting due to 2 previous errors
14
+
You can’t perform that action at this time.
0 commit comments