Do not record line number to implicitly mark start of function if function has argume...
authorDevang Patel <dpatel@apple.com>
Thu, 8 Oct 2009 18:48:03 +0000 (18:48 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 8 Oct 2009 18:48:03 +0000 (18:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83563 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h

index 5b3f3cee39ffb501f06c0f96eac08d1b5994f0bc..1ea148e54947e504b96d581200df6d2c67ff777e 100644 (file)
@@ -1782,17 +1782,23 @@ void DwarfDebug::EndModule() {
 }
 
 /// CollectVariableInfo - Populate DbgScope entries with variables' info.
-void DwarfDebug::CollectVariableInfo() {
-  if (!MMI) return;
+bool DwarfDebug::CollectVariableInfo() {
+  if (!MMI) return false;
+  bool ArgsCollected = false;
   MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
   for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
          VE = VMap.end(); VI != VE; ++VI) {
     MDNode *Var = VI->first;
+    DIVariable DV (Var);
+    if (DV.isNull()) continue;
+    if (DV.getTag() == dwarf::DW_TAG_arg_variable)
+      ArgsCollected = true;
     DILocation VLoc(VI->second.first);
     unsigned VSlot = VI->second.second;
     DbgScope *Scope = getDbgScope(VLoc.getScope().getNode(), NULL);
-    Scope->AddVariable(new DbgVariable(DIVariable(Var), VSlot, false));
+    Scope->AddVariable(new DbgVariable(DV, VSlot, false));
   }
+  return ArgsCollected;
 }
 
 /// SetDbgScopeBeginLabels - Update DbgScope begin labels for the scopes that
@@ -1903,7 +1909,7 @@ void DwarfDebug::BeginFunction(MachineFunction *MF) {
 #ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
   if (!ExtractScopeInformation(MF))
     return;
-  CollectVariableInfo();
+  bool ArgsCollected = CollectVariableInfo();
 #endif
 
   // Begin accumulating function debug information.
@@ -1914,14 +1920,19 @@ void DwarfDebug::BeginFunction(MachineFunction *MF) {
 
   // Emit label for the implicitly defined dbg.stoppoint at the start of the
   // function.
-  DebugLoc FDL = MF->getDefaultDebugLoc();
-  if (!FDL.isUnknown()) {
-    DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
-    unsigned LabelID = RecordSourceLine(DLT.Line, DLT.Col, DLT.CompileUnit);
-    Asm->printLabel(LabelID);
-    O << '\n';
+#ifdef ATTACH_DEBUG_INFO_TO_AN_INSN
+  if (!ArgsCollected) {
+#else
+  if (1) {
+#endif
+    DebugLoc FDL = MF->getDefaultDebugLoc();
+    if (!FDL.isUnknown()) {
+      DebugLocTuple DLT = MF->getDebugLocTuple(FDL);
+      unsigned LabelID = RecordSourceLine(DLT.Line, DLT.Col, DLT.CompileUnit);
+      Asm->printLabel(LabelID);
+      O << '\n';
+    }
   }
-
   if (TimePassesIsEnabled)
     DebugTimer->stopTimer();
 }
index bd377c5593ccfdecec0e225e852a530225d09c5f..7e2f6be837d3631aa4cc0c67d94a2f2bb9a2a7c9 100644 (file)
@@ -556,7 +556,7 @@ public:
   bool ExtractScopeInformation(MachineFunction *MF);
 
   /// CollectVariableInfo - Populate DbgScope entries with variables' info.
-  void CollectVariableInfo();
+  bool CollectVariableInfo();
 
   /// SetDbgScopeBeginLabels - Update DbgScope begin labels for the scopes that
   /// start with this machine instruction.