Re: r310672 - [Sema][ObjC] Fix spurious -Wcast-qual warnings.
Okay, merged in r311095. On Tue, Aug 15, 2017 at 11:50 AM, Akira Hatanakawrote: > 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.
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.
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