Displaying 4 results from an estimated 4 matches for "finishsubprogramdefinition".
2016 May 08
2
Debug info scope of explicit casting type does not seem correct
...<------------- In our case the function returns here, and does not apply attributes.
applySubprogramAttributes(SP, SPDie);
return &SPDie;
}
It assumes that later when the function is finalized the attributes will be applied, which is called from this code:
void DwarfDebug::finishSubprogramDefinitions() {
for (auto &F : MMI->getModule()->functions())
if (auto *SP = F.getSubprogram())
if (ProcessedSPNodes.count(SP) &&
SP->getUnit()->getEmissionKind() != DICompileUnit::NoDebug)
forBothCUs(*CUMap.lookup(SP->getUnit()), [&](DwarfCompileUn...
2016 May 07
2
Debug info scope of explicit casting type does not seem correct
Hi David,
OK, I got that DIE in Compile Unit scope may point to a DIE in subprogram scope.
But how about that we are emitting a subprogram entry that has no attributes?
0x0000002b: DW_TAG_subprogram [3] *
0x0000002c: DW_TAG_typedef [4]
DW_AT_type [DW_FORM_ref4] (cu + 0x0040 => {0x00000040})
DW_AT_name [DW_FORM_strp] (
2015 Sep 01
2
RFC: DI: Stop preserving types from dead functions
Way back in r107027, we started preserving type information of local
variables of functions that are optimized away. This seemed strange to
me so I dug into the history: apparently, this is so that ctfconvert can
find these types (so they can be exposed in dtrace).
E.g., this commit made it so that for this C code:
static void foo(void) { struct X { int b; } v; }
we always get the type
2014 Aug 27
6
[LLVMdev] Minimizing -gmlt
....getNumElements(); i != e; ++i)
- SPMap.insert(std::make_pair(SPs.getElement(i), &CU));
DIArray EnumTypes = CUNode.getEnumTypes();
for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i) {
DIType Ty(EnumTypes.getElement(i));
@@ -833,12 +838,13 @@ void DwarfDebug::finishSubprogramDefinitions() {
// If this subprogram has an abstract definition, reference that
SPCU->addDIEEntry(*D, dwarf::DW_AT_abstract_origin, *AbsSPDIE);
} else {
- if (!D)
+ if (!D && TheCU.getEmissionKind() != DIBuilder::LineTablesOnly)
// Lazily const...