[cfe-commits] r90830 - in /cfe/trunk: lib/Sema/SemaExpr.cpp test/SemaObjC/method-arg-qualifier-warning.m
Fariborz Jahanian
fjahanian at apple.com
Mon Dec 7 19:35:08 PST 2009
Author: fjahanian
Date: Mon Dec 7 21:35:08 2009
New Revision: 90830
URL: http://llvm.org/viewvc/llvm-project?rev=90830&view=rev
Log:
Patch to warn when discarding objective-c pointer type qualifiers
Still some refactoring to do.
Added:
cfe/trunk/test/SemaObjC/method-arg-qualifier-warning.m
Modified:
cfe/trunk/lib/Sema/SemaExpr.cpp
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=90830&r1=90829&r2=90830&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Dec 7 21:35:08 2009
@@ -4434,6 +4434,16 @@
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())
Added: cfe/trunk/test/SemaObjC/method-arg-qualifier-warning.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/method-arg-qualifier-warning.m?rev=90830&view=auto
==============================================================================
--- cfe/trunk/test/SemaObjC/method-arg-qualifier-warning.m (added)
+++ cfe/trunk/test/SemaObjC/method-arg-qualifier-warning.m Mon Dec 7 21:35:08 2009
@@ -0,0 +1,20 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+
+typedef signed char BOOL;
+
+ at interface NSString
+- (BOOL)isEqualToString:(NSString *)aString;
+ at 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;
+}
+
More information about the cfe-commits
mailing list