Re: r310672 - [Sema][ObjC] Fix spurious -Wcast-qual warnings.

2017-08-17 Thread Hans Wennborg via cfe-commits
Okay, merged in r311095.

On Tue, Aug 15, 2017 at 11:50 AM, Akira Hatanaka  wrote:
> Hans, is it okay to merge this to 5.0?
>
>> On Aug 10, 2017, at 5:06 PM, Akira Hatanaka via cfe-commits 
>>  wrote:
>>
>> Author: ahatanak
>> Date: Thu Aug 10 17:06:49 2017
>> New Revision: 310672
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=310672=rev
>> Log:
>> [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/trunk/lib/Sema/SemaCast.cpp
>>cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m
>>
>> Modified: cfe/trunk/lib/Sema/SemaCast.cpp
>> URL: 
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCast.cpp?rev=310672=310671=310672=diff
>> ==
>> --- cfe/trunk/lib/Sema/SemaCast.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaCast.cpp Thu Aug 10 17:06:49 2017
>> @@ -552,7 +552,14 @@ CastsAwayConstness(Sema , 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/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m
>> URL: 
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m?rev=310672=310671=310672=diff
>> ==
>> --- cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m (original)
>> +++ cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m Thu Aug 10 
>> 17:06:49 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;
>> +@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 **)
>> +  const NSString *n2;
>> +  const NSString **n3;
>> +  void *p0 = (void *)n2;
>> +  void **p1 = (void **)n3;
>> +}
>>
>>
>> ___
>> cfe-commits mailing list
>> cfe-commits@lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: r310672 - [Sema][ObjC] Fix spurious -Wcast-qual warnings.

2017-08-15 Thread Akira Hatanaka via cfe-commits
Hans, is it okay to merge this to 5.0?

> On Aug 10, 2017, at 5:06 PM, Akira Hatanaka via cfe-commits 
>  wrote:
> 
> Author: ahatanak
> Date: Thu Aug 10 17:06:49 2017
> New Revision: 310672
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=310672=rev
> Log:
> [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/trunk/lib/Sema/SemaCast.cpp
>cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m
> 
> Modified: cfe/trunk/lib/Sema/SemaCast.cpp
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCast.cpp?rev=310672=310671=310672=diff
> ==
> --- cfe/trunk/lib/Sema/SemaCast.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaCast.cpp Thu Aug 10 17:06:49 2017
> @@ -552,7 +552,14 @@ CastsAwayConstness(Sema , 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/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m?rev=310672=310671=310672=diff
> ==
> --- cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m (original)
> +++ cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m Thu Aug 10 17:06:49 
> 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;
> +@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 **)
> +  const NSString *n2;
> +  const NSString **n3;
> +  void *p0 = (void *)n2;
> +  void **p1 = (void **)n3;
> +}
> 
> 
> ___
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


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

2017-08-10 Thread Akira Hatanaka via cfe-commits
Author: ahatanak
Date: Thu Aug 10 17:06:49 2017
New Revision: 310672

URL: http://llvm.org/viewvc/llvm-project?rev=310672=rev
Log:
[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/trunk/lib/Sema/SemaCast.cpp
cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m

Modified: cfe/trunk/lib/Sema/SemaCast.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCast.cpp?rev=310672=310671=310672=diff
==
--- cfe/trunk/lib/Sema/SemaCast.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCast.cpp Thu Aug 10 17:06:49 2017
@@ -552,7 +552,14 @@ CastsAwayConstness(Sema , 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/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m?rev=310672=310671=310672=diff
==
--- cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m (original)
+++ cfe/trunk/test/SemaObjC/illegal-nonarc-bridged-cast.m Thu Aug 10 17:06:49 
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;
+@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 **)
+  const NSString *n2;
+  const NSString **n3;
+  void *p0 = (void *)n2;
+  void **p1 = (void **)n3;
+}


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits