Patch to warn when discarding objective-c pointer type qualifiers

Still some refactoring to do.

llvm-svn: 90830
This commit is contained in:
Fariborz Jahanian 2009-12-08 03:35:08 +00:00
parent a929407244
commit 4569f69558
2 changed files with 30 additions and 0 deletions

View File

@ -4434,6 +4434,16 @@ Sema::CheckAssignmentConstraints(QualType lhsType, QualType rhsType) {
if (rhsType->isObjCObjectPointerType()) {
if (lhsType->isObjCBuiltinType() || rhsType->isObjCBuiltinType())
return Compatible;
QualType lhptee =
lhsType->getAs<ObjCObjectPointerType>()->getPointeeType();
QualType rhptee =
rhsType->getAs<ObjCObjectPointerType>()->getPointeeType();
// make sure we operate on the canonical type
lhptee = Context.getCanonicalType(lhptee);
rhptee = Context.getCanonicalType(rhptee);
if (!lhptee.isAtLeastAsQualifiedAs(rhptee))
return CompatiblePointerDiscardsQualifiers;
if (Context.typesAreCompatible(lhsType, rhsType))
return Compatible;
if (lhsType->isObjCQualifiedIdType() || rhsType->isObjCQualifiedIdType())

View File

@ -0,0 +1,20 @@
// RUN: clang-cc -fsyntax-only -verify %s
typedef signed char BOOL;
@interface NSString
- (BOOL)isEqualToString:(NSString *)aString;
@end
static const NSString * Identifier1 = @"Identifier1";
static NSString const * Identifier2 = @"Identifier2";
static NSString * const Identifier3 = @"Identifier3";
int main () {
[@"Identifier1" isEqualToString:Identifier1]; // expected-warning {{sending 'NSString const *' discards qualifiers, expected 'NSString *'}}
[@"Identifier2" isEqualToString:Identifier2]; // expected-warning {{sending 'NSString const *' discards qualifiers, expected 'NSString *'}}
[@"Identifier3" isEqualToString:Identifier3];
return 0;
}