DebugInfo: Don't include DW_AT_inline on each abstract definition multiple times.
[oota-llvm.git] / lib / CodeGen / AsmPrinter / DwarfDebug.cpp
index 4cb4dc13c5060fcee005806b7b8b413300f368a1..f584c2a036fd49e08e8c58f6e8878af04f987e2c 100644 (file)
@@ -468,7 +468,6 @@ DwarfDebug::constructInlinedScopeDIE(DwarfCompileUnit &TheCU,
   attachRangesOrLowHighPC(TheCU, *ScopeDIE, Scope->getRanges());
 
   InlinedSubprogramDIEs.insert(OriginDIE);
-  TheCU.addUInt(*OriginDIE, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
 
   // Add the call site information to the DIE.
   DILocation DL(Scope->getInlinedAt());
@@ -597,7 +596,7 @@ std::unique_ptr<DIE> DwarfDebug::constructScopeDIE(DwarfCompileUnit &TheCU,
   // avoid creating un-used children then removing them later when we find out
   // the scope DIE is null.
   std::unique_ptr<DIE> ScopeDIE;
-  if (DS.getContext() && DS.isSubprogram()) {
+  if (Scope->getParent() && DS.isSubprogram()) {
     ScopeDIE = constructInlinedScopeDIE(TheCU, Scope);
     if (!ScopeDIE)
       return nullptr;
@@ -846,8 +845,8 @@ void DwarfDebug::collectDeadVariables() {
           continue;
         assert(SP.isSubprogram() &&
                "CU's subprogram list contains a non-subprogram");
-        if (!SP.isDefinition())
-          continue;
+        assert(SP.isDefinition() &&
+               "CU's subprogram list contains a subprogram declaration");
         DIArray Variables = SP.getVariables();
         if (Variables.getNumElements() == 0)
           continue;