)]}'
{
  "commit": "3b8d539899d6651504edfbaaa2ea68eb9d7aa6ac",
  "tree": "cebec8b73d1d3ba1a8e41dfd889d75f437c2eb12",
  "parents": [
    "b15c08d32c072399e59c388bbf6a814831a0bb92"
  ],
  "author": {
    "name": "James Y Knight",
    "email": "jyknight@google.com",
    "time": "Thu Oct 17 15:27:04 2019 +0000"
  },
  "committer": {
    "name": "James Y Knight",
    "email": "jyknight@google.com",
    "time": "Thu Oct 17 15:27:04 2019 +0000"
  },
  "message": "[ObjC] Diagnose implicit type coercion from ObjC \u0027Class\u0027 to object\npointer types.\n\nFor example, in Objective-C mode, the initialization of \u0027x\u0027 in:\n```\n  @implementation MyType\n  + (void)someClassMethod {\n    MyType *x \u003d self;\n  }\n  @end\n```\nis correctly diagnosed with an incompatible-pointer-types warning, but\nin Objective-C++ mode, it is not diagnosed at all -- even though\nincompatible pointer conversions generally become an error in C++.\n\nThis patch fixes that oversight, allowing implicit conversions\ninvolving Class only to/from unqualified-id, and between qualified and\nunqualified Class, where the protocols are compatible.\n\nNote that this does change some behaviors in Objective-C, as well, as\nshown by the modified tests.\n\nOf particular note is that assignment from from \u0027Class\u003cMyProtocol\u003e\u0027 to\n\u0027id\u003cMyProtocol\u003e\u0027 now warns. (Despite appearances, those are not\ncompatible types. \u0027Class\u003cMyProtocol\u003e\u0027 is not expected to have instance\nmethods defined by \u0027MyProtocol\u0027, while \u0027id\u003cMyProtocol\u003e\u0027 is.)\n\nDifferential Revision: https://reviews.llvm.org/D67983\n\ngit-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@375125 91177308-0d34-0410-b5e6-96231b3b80d8\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1a3bde00eecaef84852e79deb16fd71f5935e71f",
      "old_mode": 33188,
      "old_path": "lib/AST/ASTContext.cpp",
      "new_id": "cda51ec755a8d645af6c237dc048fe1aa7df0108",
      "new_mode": 33188,
      "new_path": "lib/AST/ASTContext.cpp"
    },
    {
      "type": "modify",
      "old_id": "6e3980275a0b409512e298e3b7c213fd3ddde4e8",
      "old_mode": 33188,
      "old_path": "lib/Sema/SemaExpr.cpp",
      "new_id": "333983a430df6dadc87516e7773f4984e87759f7",
      "new_mode": 33188,
      "new_path": "lib/Sema/SemaExpr.cpp"
    },
    {
      "type": "modify",
      "old_id": "9b62f974927735e66df0c80c01da4e42e1b98dc1",
      "old_mode": 33188,
      "old_path": "test/SemaObjC/comptypes-1.m",
      "new_id": "67b73ce0f8a78111233d37aa63745a4526611f41",
      "new_mode": 33188,
      "new_path": "test/SemaObjC/comptypes-1.m"
    },
    {
      "type": "modify",
      "old_id": "560c1a14a5d745d7989c56cf06f283efd3a9903b",
      "old_mode": 33188,
      "old_path": "test/SemaObjCXX/class-method-self.mm",
      "new_id": "bb0b60145a4f564f33a3bd090fdc4c6668e22aa0",
      "new_mode": 33188,
      "new_path": "test/SemaObjCXX/class-method-self.mm"
    },
    {
      "type": "modify",
      "old_id": "e1fbef5d9b347666b73a55693ae98724d59e552e",
      "old_mode": 33188,
      "old_path": "test/SemaObjCXX/comptypes-1.mm",
      "new_id": "abb87775d152b8f365215963a17ccbc579c87a6a",
      "new_mode": 33188,
      "new_path": "test/SemaObjCXX/comptypes-1.mm"
    },
    {
      "type": "modify",
      "old_id": "ca6c506affe5fd61d4719fd04aa766c07ee9106f",
      "old_mode": 33188,
      "old_path": "test/SemaObjCXX/comptypes-7.mm",
      "new_id": "010c2cacc484e7377f1f39581d1fd28dcad34fd2",
      "new_mode": 33188,
      "new_path": "test/SemaObjCXX/comptypes-7.mm"
    },
    {
      "type": "modify",
      "old_id": "95e65274fd516f37d07c72a6592d2cdad7c96df2",
      "old_mode": 33188,
      "old_path": "test/SemaObjCXX/instancetype.mm",
      "new_id": "3030d043f4de568e2089fb116dd569eeb0aaa016",
      "new_mode": 33188,
      "new_path": "test/SemaObjCXX/instancetype.mm"
    }
  ]
}
