aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AST/ASTContext.cpp12
-rw-r--r--test/Sema/metadata-test-2.m15
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
+