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();
|
const VarDecl *variable = capture->getVariable();
|
||||||
QualType type = (capture->isByRef() ? C.VoidPtrTy : variable->getType());
|
|
||||||
llvm::StringRef name = variable->getName();
|
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;
|
llvm::SmallString<36> typeName;
|
||||||
|
|
Loading…
Reference in New Issue