Add comment describing what's going on here.
authorBill Wendling <isanbard@gmail.com>
Wed, 7 Nov 2012 05:19:04 +0000 (05:19 +0000)
committerBill Wendling <isanbard@gmail.com>
Wed, 7 Nov 2012 05:19:04 +0000 (05:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167525 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
tools/llvm-cov/llvm-cov.cpp

index e8c807ac5f1718733f1368a5f5315946f9e07280..367b52307925ecd720c13d692d184ff5bff3c111 100644 (file)
@@ -307,8 +307,11 @@ DIE *DwarfDebug::updateSubprogramScopeDIE(CompileUnit *SPCU,
   assert(SPDie && "Unable to find subprogram DIE!");
   DISubprogram SP(SPNode);
 
-  // Pick up abstract subprogram DIE.
+  // If we're updating an abstract DIE, then we will be adding the children and
+  // object pointer later on. But what we don't want to do is process the
+  // concrete DIE twice.
   if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
+    // Pick up abstract subprogram DIE.
     SPDie = new DIE(dwarf::DW_TAG_subprogram);
     SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
                       dwarf::DW_FORM_ref4, AbsSPDIE);
index 7b21c5bae2017fc12d5edbbb32bd380bf2e67140..ce5ff9c450e00a3a3017b2305254f715efba3c10 100644 (file)
 #include "llvm/Support/GCOV.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryObject.h"
+#include "llvm/Support/Path.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/system_error.h"
 using namespace llvm;
 
+static cl::opt<std::string>
+InputFilename(cl::Positional, cl::desc("source filename"), cl::init(""));
+
 static cl::opt<bool>
 DumpGCOV("dump", cl::init(false), cl::desc("dump gcov file"));
 
@@ -40,6 +44,23 @@ int main(int argc, char **argv) {
 
   cl::ParseCommandLineOptions(argc, argv, "llvm cov\n");
 
+  if (InputFilename.empty()) {
+    // FIXME: Error out here.
+  }
+
+  sys::Path SrcFile(InputFilename);
+
+  sys::Path GCNOFile(SrcFile);
+  GCNOFile.eraseSuffix();
+  GCNOFile.appendSuffix(".gcno");
+
+  sys::Path GCDAFile(SrcFile);
+  GCDAFile.eraseSuffix();
+  GCDAFile.appendSuffix(".gcda");
+
+  sys::Path OutputFile(SrcFile);
+  OutputFile.appendSuffix(".gcov");
+
   GCOVFile GF;
   if (InputGCNO.empty())
     errs() << " " << argv[0] << ": No gcov input file!\n";