diff options
-rw-r--r-- | AST/ASTContext.cpp | 12 | ||||
-rw-r--r-- | test/Sema/metadata-test-2.m | 15 |
2 files changed, 26 insertions, 1 deletions
diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp index 132224cbd7..b844adf431 100644 --- a/AST/ASTContext.cpp +++ b/AST/ASTContext.cpp @@ -1050,8 +1050,18 @@ void ASTContext::getObjcEncodingForType(QualType T, std::string& S) const S += ']'; } else if (T->getAsFunctionType()) { S += '?'; + } else if (const RecordType *RTy = T->getAsRecordType()) { + RecordDecl *RDecl= RTy->getDecl(); + S += '{'; + S += RDecl->getName(); + S += '='; + for (int i = 0; i < RDecl->getNumMembers(); i++) { + FieldDecl *field = RDecl->getMember(i); + getObjcEncodingForType(field->getType(), S); + } + S += '}'; } else - assert(0 && "@encode for type not implemented!"); + assert(0 && "@encode for type not implemented!"); } void ASTContext::getObjcEncodingForTypeQualifier(Decl::ObjcDeclQualifier QT, diff --git a/test/Sema/metadata-test-2.m b/test/Sema/metadata-test-2.m new file mode 100644 index 0000000000..dbaf035fd8 --- /dev/null +++ b/test/Sema/metadata-test-2.m @@ -0,0 +1,15 @@ +// RUN: clang -rewrite-test %s + +typedef struct _NSPoint { + float x; + float y; +} NSPoint; + +@interface Intf +- (void) MyMeth : (NSPoint) Arg1; +@end + +@implementation Intf +- (void) MyMeth : (NSPoint) Arg1{} +@end + |