File tree 3 files changed +44
-1
lines changed
compiler/rustc_expand/src/mbe
tests/ui/macros/rfc-3086-metavar-expr
3 files changed +44
-1
lines changed Original file line number Diff line number Diff line change @@ -93,7 +93,17 @@ fn parse_count<'sess>(
93
93
span : Span ,
94
94
) -> PResult < ' sess , MetaVarExpr > {
95
95
let ident = parse_ident ( iter, sess, span) ?;
96
- let depth = if try_eat_comma ( iter) { Some ( parse_depth ( iter, sess, span) ?) } else { None } ;
96
+ let depth = if try_eat_comma ( iter) {
97
+ if iter. look_ahead ( 0 ) . is_none ( ) {
98
+ return Err ( sess. span_diagnostic . struct_span_err (
99
+ span,
100
+ "`count` followed by a comma must have an associated index indicating its depth" ,
101
+ ) ) ;
102
+ }
103
+ Some ( parse_depth ( iter, sess, span) ?)
104
+ } else {
105
+ None
106
+ } ;
97
107
Ok ( MetaVarExpr :: Count ( ident, depth) )
98
108
}
99
109
Original file line number Diff line number Diff line change
1
+ #![ feature( macro_metavar_expr) ]
2
+
3
+ macro_rules! foo {
4
+ ( $( $( $t: ident) ,* ) ;* ) => { ${ count( t, ) } }
5
+ //~^ ERROR `count` followed by a comma must have an associated
6
+ //~| ERROR expected expression, found `$`
7
+ }
8
+
9
+ fn test ( ) {
10
+ foo ! ( a, a; b, b) ;
11
+ }
12
+
13
+ fn main ( ) {
14
+ }
Original file line number Diff line number Diff line change
1
+ error: `count` followed by a comma must have an associated index indicating its depth
2
+ --> $DIR/issue-111904.rs:4:37
3
+ |
4
+ LL | ( $( $($t:ident),* );* ) => { ${count(t,)} }
5
+ | ^^^^^
6
+
7
+ error: expected expression, found `$`
8
+ --> $DIR/issue-111904.rs:4:35
9
+ |
10
+ LL | ( $( $($t:ident),* );* ) => { ${count(t,)} }
11
+ | ^ expected expression
12
+ ...
13
+ LL | foo!(a, a; b, b);
14
+ | ---------------- in this macro invocation
15
+ |
16
+ = note: this error originates in the macro `foo` (in Nightly builds, run with -Z macro-backtrace for more info)
17
+
18
+ error: aborting due to 2 previous errors
19
+
You can’t perform that action at this time.
0 commit comments