)]}'
{
  "commit": "f41f0332bfb9dfbf09253bbf10f3b46e820a4f8e",
  "tree": "c8ec64187259264f6525baf9b858f8369e1978c7",
  "parents": [
    "6016a1445277f75270d263b384a34ceaf654367d"
  ],
  "author": {
    "name": "Nicolas Capens",
    "email": "capn@google.com",
    "time": "Tue May 30 15:25:50 2017 -0400"
  },
  "committer": {
    "name": "Nicolas Capens",
    "email": "capn@google.com",
    "time": "Thu Jun 08 20:16:50 2017 +0000"
  },
  "message": "Avoid dummy key methods by using pure abstract classes.\n\nSanitizer tools desire having the vtables of any class with non-pure\nvirtual methods, even when none of them are called in the current\nlinkage unit. Work around this by making the affected classes pure\nabstract and implementing them in a derived class in the respective\nlibrary responsible for creating them.\n\nBug swiftshader:31\n\nChange-Id: I40046f605731eb1cc3825c1ede2d8d9b5826d0f5\nReviewed-on: https://swiftshader-review.googlesource.com/9914\nTested-by: Nicolas Capens \u003ccapn@google.com\u003e\nReviewed-by: Alexis Hétu \u003csugoi@google.com\u003e\nReviewed-by: Nicolas Capens \u003ccapn@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2b0a2bbb3ed5dcfc061e2210e8f64d8920be0934",
      "old_mode": 33188,
      "old_path": "CMakeLists.txt",
      "new_id": "54c658de1f94ac2d111c0b2cf38ea95d30bc8bca",
      "new_mode": 33188,
      "new_path": "CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "02f7f0ff36e2ce0affbd0374fb1e5ab73ecaeafa",
      "old_mode": 33188,
      "old_path": "src/OpenGL/common/Image.cpp",
      "new_id": "cfed057d25d6d07aa3914a980701e887b916d6ed",
      "new_mode": 33188,
      "new_path": "src/OpenGL/common/Image.cpp"
    },
    {
      "type": "modify",
      "old_id": "6cf0a5977d9383c44cc9b8b793913a16ea4ef8a5",
      "old_mode": 33188,
      "old_path": "src/OpenGL/common/Image.hpp",
      "new_id": "c783b21625b0a5f5af8cacefef1cc5304c7ba0b4",
      "new_mode": 33188,
      "new_path": "src/OpenGL/common/Image.hpp"
    },
    {
      "type": "modify",
      "old_id": "62860703b9ba6ec9544399c88f6cf8d68d9f1877",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libEGL/BUILD.gn",
      "new_id": "c9ab8ac73dc0b0d32ccec76be4d6145fe6cfea51",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libEGL/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "b5097acd112ef2e56c2e798eab8b07ebb6724e29",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libEGL/Display.cpp",
      "new_id": "6a5dffec3350d03b78d71b3e656af72a9f3cdab2",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libEGL/Display.cpp"
    },
    {
      "type": "modify",
      "old_id": "3fba9e77baf3c60b94010904dec71c52bfc4aa3e",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libEGL/Display.h",
      "new_id": "ba6b92c6645846b79f59b916484d68efab9e82d2",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libEGL/Display.h"
    },
    {
      "type": "modify",
      "old_id": "1939431eadf9edff8b9c92241fa76df9b02048d0",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libEGL/EGLSurface.cpp",
      "new_id": "f47cacb5c5e59da62df9428a1524b711ca00f7e7",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libEGL/EGLSurface.cpp"
    },
    {
      "type": "modify",
      "old_id": "3ebc2e4b0d76d6b3081b6a5d05bf2c7b4ff79161",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libEGL/EGLSurface.h",
      "new_id": "c5026e2ddc6de23664f656704dc5b544b098758c",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libEGL/EGLSurface.h"
    },
    {
      "type": "delete",
      "old_id": "370c8657396889a733db92619ed3711932c72b1c",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libEGL/TypeInfo.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "0f9d3e57c3736e80912cea89bece752e8a013edf",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLES_CM/Device.cpp",
      "new_id": "cb95d0cc10e70aad225984f55162593a9a68d219",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libGLES_CM/Device.cpp"
    },
    {
      "type": "modify",
      "old_id": "a5c86a78300e68f52b4c71761b47de3ad84f8864",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLES_CM/Texture.cpp",
      "new_id": "d54885ca9be6338f8afa123db781f12ef41a2ef8",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libGLES_CM/Texture.cpp"
    },
    {
      "type": "modify",
      "old_id": "59f4f6d86997df764a1cc424775733f3d3e73b97",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLESv2/BUILD.gn",
      "new_id": "e7c58f6d72e8234be81472513a4c800d061647eb",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libGLESv2/BUILD.gn"
    },
    {
      "type": "modify",
      "old_id": "f617835cd39b3756fdd0cefd95aa6b97d8b10cfe",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLESv2/Context.cpp",
      "new_id": "445973b905f7983289991cae9980da94d592c734",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libGLESv2/Context.cpp"
    },
    {
      "type": "modify",
      "old_id": "da1583f9b6e05e14b64677ec9c963758479284b3",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLESv2/Device.cpp",
      "new_id": "8b8f016defc231e6b28e99ac419426413756bb63",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libGLESv2/Device.cpp"
    },
    {
      "type": "modify",
      "old_id": "48bd36350480043e14598c0bc60b68239ac7f92d",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLESv2/Texture.cpp",
      "new_id": "40c8ed4fd27042c407c1e2eb8bb41a90b814a529",
      "new_mode": 33188,
      "new_path": "src/OpenGL/libGLESv2/Texture.cpp"
    },
    {
      "type": "delete",
      "old_id": "8fb91d34964b670851c8c7c49b5ca3ce628ce322",
      "old_mode": 33188,
      "old_path": "src/OpenGL/libGLESv2/TypeInfo.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "4eea8523072b86e282b31c980ecbe00ae31c2eaf",
      "old_mode": 33188,
      "old_path": "src/Renderer/Blitter.cpp",
      "new_id": "e10f783f1afde4063eded97fb7b0a3857c145d54",
      "new_mode": 33188,
      "new_path": "src/Renderer/Blitter.cpp"
    },
    {
      "type": "modify",
      "old_id": "c7ca71aefee568a1b6cc835e882277fbc716195f",
      "old_mode": 33188,
      "old_path": "src/Renderer/Surface.cpp",
      "new_id": "f29aaaecd111bdef7abec41c4488cd5020e5ffc6",
      "new_mode": 33188,
      "new_path": "src/Renderer/Surface.cpp"
    },
    {
      "type": "modify",
      "old_id": "ae37df532aebc1456afbcc21698cd956c944420e",
      "old_mode": 33188,
      "old_path": "src/Renderer/Surface.hpp",
      "new_id": "16ff78c14cb31a8983521542afb80638fe17e443",
      "new_mode": 33188,
      "new_path": "src/Renderer/Surface.hpp"
    }
  ]
}
