)]}'
{
  "commit": "bd325d298442bd9d895f33f372bb16a976b7747f",
  "tree": "f88769d30b1756d18f099ac5ae444ae6d70e4290",
  "parents": [
    "0c670ef1d91f465bdc426ac98171155d8a846a46"
  ],
  "author": {
    "name": "Shahbaz Youssefi",
    "email": "syoussefi@google.com",
    "time": "Mon Mar 28 13:01:07 2022 -0400"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Mar 28 17:01:07 2022 +0000"
  },
  "message": "spirv-diff: Basic support for OpTypeForwardPointer (#4761)\n\nCurrently, the diff tool matches types bottom up, so on every\r\ninstruction it expects to know if its operands are already matched or\r\nnot.  With cyclical references, it cannot know that.  Type matching\r\nwould need significant rework to be able to support such a use case; for\r\nexample, it may need to maintain a set of plausable matches between type\r\npointers that are forward-referenced, and potentially back track when\r\nlater the types turn out to be incompatible.\r\n\r\nIn this change, OpTypeForwardPointer is supported in the more common and\r\ntrivial case.  Firstly, forwarded type pointers are only matched if they\r\nhave they have the same storage class and point to the same type opcode:\r\n\r\n- In the presence of debug info, matching is done only if the names are\r\n  unique in both src and dst.\r\n- In the absence of debug info, matching is done only if there is only\r\n  one possible matching.\r\n\r\nFixes: #4754",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4e6fadd252063db5ccc3aefdf7a2837c37f2ba0d",
      "old_mode": 33188,
      "old_path": "source/diff/diff.cpp",
      "new_id": "4ddbbd388b0da9f4c49768f5ab2b2d9ad35fd3ca",
      "new_mode": 33188,
      "new_path": "source/diff/diff.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "af252b11f26466babf891c988e5250914366be93",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_basic_autogen.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0c6e0cbefaab4e3d2aacc5162ab180cdf22284c4",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_basic_dst.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "408ec98305eb56e32c46cdad79af60f9c2ced8e1",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_basic_src.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f2c9008eb8356c994ccdf982a4d016063a642322",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_intertwined_autogen.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bd73501006a634c96c9febe534e2a6b46751d2ef",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_intertwined_dst.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8fdaf28f2d5a49cb1a3dfe83f015583813db8cc0",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_intertwined_src.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0a59be32d4b664e3a64eadcea4d4445b1013f4ac",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_mismatching_class_autogen.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e874a0cad763fc321893d3c5c61d3977ad106803",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_mismatching_class_dst.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8a33933195796007c51e3407598908b95fcfd255",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_mismatching_class_src.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0067cdf608225b8691e229aa7ff4a6a57297b896",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_mismatching_type_autogen.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ee3d35c0fb57a022e267fce9e5ea9ab96c4c0628",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_mismatching_type_dst.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a4596a07724f1e061af46625d82c5c9d30e34868",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_mismatching_type_src.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d66c28ae2b6040e371dd5af6af50eaa9469d05d4",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_nested_autogen.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e248355682debf1c2bbd3da2926b892a3aae4b47",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_nested_dst.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "035410e07135a28cfca9998038031c1efb3f6705",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_nested_src.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "df86fef26bcdbfef62d5ae94c1f8557f097f37a3",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_onesided_debug_autogen.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7e25710e17f804a3054cfd55c73dbb95d9e5475c",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_onesided_debug_dst.spvasm"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e949b272f3f5c67942bfb3776e20889e308ab666",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/OpTypeForwardPointer_onesided_debug_src.spvasm"
    },
    {
      "type": "modify",
      "old_id": "f4724802222d2987878130583525bec218854f56",
      "old_mode": 33188,
      "old_path": "test/diff/diff_files/diff_test_files_autogen.cmake",
      "new_id": "c64eaabb7dfca4d16d4ba1963be0014f7996ca1c",
      "new_mode": 33188,
      "new_path": "test/diff/diff_files/diff_test_files_autogen.cmake"
    },
    {
      "type": "modify",
      "old_id": "1c380c9786adad8e2aaef3294fc457c7c0aad6a0",
      "old_mode": 33261,
      "old_path": "test/diff/diff_files/generate_tests.py",
      "new_id": "cc3175d3456cb43bc9fb5d96992db6f8f0193309",
      "new_mode": 33261,
      "new_path": "test/diff/diff_files/generate_tests.py"
    }
  ]
}
