)]}'
{
  "commit": "45a3109dbb476d2b4a99830e2be38fd257127c89",
  "tree": "138f64769525e971e8a980cccf12777c6f5e4da1",
  "parents": [
    "dbc7f4efd2d6573e11490a57be1f40bfb06e1179"
  ],
  "author": {
    "name": "Eric Fiselier",
    "email": "eric@efcs.ca",
    "time": "Fri Sep 13 16:09:33 2019 +0000"
  },
  "committer": {
    "name": "Eric Fiselier",
    "email": "eric@efcs.ca",
    "time": "Fri Sep 13 16:09:33 2019 +0000"
  },
  "message": "Recommit r370502: Make `vector` unconditionally move elements when\nexceptions are disabled.\n\nThe patch was reverted due to some confusion about non-movable types. ie\ntypes\nthat explicitly delete their move constructors. However, such types do\nnot meet\nthe requirement for `MoveConstructible`, which is required by\n`std::vector`:\n\nSummary:\n\n`std::vector\u003cT\u003e` is free choose between using copy or move operations\nwhen it\nneeds to resize. The standard only candidates that the correct exception\nsafety\nguarantees are provided. When exceptions are disabled these guarantees\nare\ntrivially satisfied. Meaning vector is free to optimize it\u0027s\nimplementation by\nmoving instead of copying.\n\nThis patch makes `std::vector` unconditionally move elements when\nexceptions are\ndisabled. This optimization is conforming according to the current\nstandard wording.\n\nThere are concerns that moving in `-fno-noexceptions`mode will be a\nsurprise to\nusers. For example, a user may be surprised to find their code is slower\nwith\nexceptions enabled than it is disabled. I\u0027m sympathetic to this\nsurprised, but\nI don\u0027t think it should block this optimization.\n\nReviewers: mclow.lists, ldionne, rsmith\nReviewed By: ldionne\nSubscribers: zoecarver, christof, dexonsmith, libcxx-commits\nTags: #libc\nDifferential Revision: https://reviews.llvm.org/D62228\n\ngit-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@371867 91177308-0d34-0410-b5e6-96231b3b80d8\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "321d5fee12a8dcdfa28773afe33dbc0c372c2510",
      "old_mode": 33188,
      "old_path": "include/memory",
      "new_id": "12573ca80116180730ef56aae28f9a2bd8b482f3",
      "new_mode": 33188,
      "new_path": "include/memory"
    },
    {
      "type": "modify",
      "old_id": "2d83484aa20e3471d972289aa7635b710f06a007",
      "old_mode": 33188,
      "old_path": "include/vector",
      "new_id": "be4894a89e2fea777022a27eb7eec887867d96fb",
      "new_mode": 33188,
      "new_path": "include/vector"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1e9cbde0114b24aaea79e3bd655aeb1e10153f07",
      "new_mode": 33188,
      "new_path": "test/libcxx/containers/sequences/vector/exception_safety_exceptions_disabled.sh.cpp"
    },
    {
      "type": "delete",
      "old_id": "b24736e22b6b1395456a85361b43838b9d5f73d3",
      "old_mode": 33188,
      "old_path": "test/std/containers/sequences/vector/vector.modifiers/resize.copy_only.pass.sh.cpp",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2b4a5a9e2cd76205d1955e5a0cf79771ac415d4c",
      "new_mode": 33188,
      "new_path": "test/std/containers/sequences/vector/vector.modifiers/resize_not_move_insertable.fail.cpp"
    }
  ]
}
