forked from OSchip/llvm-project
Hack in something so that we emit better debug information about
captured __block variables in the block-literal type. llvm-svn: 126834
This commit is contained in:
parent
1e49a6d9bc
commit
81a325e038
|
@ -2049,10 +2049,24 @@ void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block,
|
|||
}
|
||||
|
||||
const VarDecl *variable = capture->getVariable();
|
||||
QualType type = (capture->isByRef() ? C.VoidPtrTy : variable->getType());
|
||||
llvm::StringRef name = variable->getName();
|
||||
fields.push_back(createFieldType(name, type, 0, loc, AS_public,
|
||||
offsetInBits, tunit));
|
||||
|
||||
llvm::DIType fieldType;
|
||||
if (capture->isByRef()) {
|
||||
std::pair<uint64_t,unsigned> ptrInfo = C.getTypeInfo(C.VoidPtrTy);
|
||||
|
||||
// FIXME: this creates a second copy of this type!
|
||||
uint64_t xoffset;
|
||||
fieldType = EmitTypeForVarWithBlocksAttr(variable, &xoffset);
|
||||
fieldType = DBuilder.createPointerType(fieldType, ptrInfo.first);
|
||||
fieldType = DBuilder.createMemberType(name, tunit, line,
|
||||
ptrInfo.first, ptrInfo.second,
|
||||
offsetInBits, 0, fieldType);
|
||||
} else {
|
||||
fieldType = createFieldType(name, variable->getType(), 0,
|
||||
loc, AS_public, offsetInBits, tunit);
|
||||
}
|
||||
fields.push_back(fieldType);
|
||||
}
|
||||
|
||||
llvm::SmallString<36> typeName;
|
||||
|
|
Loading…
Reference in New Issue