[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