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; +@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; +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits