From: Chris Bieneman Date: Thu, 22 Jan 2015 01:49:59 +0000 (+0000) Subject: Assigning and copying command line option objects shouldn't be allowed. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=e84c7b1116a08c3b93730da52ad1759eb4616d00 Assigning and copying command line option objects shouldn't be allowed. Summary: The default copy and assignment operators for these objects probably don't actually do what the clients intend, so they should be deleted. Places using the assignment operator to set the value of an option should cast to the option's data type first to call into the override for operator=. Places using the copy constructor just need to be changed to not copy (i.e. passing by const reference instead of value). Reviewers: dexonsmith, chandlerc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D7114 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226762 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/CommandLine.h b/include/llvm/Support/CommandLine.h index 314dd951b2c..1403b7543b5 100644 --- a/include/llvm/Support/CommandLine.h +++ b/include/llvm/Support/CommandLine.h @@ -1180,6 +1180,10 @@ public: return this->getValue(); } + // Command line options should not be copyable + opt(const opt &) LLVM_DELETED_FUNCTION; + opt &operator=(const opt &) LLVM_DELETED_FUNCTION; + // One option... template explicit opt(const M0t &M0) @@ -1374,6 +1378,10 @@ public: void setNumAdditionalVals(unsigned n) { Option::setNumAdditionalVals(n); } + // Command line options should not be copyable + list(const list &) LLVM_DELETED_FUNCTION; + list &operator=(const list &) LLVM_DELETED_FUNCTION; + // One option... template explicit list(const M0t &M0) @@ -1592,6 +1600,10 @@ public: return Positions[optnum]; } + // Command line options should not be copyable + bits(const bits &) LLVM_DELETED_FUNCTION; + bits &operator=(const bits &) LLVM_DELETED_FUNCTION; + // One option... template explicit bits(const M0t &M0) @@ -1725,6 +1737,10 @@ public: AliasFor = &O; } + // Command line options should not be copyable + alias(const alias &) LLVM_DELETED_FUNCTION; + alias &operator=(const alias &) LLVM_DELETED_FUNCTION; + // One option... template explicit alias(const M0t &M0) diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index 730911b07c6..7a16ad0bb8d 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -556,7 +556,7 @@ int main(int argc, char **argv, char * const *envp) { // If the user specifically requested an argv[0] to pass into the program, // do it now. if (!FakeArgv0.empty()) { - InputFile = FakeArgv0; + InputFile = static_cast(FakeArgv0); } else { // Otherwise, if there is a .bc suffix on the executable strip it off, it // might confuse the program. diff --git a/tools/llvm-profdata/llvm-profdata.cpp b/tools/llvm-profdata/llvm-profdata.cpp index 25531c776a3..0137e35c52f 100644 --- a/tools/llvm-profdata/llvm-profdata.cpp +++ b/tools/llvm-profdata/llvm-profdata.cpp @@ -38,7 +38,8 @@ static void exitWithError(const Twine &Message, StringRef Whence = "") { enum ProfileKinds { instr, sample }; -void mergeInstrProfile(cl::list Inputs, StringRef OutputFilename) { +void mergeInstrProfile(const cl::list &Inputs, + StringRef OutputFilename) { if (OutputFilename.compare("-") == 0) exitWithError("Cannot write indexed profdata format to stdout."); @@ -64,7 +65,8 @@ void mergeInstrProfile(cl::list Inputs, StringRef OutputFilename) { Writer.write(Output); } -void mergeSampleProfile(cl::list Inputs, StringRef OutputFilename, +void mergeSampleProfile(const cl::list &Inputs, + StringRef OutputFilename, sampleprof::SampleProfileFormat OutputFormat) { using namespace sampleprof; auto WriterOrErr = SampleProfileWriter::create(OutputFilename, OutputFormat); diff --git a/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp index fc211e3180b..0e0dd59ce92 100644 --- a/tools/llvm-size/llvm-size.cpp +++ b/tools/llvm-size/llvm-size.cpp @@ -709,7 +709,7 @@ int main(int argc, char **argv) { ToolName = argv[0]; if (OutputFormatShort.getNumOccurrences()) - OutputFormat = OutputFormatShort; + OutputFormat = static_cast(OutputFormatShort); if (RadixShort.getNumOccurrences()) Radix = RadixShort;