[llvm-branch-commits] [cfe-branch] r311095 - Merging r310672:

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Aug 17 09:48:03 PDT 2017


Author: hans
Date: Thu Aug 17 09:48:03 2017
New Revision: 311095

URL: http://llvm.org/viewvc/llvm-project?rev=311095&view=rev
Log:
Merging r310672:
------------------------------------------------------------------------
r310672 | ahatanak | 2017-08-10 17:06:49 -0700 (Thu, 10 Aug 2017) | 7 lines

[Sema][ObjC] Fix spurious -Wcast-qual warnings.

We do not meaningfully track object const-ness of Objective-C object
types. Silence the -Wcast-qual warning that is issued when casting to or
from Objective-C object types results in losing const qualification.

rdar://problem/33807915
------------------------------------------------------------------------

Modified:
    cfe/branches/release_50/   (props changed)
    cfe/branches/release_50/lib/Sema/SemaCast.cpp
    cfe/branches/release_50/test/SemaObjC/illegal-nonarc-bridged-cast.m

Propchange: cfe/branches/release_50/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug 17 09:48:03 2017
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:308455,308722,308824,308897,308996,309054,309058,309112-309113,309226,309263,309327,309382-309383,309488,309503,309523,309569,309607,309633,309636,309640,309722,309752,309975,310006,310158,310191,310359,310516,310691-310692,310694,310700,310704,310706,310804,310829
+/cfe/trunk:308455,308722,308824,308897,308996,309054,309058,309112-309113,309226,309263,309327,309382-309383,309488,309503,309523,309569,309607,309633,309636,309640,309722,309752,309975,310006,310158,310191,310359,310516,310672,310691-310692,310694,310700,310704,310706,310804,310829
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_50/lib/Sema/SemaCast.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/lib/Sema/SemaCast.cpp?rev=311095&r1=311094&r2=311095&view=diff
==============================================================================
--- cfe/branches/release_50/lib/Sema/SemaCast.cpp (original)
+++ cfe/branches/release_50/lib/Sema/SemaCast.cpp Thu Aug 17 09:48:03 2017
@@ -552,7 +552,14 @@ CastsAwayConstness(Sema &Self, QualType
     Qualifiers SrcQuals, DestQuals;
     Self.Context.getUnqualifiedArrayType(UnwrappedSrcType, SrcQuals);
     Self.Context.getUnqualifiedArrayType(UnwrappedDestType, DestQuals);
-    
+
+    // We do not meaningfully track object const-ness of Objective-C object
+    // types. Remove const from the source type if either the source or
+    // the destination is an Objective-C object type.
+    if (UnwrappedSrcType->isObjCObjectType() ||
+        UnwrappedDestType->isObjCObjectType())
+      SrcQuals.removeConst();
+
     Qualifiers RetainedSrcQuals, RetainedDestQuals;
     if (CheckCVR) {
       RetainedSrcQuals.setCVRQualifiers(SrcQuals.getCVRQualifiers());

Modified: cfe/branches/release_50/test/SemaObjC/illegal-nonarc-bridged-cast.m
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_50/test/SemaObjC/illegal-nonarc-bridged-cast.m?rev=311095&r1=311094&r2=311095&view=diff
==============================================================================
--- cfe/branches/release_50/test/SemaObjC/illegal-nonarc-bridged-cast.m (original)
+++ cfe/branches/release_50/test/SemaObjC/illegal-nonarc-bridged-cast.m Thu Aug 17 09:48:03 2017
@@ -1,8 +1,9 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fblocks -verify %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fsyntax-only -fblocks -Wcast-qual -verify %s
 // rdar://10597832
 
 typedef const void *CFTypeRef;
 typedef const struct __CFString *CFStringRef;
+ at class NSString;
 
 @interface NSString
 @end
@@ -18,7 +19,7 @@ NSString *CreateNSString();
 void from_cf() {
   id obj1 = (__bridge_transfer id)CFCreateSomething(); // expected-warning {{'__bridge_transfer' casts have no effect when not using ARC}}
   id obj2 = (__bridge_transfer NSString*)CFCreateString(); // expected-warning {{'__bridge_transfer' casts have no effect when not using ARC}}
-  (__bridge int*)CFCreateSomething(); // expected-warning {{expression result unused}}
+  (__bridge int*)CFCreateSomething(); // expected-warning {{expression result unused}} expected-warning {{cast from 'const void *' to 'int *' drops const qualifier}}
   id obj3 = (__bridge id)CFGetSomething();
   id obj4 = (__bridge NSString*)CFGetString();
 }
@@ -41,3 +42,15 @@ void to_cf_ignored(id obj) {
   CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething(); // no-warning
   CFTypeRef cf3 = (__bridge CFTypeRef)CreateSomething(); // no-warning
 }
+
+// Check that clang doesn't warn about dropping const from Objective-C object
+// types.
+void test_wcast_qual() {
+  CFStringRef c;
+  NSString *n0 = (NSString *)c;
+  NSString **n1 = (NSString **)&c;
+  const NSString *n2;
+  const NSString **n3;
+  void *p0 = (void *)n2;
+  void **p1 = (void **)n3;
+}




More information about the llvm-branch-commits mailing list