{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/comments/37631721","id":37631721,"diff_hunk":"@@ -15,26 +15,193 @@ pub struct BitVector {\n \n impl BitVector {\n     pub fn new(num_bits: usize) -> BitVector {\n-        let num_words = (num_bits + 63) / 64;\n+        let num_words = u64s(num_bits);\n         BitVector { data: vec![0; num_words] }\n     }\n \n-    fn word_mask(&self, bit: usize) -> (usize, u64) {\n-        let word = bit / 64;\n-        let mask = 1 << (bit % 64);\n-        (word, mask)\n-    }\n-\n     pub fn contains(&self, bit: usize) -> bool {\n-        let (word, mask) = self.word_mask(bit);\n+        let (word, mask) = word_mask(bit);\n         (self.data[word] & mask) != 0\n     }\n \n     pub fn insert(&mut self, bit: usize) -> bool {\n-        let (word, mask) = self.word_mask(bit);\n+        let (word, mask) = word_mask(bit);\n         let data = &mut self.data[word];\n         let value = *data;\n         *data = value | mask;\n         (value | mask) != value\n     }\n+\n+    pub fn insert_all(&mut self, all: &BitVector) -> bool {\n+        assert!(self.data.len() == all.data.len());\n+        let mut changed = false;\n+        for (i, j) in self.data.iter_mut().zip(&all.data) {\n+            let value = *i;\n+            *i = value | *j;\n+            if value != *i { changed = true; }\n+        }\n+        changed\n+    }\n+\n+    pub fn grow(&mut self, num_bits: usize) {\n+        let num_words = u64s(num_bits);\n+        let extra_words = self.data.len() - num_words;\n+        self.data.extend((0..extra_words).map(|_| 0));\n+    }\n+}\n+\n+/// A \"bit matrix\" is basically a square matrix of booleans\n+/// represented as one gigantic bitvector. In other words, it is as if\n+/// you have N bitvectors, each of length N.\n+#[derive(Clone)]\n+pub struct BitMatrix {\n+    elements: usize,\n+    vector: Vec<u64>,\n+}\n+\n+impl BitMatrix {\n+    pub fn new(elements: usize) -> BitMatrix {\n+        // For every element, we need one bit for every other\n+        // element. Round up to an even number of u64s.\n+        let u64s_per_elem = u64s(elements);\n+        BitMatrix {\n+            elements: elements,\n+            vector: vec![0; elements * u64s_per_elem]\n+        }\n+    }\n+\n+    /// The range of bits for a given element.\n+    fn range(&self, element: usize) -> (usize, usize) {\n+        let u64s_per_elem = u64s(self.elements);\n+        let start = element * u64s_per_elem;\n+        (start, start + u64s_per_elem)\n+    }\n+\n+    pub fn add(&mut self, source: usize, target: usize) -> bool {\n+        let (start, _) = self.range(source);\n+        let (word, mask) = word_mask(target);\n+        let mut vector = &mut self.vector[..];\n+        let v1 = vector[start+word];\n+        let v2 = v1 | mask;\n+        vector[start+word] = v2;\n+        v1 != v2\n+    }\n+\n+    /// Do the bits from `source` contain `target`?\n+    /// Put another way, can `source` reach `target`?\n+    pub fn contains(&self, source: usize, target: usize) -> bool {\n+        let (start, _) = self.range(source);\n+        let (word, mask) = word_mask(target);\n+        (self.vector[start+word] & mask) != 0\n+    }\n+\n+    /// Returns those indices that are reachable from both source and\n+    /// target. This is an O(n) operation where `n` is the number of\n+    /// elements (somewhat independent from the actual size of the\n+    /// intersection, in particular).\n+    pub fn intersection(&self, a: usize, b: usize) -> Vec<usize> {\n+        let (a_start, a_end) = self.range(a);\n+        let (b_start, b_end) = self.range(b);\n+        let mut result = Vec::with_capacity(self.elements);\n+        for (base, (i, j)) in (a_start..a_end).zip(b_start..b_end).enumerate() {\n+            let mut v = self.vector[i] & self.vector[j];\n+            for bit in 0..64 {\n+                if v == 0 { break; }\n+                if v & 0x1 != 0 { result.push(base*64 + bit); }\n+                v >>= 1;\n+            }\n+        }\n+        result\n+    }\n+\n+    /// Add the bits from source to the bits from destination,\n+    /// return true if anything changed.\n+    ///\n+    /// This is used when computing reachability because if you have\n+    /// an edge `destination -> source`, because in that case\n+    /// `destination` can reach everything that `source` can (and\n+    /// potentially more).\n+    pub fn merge(&mut self, source: usize, destination: usize) -> bool {\n+        let (source_start, source_end) = self.range(source);\n+        let (destination_start, destination_end) = self.range(destination);\n+        let vector = &mut self.vector[..];\n+        let mut changed = false;\n+        for (source_index, destination_index) in\n+            (source_start..source_end).zip(destination_start..destination_end)\n+        {\n+            let v1 = vector[destination_index];\n+            let v2 = v1 | vector[source_index];\n+            vector[destination_index] = v2;\n+            changed = changed | (v1 != v2);\n+        }\n+        changed\n+    }\n+}\n+\n+fn u64s(elements: usize) -> usize {\n+    (elements + 63) / 64\n+}\n+\n+fn word_mask(index: usize) -> (usize, u64) {\n+    let word = index / 64;\n+    let mask = 1 << (index % 64);\n+    (word, mask)\n+}\n+\n+#[test]\n+fn union_two_vecs() {\n+    let mut vec1 = BitVector::new(65);\n+    let mut vec2 = BitVector::new(65);\n+    assert!(vec1.insert(3));\n+    assert!(!vec1.insert(3));\n+    assert!(vec2.insert(5));\n+    assert!(vec2.insert(64));\n+    assert!(vec1.insert_all(&vec2));\n+    assert!(!vec1.insert_all(&vec2));\n+    assert!(vec1.contains(3));\n+    assert!(!vec1.contains(4));\n+    assert!(vec1.contains(5));\n+    assert!(!vec1.contains(63));\n+    assert!(vec1.contains(64));\n+}\n+\n+#[test]\n+fn grow() {\n+    let mut vec1 = BitVector::new(65);\n+    assert!(vec1.insert(3));\n+    assert!(!vec1.insert(3));\n+    assert!(vec1.insert(5));\n+    assert!(vec1.insert(64));\n+    vec1.grow(128);\n+    assert!(vec1.contains(3));\n+    assert!(vec1.contains(5));\n+    assert!(vec1.contains(64));\n+    assert!(!vec1.contains(126));\n+}\n+\n+#[test]\n+fn matrix_intersection() {\n+    let mut vec1 = BitMatrix::new(200);\n+\n+    vec1.add(2, 3);\n+    vec1.add(2, 6);\n+    vec1.add(2, 10);\n+    vec1.add(2, 64);\n+    vec1.add(2, 65);\n+    vec1.add(2, 130);\n+    vec1.add(2, 160);\n+\n+    vec1.add(65, 2);\n+    vec1.add(65, 8);\n+    vec1.add(65, 10); // X\n+    vec1.add(65, 64); // X\n+    vec1.add(65, 68);\n+    vec1.add(65, 133);\n+    vec1.add(65, 160); // X\n+\n+    let intersection = vec1.intersection(2, 64);\n+    assert!(intersection.is_empty());\n+\n+    let intersection = vec1.intersection(2, 65);\n+    assert_eq!(intersection, vec![10, 64, 160]);","path":"src/librustc_data_structures/bitvec.rs","position":201,"original_position":201,"commit_id":"d5b679b23de78728fc99ab96cada036a0f91c7a2","original_commit_id":"d5b679b23de78728fc99ab96cada036a0f91c7a2","user":{"login":"pnkfelix","id":173127,"avatar_url":"https://avatars.githubusercontent.com/u/173127?v=3","gravatar_id":"","url":"https://api.github.com/users/pnkfelix","html_url":"https://github.com/pnkfelix","followers_url":"https://api.github.com/users/pnkfelix/followers","following_url":"https://api.github.com/users/pnkfelix/following{/other_user}","gists_url":"https://api.github.com/users/pnkfelix/gists{/gist_id}","starred_url":"https://api.github.com/users/pnkfelix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pnkfelix/subscriptions","organizations_url":"https://api.github.com/users/pnkfelix/orgs","repos_url":"https://api.github.com/users/pnkfelix/repos","events_url":"https://api.github.com/users/pnkfelix/events{/privacy}","received_events_url":"https://api.github.com/users/pnkfelix/received_events","type":"User","site_admin":false},"body":"nit: the slice `[10, 64, 160]` would suffice here rather than `vec![10, 64, 160]`, right?","created_at":"2015-08-21T13:06:30Z","updated_at":"2015-08-21T13:06:30Z","html_url":"https://github.com/rust-lang/rust/pull/27892#discussion_r37631721","pull_request_url":"https://api.github.com/repos/rust-lang/rust/pulls/27892","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments/37631721"},"html":{"href":"https://github.com/rust-lang/rust/pull/27892#discussion_r37631721"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/27892"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/27892","id":42753309,"html_url":"https://github.com/rust-lang/rust/pull/27892","diff_url":"https://github.com/rust-lang/rust/pull/27892.diff","patch_url":"https://github.com/rust-lang/rust/pull/27892.patch","issue_url":"https://api.github.com/repos/rust-lang/rust/issues/27892","number":27892,"state":"open","locked":false,"title":"Be more careful when selecting LUB of free regions","user":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"body":"Issue #27583 was caused by the fact that `LUB('a,'b)` yielded `'static`, even if there existed a region `'tcx:'a+'b`. This PR replaces the old very hacky code for computing how free regions relate to one another with something rather more robust. This solves the issue for #27583, though I think that similar bizarro bugs can no doubt arise in other ways -- the root of the problem is that the region-inference code was written in an era when a LUB always existed, but that hasn't held for some time. To *truly* solve this problem, it needs to be generalized to cope with that reality. But let's leave that battle for another day.\r\n\r\nr? @aturon ","created_at":"2015-08-18T21:49:10Z","updated_at":"2015-08-21T13:06:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"168d3bda6baef951e69912ce423699d38520609c","assignee":{"login":"pnkfelix","id":173127,"avatar_url":"https://avatars.githubusercontent.com/u/173127?v=3","gravatar_id":"","url":"https://api.github.com/users/pnkfelix","html_url":"https://github.com/pnkfelix","followers_url":"https://api.github.com/users/pnkfelix/followers","following_url":"https://api.github.com/users/pnkfelix/following{/other_user}","gists_url":"https://api.github.com/users/pnkfelix/gists{/gist_id}","starred_url":"https://api.github.com/users/pnkfelix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pnkfelix/subscriptions","organizations_url":"https://api.github.com/users/pnkfelix/orgs","repos_url":"https://api.github.com/users/pnkfelix/repos","events_url":"https://api.github.com/users/pnkfelix/events{/privacy}","received_events_url":"https://api.github.com/users/pnkfelix/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rust/pulls/27892/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rust/pulls/27892/comments","review_comment_url":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/27892/comments","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/d5b679b23de78728fc99ab96cada036a0f91c7a2","head":{"label":"nikomatsakis:issue-27583","ref":"issue-27583","sha":"d5b679b23de78728fc99ab96cada036a0f91c7a2","user":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"repo":{"id":1672543,"name":"rust","full_name":"nikomatsakis/rust","owner":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nikomatsakis/rust","description":"A work-in-progress programming language; not yet suitable for users","fork":true,"url":"https://api.github.com/repos/nikomatsakis/rust","forks_url":"https://api.github.com/repos/nikomatsakis/rust/forks","keys_url":"https://api.github.com/repos/nikomatsakis/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nikomatsakis/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nikomatsakis/rust/teams","hooks_url":"https://api.github.com/repos/nikomatsakis/rust/hooks","issue_events_url":"https://api.github.com/repos/nikomatsakis/rust/issues/events{/number}","events_url":"https://api.github.com/repos/nikomatsakis/rust/events","assignees_url":"https://api.github.com/repos/nikomatsakis/rust/assignees{/user}","branches_url":"https://api.github.com/repos/nikomatsakis/rust/branches{/branch}","tags_url":"https://api.github.com/repos/nikomatsakis/rust/tags","blobs_url":"https://api.github.com/repos/nikomatsakis/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nikomatsakis/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nikomatsakis/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/nikomatsakis/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nikomatsakis/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/nikomatsakis/rust/languages","stargazers_url":"https://api.github.com/repos/nikomatsakis/rust/stargazers","contributors_url":"https://api.github.com/repos/nikomatsakis/rust/contributors","subscribers_url":"https://api.github.com/repos/nikomatsakis/rust/subscribers","subscription_url":"https://api.github.com/repos/nikomatsakis/rust/subscription","commits_url":"https://api.github.com/repos/nikomatsakis/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/nikomatsakis/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/nikomatsakis/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/nikomatsakis/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/nikomatsakis/rust/contents/{+path}","compare_url":"https://api.github.com/repos/nikomatsakis/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nikomatsakis/rust/merges","archive_url":"https://api.github.com/repos/nikomatsakis/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nikomatsakis/rust/downloads","issues_url":"https://api.github.com/repos/nikomatsakis/rust/issues{/number}","pulls_url":"https://api.github.com/repos/nikomatsakis/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/nikomatsakis/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/nikomatsakis/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nikomatsakis/rust/labels{/name}","releases_url":"https://api.github.com/repos/nikomatsakis/rust/releases{/id}","created_at":"2011-04-27T20:20:29Z","updated_at":"2014-07-10T00:11:47Z","pushed_at":"2015-08-19T20:18:13Z","git_url":"git://github.com/nikomatsakis/rust.git","ssh_url":"git@github.com:nikomatsakis/rust.git","clone_url":"https://github.com/nikomatsakis/rust.git","svn_url":"https://github.com/nikomatsakis/rust","homepage":"","size":327905,"stargazers_count":4,"watchers_count":4,"language":"Rust","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":4,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"1d72d314480d3437345129ddf8b299c36e048f18","user":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":724712,"name":"rust","full_name":"rust-lang/rust","owner":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang/rust","description":"A safe, concurrent, practical language.","fork":false,"url":"https://api.github.com/repos/rust-lang/rust","forks_url":"https://api.github.com/repos/rust-lang/rust/forks","keys_url":"https://api.github.com/repos/rust-lang/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang/rust/teams","hooks_url":"https://api.github.com/repos/rust-lang/rust/hooks","issue_events_url":"https://api.github.com/repos/rust-lang/rust/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang/rust/events","assignees_url":"https://api.github.com/repos/rust-lang/rust/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang/rust/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang/rust/tags","blobs_url":"https://api.github.com/repos/rust-lang/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang/rust/languages","stargazers_url":"https://api.github.com/repos/rust-lang/rust/stargazers","contributors_url":"https://api.github.com/repos/rust-lang/rust/contributors","subscribers_url":"https://api.github.com/repos/rust-lang/rust/subscribers","subscription_url":"https://api.github.com/repos/rust-lang/rust/subscription","commits_url":"https://api.github.com/repos/rust-lang/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang/rust/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang/rust/merges","archive_url":"https://api.github.com/repos/rust-lang/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang/rust/downloads","issues_url":"https://api.github.com/repos/rust-lang/rust/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang/rust/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang/rust/releases{/id}","created_at":"2010-06-16T20:39:03Z","updated_at":"2015-08-21T13:05:59Z","pushed_at":"2015-08-21T11:18:22Z","git_url":"git://github.com/rust-lang/rust.git","ssh_url":"git@github.com:rust-lang/rust.git","clone_url":"https://github.com/rust-lang/rust.git","svn_url":"https://github.com/rust-lang/rust","homepage":"http://www.rust-lang.org","size":673088,"stargazers_count":13076,"watchers_count":13076,"language":"Rust","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2537,"mirror_url":null,"open_issues_count":2234,"forks":2537,"open_issues":2234,"watchers":13076,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/27892"},"html":{"href":"https://github.com/rust-lang/rust/pull/27892"},"issue":{"href":"https://api.github.com/repos/rust-lang/rust/issues/27892"},"comments":{"href":"https://api.github.com/repos/rust-lang/rust/issues/27892/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/27892/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/27892/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rust/statuses/d5b679b23de78728fc99ab96cada036a0f91c7a2"}}}}