]> granicus.if.org Git - clang/commitdiff
Preserve the full name of the file, so that '-c -o foo.pic.o' produces
authorNick Lewycky <nicholas@mxc.ca>
Thu, 5 May 2011 00:08:20 +0000 (00:08 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Thu, 5 May 2011 00:08:20 +0000 (00:08 +0000)
foo.pic.gcno instead of foo.gcno.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130899 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/CC1Options.td
include/clang/Frontend/CodeGenOptions.h
lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenModule.h
lib/Driver/Tools.cpp
lib/Frontend/CompilerInvocation.cpp

index 7908b8f10601c18c0be215202dbdd57152870ad9..3c0c3c5a13f76d827dde9fa1ef42fc0c4f5b44f8 100644 (file)
@@ -140,9 +140,9 @@ def femit_coverage_notes : Flag<"-femit-coverage-notes">,
   HelpText<"Emit a gcov coverage notes file when compiling.">;
 def femit_coverage_data: Flag<"-femit-coverage-data">,
   HelpText<"Instrument the program to emit gcov coverage data when run.">;
-def coverage_dir : Separate<"-coverage-dir">,
-  HelpText<"Emit coverage data to this directory.">;
-def coverage_dir_EQ : Joined<"-coverage-dir=">, Alias<coverage_dir>;
+def coverage_file : Separate<"-coverage-file">,
+  HelpText<"Emit coverage data to this filename. The extension will be replaced.">;
+def coverage_file_EQ : Joined<"-coverage-file=">, Alias<coverage_file>;
 def relaxed_aliasing : Flag<"-relaxed-aliasing">,
   HelpText<"Turn off Type Based Alias Analysis">;
 def masm_verbose : Flag<"-masm-verbose">,
index 7221f0d554819519604852b7078302b96b3a4f31..1c686c76df5f2d78b4231ad4107d02e9f8a26fca 100644 (file)
@@ -95,8 +95,9 @@ public:
   /// The code model to use (-mcmodel).
   std::string CodeModel;
 
-  /// The directory in which to place coverage data files.
-  std::string CoverageDir;
+  /// The filename with path we use for coverage files. The extension will be
+  /// replaced.
+  std::string CoverageFile;
 
   /// Enable additional debugging information.
   std::string DebugPass;
index 22df86aca2d798ad768b192ce2cfdbd62c6f2226..4ce12ecd6004f4735bc81501ef3be0402e44863f 100644 (file)
@@ -134,7 +134,7 @@ void CodeGenModule::Release() {
     EmitDeclMetadata();
 
   if (getCodeGenOpts().EmitGcovArcs || getCodeGenOpts().EmitGcovNotes)
-    EmitCoverageDir();
+    EmitCoverageFile();
 }
 
 void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
@@ -2219,16 +2219,16 @@ void CodeGenFunction::EmitDeclMetadata() {
   }
 }
 
-void CodeGenModule::EmitCoverageDir() {
-  if (!getCodeGenOpts().CoverageDir.empty()) {
+void CodeGenModule::EmitCoverageFile() {
+  if (!getCodeGenOpts().CoverageFile.empty()) {
     if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
       llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
       llvm::LLVMContext &Ctx = TheModule.getContext();
-      llvm::MDString *CoverageDir =
-          llvm::MDString::get(Ctx, getCodeGenOpts().CoverageDir);
+      llvm::MDString *CoverageFile =
+          llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
       for (int i = 0, e = CUNode->getNumOperands(); i != e; ++i) {
         llvm::MDNode *CU = CUNode->getOperand(i);
-        llvm::Value *node[] = { CoverageDir, CU };
+        llvm::Value *node[] = { CoverageFile, CU };
         llvm::MDNode *N = llvm::MDNode::get(Ctx, node);
         GCov->addOperand(N);
       }
index 65ee922279da427181e474c1c5726ea1804250f1..ce708c88d070f5ab8b8148677c220f889eba72e2 100644 (file)
@@ -735,9 +735,9 @@ private:
 
   void EmitDeclMetadata();
 
-  /// EmitCoverageDir - Emit the llvm.gcov metadata used to tell LLVM where
+  /// EmitCoverageFile - Emit the llvm.gcov metadata used to tell LLVM where
   /// to emit the .gcno and .gcda files in a way that persists in .bc files.
-  void EmitCoverageDir();
+  void EmitCoverageFile();
 
   /// MayDeferGeneration - Determine if the given decl can be emitted
   /// lazily; this is only relevant for definitions. The given decl
index f4e0f2e35903e0ac808b31e13bf795246dd38cee..239edb5db4f9b4eb461ac311b850a1beeb989d11 100644 (file)
@@ -1306,12 +1306,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
   if (C.getArgs().hasArg(options::OPT_c) ||
       C.getArgs().hasArg(options::OPT_S)) {
     if (Output.isFilename()) {
-      llvm::StringRef CoverageDir =
-          llvm::sys::path::parent_path(Output.getFilename());
-      if (!CoverageDir.empty()) {
-        CmdArgs.push_back("-coverage-dir");
-        CmdArgs.push_back(Args.MakeArgString(CoverageDir));
-      }
+      CmdArgs.push_back("-coverage-file");
+      CmdArgs.push_back(Args.MakeArgString(Output.getFilename()));
     }
   }
 
index 180ce3efcbe2407b7e972b11b3d8915286442077..924e5ed4cbe2bf69754909b94f7806dfa158793c 100644 (file)
@@ -974,7 +974,7 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
   Opts.InstrumentForProfiling = Args.hasArg(OPT_pg);
   Opts.EmitGcovArcs = Args.hasArg(OPT_femit_coverage_data);
   Opts.EmitGcovNotes = Args.hasArg(OPT_femit_coverage_notes);
-  Opts.CoverageDir = Args.getLastArgValue(OPT_coverage_dir);
+  Opts.CoverageFile = Args.getLastArgValue(OPT_coverage_file);
 
   if (Arg *A = Args.getLastArg(OPT_fobjc_dispatch_method_EQ)) {
     llvm::StringRef Name = A->getValue(Args);