)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "d0ad2eea51850ed5972c23d03380b2305cdf7cb7",
      "tree": "533baced17c6dc3860e0e2121ce06acde57b8f4d",
      "parents": [
        "917f0866f66d3465fa41ddcf9ab09eba2fa78dd3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 31 14:59:59 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 09 15:18:14 2015 -0700"
      },
      "message": "Add support for nested method verifiers\n\nCan occur in the following scenario:\nMethodVerifier::Verify -\u003e MethodVerifier::GetStaticField -\u003e\nResolveFieldJLS -\u003e  ThrowNoSuchFieldError -\u003e EnsureInitialized -\u003e\nVerifyClass\n\nAlso fixed another case where we can be requested to dump for ANR\nwhile we are suspended in one of the AllowSuspension points.\n\nBug: 20140397\n\nChange-Id: Ib17f6b98954caa5d1ea1c1dcde66091cc6d11c25\n"
    },
    {
      "commit": "65b798ea10dd716c1bb3dda029f9bf255435af72",
      "tree": "774e9901b6917989a63f07f927c3b4d8b921a013",
      "parents": [
        "c411c6cc327d3f2b3b4d1987b07dd442205d9454"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 06 09:35:22 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 06 14:05:07 2015 -0700"
      },
      "message": "ART: Enable more Clang warnings\n\nChange-Id: Ie6aba02f4223b1de02530e1515c63505f37e184c\n"
    },
    {
      "commit": "bb87e0f1a52de656bc77cb01cb887e51a0e5198b",
      "tree": "113f014c6e20fab3e936a3ac05f9f738639541f6",
      "parents": [
        "e57fc0f0260fcb1d08cbb720ec95c04c0f394b91"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 03 11:21:55 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 06 10:44:37 2015 -0700"
      },
      "message": "Refactor and improve GC root handling\n\nChanged GcRoot to use compressed references. Changed root visiting to\nuse virtual functions instead of function pointers. Changed root visting\ninterface to be an array of roots instead of a single root at a time.\nAdded buffered root marking helper to avoid dispatch overhead.\n\nRoot marking seems a bit faster on EvaluateAndApplyChanges due to batch\nmarking. Pause times unaffected.\n\nMips64 is untested but might work, maybe.\n\nBefore:\nMarkConcurrentRoots: Sum: 67.678ms 99% C.I. 2us-664.999us Avg: 161.138us Max: 671us\n\nAfter:\nMarkConcurrentRoots: Sum: 54.806ms 99% C.I. 2us-499.986us Avg: 136.333us Max: 602us\n\nBug: 19264997\n\nChange-Id: I0a71ebb5928f205b9b3f7945b25db6489d5657ca\n"
    },
    {
      "commit": "daaf3265806eb2eadb2e03302bd68022fab5ca28",
      "tree": "aff5d6d53d6d2b65995aa204839f88ee66400989",
      "parents": [
        "68e22f3b982ff9ccbdfb3b65b7cfc16fcae907ba"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 24 13:30:28 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Mar 29 14:13:08 2015 -0700"
      },
      "message": "Add AccessibleObject and Field to mirror\n\nMain motivation is to remove all the functionality / field access on\njava side to ArtField. Also comes with some reflection speedups /\nslowdowns.\n\nSummary results:\ngetDeclaredField/getField are slower mostly due to JNI overhead.\nHowever, there is a large speedup in getInt, setInt,\nGetInstanceField, and GetStaticField.\n\nBefore timings (N5 --compiler-filter\u003deverything):\n\n                       benchmark      ns linear runtime\n          Class_getDeclaredField  782.86 \u003d\u003d\u003d\n                  Class_getField  832.77 \u003d\u003d\u003d\n                    Field_getInt  160.17 \u003d\n                    Field_setInt  195.88 \u003d\n                GetInstanceField 3214.38 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  GetStaticField 6809.49 \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\n\nAfter:\n          Class_getDeclaredField 1068.15 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  Class_getField 1180.00 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                    Field_getInt  121.85 \u003d\n                    Field_setInt  139.98 \u003d\n                GetInstanceField 1986.15 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  GetStaticField 2523.63 \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\n\nBug: 19264997\n\nChange-Id: Ic0d0fc1b56b95cd6d60f8e76f19caeaa23045c77\n"
    },
    {
      "commit": "16f149c2cb43a14d8f33d7d0fa36cd784e900f07",
      "tree": "299d484c007d373c68e22008ddedfacbd0c044f2",
      "parents": [
        "cac51526bbd03947676a8d49700425b19a57e447"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 23 10:10:20 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 26 15:03:46 2015 -0700"
      },
      "message": "ART: Change RETURN_OBJECT verification for arrays\n\nArrays appear to be valid (as according to spec), even if their\ncomponents are erroneous. If a component is erroneous, it may not\nhave loaded superclass or interface information, and so fail a\ndirect check for assignability.\n\nAdd a cutout that checks whether the declared return-type or the\nactual return-type are arrays with erroneous components (and if so,\nhave the same \u0027depth\u0027). In that case, generate a soft instead of a\nhard error.\n\nAlso includes a fix to DumpClass.\n\nBug: 19683465\nChange-Id: Ie73de03adeb0af7e939370d7363684fe125d7994\n"
    },
    {
      "commit": "9ccd151d0d27a729f88af9d00285afe4d147981a",
      "tree": "edfef268a0ecda957dfaa91ec35dd99c9ad3761f",
      "parents": [
        "3743174267159ec0c39bce1ca28c2081468dda94"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Mar 20 18:11:45 2015 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Fri Mar 20 18:40:32 2015 -0700"
      },
      "message": "Fix verifier handling of empty switch as last instruction.\n\nAlso fixes optimizing compiler\u0027s assumption that switch is non-empty and\nadds test case.\n\nBug: 19827056\nChange-Id: I5ac891d5062f528ef3be787b1094cba7b4c0fbd0\n"
    },
    {
      "commit": "e86deeffad79c00ed2ebede04f4adc348bda790c",
      "tree": "f0952116fe2fa933c8c9827e83caf4432f0339da",
      "parents": [
        "2f5904383a7b7ffb741c8839ec3c60762860bad3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 19 13:43:37 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 20 10:26:42 2015 -0700"
      },
      "message": "Add verify-at-runtime compiler filter\n\nVerifies at runtime only, instead of at compilation time.\nAOSP HH boot time after clean-oat: ~30s instead of ~35s if enabled.\nAlso helps install time if enabled there.\n\nTODO: See if there is any possible deadlocks that can result from\nthis.\n\nBug: 19762303\n\nChange-Id: Ibfba77148da9039e8d7d7497c05486bc044eefe7\n"
    },
    {
      "commit": "d7cbf8a6629942e7bd315ffae7e1c77b082f3e11",
      "tree": "fc8c3371ed4ddac96bbe90a2f94ef5fb5c5472ee",
      "parents": [
        "f5988cf0c47ff935bb19c89ed0398be5fbe44bb6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 19 12:43:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 19 20:00:50 2015 -0700"
      },
      "message": "Change RETURN_VOID_BARRIER to RETURN_VOID_NO_BARRIER\n\nWe want to default to having a barrier for the case where we don\u0027t\ndex to dex.\n\nBug: 19762303\nChange-Id: I60348d89eaf0b9e1e480298afcecbb5f52e8661b\n"
    },
    {
      "commit": "12d625f87bcd6c4059a205bb39007a255f57f382",
      "tree": "b69f6f80f56977c176e0c441869d2f1de06ede70",
      "parents": [
        "b871a15f1f662c8efe10d41199180bd00b6decd1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 13 11:33:37 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 13 16:38:25 2015 -0700"
      },
      "message": "Change method verifiers to be thread local roots\n\nBug: 10921004\n\nChange-Id: I3a1425d76cd380587ba67ef6d5ec1227564e55bf\n"
    },
    {
      "commit": "d7f8d05987e08723de008ba6dbbf66acb7db0f24",
      "tree": "b7c7eba735371151df11ca6d428a66468d72b308",
      "parents": [
        "63a63fc38115c415863b8b2d56b012ae3d9e00c7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 12 11:05:47 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 12 11:08:21 2015 -0700"
      },
      "message": "ART: Save work-line for pending runtime failure\n\nWhen we detect a pending runtime failure, we\u0027ll handle it as a\ngeneric throw, no matter the instruction type. But we won\u0027t have\nsaved the work-line, which means we\u0027ll try to merge garbage into\nthe handler\u0027s line.\n\nCopy the work-line when we set the failure.\n\nBug: 19634276\nChange-Id: I54df9e9492cd48802f93e2f1938adaadc55c9bd5\n"
    },
    {
      "commit": "091d238936809f6668ca6b7606c62bc224add430",
      "tree": "90feb09ea9d398f1f80ffa407747496e57e592fe",
      "parents": [
        "637455782147a41fbde2e284c49ca5e02d3444c2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 06 10:59:06 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 11 12:43:07 2015 -0700"
      },
      "message": "Fix incompatible class change error for JIT stress mode\n\nThere was a problem with miranda methods, when we would dequicken to\none of these, it wouldn\u0027t resolve as virtual during the method\nlowering resolve. The solution is to try resolving as interface if we\nfail to resolve as virtual.\n\nFixed a bug in dequickening where unreachable register lines with\nquick invokes would cause CHECK failuers. In this case we punt to the\ninterpreter (test 435-try-*).\n\nAdded test regression test. Example failure:\njava.lang.IncompatibleClassChangeError: The method\n\u0027void Main$TheInterface.m()\u0027 was expected to be of type virtual but\ninstead was found to be of type interface (declaration of\n\u0027java.lang.reflect.ArtMethod\u0027 appears in\nout/host/linux-x86/framework/core-libart-hostdex.jar)\n  at Main.DoStuff(Main.java:37)\n  at Main.main(Main.java:44)\n\nBug: 17950037\n\nChange-Id: I39c32cc8849bf02032a4f61a7ce57462b7fcac75\n"
    },
    {
      "commit": "e5f13e57ff8fa36342beb33830b3ec5942a61cca",
      "tree": "02e370ecc4e0d955f28bfc71a41015f94fbb19b7",
      "parents": [
        "354d58ba776866ea7b1c71f0d0848d5aaa013ae3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 09:37:21 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 10:47:02 2015 -0800"
      },
      "message": "Revert \"Revert \"Add JIT\"\"\n\nAdded missing EntryPointToCodePointer.\n\nThis reverts commit a5ca888d715cd0c6c421313211caa1928be3e399.\n\nChange-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af\n"
    },
    {
      "commit": "a5ca888d715cd0c6c421313211caa1928be3e399",
      "tree": "bdb08a2cbcf277ab7f02626a23b52a3fdf272ffe",
      "parents": [
        "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "message": "Revert \"Add JIT\"\n\nSorry, run-test crashes on target:\n0-05 12:15:51.633 I/DEBUG   (27995): Abort message: \u0027art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast\u003cuintptr_t\u003e(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc\u003d71e3366b code\u003d0x71e3362d size\u003dad000000\u0027\n10-05 12:15:51.633 I/DEBUG   (27995):     r0 00000000  r1 0000542b  r2 00000006  r3 00000000\n10-05 12:15:51.633 I/DEBUG   (27995):     r4 00000006  r5 b6f9addc  r6 00000002  r7 0000010c\n10-05 12:15:51.633 I/DEBUG   (27995):     r8 b63fe1e8  r9 be8e1418  sl b6427400  fp b63fcce0\n10-05 12:15:51.633 I/DEBUG   (27995):     ip 0000542b  sp be8e1358  lr b6e9a27b  pc b6e9c280  cpsr 40070010\n10-05 12:15:51.633 I/DEBUG   (27995): \n\nBug: 17950037\nThis reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4.\n\nChange-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3\n"
    },
    {
      "commit": "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4",
      "tree": "140026ff9638ff34050680b6c706b82fa1740b56",
      "parents": [
        "38fee8ef4bc0f4dbe2c6d1f5585895f0c4d16984"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 17 10:38:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 23 16:45:49 2015 -0800"
      },
      "message": "Add JIT\n\nCurrently disabled by default unless -Xjit is passed in.\n\nThe proposed JIT is a method JIT which works by utilizing interpreter\ninstrumentation to request compilation of hot methods async during\nruntime.\n\nJIT options:\n-Xjit / -Xnojit\n-Xjitcodecachesize:N\n-Xjitthreshold:integervalue\n\nThe JIT has a shared copy of a compiler driver which is accessed\nby worker threads to compile individual methods.\n\nAdded JIT code cache and data cache, currently sized at 2 MB\ncapacity by default. Most apps will only fill a small fraction of\nthis cache however.\n\nAdded support to the compiler for compiling interpreter quickened\nbyte codes.\n\nAdded test target ART_TEST_JIT\u003dTRUE and --jit for run-test.\n\nTODO:\nClean up code cache.\nDelete compiled methods after they are added to code cache.\nAdd more optimizations related to runtime checks e.g. direct pointers\nfor invokes.\nAdd method recompilation.\nMove instrumentation to DexFile to improve performance and reduce\nmemory usage.\n\nBug: 17950037\n\nChange-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca\n"
    },
    {
      "commit": "270a0e16c3b8e5b95cbfdbd8996ac137c7c6322b",
      "tree": "2800649d19ffcdc891118a458f6b0169022d93e0",
      "parents": [
        "951d70b42400453f9d1746d155b8337c07c86acc"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 16 19:49:09 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jan 23 17:26:45 2015 +0100"
      },
      "message": "Fix exception handling during deoptimization\n\nWhen interpreting a deoptimized shadow frame, we may start with a\npending exception thrown by a previous deoptimized shadow frame (from\na previous invoke). Therefore, we need to handle it before executing\nany instruction, otherwise we execute incorrect code.\n\nBecause we need the DEX pc of the throwing instruction to find a\nmatching catch handler, we initialize deoptimized shadow frames with\nthe current DEX pc at the time the stack is deoptimized.\nWhen we are about to interpret a deoptimized shadow frame, we need to\nupdate the shadow frame with the DEX pc of the next instruction to\ninterpret. There are three cases:\n- if there is no pending exception, this is the instruction following\nthe current one.\n- if there is a pending exception and we found a matching catch\nhandler, this is the first instruction of this handler.\n- if there is a pending exception but there is no matching catch\nhandler, we do not execute the deoptimized shadow frame and continue\nto its caller.\n\nThe verifier now fails when a method starts with a move-exception\ninstruction. Indeed we cannot start executing a method with a pending\nexception.\n\nBug: 19057915\nBug: 19041195\nBug: 18607595\nChange-Id: I355ac81e6ac098edc7e3cc8c13dbfa24a2969ab2\n"
    },
    {
      "commit": "4306ef8a7ec8e3887e51f64e80d940d974cc3ac3",
      "tree": "5afff3c97de1458886154aa5e84e1c0ae0edf11f",
      "parents": [
        "d30feca670d0af02783bbdfd4a29c5078c18bdc5"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 19 18:41:47 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 06 14:12:18 2015 -0800"
      },
      "message": "Don\u0027t allow suspension from FindLocksAtDexPc\n\nTransitioning to suspended from runnable sometimes runs dump\ncheckpoints in ThreadStress which can cause deadlocks. This happens\nsince FindLocksAtDexPC runs the verifier which calls\nAllowThreadSuspension. This results in a blocked thread which holds\nthe monitor lock, and if another thread tries to do a monitor enter,\nit deadlocks while holding the mutator lock (assuming the GC is\nsuspending all).\n\nThe fix for avoiding this deadlock is not calling\nAllowThreadSuspension from FindLocksAtDexPc.\n\nBug: 18576985\nChange-Id: I7e5faaf3bbbd5b5f680de95d53c33b5106705b0c\n"
    },
    {
      "commit": "7e541c91997b7747fa79014a8ea540395e54efc8",
      "tree": "ccd47096963dae48cad1a268f545fdd9b86d788e",
      "parents": [
        "5c79aec9d53d1320041d5a52e5115d78d16035b7"
      ],
      "author": {
        "name": "Stephen Kyle",
        "email": "stephen.kyle@arm.com",
        "time": "Wed Dec 17 17:10:02 2014 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 22 13:26:32 2014 -0800"
      },
      "message": "ART: Fix verification of constructors.\n\nSummary:\n\nA constructor must call its superclass constructor. However, if one\nreplaces the invoke-direct superclass.\u003cinit\u003e() instruction with a\nvariety of instructions, the verifier would NOT complain that the\nsuperclass constructor hadn\u0027t been called.\n\nDetailed explanation:\n\nThis was because if we are verifying the return-void insn of a\nconstructor, then we check that the register line doesn\u0027t contain a\nregister with an UninitializedThis type. With a method like follows:\n\nClass.\u003cinit\u003e()V:\n  return-void\n\nThen we hit the return-void, see the UninitializedThis, and fail the\nmethod. However, with a method like follows:\n\nClass.\u003cinit\u003e()V:\n  nop\n  return-void\n\nAny insn that continues or branches onto a return-void instruction will\nmark all of the registers as Conflict. This meant that the check in\nreturn-void for an UninitializedThis residing the register line would\n_always_ pass if there were any insns before it - the entire line had\nbeen set to Conflict.\n\nThe fix is to bring the check for an UninitializedThis forward to the\npoint just before we set all registers to Conflict, if we\u0027re about to\nhit a return-void insn in a constructor. It still needs to be done\nagain in the verification of return-void itself, to avoid the solo\nreturn-void case.\n\nThis patch also deals with the case where the only remaining\nUninitializedThis reference is overwritten, to avoid a method like the\nfollowing from getting through verification:\n\nClass.\u003cinit\u003e()V:\n  const/4 v0, 0\n  return-void\n\nBug: 18800943\n\nChange-Id: I2e317261844d3b6c78e35228669f3da173316570\nFuzzed-With: https://android-review.googlesource.com/#/c/119463/\n"
    },
    {
      "commit": "d691045e08f8c83892298f8e300616537c30cd8e",
      "tree": "ad7a0a1df7b9cdf9850b194a3384518d07df3e14",
      "parents": [
        "68a8f5e9e9cda48002394cc4d0ca6fe98edd23f3",
        "76bd88005bba706f98c4b3eb23a226d184d85152"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 11 19:25:43 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 11 19:25:44 2014 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Ensure void type is resolved when running without image\"\"\""
    },
    {
      "commit": "36b58f5ebb85d58f8b5966b8577a6dfe720d1e16",
      "tree": "c7eca5ae2a6ceea65a7aa2e489b6ea84efbad1f1",
      "parents": [
        "86ff0892aae3b13a105ce2fd58c39591f315c049"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 10 12:06:45 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 11 11:07:35 2014 -0800"
      },
      "message": "Add verifier support for dequickening\n\nAlso some cleanup.\n\nBug: 17950037\n\nChange-Id: I1f50fe07f1558e9c4f78953b7afa639d7f310b3c\n"
    },
    {
      "commit": "76bd88005bba706f98c4b3eb23a226d184d85152",
      "tree": "7641a41fdc156de9664de19d41b2b2febd61d9be",
      "parents": [
        "3e465bec65067ebfdf662469cf85dd82cd077bdd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 10 16:43:58 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 10 18:59:49 2014 -0800"
      },
      "message": "Revert \"Revert \"Ensure void type is resolved when running without image\"\"\n\nAccept the verification status of image classes out of oat files even\nwhen the image could not be loaded. This is necessary as the dex files\nmight be quickened and the verifier can\u0027t work on them when the runtime\nis not started.\n\nThis reverts commit fe382b5296ef132316d8883a0bdf8cb00d40d16b.\n\nBug: 18338511\nBug: 18705942\nChange-Id: I3516acaaa65f05395c14da0701d1049ba80acb12\n"
    },
    {
      "commit": "b3991da5e3396f039b573f85a6f3f4638b50270b",
      "tree": "1139b18aa3dd4d278ad6756cee2a14c3223c286a",
      "parents": [
        "53ab5a68373152355cd8b7699dd8395ae5503a7b",
        "ffc605cd817e79d6c7602a87543bb31f24d3a99f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 10 19:52:03 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 10 19:52:04 2014 +0000"
      },
      "message": "Merge \"Add missing iget quick for bool, byte, char, short\""
    },
    {
      "commit": "ffc605cd817e79d6c7602a87543bb31f24d3a99f",
      "tree": "84e4e68b11fe2d9c8c2e901b858026c1ebe88973",
      "parents": [
        "b1a38e246cfbfb21100d9c9e57f33970e824f075"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 10 10:35:44 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 10 11:45:44 2014 -0800"
      },
      "message": "Add missing iget quick for bool, byte, char, short\n\nBug: 17791557\nBug: 17671806\nChange-Id: Ifac4fbfba6c3a3f97131e85914b24756fb7f9722\n"
    }
  ],
  "next": "be6fa5eb4a571e14481cf43f4cb264629c069153"
}
