Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error on duplicate matcher bindings #57617

Merged
merged 5 commits into from
Feb 9, 2019

Conversation

mark-i-m
Copy link
Member

@mark-i-m mark-i-m commented Jan 15, 2019

fix #57593

This should not be merged without a crater run and maybe an FCP. Discussion is ongoing at #57593.

TODO:

  • write tests
  • crater run
  • maybe need edition gating? not for 1 regression /centril

r? @petrochenkov

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-6.0 of your PR failed on Travis (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
travis_time:end:00e7f5a8:start=1547515466312939680,finish=1547515467246529482,duration=933589802
$ git checkout -qf FETCH_HEAD
travis_fold:end:git.checkout

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
$ export SCCACHE_BUCKET=rust-lang-ci-sccache2
$ export SCCACHE_REGION=us-west-1
Setting environment variables from .travis.yml
$ export IMAGE=x86_64-gnu-llvm-6.0
---
[01:00:11] .................................................................................................... 2800/5303
[01:00:15] .................................................................................................... 2900/5303
[01:00:18] .................................................................................................... 3000/5303
[01:00:22] .................................................................................................... 3100/5303
[01:00:25] ....................................................................................i........F...... 3200/5303
[01:00:32] ..............................................ii....i..ii........................................... 3400/5303
[01:00:37] .................................................................................................... 3500/5303
[01:00:40] .................................................................................................... 3600/5303
[01:00:44] ......................................ii............................................................ 3700/5303
---
[01:01:45] ---- [ui] ui/macros/macro-follow.rs stdout ----
[01:01:45] diff of stderr:
[01:01:45] 
[01:01:45] 134    |
[01:01:45] 135    = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`
[01:01:45] 136 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:15:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`
[01:01:45] + 
[01:01:45] + 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:19:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`
[01:01:45] + 
[01:01:45] + 
[01:01:45] 137 error: `$e:expr` is followed by `(`, which is not allowed for `expr` fragments
[01:01:45] 139    |
[01:01:45] 
[01:01:45] 302    |
[01:01:45] 302    |
[01:01:45] 303    = note: allowed there are: `=>`, `,` or `;`
[01:01:45] 304 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:40:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`
[01:01:45] + 
[01:01:45] + 
[01:01:45] 305 error: `$t:ty` is followed by `(`, which is not allowed for `ty` fragments
[01:01:45] 307    |
[01:01:45] 
[01:01:45] 406    |
[01:01:45] 406    |
[01:01:45] 407    = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`
[01:01:45] 408 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($t:ty $t:ty) => {};    //~ERROR `$t:ty` is followed by `$t:ty`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:60:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($t:ty $t:ty) => {};    //~ERROR `$t:ty` is followed by `$t:ty`
[01:01:45] + 
[01:01:45] + 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:65:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`
[01:01:45] + 
[01:01:45] + 
[01:01:45] 409 error: `$s:stmt` is followed by `(`, which is not allowed for `stmt` fragments
[01:01:45] 411    |
[01:01:45] 
[01:01:45] 574    |
[01:01:45] 574    |
[01:01:45] 575    = note: allowed there are: `=>`, `,` or `;`
[01:01:45] 576 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:85:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`
[01:01:45] + 
[01:01:45] + 
[01:01:45] 577 error: `$p:path` is followed by `(`, which is not allowed for `path` fragments
[01:01:45] 579    |
[01:01:45] 
[01:01:45] 678    |
[01:01:45] 678    |
[01:01:45] 679    = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`
[01:01:45] - error: aborting due to 85 previous errors
[01:01:45] - error: aborting due to 85 previous errors
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:100:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`
[01:01:45] + 
[01:01:45] + 
[01:01:45] + error: duplicate matcher binding
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`
[01:01:45] +    |
[01:01:45] + note: previous declaration was here
[01:01:45] +   --> $DIR/macro-follow.rs:104:6
[01:01:45] +    |
[01:01:45] +    |
[01:01:45] + LL |     ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`
[01:01:45] + 
[01:01:45] + error: aborting due to 93 previous errors
[01:01:45] 682 
[01:01:45] 683 
[01:01:45] 683 
[01:01:45] 
[01:01:45] 
[01:01:45] The actual stderr differed from the expected stderr.
[01:01:45] Actual stderr saved to /checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/macros/macro-follow/macro-follow.stderr
[01:01:45] To update references, rerun the tests and pass the `--bless` flag
[01:01:45] To only update this specific test, also pass `--test-args macros/macro-follow.rs`
[01:01:45] error: 1 errors occurred comparing output.
[01:01:45] status: exit code: 1
[01:01:45] status: exit code: 1
[01:01:45] command: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/src/test/ui/macros/macro-follow.rs" "--target=x86_64-unknown-linux-gnu" "--error-format" "json" "-Zui-testing" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/macros/macro-follow/a" "-Crpath" "-O" "-Zunstable-options" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/macros/macro-follow/auxiliary" "-A" "unused"
[01:01:45] ------------------------------------------
[01:01:45] 
[01:01:45] ------------------------------------------
[01:01:45] stderr:
[01:01:45] stderr:
[01:01:45] ------------------------------------------
[01:01:45] {"message":"`$p:pat` is followed by `(`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":197,"byte_end":197,"line_start":8,"line_end":8,"column_start":14,"column_end":14,"is_primary":true,"text":[{"text":"    ($p:pat ()) => {};       //~ERROR  `$p:pat` is followed by `(`","highlight_start":14,"highlight_end":14}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `(`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:8:14\n   |\nLL |     ($p:pat ()) => {};       //~ERROR  `$p:pat` is followed by `(`\n   |              ^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `[`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":264,"byte_end":264,"line_start":9,"line_end":9,"column_start":14,"column_end":14,"is_primary":true,"text":[{"text":"    ($p:pat []) => {};       //~ERROR  `$p:pat` is followed by `[`","highlight_start":14,"highlight_end":14}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `[`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:9:14\n   |\nLL |     ($p:pat []) => {};       //~ERROR  `$p:pat` is followed by `[`\n   |              ^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `{`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":331,"byte_end":331,"line_start":10,"line_end":10,"column_start":14,"column_end":14,"is_primary":true,"text":[{"text":"    ($p:pat {}) => {};       //~ERROR  `$p:pat` is followed by `{`","highlight_start":14,"highlight_end":14}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `{`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:10:14\n   |\nLL |     ($p:pat {}) => {};       //~ERROR  `$p:pat` is followed by `{`\n   |              ^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `:`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":397,"byte_end":398,"line_start":11,"line_end":11,"column_start":13,"column_end":14,"is_primary":true,"text":[{"text":"    ($p:pat :) => {};        //~ERROR `$p:pat` is followed by `:`","highlight_start":13,"highlight_end":14}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `:`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:11:13\n   |\nLL |     ($p:pat :) => {};        //~ERROR `$p:pat` is followed by `:`\n   |             ^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `>`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":463,"byte_end":464,"line_start":12,"line_end":12,"column_start":13,"column_end":14,"is_primary":true,"text":[{"text":"    ($p:pat >) => {};        //~ERROR `$p:pat` is followed by `>`","highlight_start":13,"highlight_end":14}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `>`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:12:13\n   |\nLL |     ($p:pat >) => {};        //~ERROR `$p:pat` is followed by `>`\n   |             ^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `+`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":529,"byte_end":530,"line_start":13,"line_end":13,"column_start":13,"column_end":14,"is_primary":true,"text":[{"text":"    ($p:pat +) => {};        //~ERROR `$p:pat` is followed by `+`","highlight_start":13,"highlight_end":14}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `+`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:13:13\n   |\nLL |     ($p:pat +) => {};        //~ERROR `$p:pat` is followed by `+`\n   |             ^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `ident`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":595,"byte_end":600,"line_start":14,"line_end":14,"column_start":13,"column_end":18,"is_primary":true,"text":[{"text":"    ($p:pat ident) => {};    //~ERROR `$p:pat` is followed by `ident`","highlight_start":13,"highlight_end":18}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `ident`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:14:13\n   |\nLL |     ($p:pat ident) => {};    //~ERROR `$p:pat` is followed by `ident`\n   |             ^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$p:pat`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":665,"byte_end":671,"line_start":15,"line_end":15,"column_start":13,"column_end":19,"is_primary":true,"text":[{"text":"    ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`","highlight_start":13,"highlight_end":19}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$p:pat`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:15:13\n   |\nLL |     ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`\n   |             ^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$e:expr`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":736,"byte_end":743,"line_start":16,"line_end":16,"column_start":13,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:pat $e:expr) => {};  //~ERROR `$p:pat` is followed by `$e:expr`","highlight_start":13,"highlight_end":20}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$e:expr`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:16:13\n   |\nLL |     ($p:pat $e:expr) => {};  //~ERROR `$p:pat` is followed by `$e:expr`\n   |             ^^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$t:ty`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":808,"byte_end":813,"line_start":17,"line_end":17,"column_start":13,"column_end":18,"is_primary":true,"text":[{"text":"    ($p:pat $t:ty) => {};    //~ERROR `$p:pat` is followed by `$t:ty`","highlight_start":13,"highlight_end":18}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$t:ty`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:17:13\n   |\nLL |     ($p:pat $t:ty) => {};    //~ERROR `$p:pat` is followed by `$t:ty`\n   |             ^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$s:stmt`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":878,"byte_end":885,"line_start":18,"line_end":18,"column_start":13,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:pat $s:stmt) => {};  //~ERROR `$p:pat` is followed by `$s:stmt`","highlight_start":13,"highlight_end":20}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$s:stmt`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:18:13\n   |\nLL |     ($p:pat $s:stmt) => {};  //~ERROR `$p:pat` is followed by `$s:stmt`\n   |             ^^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$p:path`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":950,"byte_end":957,"line_start":19,"line_end":19,"column_start":13,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`","highlight_start":13,"highlight_end":20}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$p:path`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:19:13\n   |\nLL |     ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`\n   |             ^^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$b:block`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1022,"byte_end":1030,"line_start":20,"line_end":20,"column_start":13,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:pat $b:block) => {}; //~ERROR `$p:pat` is followed by `$b:block`","highlight_start":13,"highlight_end":21}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$b:block`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:20:13\n   |\nLL |     ($p:pat $b:block) => {}; //~ERROR `$p:pat` is followed by `$b:block`\n   |             ^^^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$i:ident`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1095,"byte_end":1103,"line_start":21,"line_end":21,"column_start":13,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:pat $i:ident) => {}; //~ERROR `$p:pat` is followed by `$i:ident`","highlight_start":13,"highlight_end":21}],"label":"not allowed after `pat` fragments","suggested_replacemeor `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$i:item`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1238,"byte_end":1245,"line_start":23,"line_end":23,"column_start":13,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:pat $i:item) => {};  //~ERROR `$p:pat` is followed by `$i:item`","highlight_start":13,"highlight_end":20}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$i:item`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:23:13\n   |\nLL |     ($p:pat $i:item) => {};  //~ERROR `$p:pat` is followed by `$i:item`\n   |             ^^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"`$p:pat` is followed by `$m:meta`, which is not allowed for `pat` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1310,"byte_end":1317,"line_start":24,"line_end":24,"column_start":13,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:pat $m:meta) => {};  //~ERROR `$p:pat` is followed by `$m:meta`","highlight_start":13,"highlight_end":20}],"label":"not allowed after `pat` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:pat` is followed by `$m:meta`, which is not allowed for `pat` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:24:13\n   |\nLL |     ($p:pat $m:meta) => {};  //~ERROR `$p:pat` is followed by `$m:meta`\n   |             ^^^^^^^ not allowed after `pat` fragments\n   |\n   = note: allowed there are: `=>`, `,`, `=`, `|`, `if` or `in`\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":665,"byte_end":671,"line_start":15,"line_end":15,"column_start":13,"column_end":19,"is_primary":true,"text":[{"text":"    ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`","highlight_start":13,"highlight_end":19}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":658,"byte_end":664,"line_start":15,"line_end":15,"column_start":6,"column_end":12,"is_primary":true,"text":[{"text":"    ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`","highlight_start":6,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:15:13\n   |\nLL |     ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`\n   |             ^^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:15:6\n   |\nLL |     ($p:pat $p:pat) => {};   //~ERROR `$p:pat` is followed by `$p:pat`\n   |      ^^^^^^\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":950,"byte_end":957,"line_start":19,"line_end":19,"column_start":13,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`","highlight_start":13,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":943,"byte_end":949,"line_start":19,"line_end":19,"column_start":6,"column_end":12,"is_primary":true,"text":[{"text":"    ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`","highlight_start":6,"highlight_end":12}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:19:13\n   |\nLL |     ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`\n   |             ^^^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:19:6\n   |\nLL |     ($p:pat $p:path) => {};  //~ERROR `$p:pat` is followed by `$p:path`\n   |      ^^^^^^\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `(`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1460,"byte_end":1460,"line_start":28,"line_end":28,"column_start":15,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr ()) => {};       //~ERROR  `$e:expr` is followed by `(`","highlight_start":15,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `(`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:28:15\n   |\nLL |     ($e:expr ()) => {};       //~ERROR  `$e:expr` is followed by `(`\n   |               ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `[`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1529,"byte_end":1529,"line_start":29,"line_end":29,"column_start":15,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr []) => {};       //~ERROR  `$e:expr` is followed by `[`","highlight_start":15,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `[`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:29:15\n   |\nLL |     ($e:expr []) => {};       //~ERROR  `$e:expr` is followed by `[`\n   |               ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `{`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1598,"byte_end":1598,"line_start":30,"line_end":30,"column_start":15,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr {}) => {};       //~ERROR  `$e:expr` is followed by `{`","highlight_start":15,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `{`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:30:15\n   |\nLL |     ($e:expr {}) => {};       //~ERROR  `$e:expr` is followed by `{`\n   |               ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `=`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1666,"byte_end":1667,"line_start":31,"line_end":31,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr =) => {};        //~ERROR `$e:expr` is followed by `=`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `=`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:31:14\n   |\nLL |     ($e:expr =) => {};        //~ERROR `$e:expr` is followed by `=`\n   |              ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `|`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1734,"byte_end":1735,"line_start":32,"line_end":32,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr |) => {};        //~ERROR `$e:expr` is followed by `|`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `|`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:32:14\n   |\nLL |     ($e:expr |) => {};        //~ERROR `$e:expr` is followed by `|`\n   |              ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `:`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1802,"byte_end":1803,"line_start":33,"line_end":33,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr :) => {};        //~ERROR `$e:expr` is followed by `:`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `:`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:33:14\n   |\nLL |     ($e:expr :) => {};        //~ERROR `$e:expr` is followed by `:`\n   |              ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `>`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1870,"byte_end":1871,"line_start":34,"line_end":34,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr >) => {};        //~ERROR `$e:expr` is followed by `>`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `>`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:34:14\n   |\nLL |     ($e:expr >) => {};        //~ERROR `$e:expr` is followed by `>`\n   |              ^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `+`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":1938,"byte_end":1939,"line_start":35,"line_end":35,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($e:expr +) => {};        //~ERROR `$e:expr` is followed by `+`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `+`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:35:14\n   |\nLL |     ($e:expr +) => {};        //~ERROR"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `if`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:37:14\n   |\nLL |     ($e:expr if) => {};       //~ERROR `$e:expr` is followed by `if`\n   |              ^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `in`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2147,"byte_end":2149,"line_start":38,"line_end":38,"column_start":14,"column_end":16,"is_primary":true,"text":[{"text":"    ($e:expr in) => {};       //~ERROR `$e:expr` is followed by `in`","highlight_start":14,"highlight_end":16}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `in`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:38:14\n   |\nLL |     ($e:expr in) => {};       //~ERROR `$e:expr` is followed by `in`\n   |              ^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$p:pat`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2216,"byte_end":2222,"line_start":39,"line_end":39,"column_start":14,"column_end":20,"is_primary":true,"text":[{"text":"    ($e:expr $p:pat) => {};   //~ERROR `$e:expr` is followed by `$p:pat`","highlight_start":14,"highlight_end":20}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$p:pat`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:39:14\n   |\nLL |     ($e:expr $p:pat) => {};   //~ERROR `$e:expr` is followed by `$p:pat`\n   |              ^^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$e:expr`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2289,"byte_end":2296,"line_start":40,"line_end":40,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$e:expr`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:40:14\n   |\nLL |     ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`\n   |              ^^^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$t:ty`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2363,"byte_end":2368,"line_start":41,"line_end":41,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($e:expr $t:ty) => {};    //~ERROR `$e:expr` is followed by `$t:ty`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$t:ty`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:41:14\n   |\nLL |     ($e:expr $t:ty) => {};    //~ERROR `$e:expr` is followed by `$t:ty`\n   |              ^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$s:stmt`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2435,"byte_end":2442,"line_start":42,"line_end":42,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($e:expr $s:stmt) => {};  //~ERROR `$e:expr` is followed by `$s:stmt`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$s:stmt`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:42:14\n   |\nLL |     ($e:expr $s:stmt) => {};  //~ERROR `$e:expr` is followed by `$s:stmt`\n   |              ^^^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$p:path`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2509,"byte_end":2516,"line_start":43,"line_end":43,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($e:expr $p:path) => {};  //~ERROR `$e:expr` is followed by `$p:path`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendyte_end":2666,"line_start":45,"line_end":45,"column_start":14,"column_end":22,"is_primary":true,"text":[{"text":"    ($e:expr $i:ident) => {}; //~ERROR `$e:expr` is followed by `$i:ident`","highlight_start":14,"highlight_end":22}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$i:ident`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:45:14\n   |\nLL |     ($e:expr $i:ident) => {}; //~ERROR `$e:expr` is followed by `$i:ident`\n   |              ^^^^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$t:tt`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2733,"byte_end":2738,"line_start":46,"line_end":46,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($e:expr $t:tt) => {};    //~ERROR `$e:expr` is followed by `$t:tt`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$t:tt`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:46:14\n   |\nLL |     ($e:expr $t:tt) => {};    //~ERROR `$e:expr` is followed by `$t:tt`\n   |              ^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$i:item`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2805,"byte_end":2812,"line_start":47,"line_end":47,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($e:expr $i:item) => {};  //~ERROR `$e:expr` is followed by `$i:item`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$i:item`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:47:14\n   |\nLL |     ($e:expr $i:item) => {};  //~ERROR `$e:expr` is followed by `$i:item`\n   |              ^^^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$e:expr` is followed by `$m:meta`, which is not allowed for `expr` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2879,"byte_end":2886,"line_start":48,"line_end":48,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($e:expr $m:meta) => {};  //~ERROR `$e:expr` is followed by `$m:meta`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `expr` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$e:expr` is followed by `$m:meta`, which is not allowed for `expr` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:48:14\n   |\nLL |     ($e:expr $m:meta) => {};  //~ERROR `$e:expr` is followed by `$m:meta`\n   |              ^^^^^^^ not allowed after `expr` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2289,"byte_end":2296,"line_start":40,"line_end":40,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`","highlight_start":14,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":2281,"byte_end":2288,"line_start":40,"line_end":40,"column_start":6,"column_end":13,"is_primary":true,"text":[{"text":"    ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`","highlight_start":6,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:40:14\n   |\nLL |     ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`\n   |              ^^^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:40:6\n   |\nLL |     ($e:expr $e:expr) => {};  //~ERROR `$e:expr` is followed by `$e:expr`\n   |      ^^^^^^^\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `(`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3138,"byte_end":3138,"line_start":53,"line_end":53,"column_start":13,"column_end":13,"is_primary":true,"text":[{"text":"    ($t:ty ()) => {};       //~ERROR  `$t:ty` is followed by `(`","highlight_start":13,"highlight_end":13}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `(`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:53:13\n   |\nLL |     ($t:ty ()) => {};       //~ERROR  `$t:ty` is followed by `(`\n   |             ^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `+`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3247,"byte_end":3248,"line_start":55,"line_end":55,"column_start":12,"column_end":13,"is_primary":true,"text":[{"text":"    ($t:ty +) => {};        //~ERROR `$t:ty` is followed by `+`","highlight_start":12,"highlight_end":13}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `+`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:55:12\n   |\nLL |     ($t:ty +) => {};        //~ERROR `$t:ty` is followed by `+`\n   |            ^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `ident`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3311,"byte_end":3316,"line_start":56,"line_end":56,"column_start":12,"column_end":17,"is_primary":true,"text":[{"text":"    ($t:ty ident) => {};    //~ERROR `$t:ty` is followed by `ident`","highlight_start":12,"highlight_end":17}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `ident`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:56:12\n   |\nLL |     ($t:ty ident) => {};    //~ERROR `$t:ty` is followed by `ident`\n   |            ^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `if`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3379,"byte_end":3381,"line_start":57,"line_end":57,"column_start":12,"column_end":14,"is_primary":true,"text":[{"text":"    ($t:ty if) => {};       //~ERROR `$t:ty` is followed by `if`","highlight_start":12,"highlight_end":14}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `if`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:57:12\n   |\nLL |     ($t:ty if) => {};       //~ERROR `$t:ty` is followed by `if`\n   |            ^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$p:pat`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3444,"byte_end":3450,"line_start":58,"line_end":58,"column_start":12,"column_end":18,"is_primary":true,"text":[{"text":"    ($t:ty $p:pat) => {};   //~ERROR `$t:ty` is followed by `$p:pat`","highlight_start":12,"highlight_end":18}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$p:pat`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:58:12\n   |\nLL |     ($t:ty $p:pat) => {};   //~ERROR `$t:ty` is followed by `$p:pat`\n   |            ^^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$e:expr`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3513,"byte_end":3520,"line_start":59,"line_end":59,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":"    ($t:ty $e:expr) => {};  //~ERROR `$t:ty` is followed by `$e:expr`","highlight_start":12,"highlight_end":19}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$e:expr`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:59:12\n   |\nLL |     ($t:ty $e:expr) => {};  //~ERROR `$t:ty` is followed by `$e:expr`\n   |            ^^^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$t:ty`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3583,"byte_end":3588,"line_start":60,"line_end":60,"column_start":12,"column_end":17,"is_primary":true,"text":[{"text":"    ($t:ty $t:ty) => {};    //~ERROR `$t:ty` is followed by `$t:ty`","highlight_start":12,"highlight_end":17}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$t:ty`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:60:12\n   |\nLL |     ($t:ty $t:ty) => {};    //~ERROR `$t:ty` is followed by `$t:ty`\n   |            ^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] thread 'main' panicked at 'Some tests failed', src/tools/compiletest/src/main.rs:495:22
[01:01:45] {"message":"`$t:ty` is followed by `$s:stmt`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3651,"byte_end":3658,"line_start":61,"line_end":61,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":"    ($t:ty $s:stmt) => {};  //~ERROR `$t:ty` is followed by `$s:stmt`","highlight_start":12,"highlight_end":19}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$s:stmt`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:61:12\n   |\nLL |     ($t:ty $s:stmt) => {};  //~ERROR `$t:ty` is followed by `$s:stmt`\n   |            ^^^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$p:path`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3721,"byte_end":3728,"line_start":62,"line_end":62,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":"    ($t:ty $p:path) => {};  //~ERROR `$t:ty` is followed by `$p:path`","highlight_start":12,"highlight_end":19}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$p:path`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:62:12\n   |\nLL |     ($t:ty $p:path) => {};  //~ERROR `$t:ty` is followed by `$p:path`\n   |            ^^^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$i:ident`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3836,"byte_end":3844,"line_start":64,"line_end":64,"column_start":12,"column_end":20,"is_primary":true,"text":[{"text":"    ($t:ty $i:ident) => {}; //~ERROR `$t:ty` is followed by `$i:ident`","highlight_start":12,"highlight_end":20}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$i:ident`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:64:12\n   |\nLL |     ($t:ty $i:ident) => {}; //~ERROR `$t:ty` is followed by `$i:ident`\n   |            ^^^^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$t:tt`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3907,"byte_end":3912,"line_start":65,"line_end":65,"column_start":12,"column_end":17,"is_primary":true,"text":[{"text":"    ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`","highlight_start":12,"highlight_end":17}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$t:tt`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:65:12\n   |\nLL |     ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`\n   |            ^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$i:item`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3975,"byte_end":3982,"line_start":66,"line_end":66,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":"    ($t:ty $i:item) => {};  //~ERROR `$t:ty` is followed by `$i:item`","highlight_start":12,"highlight_end":19}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$t:ty` is followed by `$i:item`, which is not allowed for `ty` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:66:12\n   |\nLL |     ($t:ty $i:item) => {};  //~ERROR `$t:ty` is followed by `$i:item`\n   |            ^^^^^^^ not allowed after `ty` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$t:ty` is followed by `$m:meta`, which is not allowed for `ty` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4045,"byte_end":4052,"line_start":67,"line_end":67,"column_start":12,"column_end":19,"is_primary":true,"text":[{"text":"    ($t:ty $m:meta) => {};  //~ERROR `$t:ty` is followed by `$m:meta`","highlight_start":12,"highlight_end":19}],"label":"not allowed after `ty` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"chus declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:60:6\n   |\nLL |     ($t:ty $t:ty) => {};    //~ERROR `$t:ty` is followed by `$t:ty`\n   |      ^^^^^\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3907,"byte_end":3912,"line_start":65,"line_end":65,"column_start":12,"column_end":17,"is_primary":true,"text":[{"text":"    ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`","highlight_start":12,"highlight_end":17}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":3901,"byte_end":3906,"line_start":65,"line_end":65,"column_start":6,"column_end":11,"is_primary":true,"text":[{"text":"    ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`","highlight_start":6,"highlight_end":11}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:65:12\n   |\nLL |     ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`\n   |            ^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:65:6\n   |\nLL |     ($t:ty $t:tt) => {};    //~ERROR `$t:ty` is followed by `$t:tt`\n   |      ^^^^^\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `(`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4178,"byte_end":4178,"line_start":71,"line_end":71,"column_start":15,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt ()) => {};       //~ERROR  `$s:stmt` is followed by `(`","highlight_start":15,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `(`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:71:15\n   |\nLL |     ($s:stmt ()) => {};       //~ERROR  `$s:stmt` is followed by `(`\n   |               ^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `[`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4247,"byte_end":4247,"line_start":72,"line_end":72,"column_start":15,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt []) => {};       //~ERROR  `$s:stmt` is followed by `[`","highlight_start":15,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"chilrt":74,"line_end":74,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt =) => {};        //~ERROR `$s:stmt` is followed by `=`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `=`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:74:14\n   |\nLL |     ($s:stmt =) => {};        //~ERROR `$s:stmt` is followed by `=`\n   |              ^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `|`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4452,"byte_end":4453,"line_start":75,"line_end":75,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt |) => {};        //~ERROR `$s:stmt` is followed by `|`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `|`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:75:14\n   |\nLL |     ($s:stmt |) => {};        //~ERROR `$s:stmt` is followed by `|`\n   |              ^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `:`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4520,"byte_end":4521,"line_start":76,"line_end":76,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt :) => {};        //~ERROR `$s:stmt` is followed by `:`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `:`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:76:14\n   |\nLL |     ($s:stmt :) => {};        //~ERROR `$s:stmt` is followed by `:`\n   |              ^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `>`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4588,"byte_end":4589,"line_start":77,"line_end":77,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt >) => {};        //~ERROR `$s:stmt` is followed by `>`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `>`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:77:14\n   |\nLL |     ($s:stmt >) => {};        //~ERROR `$s:stmt` is followed by `>`\n   |              ^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `+`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4656,"byte_end":4657,"line_start":78,"line_end":78,"column_start":14,"column_end":15,"is_primary":true,"text":[{"text":"    ($s:stmt +) => {};        //~ERROR `$s:stmt` is followed by `+`","highlight_start":14,"highlight_end":15}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `+`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:78:14\n   |\nLL |     ($s:stmt +) => {};        //~ERROR `$s:stmt` is followed by `+`\n   |              ^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `ident`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4724,"byte_end":4729,"line_start":79,"line_end":79,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($s:stmt ident) => {};    //~ERROR `$s:stmt` is followed by `ident`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `ident`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:79:14\n   |\nLL |     ($s:stmt ident) => {};    //~ERROR `$s:stmt` is followed by `ident`\n   |              ^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `if`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4796,"byte_end":4798,"line_start":80,"line_end":80,"column_start":14,"column_end":16,"is_primary":true,"text":[{"text":"    ($s:stmt if) => {};       //~ERROR `$s:stmt` is followed by `if`","highlight_start":14,"highlight_end":16}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `if`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:80:14\n   |\nLL |     ($s:stmt if) => {};       //~ERROR `$s:stmt` is followed by `if`\n   |              ^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `in`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4865,"byte_end":4867,"line_start":81,"line_end":81,"column_start":14,"column_end":16,"is_primary":true,"text":[{"text":"    ($s:stmt in) => {};       //~ERROR `$s:stmt` is followed by `in`","highlight_start":14,"highlight_end":16}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `in`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:81:14\n   |\nLL |     ($s:stmt in) => {};       //~ERROR `$s:stmt` is followed by `in`\n   |              ^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$p:pat`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":4934,"byte_end":4940,"line_start":82,"line_end":82,"column_start":14,"column_end":20,"is_primary":true,"text":[{"text":"    ($s:stmt $p:pat) => {};   //~ERROR `$s:stmt` is followed by `$p:pat`","highlight_start":14,"highlight_end":20}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$p:pat`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:82:14\n   |\nLL |     ($s:stmt $p:pat) => {};   //~ERROR `$s:stmt` is followed by `$p:pat`\n   |              ^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$e:expr`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5007,"byte_end":5014,"line_start":83,"line_end":83,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($s:stmt $e:expr) => {};  //~ERROR `$s:stmt` is followed by `$e:expr`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$e:expr`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:83:14\n   |\nLL |     ($s:stmt $e:expr) => {};  //~ERROR `$s:stmt` is followed by `$e:expr`\n   |              ^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$t:ty`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5081,"byte_end":5086,"line_start":84,"line_end":84,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($s:stmt $t:ty) => {};    //~ERROR `$s:stmt` is followed by `$t:ty`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$t:ty`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:84:14\n   |\nLL |     ($s:stmt $t:ty) => {};    //~ERROR `$s:stmt` is followed by `$t:ty`\n   |              ^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$s:stmt`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5153,"byte_end":5160,"line_start":85,"line_end":85,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$s:stmt`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:85:14\n   |\nLL |     ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`\n   |              ^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$p:path`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5227,"byte_end":5234,"line_start":86,"line_end":86,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($s:stmt $p:path) => {};  //~ERROR `$s:stmt` is followed by `$p:path`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$p:path`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:86:14\n   |\nLL |     ($s:stmt $p:path) => {};  //~ERROR `$s:stmt` is followed by `$p:path`\n   |              ^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$b:block`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5301,"byte_end":5309,"line_start":87,"line_end":87,"column_start":14,"column_end":22,"is_primary":true,"text":[{"text":"    ($s:stmt $b:block) => {}; //~ERROR `$s:stmt` is followed by `$b:block`","highlight_start":14,"highlight_end":22}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$b:block`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:87:14\n   |\nLL |     ($s:stmt $b:block) => {}; //~ERROR `$s:stmt` is followed by `$b:block`\n   |              ^^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$i:ident`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5376,"byte_end":5384,"line_start":88,"line_end":88,"column_start":14,"column_end":22,"is_primary":true,"text":[{"text":"    ($s:stmt $i:ident) => {}; //~ERROR `$s:stmt` is followed by `$i:ident`","highlight_start":14,"highlight_end":22}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$i:ident`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:88:14\n   |\nLL |     ($s:stmt $i:ident) => {}; //~ERROR `$s:stmt` is followed by `$i:ident`\n   |              ^^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$t:tt`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5451,"byte_end":5456,"line_start":89,"line_end":89,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($s:stmt $t:tt) => {};    //~ERROR `$s:stmt` is followed by `$t:tt`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$t:tt`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:89:14\n   |\nLL |     ($s:stmt $t:tt) => {};    //~ERROR `$s:stmt` is followed by `$t:tt`\n   |              ^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$i:item`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5523,"byte_end":5530,"line_start":90,"line_end":90,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($s:stmt $i:item) => {};  //~ERROR `$s:stmt` is followed by `$i:item`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$i:item`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:90:14\n   |\nLL |     ($s:stmt $i:item) => {};  //~ERROR `$s:stmt` is followed by `$i:item`\n   |              ^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"`$s:stmt` is followed by `$m:meta`, which is not allowed for `stmt` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5597,"byte_end":5604,"line_start":91,"line_end":91,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($s:stmt $m:meta) => {};  //~ERROR `$s:stmt` is followed by `$m:meta`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `stmt` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `=>`, `,` or `;`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$s:stmt` is followed by `$m:meta`, which is not allowed for `stmt` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:91:14\n   |\nLL |     ($s:stmt $m:meta) => {};  //~ERROR `$s:stmt` is followed by `$m:meta`\n   |              ^^^^^^^ not allowed after `stmt` fragments\n   |\n   = note: allowed there are: `=>`, `,` or `;`\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5153,"byte_end":5160,"line_start":85,"line_end":85,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`","highlight_start":14,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5145,"byte_end":5152,"line_start":85,"line_end":85,"column_start":6,"column_end":13,"is_primary":true,"text":[{"text":"    ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`","highlight_start":6,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:85:14\n   |\nLL |     ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`\n   |              ^^^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:85:6\n   |\nLL |     ($s:stmt $s:stmt) => {};  //~ERROR `$s:stmt` is followed by `$s:stmt`\n   |      ^^^^^^^\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `(`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5730,"byte_end":5730,"line_start":95,"line_end":95,"column_start":15,"column_end":15,"is_primary":true,"text":[{"text":"    ($p:path ()) => {};       //~ERROR  `$p:path` is followed by `(`","highlight_start":15,"highlight_end":15}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `(`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:95:15\n   |\nLL |     ($p:path ()) => {};       //~ERROR  `$p:path` is followed by `(`\n   |               ^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `+`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{ `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `ident`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:98:14\n   |\nLL |     ($p:path ident) => {};    //~ERROR `$p:path` is followed by `ident`\n   |              ^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `if`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":5985,"byte_end":5987,"line_start":99,"line_end":99,"column_start":14,"column_end":16,"is_primary":true,"text":[{"text":"    ($p:path if) => {};       //~ERROR `$p:path` is followed by `if`","highlight_start":14,"highlight_end":16}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `if`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:99:14\n   |\nLL |     ($p:path if) => {};       //~ERROR `$p:path` is followed by `if`\n   |              ^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$p:pat`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6054,"byte_end":6060,"line_start":100,"line_end":100,"column_start":14,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`","highlight_start":14,"highlight_end":20}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$p:pat`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:100:14\n   |\nLL |     ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`\n   |              ^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$e:expr`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6127,"byte_end":6134,"line_start":101,"line_end":101,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:path $e:expr) => {};  //~ERROR `$p:path` is followed by `$e:expr`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$e:expr`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:101:14\n   |\nLL |     ($p:path $e:expr) => {};  //~ERROR `$p:path` is followed by `$e:expr`\n   |              ^^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$t:ty`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6201,"byte_end":6206,"line_start":102,"line_end":102,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($p:path $t:ty) => {};    //~ERROR `$p:path` is followed by `$t:ty`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$t:ty`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:102:14\n   |\nLL |     ($p:path $t:ty) => {};    //~ERROR `$p:path` is followed by `$t:ty`\n   |              ^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$s:stmt`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6273,"byte_end":6280,"line_start":103,"line_end":103,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:path $s:stmt) => {};  //~ERROR `$p:path` is followed by `$s:stmt`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$s:stmt`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:103:14\n   |\nLL |     ($p:path $s:stmt) => {};  //~ERROR `$p:path` is followed by `$s:stmt`\n   |              ^^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$p:path`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6347,"byte_end":6354,"line_start":104,"line_end":104,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$p:path`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:104:14\n   |\nLL |     ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`\n   |              ^^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$i:ident`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6468,"byte_end":6476,"line_start":106,"line_end":106,"column_start":14,"column_end":22,"is_primary":true,"text":[{"text":"    ($p:path $i:ident) => {}; //~ERROR `$p:path` is followed by `$i:ident`","highlight_start":14,"highlight_end":22}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$i:ident`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:106:14\n   |\nLL |     ($p:path $i:ident) => {}; //~ERROR `$p:path` is followed by `$i:ident`\n   |              ^^^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$t:tt`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6543,"byte_end":6548,"line_start":107,"line_end":107,"column_start":14,"column_end":19,"is_primary":true,"text":[{"text":"    ($p:path $t:tt) => {};    //~ERROR `$p:path` is followed by `$t:tt`","highlight_start":14,"highlight_end":19}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$t:tt`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:107:14\n   |\nLL |     ($p:path $t:tt) => {};    //~ERROR `$p:path` is followed by `$t:tt`\n   |              ^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$i:item`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6615,"byte_end":6622,"line_start":108,"line_end":108,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:path $i:item) => {};  //~ERROR `$p:path` is followed by `$i:item`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$i:item`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:108:14\n   |\nLL |     ($p:path $i:item) => {};  //~ERROR `$p:path` is followed by `$i:item`\n   |              ^^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"`$p:path` is followed by `$m:meta`, which is not allowed for `path` fragments","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6689,"byte_end":6696,"line_start":109,"line_end":109,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:path $m:meta) => {};  //~ERROR `$p:path` is followed by `$m:meta`","highlight_start":14,"highlight_end":21}],"label":"not allowed after `path` fragments","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"error: `$p:path` is followed by `$m:meta`, which is not allowed for `path` fragments\n  --> /checkout/src/test/ui/macros/macro-follow.rs:109:14\n   |\nLL |     ($p:path $m:meta) => {};  //~ERROR `$p:path` is followed by `$m:meta`\n   |              ^^^^^^^ not allowed after `path` fragments\n   |\n   = note: allowed there are: `{`, `[`, `=>`, `,`, `>`, `=`, `:`, `;`, `|`, `as` or `where`\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6054,"byte_end":6060,"line_start":100,"line_end":100,"column_start":14,"column_end":20,"is_primary":true,"text":[{"text":"    ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`","highlight_start":14,"highlight_end":20}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6046,"byte_end":6053,"line_start":100,"line_end":100,"column_start":6,"column_end":13,"is_primary":true,"text":[{"text":"    ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`","highlight_start":6,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:100:14\n   |\nLL |     ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`\n   |              ^^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:100:6\n   |\nLL |     ($p:path $p:pat) => {};   //~ERROR `$p:path` is followed by `$p:pat`\n   |      ^^^^^^^\n\n"}
[01:01:45] {"message":"duplicate matcher binding","code":null,"level":"error","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6347,"byte_end":6354,"line_start":104,"line_end":104,"column_start":14,"column_end":21,"is_primary":true,"text":[{"text":"    ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`","highlight_start":14,"highlight_end":21}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"previous declaration was here","code":null,"level":"note","spans":[{"file_name":"/checkout/src/test/ui/macros/macro-follow.rs","byte_start":6339,"byte_end":6346,"line_start":104,"line_end":104,"column_start":6,"column_end":13,"is_primary":true,"text":[{"text":"    ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`","highlight_start":6,"highlight_end":13}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":null}],"rendered":"error: duplicate matcher binding\n  --> /checkout/src/test/ui/macros/macro-follow.rs:104:14\n   |\nLL |     ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`\n   |              ^^^^^^^\n   |\nnote: previous declaration was here\n  --> /checkout/src/test/ui/macros/macro-follow.rs:104:6\n   |\nLL |     ($p:path $p:path) => {};  //~ERROR `$p:path` is followed by `$p:path`\n   |      ^^^^^^^\n\n"}
[01:01:45] {"message":"aborting due to 93 previous errors","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to 93 previous errors\n\n"}
[01:01:45] ------------------------------------------
[01:01:45] 
[01:01:45] thread '[ui] ui/macros/macro-follow.rs' panicked at 'explicit panic', src/tools/compiletest/src/runtest.rs:3245:9
[01:01:45] 
---
[01:01:45] test result: FAILED. 5279 passed; 1 failed; 23 ignored; 0 measured; 0 filtered out
[01:01:45] 
[01:01:45] 
[01:01:45] 
[01:01:45] command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/compiletest" "--compile-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib" "--run-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/lib" "--rustc-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/checkout/src/test/ui" "--build-base" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui" "--stage-id" "stage2-x86_64-unknown-linux-gnu" "--mode" "ui" "--target" "x86_64-unknown-linux-gnu" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/usr/lib/llvm-6.0/bin/FileCheck" "--host-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--quiet" "--llvm-version" "6.0.0\n" "--system-llvm" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
[01:01:45] 
[01:01:45] 
[01:01:45] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test
[01:01:45] Build completed unsuccessfully in 0:04:12
[01:01:45] Build completed unsuccessfully in 0:04:12
[01:01:45] Makefile:48: recipe for target 'check' failed
[01:01:45] make: *** [check] Error 1
The command "stamp sh -x -c "$RUN_SCRIPT"" exited with 2.
travis_time:start:15e6bb1a
$ date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
Tue Jan 15 02:26:25 UTC 2019
---
travis_time:end:24dbfd5c:start=1547519186983340726,finish=1547519186988058670,duration=4717944
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:08779452
$ ln -s . checkout && for CORE in obj/cores/core.*; do EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|'

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@petrochenkov petrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 15, 2019
@petrochenkov
Copy link
Contributor

Code LGTM, needs green Travis for crater.

@mark-i-m mark-i-m force-pushed the multiple-matcher-bindings branch 2 times, most recently from 6189852 to 0de49cf Compare January 15, 2019 18:47
@mark-i-m
Copy link
Member Author

As with #57610, I have been getting a seeming unrelated ICE. I tried rebasing, so hopefully this should be passing now.

It's also worthwhile to note that we had breakage in rustc's own test suite, which I fixed in the last commit...

@rust-highfive
Copy link
Collaborator

The job x86_64-gnu-llvm-6.0 of your PR failed on Travis (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
travis_time:end:0036fb55:start=1547578103494401483,finish=1547578104427852063,duration=933450580
$ git checkout -qf FETCH_HEAD
travis_fold:end:git.checkout

Encrypted environment variables have been removed for security reasons.
See https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
$ export SCCACHE_BUCKET=rust-lang-ci-sccache2
$ export SCCACHE_REGION=us-west-1
Setting environment variables from .travis.yml
$ export IMAGE=x86_64-gnu-llvm-6.0
---
[01:09:14] .................................................................................................... 1400/2943
[01:09:27] .................................................................................................... 1500/2943
[01:09:36] ....................................................................i............................... 1600/2943
[01:09:50] .................................................................................................... 1700/2943
[01:10:04] ...........................................................................F........................ 1800/2943
[01:10:29] ...................................................................i................................ 2000/2943
[01:10:55] .................................................................................................... 2100/2943
[01:11:15] ................................................................................test [run-pass] run-pass/mpsc_stress.rs has been running for over 60 seconds
[01:11:17] .................... 2200/2943

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@mark-i-m
Copy link
Member Author

The rebase solved the previous issue, but there was another test that needed to be updated.

@mark-i-m
Copy link
Member Author

@petrochenkov This looks like its passing locally. Perhaps we can bors try now?

@petrochenkov
Copy link
Contributor

@bors try

@petrochenkov petrochenkov added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jan 16, 2019
@bors
Copy link
Contributor

bors commented Jan 16, 2019

⌛ Trying commit 5b700955fb0d5c5656731f7bd722260f6dfee85b with merge 0bfb90d213a93e466b33d078a5b535a2a6f9c5ff...

@bors
Copy link
Contributor

bors commented Jan 16, 2019

☀️ Test successful - checks-travis
State: approved= try=True

@petrochenkov
Copy link
Contributor

@craterbot run start=master#e2f221c75932de7a29845c8d6f1f73536ad00c41 end=try#0bfb90d213a93e466b33d078a5b535a2a6f9c5ff mode=check-only

@craterbot
Copy link
Collaborator

👌 Experiment pr-57617 created and queued.
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot
Copy link
Collaborator

🚧 Experiment pr-57617 is now running on agent aws-1.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot
Copy link
Collaborator

🎉 Experiment pr-57617 is completed!
📊 2 regressed and 4 fixed (50551 total)
📰 Open the full report.

⚠️ If you notice any spurious failure please add them to the blacklist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-crater Status: Waiting on a crater run to be completed. labels Jan 17, 2019
@mark-i-m
Copy link
Member Author

The 4 fixed appear to be spurious un-failures. There are two regressions:

  • fluid: appears to be spurious
  • nes: is caused by these changes

@petrochenkov
Copy link
Contributor

@mark-i-m
Since there are regressions, could you turn the error into a future-compatibility lint?
It's not too much work in this case.

@petrochenkov petrochenkov added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 17, 2019
@Centril
Copy link
Contributor

Centril commented Jan 17, 2019

@mark-i-m Could you also reach out to the nes crate with a PR perhaps?

Seems like we should be able to turn this into a hard error pretty quickly.

@rfcbot
Copy link

rfcbot commented Jan 29, 2019

🔔 This is now entering its final comment period, as per the review above. 🔔

@rfcbot rfcbot added final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. and removed proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. labels Jan 29, 2019
@bors
Copy link
Contributor

bors commented Feb 7, 2019

☔ The latest upstream changes (presumably #58125) made this pull request unmergeable. Please resolve the merge conflicts.

@mark-i-m mark-i-m force-pushed the multiple-matcher-bindings branch from 684d4fa to c25d6b8 Compare February 7, 2019 18:19
@rfcbot rfcbot added the finished-final-comment-period The final comment period is finished for this PR / Issue. label Feb 8, 2019
@rfcbot
Copy link

rfcbot commented Feb 8, 2019

The final comment period, with a disposition to merge, as per the review above, is now complete.

@rfcbot rfcbot removed the final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. label Feb 8, 2019
@mark-i-m
Copy link
Member Author

mark-i-m commented Feb 8, 2019

@Centril could you remove the "waiting-for-team" tag please?

@Centril Centril added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-team Status: Awaiting decision from the relevant subteam (see the T-<team> label). labels Feb 9, 2019
@petrochenkov
Copy link
Contributor

@bors r+

@bors
Copy link
Contributor

bors commented Feb 9, 2019

📌 Commit c25d6b8 has been approved by petrochenkov

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 9, 2019
@bors
Copy link
Contributor

bors commented Feb 9, 2019

⌛ Testing commit c25d6b8 with merge 618f5a0...

bors added a commit that referenced this pull request Feb 9, 2019
…nkov

Error on duplicate matcher bindings

fix  #57593

This should not be merged without a crater run and maybe an FCP. Discussion is ongoing at  #57593.

TODO:
- [x] write tests
- [x] crater run
- [x] ~maybe need edition gating?~ not for 1 regression /centril

r? @petrochenkov
@bors
Copy link
Contributor

bors commented Feb 9, 2019

☀️ Test successful - checks-travis, status-appveyor
Approved by: petrochenkov
Pushing 618f5a0 to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Feb 9, 2019
@bors bors merged commit c25d6b8 into rust-lang:master Feb 9, 2019
@mark-i-m
Copy link
Member Author

@Centril should this be mentioned in release notes?

@Centril
Copy link
Contributor

Centril commented Feb 11, 2019

@mark-i-m I think we usually do that when it becomes an actual hard error, but I'm not sure... cc @nikomatsakis re. that...

@mark-i-m mark-i-m deleted the multiple-matcher-bindings branch May 25, 2019 02:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Multiple bindings of the same metavariable in a macro rule aren't detected until matching.
7 participants