]> granicus.if.org Git - clang/commitdiff
Last patch, for now, to privde ObjC's encoding of types.
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 23 Dec 2008 21:30:15 +0000 (21:30 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 23 Dec 2008 21:30:15 +0000 (21:30 +0000)
We now pass all gcc's encoding compatibility tests.

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

lib/AST/ASTContext.cpp
test/CodeGenObjC/encode-test.m

index b9514f35a095a3c62099c40a88fb47eee77e5a1a..c5b451740a28841de8541670cad8c3da4bbf3565 100644 (file)
@@ -1859,6 +1859,16 @@ void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S,
       return;
     }
     else if (PointeeTy->isObjCInterfaceType()) {
+      if (dyn_cast<TypedefType>(PointeeTy.getTypePtr())) {
+        // Another historical/compatibility reason.
+        // We encode the underlying type which comes out as 
+        // {...};
+        S += '^';
+        getObjCEncodingForTypeImpl(PointeeTy, S, 
+                                   false, ExpandPointedToStructures, 
+                                   NULL);
+        return;
+      }
       S += '@';
       if (FD) {
         ObjCInterfaceDecl *OI = PointeeTy->getAsObjCInterfaceType()->getDecl();
index 0ae4f13c50208ed242f2f4945cfa5807893334c7..21cc5c2c0da268a510134c14546c6d534c9def11 100644 (file)
@@ -3,7 +3,8 @@
 // RUN: grep -e "{Derived=#ib32b8b3b8sb16b8b8b2b8ccb6}" %t | count 1 &&
 // RUN: grep -e "{B1=#@c}" %t | count 1 &&
 // RUN: grep -e "v12@0:4\[3\[4{Test=i}]]8" %t | count 1 &&
-// RUN: grep -e "r^{S=i}" %t | count 1
+// RUN: grep -e "r^{S=i}" %t | count 1 &&
+// RUN: grep -e "\^{Object=#}" %t | count 1
 
 @class Int1;
 
@@ -75,11 +76,19 @@ struct Innermost {
 
 struct S { int iS; };
 
+@interface Object
+{
+ Class isa;
+}
+@end
+typedef Object MyObj;
+
 int main()
 {
        const char *en = @encode(Derived);
        const char *eb = @encode(B1);
         const char *es = @encode(const struct S *);
         const char *ec = @encode(const struct S);
+        const char *ee = @encode(MyObj *const);
 }