]> granicus.if.org Git - clang/commitdiff
blocks: fixes a crash when encoding block type
authorFariborz Jahanian <fjahanian@apple.com>
Sat, 30 Jun 2012 00:48:59 +0000 (00:48 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Sat, 30 Jun 2012 00:48:59 +0000 (00:48 +0000)
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

lib/AST/ASTContext.cpp
test/CodeGen/block-3.c

index 916e7d796fb02f4fad2ae3d40591a540e73e7599..248698f45a1bd64c53ecb7d214d710d1e33003fe 100644 (file)
@@ -4149,6 +4149,8 @@ std::string ASTContext::getObjCEncodingForBlock(const BlockExpr *Expr) const {
        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;
   }
index 95cb6a735c73bba534d4fc688b2941ef3e8901a0..29c1bb5803c711ed0a77bcfb78f3126e4f2565a0 100644 (file)
@@ -6,3 +6,15 @@ int main() {
                 __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);
+}