)]}'
{
  "log": [
    {
      "commit": "c2bc26513ea7c5e2dd9f3b102fb23fd207e4ce63",
      "tree": "cabc7c8d7fc27ea901d1d80548d7daaec3b2efd4",
      "parents": [
        "1e5dda549c11d02aff51f132760dd693e351ce85"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon May 23 14:58:49 2016 -0700"
      },
      "committer": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Tue May 24 09:48:21 2016 -0700"
      },
      "message": "Fix bug in verifier: soft fail was hiding hard fail.\n\nRationale:\nDexfuzzing found a situation where a soft fail (modifying\na final field) was hiding a hard fail (type error on that\nfield), which caused a crash in the compiler later on.\nAlso added a crash-before/pass-after regression test,\nso we don\u0027t add the return by accident later.\n\nBUG\u003d28908555\n\nChange-Id: I0cdc400be22a2d9eb00db8c8c6b25a85fbdac993\n"
    },
    {
      "commit": "a8d06f0a77fcacada77ec70cbcc19751b886fc44",
      "tree": "c4d831111af475aa7110deeb747821dbd5d55ffd",
      "parents": [
        "cdd55c2cf61dd77f8b8c797e2bd53750f88ffff2",
        "f663e341c550d1aa6f8f587d0ae0dbf7d254ff55"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 10 08:13:27 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 10 08:13:28 2016 +0000"
      },
      "message": "Merge \"Workaround invokesuper underspecified behavior.\""
    },
    {
      "commit": "f663e341c550d1aa6f8f587d0ae0dbf7d254ff55",
      "tree": "cc919e9fb060ff73bbe5bdee8fdac6fc926a52ae",
      "parents": [
        "4e377e58066ccef401276d7d0985521e5e63d1fb"
      ],
      "author": {
        "name": "Aart Bik",
        "email": "ajcbik@google.com",
        "time": "Mon Apr 04 17:28:59 2016 -0700"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 06 13:53:29 2016 +0100"
      },
      "message": "Workaround invokesuper underspecified behavior.\n\nThe verifier allows invokesuper on a class unrelated\nto the referring class. However, the runtime uses the vtable of\nthe super class of the referring class to lookup the ArtMethod.\nSince the receiver has no relation to the referring class, this lead\nto either jumping to a wrong method, or \"luckily\" throw a\nNoSuchMethodError if the vtable index is out of bounds of the super\nclass of the referring class.\n\nThis changes the runtime behavior to always throw NoSuchMethodError\nwhen hitting such invokesuper.\n\nAlso, we make the verifier consistent with the runtime by treating\nsuch calls unresolved.\n\nbug\u003d27627004\n\nChange-Id: I68486501a9625f91679078c5a980b39974ddbf1c\n"
    },
    {
      "commit": "56fdd0e63812764bbeb8cc52e376d3fd1f270052",
      "tree": "6988e995bf02f788066fb6e748cd3049fe87d31a",
      "parents": [
        "9d05b59a8595cf7eeece1795eb65b6b8706aad45"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 28 14:56:54 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 29 17:33:22 2016 -0700"
      },
      "message": "ART: Disambiguate access-checks mode from lock-counting\n\nLock-counting (when structural locking verification failed) is a\nspecial sub-mode of access-checks and must be disambiguated, because\nwe currently use access-checks mode class-wide when at least one\nmethod soft-fails, but do not stop the compiler/JIT to compile\nthe \"working\" methods. So we may end up in the access-checks\ninterpreter for a working method through deopt without knowing\nwhich locks are already held.\n\nBug: 28351535\n\n(cherry picked from commit f517e283d477dd2ae229ee3f054120c6953895db)\n\nChange-Id: I083032f064d88df8f8f0611ad8b57d1b39cd09fb\n"
    },
    {
      "commit": "250a378d5a2152662e0fa820f2b38f794ddd3596",
      "tree": "51896bf755c3f7afd1e0616a9a54071bda6dccc0",
      "parents": [
        "a584db5460a31198bf621cdacf5bc304a984efa4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 20 16:27:53 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Apr 25 09:29:21 2016 +0100"
      },
      "message": "Add flag to ArtMethod to skip compilation.\n\nTo ensure even the JIT will not try to compile methods with\nsoft failures a runtime_throw.\n\nbug:28293819\nbug:28313047\n\nChange-Id: Ie3fd71ded0b77de8dab1c3c825b867cb321b8873\n"
    },
    {
      "commit": "8f4ade0f05c0203b33e5f421d1e3794ab6075a82",
      "tree": "60a6029ef116d7a71c8e8b32aa2388f48c48685c",
      "parents": [
        "2dcab783cd7a5a4351c50755b3b3de927e70ac38"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 15 10:09:16 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 15 17:14:38 2016 -0700"
      },
      "message": "ART: Fix nits for verifier change\n\nFollow-up to 6659624baadf2285ac5880fd28ffa31767dcae0b.\n\nBug: 28187158\nChange-Id: Ie81aff1cae1ff275faaaf4b858608e74b86d8622\n"
    },
    {
      "commit": "cc9b74f278d516d70782806494aafb517096e82a",
      "tree": "732b2e8dbe0a590338767d5d0e4e624c4d4f070d",
      "parents": [
        "0108f3d945cd5483217d7bf1df75ab5108d4555c",
        "6659624baadf2285ac5880fd28ffa31767dcae0b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 14 20:09:00 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 14 20:09:00 2016 +0000"
      },
      "message": "Merge \"ART: Make iget receiver mismatch hard verifier error\""
    },
    {
      "commit": "6659624baadf2285ac5880fd28ffa31767dcae0b",
      "tree": "c8102edd4d380fea54b370b702f41c716fa564ad",
      "parents": [
        "6990775e323cd9164d6cc10955a047b9d9f15f32"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 14 10:55:04 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 14 11:36:39 2016 -0700"
      },
      "message": "ART: Make iget receiver mismatch hard verifier error\n\nIf the classes are resolved, and still not match, this should be\na verify error.\n\nBug: 28187158\nChange-Id: I89c996ae15865674f21cf32ec378d37bac34861b\n"
    },
    {
      "commit": "b55f1ac873f9541f391625c13fe9129fbd38e74c",
      "tree": "996e696a06437f93c6f87e773e76d9e3c6a4fe8a",
      "parents": [
        "336dd6a0989dafb356be5f689028d983b0931335"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Apr 12 15:50:55 2016 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Apr 13 21:12:42 2016 +0000"
      },
      "message": "Allow private methods in interfaces.\n\nPrivate methods may be generated in interfaces during compilation of\nsome default methods.  Change the verifier to allow these methods.\n\nBug: 27999840\n\nChange-Id: Ib8120a8f6cb036021334d9af0ed78ae372974ecb\n"
    },
    {
      "commit": "76ed99d5ec208d5adcd63b41c2c290194ee0ecf7",
      "tree": "acfc8f526561079c8389572af97c96fda7475450",
      "parents": [
        "8a31b7d44a13b1d7e71852dc3c992598698d351d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 28 18:31:29 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 29 17:46:17 2016 -0700"
      },
      "message": "ART: Postpone interface-related dex failure to version 37\n\nFor app compat, at least for now make the check for public-final-static\nof interface members not fail on dex file versions less than 37. This\nmay be changed in future releases.\n\nBug: 27831184\nChange-Id: If8ee50321298b951d4a78062c8eb583fec27394f\n"
    },
    {
      "commit": "7fe30233d32a872f5349e921dba65bd767ad994b",
      "tree": "6039f608c5753d549a30a07f4997cb8141eba970",
      "parents": [
        "bf9611f821697b14bf9e170f503c3f47613b046b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 25 16:58:00 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 28 16:57:30 2016 -0700"
      },
      "message": "ART: Make verifier fail log level adjustable\n\nTo help for build failures.\n\nChange-Id: I6c94dfb50177daa7d89902d78715ccec31bf0e45\n"
    },
    {
      "commit": "bf9611f821697b14bf9e170f503c3f47613b046b",
      "tree": "c5d6de40e988c1d92f51639243443b225e45808f",
      "parents": [
        "782d0464ddc92fd5d55a330068d2d255336c16ba"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 25 16:58:00 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 28 15:51:07 2016 -0700"
      },
      "message": "ART: Clean up verifier\n\nClean up verifier post-Quick.\n\nChange-Id: I0b05e10dd06edd228fe2068c8afffc4b7d7fdffa\n"
    },
    {
      "commit": "8d8fc48664205e433cfa5540753b38043d918873",
      "tree": "5662cfe24c49f244672bf0f69575758791765314",
      "parents": [
        "0a4d6b9faaaa2652c42679df2a72c78485ed9c64"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 25 16:24:20 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 25 16:50:15 2016 -0700"
      },
      "message": "ART: Relax verifier checks\n\nOnly bail for unresolved merge types in a couple of cases. Follow-up\nto bb18a03c44d99b3cae232d445d56e80d8388cca9.\n\nBug: 27799205\nChange-Id: If448e14036bc5e245677e0cd8cdddee02b320525\n"
    },
    {
      "commit": "bb18a03c44d99b3cae232d445d56e80d8388cca9",
      "tree": "c015e2cb8ac1250160cbb68bc48a9fd2b8d3f6ca",
      "parents": [
        "af8e71d59b0ab5e79f53a608b62b3618e36e6a98"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 22 20:34:25 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Mar 25 10:43:10 2016 -0700"
      },
      "message": "ART: Allow array-ness for unresolved merge types\n\nIn case component types aren\u0027t resolvable, array types won\u0027t be\neither. They then may be merged. The merge is still potentially\nan array type.\n\nEnsure that merging an unresolved array type with a primitive\narray type or a non-array type will be resolved to java.lang.Object.\n\nAdded tests.\n\nBug: 27799205\nChange-Id: I9beff75318814dddd842abd64ef9a5d2644d801e\n"
    },
    {
      "commit": "55ea94dc8a7417fa33db010826c1f37734f7d7f2",
      "tree": "0a505595b21817a677ec02ee684e3587899ff779",
      "parents": [
        "553ed05100f079203371da55e8a9d824b8e9948e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 15 09:50:26 2016 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 16 14:36:28 2016 -0700"
      },
      "message": "Fix bug where verification could crash on unresolved types.\n\nBug: 27626708\n\nChange-Id: I708ee18215dccadc00ff3daa1e01c2830475ccae\n"
    },
    {
      "commit": "32ce2adefb8a3d0eda59a29f5e87c1eb43eef796",
      "tree": "50aaa40b31ede355359765259edc7989485cc7d5",
      "parents": [
        "c71dc3852edfa8e0cd2083d12845ff8607e189ff"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 14:58:03 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 18:37:19 2016 -0800"
      },
      "message": "Add more systracing everywhere\n\nAdded to:\nJIT\nDexFile functions\nOat file manager\n\nAdded helper ScopedTrace to prevent errors and reduce excess code.\n\nBug: 27502458\n\n(cherry picked from commit dabdc0fe183d4684f3cf4d70cb09d318cff81b42)\n\nChange-Id: Ifaeff8913d79eefc797380987d13cc00456266f8\n"
    },
    {
      "commit": "7211aa62b2d000ad0e1e1a49bc30b962c2c069cd",
      "tree": "c3f1e053de1e22242a1a2000dc00635cc5b25879",
      "parents": [
        "66bdb9e03efa2055b6bfbe0a07ee873afe673fae"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 02 19:23:17 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 03 13:38:10 2016 -0800"
      },
      "message": "Add systrace to VerifyClass\n\nUseful to see if verifier is preempting anything.\n\n(cherry picked from commit 7f459f5859e5f01c92c3711e7d63c062f510b416)\n\nChange-Id: I594cbdc5c2f8934fc6c4fc7ee47fc4ccfc3c627d\n"
    },
    {
      "commit": "98e6ce44c700abd9375fe17f0aa31fea1e1e938b",
      "tree": "aa15b4398290918e5eb5227781b5aef5ecff9e0b",
      "parents": [
        "a1f65135cd2315159ac302f904ba0c5ba0d7fd0e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 16 18:42:15 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 18 09:51:40 2016 +0000"
      },
      "message": "Remove string init map.\n\nPartial revert of the String init change.\n\n- Make Quick bailout in the presence of String allocation.\n- Rely on the compiler for knowing when dex registers alias.\n\nbug:27173201\n\nChange-Id: I0bf58ba3825c71cef110b53f3a0a6f567cb2ef9a\n"
    },
    {
      "commit": "361e04aaa5d3eca9f978a802ee44b1213f31da58",
      "tree": "d7dc0fb40c2fedbb9aad37fd8f9aba48fc4a6a26",
      "parents": [
        "88f38e9b4e9ba0aca3d6fd4823be3a7226c87f33"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 16 14:06:35 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 16 15:02:22 2016 -0800"
      },
      "message": "Add custom arena deleter for RegisterLine\n\nPreviously it protected by using sizeof(RegisterLine) but this was\nnot accurate due to register lines being variable sized.\n\nBug: 27156726\nChange-Id: Ia4b134b85a2e61993d17bd4f0eff60c89c164dc3\n"
    },
    {
      "commit": "4a2c8fc0fc47631550bc5ff8edd8221a3aea1b23",
      "tree": "3c3e2e8e8ab38510ef8a7440bf893f8684bce9e4",
      "parents": [
        "b9adbf63f880f246d83b3af4ca03aca07711f857"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 12 11:01:54 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 12 15:17:08 2016 -0800"
      },
      "message": "Fix bug with verification of constructors\n\nWe would incorrectly allow the storing of values into superclass\nfields before the superclass constructor was called.\n\nBug: 26965384\n\nChange-Id: I45b824fbdbfc133663ed6d3306853595b5dc9262\n"
    },
    {
      "commit": "980027c7f22f332ad224f662add0df197e71f137",
      "tree": "8a664f03bdfa9662bf10a608def52ac42dff81b3",
      "parents": [
        "5960a3f430d1e7f47ea3db9a8364dc82e3f8add9"
      ],
      "author": {
        "name": "Pavel Vyssotski",
        "email": "pavel.n.vyssotski@intel.com",
        "time": "Thu Feb 11 20:28:11 2016 +0600"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Feb 12 15:47:24 2016 +0000"
      },
      "message": "ART: Treat throw with non-reference type as hard failure in verifier.\n\nThe code\n   const v0, 0xbad\n   throw v0\ncrashes dex2oatd/Quick by DCHECK in art::Mir2Lir::LoadValueDirect.\ndex2oat works fine producing VerifyError later in runtime.\nOptimizing also pass as it rejects methods with soft failures.\n\nFix this by rejecting such methods in Verifier.\n\nBug: 27148248\nChange-Id: Ib783f60a210362654d40e84172e7bd579913a4d4\nSigned-off-by: Pavel Vyssotski \u003cpavel.n.vyssotski@intel.com\u003e\n"
    },
    {
      "commit": "9fcfb8add23042713165f761b4f098e14b9a823b",
      "tree": "da9e436af2feca082f291082c2d40858a053d6c4",
      "parents": [
        "c5b76b9328d77b83c80afed14a5b6e7009136e15"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Feb 04 20:52:54 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 05 15:52:18 2016 -0800"
      },
      "message": "ART: Curb lock-verification-failure spam\n\nJust print one message per class. Also print a helpful message once.\n\nBug: 26951356\nChange-Id: I83702b67dc535d86e03835df7a72afda081c83be\n"
    },
    {
      "commit": "68b5c0b677bae53b3bae5d1890e21fae527f3df3",
      "tree": "0bfdef080978ba7f5c264aa4ab269a07e9949771",
      "parents": [
        "7f1551d28b3674799a4bb2b198bf6b16f32082af"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Jan 19 14:25:29 2016 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Feb 01 12:18:48 2016 +0000"
      },
      "message": "ART: Disallow uses of uninitialized references\n\nThe following instructions accepted uninitialized reference types\nas their arguments:\n - instance-of\n - check-cast\n - throw\n - iput-object (stored value argument)\n - sput-object\n - invoke-* (non-this arguments)\n\nMonitor-enter and monitor-exit are allowed.\n\nBug: 26594149\n\nChange-Id: I2a4decb1fba274b8969b17bc237ac0fd19b93c80\n"
    },
    {
      "commit": "fedd91d50930e160c021d65b3740264f6ffec260",
      "tree": "5f356423e51f3bd71020ba0a5f024c54adc959e7",
      "parents": [
        "97f4bc04b61d5cf78b0820dbf18e999b20d7a108"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 07 14:49:16 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 28 15:46:55 2016 -0800"
      },
      "message": "Optimizing compiler support for directly calling interface methods\n\nThis teaches the optimizing compiler how to perform invoke-super on\ninterfaces. This should make the invokes generally faster.\n\nBug: 24618811\n\nChange-Id: I7f9b0fb1209775c1c8837ab5d21f8acba3cc72a5\n"
    },
    {
      "commit": "9724c636467d56632a45fdf6353e3d57d1925501",
      "tree": "f28f6ff8146088eef28405a55a7f6ab517120ae0",
      "parents": [
        "4fe6ce5f48687cf24c91ac9865dbad497ed6c074"
      ],
      "author": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Thu Jan 07 15:42:47 2016 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 26 10:23:06 2016 -0800"
      },
      "message": "Enable interface default methods by default.\n\nThis also enables interface static methods.\n\nThis removes the -Xexperimental:default-methods flag and all places\nwhere we explicitly check for its presence.\n\nBug: 24618811\n\nChange-Id: Icd91e377bd6e1a45a1645f810d15de1b0312e31d\n"
    },
    {
      "commit": "7268d47a6d2d44dcd844fcfff4699ad7689308d6",
      "tree": "8c1eeca4ec19312aded394be5696042d1017f997",
      "parents": [
        "f74388daf23522dd4e9ebe6640030f4fd52c52ea"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 20 15:50:01 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 20 15:50:01 2016 -0800"
      },
      "message": "Add a METHOD_SUPER to the MethodType enum.\n\nThis makes some of the code simpler by disambiguating between regular\ninvoke-virtual and invoke-super, which have slightly different\nrequirements.\n\nChange-Id: I50e86e681bb63c617c043367feb5b89e2ddbfc00\n"
    },
    {
      "commit": "705ad49f353d3f90d8b63625aca2c2035bacdbef",
      "tree": "ac70af53158a80bc35c057aefae11428281df9ac",
      "parents": [
        "fae1db92d8433d0f75258c190bcf2c940731f036"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 21 11:36:30 2015 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 12 15:40:31 2016 -0800"
      },
      "message": "Support directly invoking interface default methods\n\nWith the Java 8 Language one is allowed to directly call default\ninterface methods of interfaces one (directly) implements through the\nuse of the super keyword. We support this behavior through the\ninvoke-super opcode with the target being an interface.\n\nWe add 3 tests for this behavior.\n\nCurrently only supports slow-path interpreter.\n\nInvoke-super is currently extremely slow.\n\nBug: 24618811\n\nChange-Id: I7e06e17326f7dbae0116bd7dfefca151f0092bd2\n"
    },
    {
      "commit": "42ef8ab151a3d0cbb42cb43f6841c3708d65fca3",
      "tree": "ba8eb3fdecd226a8c516a86ac418f73f6c0ff254",
      "parents": [
        "170e01a6b59b3242a5afc76c3a03c00ce288150f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 03 17:27:32 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 10 13:52:33 2015 -0800"
      },
      "message": "ART: Stash a resolved method late in the verifier\n\nInvoke-interface should only be called on an interface method.\nWe cannot move the check earlier, as there are other checks\nthat must be done that can fail a class hard. So postpone\na push to the dex cache.\n\nClean up the test a bit.\n\nAlso templatize ResolveMethod with a version always checking\nthe invoke type, and on a cache miss check whether type target\ntype is an interface when an interface invoke type was given.\n\nBug: 21869691\nChange-Id: I94cbb23339cbbb3cb6be9995775e4dcefacce7fd\n"
    },
    {
      "commit": "c96205e03bd4f991ad1540df38f9f692ef211b22",
      "tree": "4ae775d15f51efb704ca5b00a2ee4b6fb6615812",
      "parents": [
        "34760f9a97e6a1733edfca1b13199f749106a30f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 10 13:25:27 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 10 13:27:10 2015 -0800"
      },
      "message": "Revert \"ART: Check invoke-interface earlier in verifier\"\n\nThis reverts commit dae24142127c64551142a50423085aabdb0a6060.\n\nIt is important to check the name of the method being called.\n\nBug: 21869691\n"
    },
    {
      "commit": "53e32d14d7a51198c6ef09120c15bafdd1d055c2",
      "tree": "2386137351c94dcaf0612713134f487fc8f1fdfb",
      "parents": [
        "1d97f949e807e963dd92dcf9ac38def5301d555a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 09 21:03:23 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 09 21:03:23 2015 -0800"
      },
      "message": "ART: Refactor verifier callbacks\n\nChange the return type of MethodVerified to void. It was never\nused anyways.\n\nRemove the callbacks calls from the core of the verifier (Verify()).\nInstead, make the convenience functions do the work, and add a\nparameter to supply the callback so that the verifier becomes\nindependent of the Runtime-stored one.\n\nFix up calls that now need to provide a callback, but leave places\nthat only run the verifier to get metadata (e.g., register type data,\nlock state) without callback. This avoids callback calls when in JIT\nmode.\n\nBug: 26075442\nChange-Id: I2c270f01e4de088771d4d4b19dae4f07d77640f0\n"
    },
    {
      "commit": "dae24142127c64551142a50423085aabdb0a6060",
      "tree": "35c06bc37e2dd2caad4fef1fba4de16a12aad6f9",
      "parents": [
        "ef45113d01c16102538a8848d6979e772dad6225"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 03 17:27:32 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 08 08:50:12 2015 -0800"
      },
      "message": "ART: Check invoke-interface earlier in verifier\n\nInvoke-interface should only be called on an interface method.\nMove the check earlier, as otherwise we\u0027ll try to resolve and\npotentially inject a method into the dex cache.\n\nAlso templatize ResolveMethod with a version always checking\nthe invoke type, and on a cache miss check whether type target\ntype is an interface when an interface invoke type was given.\n\nBug: 21869691\nChange-Id: Ica27158f675b5aa223d9229248189612f4706832\n"
    },
    {
      "commit": "ec6e6c19662260c059b273dfc9c502900756487d",
      "tree": "df5594424e73244690703e5ddadd0b141731e18a",
      "parents": [
        "ce0f43b97ffb5e4d14c5df6607d8efb46a5dc9d2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 05 20:39:56 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 09 10:48:25 2015 -0800"
      },
      "message": "ART: Rerun the verifier for compile-time failures\n\nTo aid app failure diagnosis, by default re-run the verifier at\nruntime to compute a better VerifyError message.\n\nRewrite the verifier driver code to pass the last actual low-level\nverifier message.\n\nBug: 25432718\nChange-Id: Ib8e6dd1ce8121045c0d38f54969100094c3dde6e\n"
    },
    {
      "commit": "a4c98f292f6471f88816ce74046ecc85bc57e6b3",
      "tree": "40b335c91339b25d2241c3dc94b3bb5ab93f1281",
      "parents": [
        "5729f5b897ffba17dacf5bff105f4ae2d101209b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 06 16:24:49 2015 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 06 16:43:39 2015 -0800"
      },
      "message": "ART: Fix return-object verification\n\nIf the declared return type was unresolvable, we always threw a\nsoft failure, only. However, if the register type is not a reference,\nthis should always be a hard failure.\n\nAdd a test case.\n\nBug: 25494456\nChange-Id: I6482a45ec36b58895816647da0ff3a731b31319f\n"
    },
    {
      "commit": "0db36b3ec3feb34adabf5d211612226a66d8b063",
      "tree": "e5b064895cc093991f6bb6e3a1d97ac87b064903",
      "parents": [
        "3dca4c04170bb4c7b26609e55f3f4966d46b681a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 27 14:06:34 2015 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 28 17:09:06 2015 -0700"
      },
      "message": "Fix minor problems with interface verification and default methods.\n\nPreviously we would fail verification on some \u003cclinit\u003e methods when\ndefault methods are enabled and they are not marked as public.\n\nPreviously we would also give verifier soft failures when using\ninterface statics.\n\nBug: 24618811\n\nChange-Id: I735740b4058bfd71e67bc3fb99e6a8c0c4696b01\n"
    },
    {
      "commit": "de40d478930d0889a2aea5cbf58aa63da24e5dfa",
      "tree": "8efcc1c3e3850be151ce6d5046b1a9b3679d023f",
      "parents": [
        "fd948240e02c005380e15155f8e50a175e7cb343"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 15 17:47:48 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 26 08:54:12 2015 -0700"
      },
      "message": "Use arenas for the verifier\n\nImprovements are from using arenas for verifier. The things that\nwere moved into arenas are register lines, reg types, and reg type\ndescriptors.\n\nAlso some minor cleanup. Fixed double space formatting error in\nstring piece.\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nBefore:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\ncompile GmsCore 50x on host -j1:\nreal  3m5.510s\nuser  2m48.139s\nsys 0m11.753s\n\n50 random APKs:\nreal  1m18.157s\nuser  1m8.167s\nsys 0m8.071s\n\nRAM (GmsCore):\n(threads: 1) arena alloc\u003d0B java alloc\u003d27MB native alloc\u003d64MB free\u003d792KB\n(threads: 4) arena alloc\u003d0B java alloc\u003d27MB native alloc\u003d64MB free\u003d397KB\nPerf:\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nAfter:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\ncompile GmsCore 50x on host -j1:\nreal  2m31.455s\nuser  2m14.784s\nsys 0m10.888s\n\n50 random APKs:\nSpeed up from arena allocating:\nreal  1m12.094s\nuser  1m2.325s\nsys 0m7.872s\n\nSpeed up from areans + CreateFindClassDefIndex + unordered_map for DexFileVerifier.\nreal  1m8.654s\nuser  0m58.955s\nsys 0m7.777s\n\nRAM (GmsCore):\n(threads: 1) arena alloc\u003d1049KB java alloc\u003d27MB native alloc\u003d65MB free\u003d538KB\n(threads: 4) arena alloc\u003d4MB java alloc\u003d27MB native alloc\u003d69MB free\u003d650KB\n\nPerf on host key results:\n_int_malloc: 3.60% -\u003e 1.39%\nmalloc: 1.48% -\u003e 0.65%\n_int_free: 1.59% -\u003e 0.61%\nRegTypeCache::FromClass: 1.47% -\u003e 0.86%\nmalloc_consolidate: 0.89% -\u003e 0.63%\n\nReal speed up is ~22% on GmsCore, ~14% on the set of 60 APKs.\n\nBug: 10921004\n\nChange-Id: If13d4ab4284a176f93a26a412549b6b1149dfb16\n"
    },
    {
      "commit": "eb7c144a6aff7da673ba53d501c46f00311d4d7f",
      "tree": "feec33dd2e711800305477b092970500991a3993",
      "parents": [
        "98ae42010a6e6a0e4c5bcc4d6a357805eef3f4ff"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Aug 31 13:17:42 2015 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 13 13:09:37 2015 -0700"
      },
      "message": "Add initial default method support to Art\n\nThis commit starts the process of adding default methods and their\nassociated pieces to ART.\n\nThis adds full support for calling default methods using\ninvoke-interface and invoke-virtual on objects implementing the\ninterfaces. Verifier is changed to allow this when the runtime is\nstarted with -Xexperimental:default-methods.\n\nThis also adds support for defining and calling static methods on\ninterface classes with invoke-static.\n\nDirectly calling overridden default methods using invoke-super is not\nyet supported.\n\nThis adds 5 new run-tests for this functionality.\n\nBug: 24618811\n\nChange-Id: I35ca800d99d3329348b277789b70ceeeba6e7f03\n"
    },
    {
      "commit": "6918bf13eb855b3aa8ccdddda2d27ae8c60cec56",
      "tree": "907f504a4d004ac1e44b73c3984e365e889407e8",
      "parents": [
        "446ca43e8f876dcc1ee90fcf432d6392c44a3f60"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Sun Sep 27 19:19:06 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Sun Sep 27 19:19:23 2015 -0700"
      },
      "message": "Revert \"Revert \"lambda: Experimental support for capture-variable and liberate-variable\"\"\n\nThis reverts commit 7bbb80ab52c203e44d2ded2c947b3b03b4b31ec4.\n\nChange-Id: If806ce5c6c5e96fdb2c3761dee096f74e7e5b001\n"
    },
    {
      "commit": "446ca43e8f876dcc1ee90fcf432d6392c44a3f60",
      "tree": "29e82c4fff7663d1e184ae3059f547fa3b65646b",
      "parents": [
        "b175a45be78152606a1db1eac0b79ef8777644f5",
        "7bbb80ab52c203e44d2ded2c947b3b03b4b31ec4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Sep 27 19:50:57 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Sep 27 19:50:57 2015 +0000"
      },
      "message": "Merge \"Revert \"lambda: Experimental support for capture-variable and liberate-variable\"\""
    },
    {
      "commit": "7bbb80ab52c203e44d2ded2c947b3b03b4b31ec4",
      "tree": "eb54c557467f1401c4bd5729fa2b9e8ae91e8ffd",
      "parents": [
        "b72123440d8541362ebdb131436f9dbdda5fd329"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Sep 27 19:50:40 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Sep 27 19:50:40 2015 +0000"
      },
      "message": "Revert \"lambda: Experimental support for capture-variable and liberate-variable\"\n\nTest fails.\n\nThis reverts commit b72123440d8541362ebdb131436f9dbdda5fd329.\n\nChange-Id: Ic9ed92f8c826d8465eb36b746dc44af05caf041c\n"
    },
    {
      "commit": "9c612cacb05c8661719d770dbce8dfdcb9c105cf",
      "tree": "6cd7d8e51ace1f48692d0f48c33e9c6b22cc283a",
      "parents": [
        "c27e706785c975eb91d9716800aae6c48dc47da6",
        "b72123440d8541362ebdb131436f9dbdda5fd329"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Sep 25 23:55:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 25 23:55:58 2015 +0000"
      },
      "message": "Merge \"lambda: Experimental support for capture-variable and liberate-variable\""
    },
    {
      "commit": "b72123440d8541362ebdb131436f9dbdda5fd329",
      "tree": "41e3d21496a270edc06879f084a504a39af9469b",
      "parents": [
        "9f3b8d38de615efef6d2536817f19ad2ccaa313a"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Sep 25 14:22:08 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Sep 25 15:53:00 2015 -0700"
      },
      "message": "lambda: Experimental support for capture-variable and liberate-variable\n\nSupports capturing/liberating any primitive variables.\nNo support for capturing objects/lambdas yet since they would both\nneed GC changes to track roots through closures.\n\nChange-Id: Ibfb68bfe4c579dbf93823aac4c0e6ac8f6360c5d\n"
    },
    {
      "commit": "5469d3444614be1d29302aef75210119df453721",
      "tree": "f42efaec322f96b1ee703667ec10fa7fe95d8a6e",
      "parents": [
        "a00bd9395be31bd69a0558b78a48e4279a6ce693"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 25 16:57:53 2015 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 25 17:42:46 2015 +0100"
      },
      "message": "ART: Reject PackedSwitch with overflowing keys\n\nAs stated in \"Dalvik bytecode\" sections on switch payload format,\nswitch case keys must be stored in ascending order. Verifier enforced\nthis for sparse-switch but not for packed-switch.\n\nBug: 24399945\nChange-Id: I0802d38e2bfae93c0dffe8ebfce2e9693a63ec02\n"
    },
    {
      "commit": "071cd9d654c3e578c400be1414c3b0ea58508c72",
      "tree": "cf9831b764717ce628d9c6e34217d80d2c2eca1d",
      "parents": [
        "ec7e44f7afe0ff48d4d1ae54a12d375e0392d24c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 25 15:57:36 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 25 15:57:36 2015 +0100"
      },
      "message": "ART: Fix misleading error message in method verifier.\n\nChange-Id: I4805de0060b74168fa36e077a6a7ea59e9d72d46\n"
    },
    {
      "commit": "78568351b22554c3a885216cd5be480dab88a951",
      "tree": "0f4a41dfd93535e0f3165ea94b302a5cc36cbfd1",
      "parents": [
        "47d89c7376090a3a4b8eb114e2c861afe27d01d0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 21 12:00:16 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 21 13:24:18 2015 +0100"
      },
      "message": "Fix locking on string init map (again).\n\nFollow-up to\n    https://android-review.googlesource.com/172036 ,\n    https://android-review.googlesource.com/171621 .\n\nDon\u0027t overwrite existing values, only insert new ones.\n(Also improve performance by using move semantics.)\n\nThis prevents the following race: Thread 1 looks for string\ninit map for a method but doesn\u0027t find it, so it starts to\nconstruct a new map. Thread 2 is doing the same but it\u0027s\nfaster and actually inserts the new map and keeps a pointer\nto it. After Thread 2 releases the lock, Thread 1 acquires\nit and starts to Overwrite() the element that the Thread 2\nis currently using, so Thread 2 ends up looking at a map\nthat\u0027s being actively modified.\n\nChange-Id: I135571af644363ea7bb282969a1bc7287b34f9b2\n"
    },
    {
      "commit": "35717f8cfb6c1de5c89b2f9b990a050b2cbab66f",
      "tree": "468d9275ebb774de9c373aea6387e5c55c4336e6",
      "parents": [
        "b6f7dd330f115fc977d1d5a10122c41c9dd7c210",
        "637ee0b9c10ab7732a7ee7b8335f3fff4ac1549c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Sep 14 10:42:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 14 10:42:01 2015 +0000"
      },
      "message": "Merge \"ART: Add some utilities for working with containers.\""
    },
    {
      "commit": "e6215c0ec4b1bb71b722fdbf7e62eaf3be8a91d5",
      "tree": "c30c6da2ad45fbf4c7334ce1a0b22113ddcad23a",
      "parents": [
        "2a455e162cbba5dad610b02155957aa7759c9a34"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 31 18:54:38 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Sep 10 17:58:18 2015 -0700"
      },
      "message": "ART: Move access flags checking to dex file verifier\n\nActually implement all the access flags checking in the dex file\nverifier. Add tests.\n\nChange-Id: I8b797357831b588589d56d6e2e22f7b410f33008\n"
    },
    {
      "commit": "637ee0b9c10ab7732a7ee7b8335f3fff4ac1549c",
      "tree": "21cf63333abcc07ed1e3138ec3c9e690e0abc227",
      "parents": [
        "68ffda887e35f35e978f2f607b7a91e44a5e1969"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 04 12:47:41 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Sep 08 18:09:20 2015 +0100"
      },
      "message": "ART: Add some utilities for working with containers.\n\nAdd utility functions for searching, removing and replacing\nexisting values in a container, to be used with std::vector\n(including the ArenaVector alias) and other containers.\n\nAlso move UniqueCPtr\u003c\u003e and MakeUnique() to base/stl_utils.h\nand clean up related includes.\n\nChange-Id: I1e61762df91c046866591bda167d42bf8b67a692\n"
    },
    {
      "commit": "957fb8930766ae422568e7b1b816159a9e9bc18c",
      "tree": "849a611f978656f1c85182402e1ef2c8ca50c5e6",
      "parents": [
        "68ffda887e35f35e978f2f607b7a91e44a5e1969",
        "05792b98980741111b4d0a24d68cff2a8e070a3a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Sep 04 10:34:04 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 04 10:34:04 2015 +0000"
      },
      "message": "Merge \"ART: Move DexCache arrays to native.\""
    },
    {
      "commit": "de286fdcb4d203438b4b49c22c8a4a24d08ad14d",
      "tree": "7a07331657f142455732d0161518a02e48d87326",
      "parents": [
        "8c679146d7a5c0c193ffab65d786fd5d84b3f4fd"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 18:10:29 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 18:23:09 2015 -0700"
      },
      "message": "Address some leftover comments\n\nChange-Id: Ia8d01c8b1c10d23efdd94aa76289a1ed3373957c\n"
    },
    {
      "commit": "05792b98980741111b4d0a24d68cff2a8e070a3a",
      "tree": "bad79a387bcbdaefc87c07b388099960ca9caff3",
      "parents": [
        "c26b4512a01d46756683a4f5e186a0b7f397f251"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Aug 03 11:56:49 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 17:30:57 2015 +0100"
      },
      "message": "ART: Move DexCache arrays to native.\n\nThis CL has a companion CL in libcore/\n    https://android-review.googlesource.com/162985\n\nChange-Id: Icbc9e20ad1b565e603195b12714762bb446515fa\n"
    },
    {
      "commit": "673ed3d8aedc5462a47ded827c99f35d46525457",
      "tree": "83de4690228c9f7772c48c770c5e2e5ba2dac6fe",
      "parents": [
        "ce209462cc1a7ce235e5ac0d0e6db6b402f73441"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 28 14:56:43 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Aug 31 10:58:31 2015 -0700"
      },
      "message": "Revert \"Revert \"Change dex caches to be weak roots\"\"\n\nThis reverts commit 81a9087f0df0518c39405b7d18ba5858a6d8b77b.\n\nBoot.oat creation time goes from 4.7s to 4.9s on host due to extra\nlocking. Will try to improve this in another CL.\n\nBug: 23602225\nBug: 22720414\n\nChange-Id: I7e25b75cfb63faa196c7b0f60e46cce50bf12021\n"
    },
    {
      "commit": "81a9087f0df0518c39405b7d18ba5858a6d8b77b",
      "tree": "f4936654805b4d84540bd909095e8bbf69795bfd",
      "parents": [
        "f86a0859684c0f8964da4cbe75d49df8f832e85b"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Aug 28 09:07:14 2015 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Aug 28 09:07:14 2015 -0700"
      },
      "message": "Revert \"Change dex caches to be weak roots\"\n\nThis reverts commit 3ae6b1d42523bb2a0ddb5edff1aaf05b592f28f4.\n"
    },
    {
      "commit": "a727e372d8f6929cd30b983f6969c7a50fc83bb6",
      "tree": "f71b33bf46053e0ccbd191ac74a850e87145eb98",
      "parents": [
        "706ea6a0294ef8bc3def050142c548c082fa8e30"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 25 09:22:37 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Aug 27 10:53:12 2015 -0700"
      },
      "message": "ART: Balanced locking\n\nChange the verifier to check for balanced locking. When balanced\nlocking can\u0027t be guaranteed, use a new failure kind to punt to\nthe interpreter.\n\nAdd smali tests, with JNI code to check the balanced-locking result.\n\nBug: 23502994\nChange-Id: Icd7db0be20ef2f69f0ac784de43dcba990035cd8\n"
    },
    {
      "commit": "706ea6a0294ef8bc3def050142c548c082fa8e30",
      "tree": "2a6737a452fe6059e47aefda8ec5b9778ff2d582",
      "parents": [
        "772cc4a2d4f978888d1b1e5a78c1c16a108260ed",
        "0760a81257fa427646c309500d603194009265ef"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Aug 27 16:04:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 27 16:04:21 2015 +0000"
      },
      "message": "Merge \"ART: Propagate verifier failure types to the compilers\""
    },
    {
      "commit": "772cc4a2d4f978888d1b1e5a78c1c16a108260ed",
      "tree": "b8f29167cb5fb7ca7709a0d305cfd7e6018d5b2a",
      "parents": [
        "7d6c95a7e5d431fd1b9ad49823535073325c699a",
        "3ae6b1d42523bb2a0ddb5edff1aaf05b592f28f4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 27 02:47:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 27 02:47:40 2015 +0000"
      },
      "message": "Merge \"Change dex caches to be weak roots\""
    },
    {
      "commit": "0760a81257fa427646c309500d603194009265ef",
      "tree": "9754389d2d488f41459c76d4568dd40dd41955ae",
      "parents": [
        "7d6c95a7e5d431fd1b9ad49823535073325c699a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 26 17:12:51 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 26 19:08:03 2015 -0700"
      },
      "message": "ART: Propagate verifier failure types to the compilers\n\nAdd a bit-set encoding of seen failure types to the verifier and\nmake it available. Store this in VerifiedMethod, so that compilers\ncan inspect it and make choices based on failures. Rewrite the\ncurrent punting of runtime-throw errors to be at the compiler-driver\nlevel.\n\nBug: 23502994\nChange-Id: I1cfc7cbdf2aec1f14ba18f0169e432ba4ae16883\n"
    },
    {
      "commit": "3ae6b1d42523bb2a0ddb5edff1aaf05b592f28f4",
      "tree": "9ae990956db3d2d5970fb15bf264aeeb73e2bfe0",
      "parents": [
        "dcff51a0079c5e3abaf0335f7cb9a3dd44044456"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Aug 14 14:03:10 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 25 18:00:47 2015 -0700"
      },
      "message": "Change dex caches to be weak roots\n\nChanged dex caches to be weak roots. This is necessary for class\nunloading since the resolved types arrays would keep classes live\nwhen they should be unloaded. Currently the dex caches still don\u0027t\nget freed due to the class loader roots.\n\nAlso deleted some unused functionality in image writer.\n\nBug: 22720414\nChange-Id: If22cb3cad7e3baabc8158a77d7f20799faf4c341\n"
    },
    {
      "commit": "ad238ce884468234509a9367c0ce1055bd1394bf",
      "tree": "19e0927268673f26fc1456ec6b3317eef7bdf305",
      "parents": [
        "e74493cbc8f33bfd53b792f98f135d3db680f029"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 24 21:13:08 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 25 09:14:00 2015 -0700"
      },
      "message": "ART: Add option to retain lock levels in verifier\n\nTemplatize SetRegisterType to be able to retain lock levels. When\nsharpening a type, e.g., in a branch after an instanceof, the\nverifier should remember if the register had been locked before\nand not implicitly erase that information.\n\nBug: 23502994\nChange-Id: Iba62688a536792da0920598fecdbf24a4993ec04\n"
    },
    {
      "commit": "c147410b4459aeda08fc0cd8b6df089d75f4e573",
      "tree": "671c3b1591d0a32931426992d31f038a3a9fd225",
      "parents": [
        "6bd6a830f24033830a910f88928b400a7ed28418"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 18 08:57:44 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Aug 20 16:35:45 2015 -0700"
      },
      "message": "ART: Special form of lock aliasing\n\nCheck whether the instruction immediately before a monitor-enter\nis a move-object, establishing previously untracked lock aliasing\nin a low-overhead manner.\n\nBug: 20102779\nBug: 21169615\nBug: 21988678\nBug: 23300986\nChange-Id: Ia10d6219357e7bce29f58134637b07d3f4857b2f\n"
    },
    {
      "commit": "53de99cd7e863e95179823504335f1f67e03c791",
      "tree": "9bd18cc5295e8c4b569dc16d45b0ff1e19ce6ef2",
      "parents": [
        "4b7b5fcda0f97ed874de0ccd18940030e6c71f04"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 17 13:43:55 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 17 13:43:55 2015 -0700"
      },
      "message": "ART: Follow-up fixes\n\nAddressing comments for CL 166499, commit\n5073fedd553afeb6ccdb49c1a1ab2cc2947c0870.\n\nChange-Id: I359e5a4c026d58d75cb62b90c495796855302b94\n"
    },
    {
      "commit": "ebf850c9ec47e199cfb3712b7832eb2f32e2ee02",
      "tree": "a37deb86134a3079532295b644469af09c29f088",
      "parents": [
        "933fdd0b0e7b1f831033d70b922d1845955caa53"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 14 15:37:35 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 14 15:37:35 2015 -0700"
      },
      "message": "ART: Fix verifier dumping, add hard-fail dumping\n\nFix the dumping code in the verifier.\n\nAdd an option to dump the verifier state on hard failure when\nverbose:verifier.\n\nChange-Id: Iccea92fcbcb2301356d86004ea0f5f3e5da84f3c\n"
    },
    {
      "commit": "4bf4c78a6e8b7da7cf306e1dd17ff5a55d0c6c98",
      "tree": "a24fec5a60881ba644caeb7706df183882079c32",
      "parents": [
        "a0856f5158e35e8cd83b36ece16c58915292653a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 14 14:07:43 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 14 14:25:25 2015 -0700"
      },
      "message": "ART: Relax verifier aput checking\n\nWhen checking on a null array, the cases of aput and aput-wide are\nshared between integral and floating point types. Be careful to not\nreject a valid program.\n\nBug: 21867457\nBug: 23201502\nChange-Id: I6c54a389c06e40a2dae00995aa16ff08a089e512\n"
    },
    {
      "commit": "f10b6e109bfb595b6752d1b59db680694ac1684d",
      "tree": "16ff553dd297319eb16504ea29651ff32d65ea25",
      "parents": [
        "6a5037eb3340e4c981fd7de3ff45167ee5b7fc82"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 12 10:48:12 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Aug 12 16:18:50 2015 -0700"
      },
      "message": "ART: Change UninitializedThis tracking in the verifier\n\nOnly relying on register types is error-prone. For example, we may\ninadvertently reject correct code when the constructor terminates\nabnormally.\n\nBug: 20843113\nChange-Id: I8826cd167780df25a6166740f183d216483fa550\n"
    },
    {
      "commit": "b29179611a5d24ada72d8a7914bc8c1259e6d5b6",
      "tree": "6e0df28ab6f3856a0cd4271bafff8d660e93566b",
      "parents": [
        "0d72ce0b4f9eaf0f60c70a2901198099086795e0"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 31 13:36:10 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 31 21:12:45 2015 -0700"
      },
      "message": "ART: Check a RETURN_VOID_NO_BARRIER like a RETURN_VOID\n\nRETURN_VOID_NO_BARRIER is used in all methods with return-void,\nas long as they\u0027re not a constructor and have been quickened. As\nsuch, do the regular checking of the return type.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d181700\nBug: 22871329\nChange-Id: I11bcf7bffd91fc01995b703a99e603ddb370016e\n"
    },
    {
      "commit": "07e0e6b076b2b8d0a03f3caf94ff8c71fa807d29",
      "tree": "59476c1461aa80decc80e5bf2c0bf490d387ab01",
      "parents": [
        "e93505f599682a2e95c4dac1c8633dec79c602bc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 31 20:31:24 2015 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 31 20:31:24 2015 +0000"
      },
      "message": "Revert \"ART: Do not allow RETURN_VOID_NO_BARRIER outside constructors\"\n\nThis reverts commit e93505f599682a2e95c4dac1c8633dec79c602bc.\n\nThis isn\u0027t the right thing to do, actually.\n\nBug: 22871329\nChange-Id: I0a0a5a86c7c8d8afdf417444ca7d73e56e040515\n"
    },
    {
      "commit": "e93505f599682a2e95c4dac1c8633dec79c602bc",
      "tree": "b40228ac17d9d595a3e6fb7dff7ef64c13f74b75",
      "parents": [
        "68c5640a71cfb37f8741eeafbfc13b2a40ccefa1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 31 11:34:24 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 31 11:34:24 2015 -0700"
      },
      "message": "ART: Do not allow RETURN_VOID_NO_BARRIER outside constructors\n\nLet the verifier fail non-constructor methods using the no-barrier\nvariant of return. This is a quickened return purely to avoid the\nconstructor barrier for final fields, and cannot be used as a stand-in\nfor a regular return.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d181700\nBug: 22871329\nChange-Id: I9559c6a1599c20ce526582527ebed73b25242767\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "4d7b75f9cbcf99134c0a1c69b267b6bc8d94134e",
      "tree": "16cfeec0822cb06f19c78db86cec3bf94f9b4665",
      "parents": [
        "56ebee4d2b94bcf4040f49eddaa35ad7e43cc53d"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Jul 21 17:03:36 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Jul 21 17:03:36 2015 -0700"
      },
      "message": "verifier: Skip verification of methods when seeing experimental opcodes\n\nBug: 22638098\nChange-Id: I9f172f3e0e7ad2aa8873e4036415702fee6bf2eb\n"
    },
    {
      "commit": "e2facc5b18cd756a8b5500fb3d90da69c9ee0fb7",
      "tree": "595a3c807e1cbaa4b8c22b93685d70faa4ff0f5a",
      "parents": [
        "e07300b712f44397ecbfed1ef7f880686e46274a"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Fri Jul 10 13:49:08 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jul 20 15:11:59 2015 -0700"
      },
      "message": "runtime: Add lambda box/unbox object equality\n\nA lambda that is boxed with box-lambda is now stored as a weak reference\nin a global runtime table (lambda::BoxTable). Repeatedly boxing the same\nlambda closure value will always return the same java.lang.Object back.\n\nSince there is no way to observe the address of an object, a GC can\nhappen and clean up the table of any dead boxed lambdas, which can also\nshrink the table to prevent the memory use from growing too much.\n\n(Note that a lambda closure is immutable, so hashing over it is\nguaranteed safe.)\n\nChange-Id: I786c1323ff14eed937936b303d511875f9642524\n"
    },
    {
      "commit": "8f1e08af6172781f91a17fce0a5a4183a9f70aa9",
      "tree": "1481075eefed359fcb675379197290b53159e28e",
      "parents": [
        "404ea410c5c1566909ae741582046b7cae2bd681"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 26 12:06:30 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 13 13:30:13 2015 +0100"
      },
      "message": "ART: Don\u0027t nest indenters in oatdump.\n\nReduces the time taken by the oatdump_test by ~12s (15%)\non host and ~55s (9%) on N5.\n\nChange-Id: I99bb16ff5f3640389815f1fe54379ca64eac071b\n"
    },
    {
      "commit": "890da29d279c44923f9271450b8a4423b1267655",
      "tree": "3c1c990a1ce8bfd0a245fb748956ca4ed92955c3",
      "parents": [
        "e7ea17b726ab415a0dc98c0a3901497bbcf3a4c3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 06 17:20:18 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 06 17:20:18 2015 -0700"
      },
      "message": "ART: Avoid soft- after hard-fail in verifier\n\nFollow-up to 414000ec4d728b5c85f8c6dee4f867fecde59b01.\n\nBug: 21886894\nBug: 22245124\nChange-Id: I3728187bd8526cdf84f95b123e6fad5d6c5a8b3c\n"
    },
    {
      "commit": "57c47588434b98a3904950c3b1d820257984878a",
      "tree": "a01a0abe40932d37f04937c680a156a0f5a0550e",
      "parents": [
        "01b2129de3e182b79aa820e71fc7fa1ef42f2d35"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 01 22:05:59 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 06 08:23:07 2015 -0700"
      },
      "message": "ART: Check switch and array data better in the verifier\n\nIncorrect padding (or just malformed code) can lead to pseudo\ninstructions for data payload not being correctly discoverable in\na linear scan. This is problematic for the optimizing compiler,\nwhich uses such a scan to build its graph.\n\nUse the opcode flag in the insn_flags_ to ensure that a pseudo\ninstruction referenced from a base instruction was actually\ncorrectly discovered. This does not ensure the letter of the dex\nspecification for now, which calls for nops for padding. However,\nit is unclear what the difference between unreachable code and\npadding is.\n\nBug: 22237618\nBug: https://code.google.com/p/android/issues/detail?id\u003d178522\nChange-Id: I823b3f541f326e6e77b15f3e13a7608a39d4b1fb\n"
    },
    {
      "commit": "d5ad72fb8ca28ee4fa4109fa7154e08d0c4ac4d3",
      "tree": "b3fad532f90e6e76a442f06ad3e391011932ebdc",
      "parents": [
        "2d0ad78f50cae58d1ca11a497614ca3e1178acc3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 26 17:33:47 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 26 17:53:41 2015 -0700"
      },
      "message": "ART: Fix invalid access and DCHECK in verifier\n\nIf we get a throwing failure when setting types from the signature,\nthe work instruction index is still invalid. Do not try to copy the\nline then.\n\nAs a throwing failure might happen in the above instance, but the\nflow analysis expects to have a cleared failure flag before processing\neach instruction, clear the flag.\n\nBug: 21645819\nBug: 22080519\n\n(cherry picked from commit 3ae8da0a803370be9dd410226438f636af553e22)\n\nChange-Id: I224c4dad98fa5bb50e62210f0ee30c0dd020e3a6\n"
    },
    {
      "commit": "d12e782bcee03ecb6dec41aa9673ef53b638dcea",
      "tree": "fdf9ff18d66bf7a5509b4d98dc4d19f7163ab830",
      "parents": [
        "292edf0dacca4b0220522c9b4465638da18dadf4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 25 10:26:40 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 25 12:33:31 2015 -0700"
      },
      "message": "ART: Reset runtime_throw_failure flag\n\nThe flag is instruction-specific. It transports the info from Fail\nto the main loop. It must be cleared after each iteration.\n\nIntroduce a second flag to store whether we saw such a failure at\nall.\n\nUpdate test expectations.\n\nBug: 22080519\nChange-Id: I32be914819946233babaa4cb7343844d97b61ba5\n"
    },
    {
      "commit": "414000ec4d728b5c85f8c6dee4f867fecde59b01",
      "tree": "d4260308a2e6c5b2c14d64bd3c72b6df7061e614",
      "parents": [
        "bcc9d2b5f07afb6d7e83d71179c3069825a69d7c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 23 17:45:21 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 25 10:46:07 2015 +0100"
      },
      "message": "Hard-fail get-/put-object to a non-reference field.\n\nBug: 21886894\nChange-Id: Iec870c223ce97fd90dcce05ae80c002e2b24cb5d\n"
    },
    {
      "commit": "1f1d53ebfc7f955c28f8d5659b7811ad6cef8f19",
      "tree": "388d243d441c2fab1aed725e52f591d1ffd5c095",
      "parents": [
        "2f233b481d8423bf09e295fea9608b68f09a1862",
        "a32210c53d23b73ba769053b8c1b214a7468fe6e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 24 21:31:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 24 21:31:01 2015 +0000"
      },
      "message": "Merge \"ART: Correctly hard-fail method with undefined register\""
    },
    {
      "commit": "a32210c53d23b73ba769053b8c1b214a7468fe6e",
      "tree": "bf85ea55e38add66912d95771eaf8dd36e8741eb",
      "parents": [
        "0c955b174bf64707ee0ee03195ed56f9cec26fa2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 24 10:26:13 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jun 24 14:20:48 2015 -0700"
      },
      "message": "ART: Correctly hard-fail method with undefined register\n\nIn case a return-object gets an undefined return value register\nand an unresolved return type, the \"undefined\" must take precedence\nand lead to a hard fail of the method.\n\nBug: 22045582\nChange-Id: Id5595a72331cd6272aa9ebc8ff3b9cea046294a2\n"
    },
    {
      "commit": "4824c27988c8eeb302791624bb3ce1d557b0db6c",
      "tree": "c14f74d9cc4c93cab04bee5c723e420a87db9cb3",
      "parents": [
        "22c4edd865bfdea29e80a789cef70e8e51d2a3a5"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 24 15:53:03 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 24 17:01:08 2015 +0100"
      },
      "message": "Use a flag from the verifier to know if we should compile.\n\nOnly used for the lack of bottom type in the aget-object case\nfor now. Could be used for more.\n\nbug:21865466\n\nChange-Id: I64c2c84dfa1c0d259631e65e5f44b94e4139e6a7\n"
    },
    {
      "commit": "f23f33de8b3e9abd16720e0f48d43d63d41dee16",
      "tree": "837e9d42fba572427596a6be4dbbb0745bdb47a3",
      "parents": [
        "ec3a4e7cdc4f268b40d923227c125429f4ee4884"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 23 14:18:17 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 23 16:02:16 2015 -0700"
      },
      "message": "ART: Follow-up to 507cc6f83bf6379728f2dd20391f2ed5fbfe6371\n\nDo not trigger DCHECK aborts for final and abstract classes when\nthey are used from other classes. Instead issue a soft error that\nleads to a runtime failure.\n\nBug: 21873151\nChange-Id: Ie5251a176722811b3c74585222874313a53f7e02\n"
    },
    {
      "commit": "ec3a4e7cdc4f268b40d923227c125429f4ee4884",
      "tree": "d9bc031c772d062c2168c4fd7e8f5d8c4a64093c",
      "parents": [
        "11dc78c8d36b4a65f4d955bc4303cc8279f1151e",
        "2ee54e249ad21c74f29a161e248bebe7d22fddf1"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jun 22 21:15:01 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 22 21:15:02 2015 +0000"
      },
      "message": "Merge \"runtime: Partially implement box-lambda and unbox-lambda experimental opcodes\""
    },
    {
      "commit": "2ee54e249ad21c74f29a161e248bebe7d22fddf1",
      "tree": "125465dd7a6d23f83ecbf2d3454f21471868422c",
      "parents": [
        "158f35c98e2ec0d40d2c032b8cdce5fb60944a7f"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Jun 18 10:05:11 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Mon Jun 22 14:13:30 2015 -0700"
      },
      "message": "runtime: Partially implement box-lambda and unbox-lambda experimental opcodes\n\nThese opcodes are not yet fully specified, and *will* change before they become shippable.\nDo not write production code against experimental opcodes.\n\n--\n\nImplement partial interpreter support for new dex instructions box/unbox-lambda.\n* box-lambda will take a closure and convert it into an Object\n* unbox-lambda will take an Object and convert it to a closure\n\n(Currently does not implement object identity or variable capture).\n\nAll new opcodes are disabled by default, use runtime option -Xexperimental-lambdas to enable them.\n\nChange-Id: I3c15ccf8a26ccecd1d35808a8c1b4149220f6019\n"
    },
    {
      "commit": "68df32091cc79468c81956633e279523b48ea8bf",
      "tree": "ac0868ff03740dc14800ebf02db202b9cbcc5101",
      "parents": [
        "59cb52189d350fa9fb38b767fa9b25d971375833"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 22 11:35:46 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 22 11:35:46 2015 -0700"
      },
      "message": "ART: Allow checking RETURN_VOID_NO_BARRIER on unresolved classes\n\nWe must check that all fields are non-final, even for unresolved\nclasses. Fall back to the dex file for this information.\n\nBug: 22005084\nBug: https://code.google.com/p/android/issues/detail?id\u003d177694\nChange-Id: If2126d1be5dccadbbedcdccabde7398688d6e5ca\n"
    },
    {
      "commit": "507cc6f83bf6379728f2dd20391f2ed5fbfe6371",
      "tree": "62aaeddc8dcf1fb652b92472d1327c31b4f84942",
      "parents": [
        "1e73a95d74848020fab512a95a7f9a7ada72497b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 19 22:58:47 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 19 22:58:47 2015 -0700"
      },
      "message": "ART: Disallow classes that are abstract and final\n\nMake the verifier fail such classes.\n\nBug: 21873151\nChange-Id: I217f3d71f44bccdcee7ca830e092c807928bed39\n"
    },
    {
      "commit": "a60bd74737fcd1b3737bc523741efa1097bbd782",
      "tree": "35069a0c16e84be12d599e6062fef8858ddecc89",
      "parents": [
        "ba7837b2308aeaaa613383297737488af558aed7",
        "ef0b1a1dbc99fe7c92f9598cbfc164763c1b66d7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Jun 20 04:03:20 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jun 20 04:03:21 2015 +0000"
      },
      "message": "Merge \"ART: Check for expected args for instance methods\""
    },
    {
      "commit": "ef0b1a1dbc99fe7c92f9598cbfc164763c1b66d7",
      "tree": "a644d45fae2717442d15927b196786ff175c56d8",
      "parents": [
        "0420f81a5c6c08bc62060b8ff5dda8949f9a9ce9"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 19 20:37:46 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 19 20:46:23 2015 -0700"
      },
      "message": "ART: Check for expected args for instance methods\n\nDon\u0027t assume that the receiver is expected. This was writing out\nof bounds (or triggering a DCHECK).\n\nBug: 21817284\nBug: 21872240\nBug: https://code.google.com/p/android/issues/detail?id\u003d176571\nBug: https://code.google.com/p/android/issues/detail?id\u003d176572\nChange-Id: I7cad2c1dfc39feb0b1b4660deeb43afdcb844ba3\n"
    },
    {
      "commit": "ba7837b2308aeaaa613383297737488af558aed7",
      "tree": "4e4b199a55ffa3b287e7dd3175f8b46ebd412f3d",
      "parents": [
        "d1a06338b9aa818b730ef1d46549a09af8f35c5b",
        "29498a23bcfe47a7134552aacad5524ecb484a49"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Jun 20 00:43:39 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jun 20 00:43:39 2015 +0000"
      },
      "message": "Merge \"ART: Check var-arg count earlier in method verifier\""
    },
    {
      "commit": "29498a23bcfe47a7134552aacad5524ecb484a49",
      "tree": "0f677bef57ab626caf3877e19df4e090920e2241",
      "parents": [
        "0420f81a5c6c08bc62060b8ff5dda8949f9a9ce9"
      ],
      "author": {
        "name": "Taiju Tsuiki",
        "email": "tzik@google.com",
        "time": "Mon Apr 13 14:21:00 2015 +0900"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 19 17:41:23 2015 -0700"
      },
      "message": "ART: Check var-arg count earlier in method verifier\n\nCheck the count in vararg instructions before filling the temp\narray. Avoids a DCHECK.\n\nBug: 21869663\nBug: 20170976\n\nChange-Id: I1ff93502ab84c5967ad54d1b50dba517da791637\n"
    },
    {
      "commit": "e43875749fbc674fbad23ba11af64f25ab2add0d",
      "tree": "8cd2ff04d87f76d87fa9c21c43fab04c9abe9c51",
      "parents": [
        "be59b85251f085359d40bb89b1aa7e037c8ac0ef",
        "66389fbeb41c981648bb2e1e7e2f43089f095591"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 11:02:16 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 19 11:02:17 2015 +0000"
      },
      "message": "Merge \"Verifier: check an aput, even if we know it will fail.\""
    },
    {
      "commit": "66389fbeb41c981648bb2e1e7e2f43089f095591",
      "tree": "f6de19a8521f2e33d5c75771867bcf569e6d2ef4",
      "parents": [
        "822c00d0fe3b70d1f1fe5bac03713674d45f8173"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 10:35:42 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 19 10:37:59 2015 +0100"
      },
      "message": "Verifier: check an aput, even if we know it will fail.\n\nbug:21867457\nChange-Id: I01e333d858995d0e1e083a50cf8d460a86381f2c\n"
    },
    {
      "commit": "247e97746016b49183b52f4c386bedf7cd53e590",
      "tree": "758c0a7c60c2099fb6a8cf2d4ea68ffc8c9459ac",
      "parents": [
        "2b696ab55e817b583d7b3b3ffd39e48c38db6989",
        "158f35c98e2ec0d40d2c032b8cdce5fb60944a7f"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Jun 18 19:56:57 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jun 18 19:56:58 2015 +0000"
      },
      "message": "Merge \"interpreter: Add experimental lambda opcodes for invoke/create-lambda\""
    },
    {
      "commit": "158f35c98e2ec0d40d2c032b8cdce5fb60944a7f",
      "tree": "63bb3bbed85b0add42c7fdc714cd611424d8af2e",
      "parents": [
        "c449e8b79aaaf156ce055524c41474cc1200ed5a"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Jun 10 15:55:30 2015 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu Jun 18 10:22:27 2015 -0700"
      },
      "message": "interpreter: Add experimental lambda opcodes for invoke/create-lambda\n\nThese opcodes are not yet fully specified, and *will* change before they become shippable.\nDo not write production code against experimental opcodes.\n\n--\n\nImplement partial interpreter support for new dex instructions invoke/create-lambda, and a\nnew opcode format 25x.\n\n* Does not verify, in fact verification will soft fail when we see those opcodes.\n* Compilers will punt to interpreter since they don\u0027t support new opcodes.\n* As there is no way to capture/liberate variables yet, the \"closure\" is just\n  an ArtMethod for the time being.\n\nAll new opcodes are disabled by default, use runtime option -Xexperimental-lambdas to enable them.\n\nFor example:\n  dalvikvm ... -Xexperimental-lambdas ...\n  dex2oat --runtime-arg -Xexperimental-lambdas ...\n\nChange-Id: I6c996ca32a9b54ec45ec21d7a959b84dfb8a24eb\n"
    },
    {
      "commit": "da9badb9edea5e0d18cd9f97eff0d0937ad48310",
      "tree": "ed2f0b85561daa715988f644482fbdd99995656d",
      "parents": [
        "ccd6337f31d13706c602f3d9436e9b4025075b63"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 05 20:22:12 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 09 11:25:42 2015 -0700"
      },
      "message": "ART: Check long and double register pairs in invokes\n\nFor invokes, ensure that long and double parameters are actually\nin registers pairs. We were testing the pair, but skipping the\nactual high parameter register.\n\nBug: 17410612\nChange-Id: I8f4c3335ea8b7dc3cf252bee52a5a706ae8905f8\n"
    },
    {
      "commit": "d9e230185873d9d998d77d17107029e0603e82d6",
      "tree": "7362a7e9a9f91591b36c3efdcebcb7cc0621649e",
      "parents": [
        "38b66b6fed1adcc1da4b931a32f78c5290a97c1e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 04 22:19:58 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sun Jun 07 15:29:40 2015 -0700"
      },
      "message": "ART: Reload class on miranda method in verifier\n\nWhen checking the receiver of a call and we have a miranda method,\nreload the class from the method index instead of using the declared\nclass - which is the interface class, not the abstract class.\n\nBug: 21646347\nChange-Id: I5bceab75c3b76233cb42ea5cf0214d32c8149994\n"
    },
    {
      "commit": "b588f4c037d27dedeef358b478c281ebb3fbb900",
      "tree": "e9ea063f9dea2612083f1938c981b8950b873f8c",
      "parents": [
        "c2ec62874804f341439455fb00a128010139d0fc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 26 13:35:39 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 01 09:51:45 2015 -0700"
      },
      "message": "ART: Fix wrong hard-failure handling in verifier\n\nCorrectly return null for the method when a hard failure is\nencountered. Also improve logging for order failures. Add a\nregression test.\n\nBug: 20224106\n\n(cherry picked from commit 3b74e275838729c5023cd80116f1b3b81306ee19)\n\nChange-Id: I6e08202617147378b204af169308b67fc69f92c6\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "dc31313c4577bb4c00d90774159c84e738ed348d",
      "tree": "5f850028ebc8843cdcaf56c5fc122bd660937603",
      "parents": [
        "03b5a398a96ea29c39ddfe3d810245b868d2871f",
        "80afd02024d20e60b197d3adfbb43cc303cf29e0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 17:42:31 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 26 17:42:31 2015 +0000"
      },
      "message": "Merge \"ART: Clean up arm64 kNumberOfXRegisters usage.\""
    },
    {
      "commit": "80afd02024d20e60b197d3adfbb43cc303cf29e0",
      "tree": "ef054c7b4f2a739f7cf063e0bc4c501c2c7e41b5",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 18:08:00 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:59:02 2015 +0100"
      },
      "message": "ART: Clean up arm64 kNumberOfXRegisters usage.\n\nAvoid undefined behavior for arm64 stemming from 1u \u003c\u003c 32 in\nloops with upper bound kNumberOfXRegisters.\n\nCreate iterators for enumerating bits in an integer either\nfrom high to low or from low to high and use them for\n\u003carch\u003eContext::FillCalleeSaves() on all architectures.\n\nRefactor runtime/utils.{h,cc} by moving all bit-fiddling\nfunctions to runtime/base/bit_utils.{h,cc} (together with\nthe new bit iterators) and all time-related functions to\nruntime/base/time_utils.{h,cc}. Improve test coverage and\nfix some corner cases for the bit-fiddling functions.\n\nBug: 13925192\nChange-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7\n"
    },
    {
      "commit": "3c651fc07bde1bfc375d2675c01ce9ccefdf2085",
      "tree": "e84936a4bf23318da1d29fa06f0e36ed225e0a89",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 21 14:06:46 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu May 21 14:34:34 2015 -0700"
      },
      "message": "ART: Sometimes even empty methods take forever to verify\n\nIn cases of very high load and/or bad scheduling, the verifier may\ntake longer than the threshold duration to verify an empty method.\nThe LargeMethod detection needs to accept that the code_item may\nbe null.\n\nBug: 21364300\n\n(cherry picked from commit 8110447356f559688d6290563e912af7f8d4709b)\n\nChange-Id: Iceff3e4688cc1a5fe7a836f7a9bf6c49a392b618\n"
    },
    {
      "commit": "a4f5bf6ea99d6b3095a4ca261352729633bc44c5",
      "tree": "2aeb69a85c319a3eb098aa2eec5bb0290b653268",
      "parents": [
        "9a85fe78f45768fbb4d3e5e138716d107d399b6c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon May 18 20:50:12 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon May 18 20:52:24 2015 -0700"
      },
      "message": "ART: Change huge-method warning in verifier\n\nChange the logging to be included in the took-a-long-time warning,\ninstead of being a non-descriptive standalone. This should reduce\nthe noise.\n\nBug: 21149450\nChange-Id: Ia4493dd12f54a8452a46541f6da86530584016ea\n"
    },
    {
      "commit": "848f70a3d73833fc1bf3032a9ff6812e429661d9",
      "tree": "b0349b3a40aab5a915af491b100659a5ca9fbbf6",
      "parents": [
        "d14438f0c5071962be7fab572b54687d32d9d087"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 15 13:49:50 2014 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 27 18:54:52 2015 -0700"
      },
      "message": "Replace String CharArray with internal uint16_t array.\n\nSummary of high level changes:\n  - Adds compiler inliner support to identify string init methods\n  - Adds compiler support (quick \u0026 optimizing) with new invoke code path\n    that calls method off the thread pointer\n  - Adds thread entrypoints for all string init methods\n  - Adds map to verifier to log when receiver of string init has been\n    copied to other registers. used by compiler and interpreter\n\nChange-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01\n"
    }
  ],
  "next": "c785344b87221f5e4e6473e5b762e4e61fe65dcf"
}
