[llvm] r226762 - Assigning and copying command line option objects shouldn't be allowed.
Duncan P. N. Exon Smith
dexonsmith at apple.com
Wed Jan 21 18:13:40 PST 2015
> On 2015-Jan-21, at 17:49, Chris Bieneman <beanz at apple.com> wrote:
>
> Author: cbieneman
> Date: Wed Jan 21 19:49:59 2015
> New Revision: 226762
>
> URL: http://llvm.org/viewvc/llvm-project?rev=226762&view=rev
> Log:
> 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
>
> Modified:
> llvm/trunk/include/llvm/Support/CommandLine.h
> llvm/trunk/tools/lli/lli.cpp
> llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> llvm/trunk/tools/llvm-size/llvm-size.cpp
>
> Modified: llvm/trunk/include/llvm/Support/CommandLine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CommandLine.h?rev=226762&r1=226761&r2=226762&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/CommandLine.h (original)
> +++ llvm/trunk/include/llvm/Support/CommandLine.h Wed Jan 21 19:49:59 2015
> @@ -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;
> +
Can you move these to the `private` section? That'll give better
diagnostics when `= deleted` isn't available.
> // One option...
> template <class M0t>
> 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 <class M0t>
> 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 <class M0t>
> 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 <class M0t>
> explicit alias(const M0t &M0)
>
> Modified: llvm/trunk/tools/lli/lli.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/lli.cpp?rev=226762&r1=226761&r2=226762&view=diff
> ==============================================================================
> --- llvm/trunk/tools/lli/lli.cpp (original)
> +++ llvm/trunk/tools/lli/lli.cpp Wed Jan 21 19:49:59 2015
> @@ -556,7 +556,7 @@ int main(int argc, char **argv, char * c
> // If the user specifically requested an argv[0] to pass into the program,
> // do it now.
> if (!FakeArgv0.empty()) {
> - InputFile = FakeArgv0;
> + InputFile = static_cast<std::string>(FakeArgv0);
> } else {
> // Otherwise, if there is a .bc suffix on the executable strip it off, it
> // might confuse the program.
>
> Modified: llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp?rev=226762&r1=226761&r2=226762&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp (original)
> +++ llvm/trunk/tools/llvm-profdata/llvm-profdata.cpp Wed Jan 21 19:49:59 2015
> @@ -38,7 +38,8 @@ static void exitWithError(const Twine &M
>
> enum ProfileKinds { instr, sample };
>
> -void mergeInstrProfile(cl::list<std::string> Inputs, StringRef OutputFilename) {
> +void mergeInstrProfile(const cl::list<std::string> &Inputs,
> + StringRef OutputFilename) {
> if (OutputFilename.compare("-") == 0)
> exitWithError("Cannot write indexed profdata format to stdout.");
>
> @@ -64,7 +65,8 @@ void mergeInstrProfile(cl::list<std::str
> Writer.write(Output);
> }
>
> -void mergeSampleProfile(cl::list<std::string> Inputs, StringRef OutputFilename,
> +void mergeSampleProfile(const cl::list<std::string> &Inputs,
> + StringRef OutputFilename,
> sampleprof::SampleProfileFormat OutputFormat) {
> using namespace sampleprof;
> auto WriterOrErr = SampleProfileWriter::create(OutputFilename, OutputFormat);
>
> Modified: llvm/trunk/tools/llvm-size/llvm-size.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-size/llvm-size.cpp?rev=226762&r1=226761&r2=226762&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-size/llvm-size.cpp (original)
> +++ llvm/trunk/tools/llvm-size/llvm-size.cpp Wed Jan 21 19:49:59 2015
> @@ -709,7 +709,7 @@ int main(int argc, char **argv) {
>
> ToolName = argv[0];
> if (OutputFormatShort.getNumOccurrences())
> - OutputFormat = OutputFormatShort;
> + OutputFormat = static_cast<OutputFormatTy>(OutputFormatShort);
> if (RadixShort.getNumOccurrences())
> Radix = RadixShort;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list