{"action":"created","issue":{"url":"https://api.github.com/repos/rust-lang/rust/issues/34140","repository_url":"https://api.github.com/repos/rust-lang/rust","labels_url":"https://api.github.com/repos/rust-lang/rust/issues/34140/labels{/name}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/34140/comments","events_url":"https://api.github.com/repos/rust-lang/rust/issues/34140/events","html_url":"https://github.com/rust-lang/rust/pull/34140","id":158943137,"number":34140,"title":"[WIP] Check future proofing of macros with multiple arms using FIRST sets.","user":{"login":"LeoTestard","id":907750,"avatar_url":"https://avatars.githubusercontent.com/u/907750?v=3","gravatar_id":"","url":"https://api.github.com/users/LeoTestard","html_url":"https://github.com/LeoTestard","followers_url":"https://api.github.com/users/LeoTestard/followers","following_url":"https://api.github.com/users/LeoTestard/following{/other_user}","gists_url":"https://api.github.com/users/LeoTestard/gists{/gist_id}","starred_url":"https://api.github.com/users/LeoTestard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LeoTestard/subscriptions","organizations_url":"https://api.github.com/users/LeoTestard/orgs","repos_url":"https://api.github.com/users/LeoTestard/repos","events_url":"https://api.github.com/users/LeoTestard/events{/privacy}","received_events_url":"https://api.github.com/users/LeoTestard/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"sfackler","id":1455697,"avatar_url":"https://avatars.githubusercontent.com/u/1455697?v=3","gravatar_id":"","url":"https://api.github.com/users/sfackler","html_url":"https://github.com/sfackler","followers_url":"https://api.github.com/users/sfackler/followers","following_url":"https://api.github.com/users/sfackler/following{/other_user}","gists_url":"https://api.github.com/users/sfackler/gists{/gist_id}","starred_url":"https://api.github.com/users/sfackler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sfackler/subscriptions","organizations_url":"https://api.github.com/users/sfackler/orgs","repos_url":"https://api.github.com/users/sfackler/repos","events_url":"https://api.github.com/users/sfackler/events{/privacy}","received_events_url":"https://api.github.com/users/sfackler/received_events","type":"User","site_admin":false},"milestone":null,"comments":4,"created_at":"2016-06-07T14:50:47Z","updated_at":"2016-06-09T12:11:35Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/34140","html_url":"https://github.com/rust-lang/rust/pull/34140","diff_url":"https://github.com/rust-lang/rust/pull/34140.diff","patch_url":"https://github.com/rust-lang/rust/pull/34140.patch"},"body":"Far from being finished. The `first_sets_disjoints` is still the biggest missing piece.\r\ncc @pnkfelix @nikomatsakis "},"comment":{"url":"https://api.github.com/repos/rust-lang/rust/issues/comments/224876598","html_url":"https://github.com/rust-lang/rust/pull/34140#issuecomment-224876598","issue_url":"https://api.github.com/repos/rust-lang/rust/issues/34140","id":224876598,"user":{"login":"LeoTestard","id":907750,"avatar_url":"https://avatars.githubusercontent.com/u/907750?v=3","gravatar_id":"","url":"https://api.github.com/users/LeoTestard","html_url":"https://github.com/LeoTestard","followers_url":"https://api.github.com/users/LeoTestard/followers","following_url":"https://api.github.com/users/LeoTestard/following{/other_user}","gists_url":"https://api.github.com/users/LeoTestard/gists{/gist_id}","starred_url":"https://api.github.com/users/LeoTestard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/LeoTestard/subscriptions","organizations_url":"https://api.github.com/users/LeoTestard/orgs","repos_url":"https://api.github.com/users/LeoTestard/repos","events_url":"https://api.github.com/users/LeoTestard/events{/privacy}","received_events_url":"https://api.github.com/users/LeoTestard/received_events","type":"User","site_admin":false},"created_at":"2016-06-09T12:11:35Z","updated_at":"2016-06-09T12:11:35Z","body":"Ok so here are the first results (including the Rust codebase and the unit tests, not crater yet):\r\n\r\nBroken macros in the Rust codebase:\r\n\r\n* libcollections::vec (macros.rs)\r\n* libsyntax::declare_features (feature_gate.rs)\r\n* libsyntax::maybe_whole (parser.rs)\r\n* librustc::enum_from_i32 (macros.rs)\r\n* librustc::hir_vec (hir)\r\n* librustc_metadata::enum_from_i32 (macros.rs) (dup of librustc::enum_from_i32?)\r\n* librustc_mir::unpack (build)\r\n* librustc_trans::ifn (context.rs)\r\n\r\nFailed tests:\r\n\r\n* compile-fail/issue-16098.rs\r\n* compile-fail/macro-follow.rs\r\n* compile-fail/macro-followed-by-seq-bad.rs\r\n* compile-fail/macro-input-future-proofing.rs\r\n\r\nFor now I identified three patterns:\r\n\r\n* Legit failures\r\n* Failures due to the fact that the analysis currently does not descend into sequence repetitions, like `vec!`, but on macros that otherwise look legal\r\n* T versus NT failures, where T has the priority (being in the first arm), but rejected because NT could match several token trees and we don't know where we should continue the analysis. However, if the rest of the first matcher after T doesn't contain any NT matcher, then I think it's not necessary to continue the analysis and we can just accept the macro (or reject it, based on the previous context, but it should accept the cases we have here).\r\n\r\ncc @pnkfelix "}}
{"actor":{"display_login":"LeoTestard"}}