[llvm] r203431 - [PM] As Dave noticed in review, I had erroneously copied the move

Chandler Carruth chandlerc at gmail.com
Sun Mar 9 18:32:25 PDT 2014


Author: chandlerc
Date: Sun Mar  9 20:32:25 2014
New Revision: 203431

URL: http://llvm.org/viewvc/llvm-project?rev=203431&view=rev
Log:
[PM] As Dave noticed in review, I had erroneously copied the move
constructors from the classes which only have a single reference member
to many other places. This resulted in them copying their single member
instead of moving. =/ Fix this.

There's really not a useful test to add sadly because these move
constructors are only called when something deep inside some standard
library implementation *needs* to move them. Many of the types aren't
even user-impacting types. Or, the objects are copyable anyways and so
the result was merely a performance problem rather than a correctness
problem.

Anyways, thanks for the review. And this is a great example of why
I wish I colud have the compiler write these for me.

Modified:
    llvm/trunk/include/llvm/IR/PassManager.h

Modified: llvm/trunk/include/llvm/IR/PassManager.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/PassManager.h?rev=203431&r1=203430&r2=203431&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/PassManager.h (original)
+++ llvm/trunk/include/llvm/IR/PassManager.h Sun Mar  9 20:32:25 2014
@@ -70,7 +70,7 @@ public:
   PreservedAnalyses(const PreservedAnalyses &Arg)
       : PreservedPassIDs(Arg.PreservedPassIDs) {}
   PreservedAnalyses(PreservedAnalyses &&Arg)
-      : PreservedPassIDs(Arg.PreservedPassIDs) {}
+      : PreservedPassIDs(std::move(Arg.PreservedPassIDs)) {}
   PreservedAnalyses &operator=(PreservedAnalyses RHS) {
     std::swap(*this, RHS);
     return *this;
@@ -207,7 +207,7 @@ struct PassModel<IRUnitT, AnalysisManage
   // We have to explicitly define all the special member functions because MSVC
   // refuses to generate them.
   PassModel(const PassModel &Arg) : Pass(Arg.Pass) {}
-  PassModel(PassModel &&Arg) : Pass(Arg.Pass) {}
+  PassModel(PassModel &&Arg) : Pass(std::move(Arg.Pass)) {}
   PassModel &operator=(PassModel RHS) {
     std::swap(*this, RHS);
     return *this;
@@ -229,7 +229,7 @@ struct PassModel<IRUnitT, AnalysisManage
   // We have to explicitly define all the special member functions because MSVC
   // refuses to generate them.
   PassModel(const PassModel &Arg) : Pass(Arg.Pass) {}
-  PassModel(PassModel &&Arg) : Pass(Arg.Pass) {}
+  PassModel(PassModel &&Arg) : Pass(std::move(Arg.Pass)) {}
   PassModel &operator=(PassModel RHS) {
     std::swap(*this, RHS);
     return *this;
@@ -298,7 +298,8 @@ struct AnalysisResultModel<IRUnitT, Pass
   // We have to explicitly define all the special member functions because MSVC
   // refuses to generate them.
   AnalysisResultModel(const AnalysisResultModel &Arg) : Result(Arg.Result) {}
-  AnalysisResultModel(AnalysisResultModel &&Arg) : Result(Arg.Result) {}
+  AnalysisResultModel(AnalysisResultModel &&Arg)
+      : Result(std::move(Arg.Result)) {}
   AnalysisResultModel &operator=(AnalysisResultModel RHS) {
     std::swap(*this, RHS);
     return *this;
@@ -325,7 +326,8 @@ struct AnalysisResultModel<IRUnitT, Pass
   // We have to explicitly define all the special member functions because MSVC
   // refuses to generate them.
   AnalysisResultModel(const AnalysisResultModel &Arg) : Result(Arg.Result) {}
-  AnalysisResultModel(AnalysisResultModel &&Arg) : Result(Arg.Result) {}
+  AnalysisResultModel(AnalysisResultModel &&Arg)
+      : Result(std::move(Arg.Result)) {}
   AnalysisResultModel &operator=(AnalysisResultModel RHS) {
     std::swap(*this, RHS);
     return *this;
@@ -374,7 +376,7 @@ struct AnalysisPassModel<IRUnitT, Analys
   // We have to explicitly define all the special member functions because MSVC
   // refuses to generate them.
   AnalysisPassModel(const AnalysisPassModel &Arg) : Pass(Arg.Pass) {}
-  AnalysisPassModel(AnalysisPassModel &&Arg) : Pass(Arg.Pass) {}
+  AnalysisPassModel(AnalysisPassModel &&Arg) : Pass(std::move(Arg.Pass)) {}
   AnalysisPassModel &operator=(AnalysisPassModel RHS) {
     std::swap(*this, RHS);
     return *this;
@@ -405,7 +407,7 @@ struct AnalysisPassModel<IRUnitT, Analys
   // We have to explicitly define all the special member functions because MSVC
   // refuses to generate them.
   AnalysisPassModel(const AnalysisPassModel &Arg) : Pass(Arg.Pass) {}
-  AnalysisPassModel(AnalysisPassModel &&Arg) : Pass(Arg.Pass) {}
+  AnalysisPassModel(AnalysisPassModel &&Arg) : Pass(std::move(Arg.Pass)) {}
   AnalysisPassModel &operator=(AnalysisPassModel RHS) {
     std::swap(*this, RHS);
     return *this;





More information about the llvm-commits mailing list