{"action":"created","comment":{"url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/comments/176820565","pull_request_review_id":106550190,"id":176820565,"diff_hunk":"@@ -1786,11 +1786,72 @@ bool idUsage::isValid<SpvOpVectorShuffle>(const spv_instruction_t* inst,\n   return true;\n }\n \n-#if 0\n template <>\n-bool idUsage::isValid<OpPhi>(const spv_instruction_t *inst,\n-                             const spv_opcode_desc opcodeEntry) {}\n-#endif\n+bool idUsage::isValid<SpvOpPhi>(const spv_instruction_t* inst,\n+                                const spv_opcode_desc opcodeEntry) {\n+  (void)opcodeEntry;\n+  auto thisInst = module_.FindDef(inst->words[2]);\n+  SpvOp typeOp = module_.GetIdOpcode(thisInst->type_id());\n+  if (!spvOpcodeGeneratesType(typeOp)) {\n+    DIAG(0) << \"OpPhi's type <id> \" << module_.getIdName(thisInst->type_id())\n+            << \" is not a type instruction.\";\n+    return false;\n+  }\n+\n+  auto block = thisInst->block();\n+  size_t numInOps = inst->words.size() - 3;\n+  if (numInOps % 2 != 0) {\n+    DIAG(0) << \"OpPhi does not have an equal number of incoming values and \"\n+               \"basic blocks.\";\n+    return false;\n+  }\n+\n+  // Create an uniqued vector of predecessor ids for comparison against\n+  // incoming values. OpBranchConditional %cond %label %label produces two\n+  // predecessors in the CFG.\n+  std::vector<uint32_t> predIds;\n+  std::transform(block->predecessors()->begin(), block->predecessors()->end(),\n+                 std::back_inserter(predIds),\n+                 [](const libspirv::BasicBlock* b) { return b->id(); });\n+  std::sort(predIds.begin(), predIds.end());\n+  predIds.erase(std::unique(predIds.begin(), predIds.end()), predIds.end());\n+\n+  size_t numEdges = numInOps / 2;\n+  if (numEdges != predIds.size()) {\n+    DIAG(0) << \"OpPhi's number of incoming blocks (\" << numEdges\n+            << \") does not match block's predecessor count (\"\n+            << block->predecessors()->size() << \").\";\n+    return false;\n+  }\n+\n+  for (size_t i = 3; i < inst->words.size(); ++i) {\n+    auto incId = inst->words[i];\n+    auto incInst = module_.FindDef(incId);\n+    if (i % 2 == 1) {\n+      // Incoming value type must match the phi result type.\n+      auto incType = module_.FindDef(incInst->type_id());\n+      auto resType = inst->words[1];\n+      if (resType != incType->id()) {\n+        DIAG(i) << \"OpPhi's result type <id> \" << module_.getIdName(resType)\n+                << \" does not match incoming value <id> \"\n+                << module_.getIdName(incId) << \" type <id> \"\n+                << module_.getIdName(incType->id()) << \".\";\n+        return false;\n+      }\n+    } else {\n+      // Incoming basic block must be an immediate predecessor of the phi's","path":"source/validate_id.cpp","position":61,"original_position":61,"commit_id":"048eb3ba84373ff0dff2c5144c4692675b3264d2","original_commit_id":"048eb3ba84373ff0dff2c5144c4692675b3264d2","user":{"login":"atgoo","id":12736284,"avatar_url":"https://avatars1.githubusercontent.com/u/12736284?v=4","gravatar_id":"","url":"https://api.github.com/users/atgoo","html_url":"https://github.com/atgoo","followers_url":"https://api.github.com/users/atgoo/followers","following_url":"https://api.github.com/users/atgoo/following{/other_user}","gists_url":"https://api.github.com/users/atgoo/gists{/gist_id}","starred_url":"https://api.github.com/users/atgoo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atgoo/subscriptions","organizations_url":"https://api.github.com/users/atgoo/orgs","repos_url":"https://api.github.com/users/atgoo/repos","events_url":"https://api.github.com/users/atgoo/events{/privacy}","received_events_url":"https://api.github.com/users/atgoo/received_events","type":"User","site_admin":false},"body":"Nit: consider also a more targeted error message if\r\nif (SpvOpLabel != module_.GetIdOpcode(incId))","created_at":"2018-03-23T18:07:23Z","updated_at":"2018-03-23T18:34:30Z","html_url":"https://github.com/KhronosGroup/SPIRV-Tools/pull/1420#discussion_r176820565","pull_request_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/comments/176820565"},"html":{"href":"https://github.com/KhronosGroup/SPIRV-Tools/pull/1420#discussion_r176820565"},"pull_request":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420"}}},"pull_request":{"url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420","id":177082498,"html_url":"https://github.com/KhronosGroup/SPIRV-Tools/pull/1420","diff_url":"https://github.com/KhronosGroup/SPIRV-Tools/pull/1420.diff","patch_url":"https://github.com/KhronosGroup/SPIRV-Tools/pull/1420.patch","issue_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues/1420","number":1420,"state":"open","locked":false,"title":"Adding OpPhi validation rules.","user":{"login":"alan-baker","id":33432579,"avatar_url":"https://avatars1.githubusercontent.com/u/33432579?v=4","gravatar_id":"","url":"https://api.github.com/users/alan-baker","html_url":"https://github.com/alan-baker","followers_url":"https://api.github.com/users/alan-baker/followers","following_url":"https://api.github.com/users/alan-baker/following{/other_user}","gists_url":"https://api.github.com/users/alan-baker/gists{/gist_id}","starred_url":"https://api.github.com/users/alan-baker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alan-baker/subscriptions","organizations_url":"https://api.github.com/users/alan-baker/orgs","repos_url":"https://api.github.com/users/alan-baker/repos","events_url":"https://api.github.com/users/alan-baker/events{/privacy}","received_events_url":"https://api.github.com/users/alan-baker/received_events","type":"User","site_admin":false},"body":"Checks:\r\n* phi type is a type instruction\r\n* incoming value types match result type\r\n* number of incoming blocks matches CFG predecessors\r\n* matched pairs of values and blocks\r\n* incoming blocks are CFG predecessors\r\n\r\nChanges:\r\n* Added tests\r\n* Fixes SSA check for unreachable phi parents\r\n* Fixes invalid cfg cleanup test\r\n\r\nI tried to match the style of the file, including diagnostic messages.","created_at":"2018-03-23T14:16:24Z","updated_at":"2018-03-23T18:34:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"134dcc376494d60e4d9e5541523dbc9d7b15d9e5","assignee":{"login":"alan-baker","id":33432579,"avatar_url":"https://avatars1.githubusercontent.com/u/33432579?v=4","gravatar_id":"","url":"https://api.github.com/users/alan-baker","html_url":"https://github.com/alan-baker","followers_url":"https://api.github.com/users/alan-baker/followers","following_url":"https://api.github.com/users/alan-baker/following{/other_user}","gists_url":"https://api.github.com/users/alan-baker/gists{/gist_id}","starred_url":"https://api.github.com/users/alan-baker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alan-baker/subscriptions","organizations_url":"https://api.github.com/users/alan-baker/orgs","repos_url":"https://api.github.com/users/alan-baker/repos","events_url":"https://api.github.com/users/alan-baker/events{/privacy}","received_events_url":"https://api.github.com/users/alan-baker/received_events","type":"User","site_admin":false},"assignees":[{"login":"alan-baker","id":33432579,"avatar_url":"https://avatars1.githubusercontent.com/u/33432579?v=4","gravatar_id":"","url":"https://api.github.com/users/alan-baker","html_url":"https://github.com/alan-baker","followers_url":"https://api.github.com/users/alan-baker/followers","following_url":"https://api.github.com/users/alan-baker/following{/other_user}","gists_url":"https://api.github.com/users/alan-baker/gists{/gist_id}","starred_url":"https://api.github.com/users/alan-baker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alan-baker/subscriptions","organizations_url":"https://api.github.com/users/alan-baker/orgs","repos_url":"https://api.github.com/users/alan-baker/repos","events_url":"https://api.github.com/users/alan-baker/events{/privacy}","received_events_url":"https://api.github.com/users/alan-baker/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"dneto0","id":13054574,"avatar_url":"https://avatars0.githubusercontent.com/u/13054574?v=4","gravatar_id":"","url":"https://api.github.com/users/dneto0","html_url":"https://github.com/dneto0","followers_url":"https://api.github.com/users/dneto0/followers","following_url":"https://api.github.com/users/dneto0/following{/other_user}","gists_url":"https://api.github.com/users/dneto0/gists{/gist_id}","starred_url":"https://api.github.com/users/dneto0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dneto0/subscriptions","organizations_url":"https://api.github.com/users/dneto0/orgs","repos_url":"https://api.github.com/users/dneto0/repos","events_url":"https://api.github.com/users/dneto0/events{/privacy}","received_events_url":"https://api.github.com/users/dneto0/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420/commits","review_comments_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420/comments","review_comment_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues/1420/comments","statuses_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/statuses/048eb3ba84373ff0dff2c5144c4692675b3264d2","head":{"label":"alan-baker:validate-phi","ref":"validate-phi","sha":"048eb3ba84373ff0dff2c5144c4692675b3264d2","user":{"login":"alan-baker","id":33432579,"avatar_url":"https://avatars1.githubusercontent.com/u/33432579?v=4","gravatar_id":"","url":"https://api.github.com/users/alan-baker","html_url":"https://github.com/alan-baker","followers_url":"https://api.github.com/users/alan-baker/followers","following_url":"https://api.github.com/users/alan-baker/following{/other_user}","gists_url":"https://api.github.com/users/alan-baker/gists{/gist_id}","starred_url":"https://api.github.com/users/alan-baker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alan-baker/subscriptions","organizations_url":"https://api.github.com/users/alan-baker/orgs","repos_url":"https://api.github.com/users/alan-baker/repos","events_url":"https://api.github.com/users/alan-baker/events{/privacy}","received_events_url":"https://api.github.com/users/alan-baker/received_events","type":"User","site_admin":false},"repo":{"id":109752737,"name":"SPIRV-Tools","full_name":"alan-baker/SPIRV-Tools","owner":{"login":"alan-baker","id":33432579,"avatar_url":"https://avatars1.githubusercontent.com/u/33432579?v=4","gravatar_id":"","url":"https://api.github.com/users/alan-baker","html_url":"https://github.com/alan-baker","followers_url":"https://api.github.com/users/alan-baker/followers","following_url":"https://api.github.com/users/alan-baker/following{/other_user}","gists_url":"https://api.github.com/users/alan-baker/gists{/gist_id}","starred_url":"https://api.github.com/users/alan-baker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alan-baker/subscriptions","organizations_url":"https://api.github.com/users/alan-baker/orgs","repos_url":"https://api.github.com/users/alan-baker/repos","events_url":"https://api.github.com/users/alan-baker/events{/privacy}","received_events_url":"https://api.github.com/users/alan-baker/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/alan-baker/SPIRV-Tools","description":null,"fork":true,"url":"https://api.github.com/repos/alan-baker/SPIRV-Tools","forks_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/forks","keys_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/teams","hooks_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/hooks","issue_events_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/issues/events{/number}","events_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/events","assignees_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/assignees{/user}","branches_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/branches{/branch}","tags_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/tags","blobs_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/statuses/{sha}","languages_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/languages","stargazers_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/stargazers","contributors_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/contributors","subscribers_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/subscribers","subscription_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/subscription","commits_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/contents/{+path}","compare_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/merges","archive_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/downloads","issues_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/issues{/number}","pulls_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/pulls{/number}","milestones_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/milestones{/number}","notifications_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/labels{/name}","releases_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/releases{/id}","deployments_url":"https://api.github.com/repos/alan-baker/SPIRV-Tools/deployments","created_at":"2017-11-06T21:36:25Z","updated_at":"2017-11-06T21:36:29Z","pushed_at":"2018-03-23T18:20:59Z","git_url":"git://github.com/alan-baker/SPIRV-Tools.git","ssh_url":"git@github.com:alan-baker/SPIRV-Tools.git","clone_url":"https://github.com/alan-baker/SPIRV-Tools.git","svn_url":"https://github.com/alan-baker/SPIRV-Tools","homepage":null,"size":6999,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"KhronosGroup:master","ref":"master","sha":"045cc8f75b5679fa148a77801a5a9a59e3f2bc0a","user":{"login":"KhronosGroup","id":1608701,"avatar_url":"https://avatars3.githubusercontent.com/u/1608701?v=4","gravatar_id":"","url":"https://api.github.com/users/KhronosGroup","html_url":"https://github.com/KhronosGroup","followers_url":"https://api.github.com/users/KhronosGroup/followers","following_url":"https://api.github.com/users/KhronosGroup/following{/other_user}","gists_url":"https://api.github.com/users/KhronosGroup/gists{/gist_id}","starred_url":"https://api.github.com/users/KhronosGroup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KhronosGroup/subscriptions","organizations_url":"https://api.github.com/users/KhronosGroup/orgs","repos_url":"https://api.github.com/users/KhronosGroup/repos","events_url":"https://api.github.com/users/KhronosGroup/events{/privacy}","received_events_url":"https://api.github.com/users/KhronosGroup/received_events","type":"Organization","site_admin":false},"repo":{"id":45981801,"name":"SPIRV-Tools","full_name":"KhronosGroup/SPIRV-Tools","owner":{"login":"KhronosGroup","id":1608701,"avatar_url":"https://avatars3.githubusercontent.com/u/1608701?v=4","gravatar_id":"","url":"https://api.github.com/users/KhronosGroup","html_url":"https://github.com/KhronosGroup","followers_url":"https://api.github.com/users/KhronosGroup/followers","following_url":"https://api.github.com/users/KhronosGroup/following{/other_user}","gists_url":"https://api.github.com/users/KhronosGroup/gists{/gist_id}","starred_url":"https://api.github.com/users/KhronosGroup/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/KhronosGroup/subscriptions","organizations_url":"https://api.github.com/users/KhronosGroup/orgs","repos_url":"https://api.github.com/users/KhronosGroup/repos","events_url":"https://api.github.com/users/KhronosGroup/events{/privacy}","received_events_url":"https://api.github.com/users/KhronosGroup/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/KhronosGroup/SPIRV-Tools","description":null,"fork":false,"url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools","forks_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/forks","keys_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/teams","hooks_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/hooks","issue_events_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues/events{/number}","events_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/events","assignees_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/assignees{/user}","branches_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/branches{/branch}","tags_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/tags","blobs_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/statuses/{sha}","languages_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/languages","stargazers_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/stargazers","contributors_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/contributors","subscribers_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/subscribers","subscription_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/subscription","commits_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/contents/{+path}","compare_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/merges","archive_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/downloads","issues_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues{/number}","pulls_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls{/number}","milestones_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/milestones{/number}","notifications_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/labels{/name}","releases_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/releases{/id}","deployments_url":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/deployments","created_at":"2015-11-11T12:56:25Z","updated_at":"2018-03-23T18:04:57Z","pushed_at":"2018-03-23T18:23:16Z","git_url":"git://github.com/KhronosGroup/SPIRV-Tools.git","ssh_url":"git@github.com:KhronosGroup/SPIRV-Tools.git","clone_url":"https://github.com/KhronosGroup/SPIRV-Tools.git","svn_url":"https://github.com/KhronosGroup/SPIRV-Tools","homepage":null,"size":6981,"stargazers_count":271,"watchers_count":271,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":106,"mirror_url":null,"archived":false,"open_issues_count":174,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":106,"open_issues":174,"watchers":271,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420"},"html":{"href":"https://github.com/KhronosGroup/SPIRV-Tools/pull/1420"},"issue":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues/1420"},"comments":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/issues/1420/comments"},"review_comments":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420/comments"},"review_comment":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/pulls/1420/commits"},"statuses":{"href":"https://api.github.com/repos/KhronosGroup/SPIRV-Tools/statuses/048eb3ba84373ff0dff2c5144c4692675b3264d2"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"atgoo"}}