diff options
author | Mike Stump <mrs@apple.com> | 2009-04-01 01:17:39 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2009-04-01 01:17:39 +0000 |
commit | cafa0a9746d97e8804255cd73012c245c18360dc (patch) | |
tree | da4ac91e9e8cef028bb06b0e7ddecb7f0f910fbc /clang/lib/CodeGen/CGBlocks.cpp | |
parent | 237f349073409f698e242cb80412f1feeec223d4 (diff) | |
download | bcm5719-llvm-cafa0a9746d97e8804255cd73012c245c18360dc.tar.gz bcm5719-llvm-cafa0a9746d97e8804255cd73012c245c18360dc.zip |
Fix block comparisons. Radar 6732116.
llvm-svn: 68171
Diffstat (limited to 'clang/lib/CodeGen/CGBlocks.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGBlocks.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index 16e926ba643..c05d3235dd8 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -412,18 +412,19 @@ const llvm::Type *BlockModule::getGenericExtendedBlockLiteralType() { /// function type for the block, including the first block literal argument. static QualType getBlockFunctionType(ASTContext &Ctx, const BlockPointerType *BPT) { - const FunctionProtoType *FTy = cast<FunctionProtoType>(BPT->getPointeeType()); + const FunctionProtoType *FTy = dyn_cast<FunctionProtoType>(BPT->getPointeeType()); + const clang::QualType ResType = BPT->getPointeeType()->getAsFunctionType()->getResultType(); llvm::SmallVector<QualType, 8> Types; Types.push_back(Ctx.getPointerType(Ctx.VoidTy)); - for (FunctionProtoType::arg_type_iterator i = FTy->arg_type_begin(), - e = FTy->arg_type_end(); i != e; ++i) - Types.push_back(*i); + if (FTy) + for (FunctionProtoType::arg_type_iterator i = FTy->arg_type_begin(), + e = FTy->arg_type_end(); i != e; ++i) + Types.push_back(*i); - return Ctx.getFunctionType(FTy->getResultType(), - &Types[0], Types.size(), - FTy->isVariadic(), 0); + return Ctx.getFunctionType(ResType, &Types[0], Types.size(), + FTy && FTy->isVariadic(), 0); } RValue CodeGenFunction::EmitBlockCallExpr(const CallExpr* E) { |