]> granicus.if.org Git - clang/commitdiff
"const id<NSFoo> *" instead of "id<NSFoo> const *".
authorChris Lattner <sabre@nondot.org>
Sun, 5 Sep 2010 00:43:21 +0000 (00:43 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 5 Sep 2010 00:43:21 +0000 (00:43 +0000)
I think this wraps up all the legal cases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113096 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/TypePrinter.cpp
test/SemaObjC/method-arg-qualifier-warning.m
test/SemaObjCXX/objc-pointer-conv.mm

index 21f855b8e8887d7d07c70343dda07ac9acf9cc71..b8ce77b7f8fe102954647e1d6364bcaa24727fc7 100644 (file)
@@ -680,14 +680,19 @@ void TypePrinter::PrintObjCObjectPointer(const ObjCObjectPointerType *T,
                                          std::string &S) { 
   std::string ObjCQIString;
   
+  T->getPointeeType().getLocalQualifiers().getAsStringInternal(ObjCQIString, 
+                                                               Policy);
+  if (!ObjCQIString.empty())
+    ObjCQIString += ' ';
+    
   if (T->isObjCIdType() || T->isObjCQualifiedIdType())
-    ObjCQIString = "id";
+    ObjCQIString += "id";
   else if (T->isObjCClassType() || T->isObjCQualifiedClassType())
-    ObjCQIString = "Class";
+    ObjCQIString += "Class";
   else if (T->isObjCSelType())
-    ObjCQIString = "SEL";
+    ObjCQIString += "SEL";
   else
-    ObjCQIString = T->getInterfaceDecl()->getNameAsString();
+    ObjCQIString += T->getInterfaceDecl()->getNameAsString();
   
   if (!T->qual_empty()) {
     ObjCQIString += '<';
@@ -701,9 +706,6 @@ void TypePrinter::PrintObjCObjectPointer(const ObjCObjectPointerType *T,
     ObjCQIString += '>';
   }
   
-  T->getPointeeType().getLocalQualifiers().getAsStringInternal(ObjCQIString, 
-                                                               Policy);
-  
   if (!T->isObjCIdType() && !T->isObjCQualifiedIdType())
     ObjCQIString += " *"; // Don't forget the implicit pointer.
   else if (!S.empty()) // Prefix the basic type, e.g. 'typedefname X'.
index 463fb7fd777af4665738629538a4f337f593a125..690509e795e522b6dc7ffba1ba7e1e746933939f 100644 (file)
@@ -12,8 +12,8 @@ static NSString * const Identifier3 =   @"Identifier3";
 
 int main () {
         
-    [@"Identifier1" isEqualToString:Identifier1]; // expected-warning {{sending 'NSString const *' to parameter of type 'NSString *' discards qualifiers}}
-    [@"Identifier2" isEqualToString:Identifier2]; // expected-warning {{sending 'NSString const *' to parameter of type 'NSString *' discards qualifiers}}
+    [@"Identifier1" isEqualToString:Identifier1]; // expected-warning {{sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers}}
+    [@"Identifier2" isEqualToString:Identifier2]; // expected-warning {{sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers}}
     [@"Identifier3" isEqualToString:Identifier3];
     return 0;
 }
index af239a8c5b89437ebd2ee33948493d51b57ebbe2..335c240c171d11b636b26d5e9ac1b920be9ec544 100644 (file)
@@ -29,10 +29,10 @@ void RandomFunc(CFMDRef theDict, const void *key, const void *value);
 - (void) Meth : (I*) Arg; // expected-note{{passing argument to parameter 'Arg' here}}
 @end
 
-void Func (I* arg);  // expected-note {{candidate function not viable: no known conversion from 'I const *' to 'I *' for 1st argument}}
+void Func (I* arg);  // expected-note {{candidate function not viable: no known conversion from 'const I *' to 'I *' for 1st argument}}
 
 void foo(const I *p, I* sel) {
-  [sel Meth : p];      // expected-error {{cannot initialize a parameter of type 'I *' with an lvalue of type 'I const *'}}
+  [sel Meth : p];      // expected-error {{cannot initialize a parameter of type 'I *' with an lvalue of type 'const I *'}}
   Func(p);             // expected-error {{no matching function for call to 'Func'}}
 }