diff options
| author | Adrian Prantl <aprantl@apple.com> | 2014-11-05 01:01:30 +0000 |
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2014-11-05 01:01:30 +0000 |
| commit | 65d5d00cb7775ed53f551828e557b85ad4a26591 (patch) | |
| tree | 1a26b1963218da3e58fbcc032c01633b03e99f9d /clang/lib/CodeGen | |
| parent | bf7550e7ecabb10e7a17e6d5067aa8c87810b46b (diff) | |
| download | bcm5719-llvm-65d5d00cb7775ed53f551828e557b85ad4a26591.tar.gz bcm5719-llvm-65d5d00cb7775ed53f551828e557b85ad4a26591.zip | |
Debug info: Emit the correct type for the __FuncPtr field in a block
descriptor.
rdar://problem/15984431
llvm-svn: 221326
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CGDebugInfo.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 05df1703051..ea8002ab969 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -714,7 +714,7 @@ llvm::DIType CGDebugInfo::CreateType(const BlockPointerType *Ty, FType = CGM.getContext().IntTy; EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset)); EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset)); - FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); + FType = CGM.getContext().getPointerType(Ty->getPointeeType()); EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset)); FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); @@ -2953,7 +2953,9 @@ void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block, fields.push_back(createFieldType("__reserved", C.IntTy, 0, loc, AS_public, blockLayout->getElementOffsetInBits(2), tunit, tunit)); - fields.push_back(createFieldType("__FuncPtr", C.VoidPtrTy, 0, loc, AS_public, + auto *FnTy = block.getBlockExpr()->getFunctionType(); + auto FnPtrType = CGM.getContext().getPointerType(FnTy->desugar()); + fields.push_back(createFieldType("__FuncPtr", FnPtrType, 0, loc, AS_public, blockLayout->getElementOffsetInBits(3), tunit, tunit)); fields.push_back(createFieldType( |

