r310672 - [Sema][ObjC] Fix spurious -Wcast-qual warnings.
Akira Hatanaka via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 15 11:50:42 PDT 2017
Hans, is it okay to merge this to 5.0?
> On Aug 10, 2017, at 5:06 PM, Akira Hatanaka via cfe-commits <cfe-commits at lists.llvm.org> wrote:
>
> Author: ahatanak
> Date: Thu Aug 10 17:06:49 2017
> New Revision: 310672
>
> URL: http://llvm.org/viewvc/llvm-project?rev=310672&view=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&r1=310671&r2=310672&view=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 &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/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&r1=310671&r2=310672&view=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;
> + 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;
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list