]> granicus.if.org Git - clang/commitdiff
Added type encoding for 'id' type.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 30 Oct 2007 17:06:23 +0000 (17:06 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 30 Oct 2007 17:06:23 +0000 (17:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43504 91177308-0d34-0410-b5e6-96231b3b80d8

AST/ASTContext.cpp
Sema/SemaDecl.cpp
clang.xcodeproj/project.pbxproj
test/Sema/method-encoding-1.m [new file with mode: 0644]

index ee45c008315b86f1e8e330590fd6b77dca13570a..40b7b647e945711924073061ce8a0ddeede0d208 100644 (file)
@@ -1010,6 +1010,10 @@ void ASTContext::getObjcEncodingForType(QualType T, std::string& S) const
     S += encoding;
   } else if (const PointerType *PT = T->getAsPointerType()) {
     QualType PointeeTy = PT->getPointeeType();
+    if (isObjcIdType(PointeeTy)) {
+      S += '@';
+      return;
+    }
     
     if (PointeeTy->isCharType()) {
       // char pointer types should be encoded as '*' unless it is a
index e125ce54ab766bb436ec1301e1dcc2b60395f025..f4717ce66b426b7ebc39fdccd920029b3b989b87 100644 (file)
@@ -1963,6 +1963,14 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration(
     TypeTy **ArgTypes, IdentifierInfo **ArgNames,
     AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind) {
   llvm::SmallVector<ParmVarDecl*, 16> Params;
+  
+  // We cannot build type 'id' laziliy. It is needed when checking if a 
+  // type is an 'id' (via call to isObjcIdType) even if there is no
+  // need for the dafult 'id' type.
+  // FIXME: Depending on the need to compare to 'id', this may have to go
+  // somewhere else. At this time, this is a good enough place to do type
+  // encoding of methods and ivars for the rewrite client.
+  GetObjcIdType(MethodLoc);
 
   for (unsigned i = 0; i < Sel.getNumArgs(); i++) {
     // FIXME: arg->AttrList must be stored too!
index de41b4628d0c47ae944965792f26798c623eb63f..fe4cf8d85be8296188b8454e3723b21a50eb5906 100644 (file)
                08FB7793FE84155DC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
+                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
                        projectDirPath = "";
diff --git a/test/Sema/method-encoding-1.m b/test/Sema/method-encoding-1.m
new file mode 100644 (file)
index 0000000..0029d4e
--- /dev/null
@@ -0,0 +1,18 @@
+// RUN: clang -rewrite-test -verify %s
+
+@protocol P1
+- (void) MyProtoMeth : (int **) arg1 : (void*) arg2;
++ (void) MyProtoMeth : (int **) arg1 : (void*) arg2;
+@end
+
+@interface Intf <P1>
+- (char *) MyMeth : (double) arg1 : (char *[12]) arg2;
+- (id) address:(void *)location with:(unsigned **)arg2;
+@end
+
+@implementation Intf
+- (char *) MyMeth : (double) arg1 : (char *[12]) arg2{}
+- (void) MyProtoMeth : (int **) arg1 : (void*) arg2 {}
++ (void) MyProtoMeth : (int **) arg1 : (void*) arg2 {}
+- (id) address:(void *)location with:(unsigned **)arg2{}
+@end