blocks: fixes a crash when encoding block type
with argument type of size 0. // rdar://11777609
PR13229.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159477 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index 916e7d7..248698f 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -4149,6 +4149,8 @@
        E = Decl->param_end(); PI != E; ++PI) {
     QualType PType = (*PI)->getType();
     CharUnits sz = getObjCEncodingTypeSize(PType);
+    if (sz.isZero())
+      continue;
     assert (sz.isPositive() && "BlockExpr - Incomplete param type");
     ParmOffset += sz;
   }
diff --git a/test/CodeGen/block-3.c b/test/CodeGen/block-3.c
index 95cb6a7..29c1bb5 100644
--- a/test/CodeGen/block-3.c
+++ b/test/CodeGen/block-3.c
@@ -6,3 +6,15 @@
                 __attribute__((__blocks__(byref))) int index = ({ int __a; int __b; __a < __b ? __b : __a; });
    };
 }
+
+// PR13229
+// rdar://11777609
+typedef struct {} Z;
+
+typedef int (^B)(Z);
+
+void testPR13229() {
+  Z z1;
+  B b1 = ^(Z z1) { return 1; };
+  b1(z1);
+}