commit c165d0647f9ee53908ef9cd25ab51b2428494dad
parent 967e2aea5d31a93e847e58331b435aa5b6e8b3cd
Author: Kyle Milz <kyle@0x30.net>
Date: Sat, 13 Aug 2016 17:23:20 -0600
src: remove bad constructor
Diffstat:
7 files changed, 42 insertions(+), 50 deletions(-)
diff --git a/src/inst_action.cc b/src/inst_action.cc
@@ -42,20 +42,20 @@ InstrumentAction::write_modified_src(clang::FileID const &fid)
if (m_is_citruninst) {
out_file += ".citrun";
- m_log << "Writing modified source to '" << out_file << "'.\n";
+ *m_log << "Writing modified source to '" << out_file << "'.\n";
}
std::error_code ec;
llvm::raw_fd_ostream output(out_file, ec, llvm::sys::fs::F_None);
if (ec.value()) {
- m_log << "Error writing modified source '" << out_file
+ *m_log << "Error writing modified source '" << out_file
<< "': " << ec.message() << "\n";
return;
}
// Write the instrumented source file
m_TheRewriter.getEditBuffer(fid).write(output);
- m_log << "Modified source written successfully.\n";
+ *m_log << "Modified source written successfully.\n";
}
void
@@ -95,12 +95,12 @@ InstrumentAction::EndSourceFileAction()
<< "#endif\n";
if (m_TheRewriter.InsertTextAfter(start, preamble.str())) {
- m_log << "Failed to insert the instrumentation preabmle.";
+ *m_log << "Failed to insert the instrumentation preabmle.";
return;
}
- m_log << "Instrumentation of '" << m_compiler_file_name << "' finished:\n";
- m_log << " " << num_lines << " Lines of source code\n";
+ *m_log << "Instrumentation of '" << m_compiler_file_name << "' finished:\n";
+ *m_log << " " << num_lines << " Lines of source code\n";
//
// Write out statistics from the AST visitor.
@@ -109,7 +109,7 @@ InstrumentAction::EndSourceFileAction()
for (int i = 0; i < NCOUNTERS; ++i) {
if (v.m_counters[i] == 0)
continue;
- m_log << " " << v.m_counters[i] << " "
+ *m_log << " " << v.m_counters[i] << " "
<< v.m_counter_descr[i] << "\n";
}
diff --git a/src/inst_action.h b/src/inst_action.h
@@ -30,7 +30,7 @@ private:
// For each source file provided to the tool, a new FrontendAction is created.
class InstrumentAction : public clang::ASTFrontendAction {
public:
- InstrumentAction(InstrumentLogger &log, bool citruninst,
+ InstrumentAction(InstrumentLogger *log, bool citruninst,
std::string const &filename) :
m_log(log),
m_is_citruninst(citruninst),
@@ -45,7 +45,7 @@ private:
clang::Rewriter m_TheRewriter;
RewriteASTConsumer *m_InstrumentASTConsumer;
- InstrumentLogger m_log;
+ InstrumentLogger *m_log;
bool m_is_citruninst;
std::string m_compiler_file_name;
};
diff --git a/src/inst_frontend.cc b/src/inst_frontend.cc
@@ -34,7 +34,7 @@
static llvm::cl::OptionCategory ToolingCategory("citrun-inst options");
-CitrunInst::CitrunInst(int argc, char *argv[], InstrumentLogger &l, bool is_citruninst) :
+CitrunInst::CitrunInst(int argc, char *argv[], InstrumentLogger *l, bool is_citruninst) :
m_args(argv, argv + argc),
m_log(l),
m_is_citruninst(is_citruninst)
@@ -87,7 +87,7 @@ CitrunInst::save_if_srcfile(char *arg)
ends_with(arg, ".cpp") || ends_with(arg, ".cxx")) {
m_source_files.push_back(arg);
- m_log << "Found source file '" << arg << "'.\n";
+ *m_log << "Found source file '" << arg << "'.\n";
if (m_is_citruninst)
// In this mode the modified source file is written to a
@@ -124,15 +124,15 @@ CitrunInst::process_cmdline()
bool object_arg = false;
bool compile_arg = false;
- m_log << "Command line is '";
+ *m_log << "Command line is '";
for (auto &arg : m_args)
- m_log << arg << " ";
- m_log << "'.\n";
+ *m_log << arg << " ";
+ *m_log << "'.\n";
for (auto &arg : m_args) {
if (std::strcmp(arg, "-E") == 0) {
- m_log << "Preprocessor argument found\n";
+ *m_log << "Preprocessor argument found\n";
exec_compiler();
}
else if (std::strcmp(arg, "-o") == 0)
@@ -143,28 +143,28 @@ CitrunInst::process_cmdline()
save_if_srcfile(arg);
}
- m_log << "Object arg = " << object_arg << ", "
+ *m_log << "Object arg = " << object_arg << ", "
<< "compile arg = " << compile_arg << "\n";
if (is_link_cmd(object_arg, compile_arg)) {
- m_log << "Link detected, adding '";
+ *m_log << "Link detected, adding '";
#ifndef __APPLE__
// OSX always links this.
m_args.push_back(const_cast<char *>("-pthread"));
- m_log << m_args.back() << " ";
+ *m_log << m_args.back() << " ";
#endif
#ifdef CITRUN_COVERAGE
// Needed because libcitrun.a will be instrumented with gcov.
m_args.push_back(const_cast<char *>("-coverage"));
#endif
m_args.push_back(const_cast<char *>(STR(CITRUN_SHARE) "/libcitrun.a"));
- m_log << m_args.back() << "' to command line.\n";
+ *m_log << m_args.back() << "' to command line.\n";
}
if (m_source_files.size() != 0)
return;
- m_log << "No source files found. Executing command line.\n";
+ *m_log << "No source files found. Executing command line.\n";
exec_compiler();
}
@@ -183,10 +183,10 @@ CitrunInst::instrument()
clang_argv.insert(clang_argv.end(), m_args.begin(), m_args.end());
#if defined(__OpenBSD__)
clang_argv.push_back("-I/usr/local/lib/clang/3.8.1/include");
- m_log << "Added clangtool argument '" << clang_argv.back() << "'.\n";
+ *m_log << "Added clangtool argument '" << clang_argv.back() << "'.\n";
#elif defined(__APPLE__)
clang_argv.push_back("-I/opt/local/libexec/llvm-3.8/lib/clang/3.8.1/include");
- m_log << "Added clangtool argument '" << clang_argv.back() << "'.\n";
+ *m_log << "Added clangtool argument '" << clang_argv.back() << "'.\n";
#endif
int clang_argc = clang_argv.size();
@@ -198,15 +198,15 @@ CitrunInst::instrument()
clang::DiagnosticOptions diags;
clang::TextDiagnosticPrinter *log;
- log = new clang::TextDiagnosticPrinter(*m_log.m_output, &diags, false);
- log->setPrefix(std::to_string(m_log.m_pid));
+ log = new clang::TextDiagnosticPrinter(*m_log->m_output, &diags, false);
+ log->setPrefix(std::to_string(m_log->m_pid));
Tool.setDiagnosticConsumer(log);
std::unique_ptr<InstrumentActionFactory> f =
llvm::make_unique<InstrumentActionFactory>(m_log, m_is_citruninst, m_source_files);
int ret = Tool.run(f.get());
- m_log << "Instrumentation " << (ret ? "failed.\n" : "successful.\n");
+ *m_log << "Instrumentation " << (ret ? "failed.\n" : "successful.\n");
return ret;
}
@@ -217,11 +217,11 @@ CitrunInst::try_unmodified_compile()
int ret = fork_compiler();
if (ret == 0) {
- m_log << "But the native compile succeeded!\n";
+ *m_log << "But the native compile succeeded!\n";
return 1;
}
- m_log << "And the native compile failed.\n";
+ *m_log << "And the native compile failed.\n";
return ret;
}
@@ -229,7 +229,7 @@ void
CitrunInst::restore_original_src()
{
for (auto &tmp_file : m_temp_file_map) {
- m_log << "Restored '" << tmp_file.first << "'.\n";
+ *m_log << "Restored '" << tmp_file.first << "'.\n";
copy_file(tmp_file.first, tmp_file.second);
unlink(tmp_file.second.c_str());
@@ -240,10 +240,10 @@ void
CitrunInst::exec_compiler()
{
// XXX: Need to destroy log here.
- m_log.m_output->flush();
+ m_log->m_output->flush();
if (m_is_citruninst) {
- m_log << "Running as citrun-inst, not re-exec()'ing\n";
+ *m_log << "Running as citrun-inst, not re-exec()'ing\n";
exit(0);
}
@@ -256,7 +256,7 @@ int
CitrunInst::fork_compiler()
{
// Otherwise we'll get two copies of buffers after fork().
- m_log.m_output->flush();
+ m_log->m_output->flush();
pid_t child_pid;
if ((child_pid = fork()) < 0)
@@ -266,7 +266,7 @@ CitrunInst::fork_compiler()
// In child.
exec_compiler();
- m_log << "Forked '" << m_args[0] << "' "
+ *m_log << "Forked '" << m_args[0] << "' "
<< "pid is '" << child_pid << "'.\n";
int status;
@@ -278,14 +278,14 @@ CitrunInst::fork_compiler()
if (WIFEXITED(status))
exit = WEXITSTATUS(status);
- m_log << "'" << child_pid << "' exited " << exit << ".\n";
+ *m_log << "'" << child_pid << "' exited " << exit << ".\n";
return exit;
}
int
CitrunInst::compile_modified()
{
- m_log << "Running native compiler on modified source code.\n";
+ *m_log << "Running native compiler on modified source code.\n";
int ret = fork_compiler();
restore_original_src();
diff --git a/src/inst_frontend.h b/src/inst_frontend.h
@@ -5,7 +5,7 @@
class CitrunInst {
public:
- CitrunInst(int, char *argv[], InstrumentLogger &, bool);
+ CitrunInst(int, char *argv[], InstrumentLogger *, bool);
void process_cmdline();
int instrument();
@@ -20,7 +20,7 @@ private:
bool is_link_cmd(bool, bool);
std::vector<char *> m_args;
- InstrumentLogger m_log;
+ InstrumentLogger *m_log;
bool m_is_citruninst;
std::vector<std::string> m_source_files;
std::map<std::string, std::string> m_temp_file_map;
@@ -31,7 +31,7 @@ private:
//
class InstrumentActionFactory : public clang::tooling::FrontendActionFactory {
public:
- InstrumentActionFactory(InstrumentLogger &log, bool citruninst,
+ InstrumentActionFactory(InstrumentLogger *log, bool citruninst,
std::vector<std::string> const &src_files) :
m_log(log),
m_is_citruninst(citruninst),
@@ -44,7 +44,7 @@ public:
}
private:
- InstrumentLogger m_log;
+ InstrumentLogger *m_log;
bool m_is_citruninst;
std::vector<std::string> m_source_files;
int m_i;
diff --git a/src/inst_log.cc b/src/inst_log.cc
@@ -6,14 +6,14 @@
InstrumentLogger::InstrumentLogger(const bool &is_citruninst) :
m_pid(getpid()),
m_needs_prefix(true),
- m_delete(true)
+ m_delete(false)
{
if (is_citruninst) {
m_output = &llvm::outs();
- m_delete = false;
} else {
std::error_code ec;
m_output = new llvm::raw_fd_ostream("citrun.log", ec, llvm::sys::fs::F_Append);
+ m_delete = true;
if (ec.value()) {
warnx("citrun.log: %s", ec.message().c_str());
@@ -23,13 +23,6 @@ InstrumentLogger::InstrumentLogger(const bool &is_citruninst) :
}
}
-InstrumentLogger::InstrumentLogger(InstrumentLogger &o) :
- m_pid(o.m_pid),
- m_output(o.m_output),
- m_needs_prefix(o.m_needs_prefix),
- m_delete(false)
-{}
-
InstrumentLogger::~InstrumentLogger()
{
if (m_delete)
diff --git a/src/inst_log.h b/src/inst_log.h
@@ -7,7 +7,6 @@
class InstrumentLogger {
public:
InstrumentLogger(const bool &);
- InstrumentLogger(InstrumentLogger &o);
~InstrumentLogger();
template <typename T>
@@ -21,12 +20,12 @@ public:
pid_t m_pid;
llvm::raw_ostream *m_output;
- bool m_needs_prefix;
private:
void print_prefix();
void check_newline(const std::string &);
+ bool m_needs_prefix;
bool m_delete;
};
diff --git a/src/inst_main.cc b/src/inst_main.cc
@@ -115,7 +115,7 @@ main(int argc, char *argv[])
// We were not called as citrun-inst and path cleaning failed.
return 1;
- CitrunInst main(argc, argv, llog, is_citruninst);
+ CitrunInst main(argc, argv, &llog, is_citruninst);
main.process_cmdline();
int ret = main.instrument();