Skip to content

Commit 85c011d

Browse files
committed
Preserve the full name of the file, so that '-c -o foo.pic.o' produces
foo.pic.gcno instead of foo.gcno. llvm-svn: 130899
1 parent e262299 commit 85c011d

File tree

6 files changed

+17
-20
lines changed

6 files changed

+17
-20
lines changed

clang/include/clang/Driver/CC1Options.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,9 @@ def femit_coverage_notes : Flag<"-femit-coverage-notes">,
140140
HelpText<"Emit a gcov coverage notes file when compiling.">;
141141
def femit_coverage_data: Flag<"-femit-coverage-data">,
142142
HelpText<"Instrument the program to emit gcov coverage data when run.">;
143-
def coverage_dir : Separate<"-coverage-dir">,
144-
HelpText<"Emit coverage data to this directory.">;
145-
def coverage_dir_EQ : Joined<"-coverage-dir=">, Alias<coverage_dir>;
143+
def coverage_file : Separate<"-coverage-file">,
144+
HelpText<"Emit coverage data to this filename. The extension will be replaced.">;
145+
def coverage_file_EQ : Joined<"-coverage-file=">, Alias<coverage_file>;
146146
def relaxed_aliasing : Flag<"-relaxed-aliasing">,
147147
HelpText<"Turn off Type Based Alias Analysis">;
148148
def masm_verbose : Flag<"-masm-verbose">,

clang/include/clang/Frontend/CodeGenOptions.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,9 @@ class CodeGenOptions {
9595
/// The code model to use (-mcmodel).
9696
std::string CodeModel;
9797

98-
/// The directory in which to place coverage data files.
99-
std::string CoverageDir;
98+
/// The filename with path we use for coverage files. The extension will be
99+
/// replaced.
100+
std::string CoverageFile;
100101

101102
/// Enable additional debugging information.
102103
std::string DebugPass;

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ void CodeGenModule::Release() {
134134
EmitDeclMetadata();
135135

136136
if (getCodeGenOpts().EmitGcovArcs || getCodeGenOpts().EmitGcovNotes)
137-
EmitCoverageDir();
137+
EmitCoverageFile();
138138
}
139139

140140
void CodeGenModule::UpdateCompletedType(const TagDecl *TD) {
@@ -2219,16 +2219,16 @@ void CodeGenFunction::EmitDeclMetadata() {
22192219
}
22202220
}
22212221

2222-
void CodeGenModule::EmitCoverageDir() {
2223-
if (!getCodeGenOpts().CoverageDir.empty()) {
2222+
void CodeGenModule::EmitCoverageFile() {
2223+
if (!getCodeGenOpts().CoverageFile.empty()) {
22242224
if (llvm::NamedMDNode *CUNode = TheModule.getNamedMetadata("llvm.dbg.cu")) {
22252225
llvm::NamedMDNode *GCov = TheModule.getOrInsertNamedMetadata("llvm.gcov");
22262226
llvm::LLVMContext &Ctx = TheModule.getContext();
2227-
llvm::MDString *CoverageDir =
2228-
llvm::MDString::get(Ctx, getCodeGenOpts().CoverageDir);
2227+
llvm::MDString *CoverageFile =
2228+
llvm::MDString::get(Ctx, getCodeGenOpts().CoverageFile);
22292229
for (int i = 0, e = CUNode->getNumOperands(); i != e; ++i) {
22302230
llvm::MDNode *CU = CUNode->getOperand(i);
2231-
llvm::Value *node[] = { CoverageDir, CU };
2231+
llvm::Value *node[] = { CoverageFile, CU };
22322232
llvm::MDNode *N = llvm::MDNode::get(Ctx, node);
22332233
GCov->addOperand(N);
22342234
}

clang/lib/CodeGen/CodeGenModule.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,9 +735,9 @@ class CodeGenModule : public CodeGenTypeCache {
735735

736736
void EmitDeclMetadata();
737737

738-
/// EmitCoverageDir - Emit the llvm.gcov metadata used to tell LLVM where
738+
/// EmitCoverageFile - Emit the llvm.gcov metadata used to tell LLVM where
739739
/// to emit the .gcno and .gcda files in a way that persists in .bc files.
740-
void EmitCoverageDir();
740+
void EmitCoverageFile();
741741

742742
/// MayDeferGeneration - Determine if the given decl can be emitted
743743
/// lazily; this is only relevant for definitions. The given decl

clang/lib/Driver/Tools.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,12 +1306,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
13061306
if (C.getArgs().hasArg(options::OPT_c) ||
13071307
C.getArgs().hasArg(options::OPT_S)) {
13081308
if (Output.isFilename()) {
1309-
llvm::StringRef CoverageDir =
1310-
llvm::sys::path::parent_path(Output.getFilename());
1311-
if (!CoverageDir.empty()) {
1312-
CmdArgs.push_back("-coverage-dir");
1313-
CmdArgs.push_back(Args.MakeArgString(CoverageDir));
1314-
}
1309+
CmdArgs.push_back("-coverage-file");
1310+
CmdArgs.push_back(Args.MakeArgString(Output.getFilename()));
13151311
}
13161312
}
13171313

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,7 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
974974
Opts.InstrumentForProfiling = Args.hasArg(OPT_pg);
975975
Opts.EmitGcovArcs = Args.hasArg(OPT_femit_coverage_data);
976976
Opts.EmitGcovNotes = Args.hasArg(OPT_femit_coverage_notes);
977-
Opts.CoverageDir = Args.getLastArgValue(OPT_coverage_dir);
977+
Opts.CoverageFile = Args.getLastArgValue(OPT_coverage_file);
978978

979979
if (Arg *A = Args.getLastArg(OPT_fobjc_dispatch_method_EQ)) {
980980
llvm::StringRef Name = A->getValue(Args);

0 commit comments

Comments
 (0)