aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/AST/ASTContext.cpp8
-rw-r--r--test/CodeGenObjC/encode-test-6.m19
2 files changed, 23 insertions, 4 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index f208f06111..916e7d796f 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -4190,8 +4190,8 @@ bool ASTContext::getObjCEncodingForFunctionDecl(const FunctionDecl *Decl,
QualType PType = (*PI)->getType();
CharUnits sz = getObjCEncodingTypeSize(PType);
if (sz.isZero())
- return true;
-
+ continue;
+
assert (sz.isPositive() &&
"getObjCEncodingForFunctionDecl - Incomplete param type");
ParmOffset += sz;
@@ -4259,8 +4259,8 @@ bool ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl,
QualType PType = (*PI)->getType();
CharUnits sz = getObjCEncodingTypeSize(PType);
if (sz.isZero())
- return true;
-
+ continue;
+
assert (sz.isPositive() &&
"getObjCEncodingForMethodDecl - Incomplete param type");
ParmOffset += sz;
diff --git a/test/CodeGenObjC/encode-test-6.m b/test/CodeGenObjC/encode-test-6.m
new file mode 100644
index 0000000000..10681dbcc5
--- /dev/null
+++ b/test/CodeGenObjC/encode-test-6.m
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o %t %s
+// RUN: FileCheck < %t %s
+// rdar://11777609
+
+typedef struct {} Z;
+
+@interface A
+-(void)bar:(Z)a;
+-(void)foo:(Z)a : (char*)b : (Z)c : (double) d;
+@end
+
+@implementation A
+-(void)bar:(Z)a {}
+-(void)foo:(Z)a: (char*)b : (Z)c : (double) d {}
+@end
+
+// CHECK: internal global [14 x i8] c"v16@0:8{?=}16
+// CHECK: internal global [26 x i8] c"v32@0:8{?=}16*16{?=}24d24
+