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
Contributor

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

This comment has been minimized.

Copy link
Collaborator

rust-highfive commented Jan 15, 2019

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

This comment has been minimized.

Copy link
Contributor

petrochenkov commented Jan 15, 2019

Code LGTM, needs green Travis for crater.

@mark-i-m mark-i-m force-pushed the mark-i-m:multiple-matcher-bindings branch 2 times, most recently from 6189852 to 0de49cf Jan 15, 2019

@mark-i-m

This comment has been minimized.

Copy link
Contributor Author

mark-i-m commented Jan 15, 2019

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

This comment has been minimized.

Copy link
Collaborator

rust-highfive commented Jan 15, 2019

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

This comment has been minimized.

Copy link
Contributor Author

mark-i-m commented Jan 15, 2019

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

@mark-i-m

This comment has been minimized.

Copy link
Contributor Author

mark-i-m commented Jan 15, 2019

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

@petrochenkov

This comment has been minimized.

Copy link
Contributor

petrochenkov commented Jan 16, 2019

@bors try

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Jan 16, 2019

⌛️ Trying commit 5b70095 with merge 0bfb90d...

bors added a commit that referenced this pull request Jan 16, 2019

Auto merge of #57617 - mark-i-m:multiple-matcher-bindings, r=<try>
[WIP] 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
- [ ] crater run
- [ ] maybe need edition gating?

r? @petrochenkov
@bors

This comment has been minimized.

Copy link
Contributor

bors commented Jan 16, 2019

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

@petrochenkov

This comment has been minimized.

Copy link
Contributor

petrochenkov commented Jan 16, 2019

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

@craterbot

This comment has been minimized.

Copy link
Collaborator

craterbot commented Jan 16, 2019

👌 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

This comment has been minimized.

Copy link
Collaborator

craterbot commented Jan 16, 2019

🚧 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

This comment has been minimized.

Copy link
Collaborator

craterbot commented Jan 17, 2019

🎉 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

@mark-i-m

This comment has been minimized.

Copy link
Contributor Author

mark-i-m commented Jan 17, 2019

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

This comment has been minimized.

Copy link
Contributor

petrochenkov commented Jan 17, 2019

@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.

@Centril

This comment has been minimized.

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.

@Centril

This comment has been minimized.

Copy link
Contributor

Centril commented Jan 29, 2019

Review pings: @aturon @scottmcm @withoutboats, and @pnkfelix -- please have a look at this :)

@rfcbot

This comment has been minimized.

Copy link

rfcbot commented Jan 29, 2019

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

@bors

This comment has been minimized.

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 mark-i-m:multiple-matcher-bindings branch from 684d4fa to c25d6b8 Feb 7, 2019

@rfcbot

This comment has been minimized.

Copy link

rfcbot commented Feb 8, 2019

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

@mark-i-m

This comment has been minimized.

Copy link
Contributor Author

mark-i-m commented Feb 8, 2019

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

@petrochenkov

This comment has been minimized.

Copy link
Contributor

petrochenkov commented Feb 9, 2019

@bors r+

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Feb 9, 2019

📌 Commit c25d6b8 has been approved by petrochenkov

@bors

This comment has been minimized.

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

Auto merge of #57617 - mark-i-m:multiple-matcher-bindings, r=petroche…
…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

This comment has been minimized.

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 label Feb 9, 2019

@bors bors merged commit c25d6b8 into rust-lang:master Feb 9, 2019

1 check passed

homu Test successful
Details
@mark-i-m

This comment has been minimized.

Copy link
Contributor Author

mark-i-m commented Feb 11, 2019

@Centril should this be mentioned in release notes?

@Centril

This comment has been minimized.

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...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment