Author: James Y Knight Date: 2019-11-04T16:26:53-05:00 New Revision: d11a9018b773c0359934a7989d886b02468112e4
URL: https://github.com/llvm/llvm-project/commit/d11a9018b773c0359934a7989d886b02468112e4 DIFF: https://github.com/llvm/llvm-project/commit/d11a9018b773c0359934a7989d886b02468112e4.diff LOG: Add release notes for commit ccc4d83cda16bea1d9dfd0967dc7d2cfb24b8e75. (Which was "[ObjC] Diagnose implicit type coercion from ObjC 'Class' to object pointer types.") Added: Modified: clang/docs/ReleaseNotes.rst Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 5363050ca69d..51bcd013df6d 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -166,7 +166,49 @@ C++1z Feature Support Objective-C Language Changes in Clang ------------------------------------- -- ... +- In both Objective-C and + Objective-C++, ``-Wcompare-distinct-pointer-types`` will now warn when + comparing ObjC ``Class`` with an ObjC instance type pointer. + + .. code-block:: objc + + Class clz = ...; + MyType *instance = ...; + bool eq = (clz == instance); // Previously undiagnosed, now warns. + +- Objective-C++ now diagnoses conversions between ``Class`` and ObjC + instance type pointers. Such conversions already emitted an + on-by-default ``-Wincompatible-pointer-types`` warning in Objective-C + mode, but had inadvertently been missed entirely in + Objective-C++. This has been fixed, and they are now diagnosed as + errors, consistent with the usual C++ treatment for conversions + between unrelated pointer types. + + .. code-block:: objc + + Class clz = ...; + MyType *instance = ...; + clz = instance; // Previously undiagnosed, now an error. + instance = clz; // Previously undiagnosed, now an error. + + One particular issue you may run into is attempting to use a class + as a key in a dictionary literal. This will now result in an error, + because ``Class`` is not convertable to ``id<NSCopying>``. (Note that + this was already a warning in Objective-C mode.) While an arbitrary + ``Class`` object is not guaranteed to implement ``NSCopying``, the + default metaclass implementation does. Therefore, the recommended + solution is to insert an explicit cast to ``id``, which disables the + type-checking here. + + .. code-block:: objc + + Class cls = ...; + + // Error: cannot convert from Class to id<NSCoding>. + NSDictionary* d = @{cls : @"Hello"}; + + // Fix: add an explicit cast to 'id'. + NSDictionary* d = @{(id)cls : @"Hello"}; OpenCL C Language Changes in Clang ---------------------------------- _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits