Fix a FIXME about MSVC 2013 in the diagnostic doc generation code
authorReid Kleckner <rnk@google.com>
Tue, 13 Sep 2016 22:22:56 +0000 (22:22 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 13 Sep 2016 22:22:56 +0000 (22:22 +0000)
Ultimately it boiled down to adding a move constructor.

llvm-svn: 281408

clang/utils/TableGen/ClangDiagnosticsEmitter.cpp

index 00769a4..036e742 100644 (file)
@@ -928,13 +928,14 @@ struct DiagText {
     void print(std::vector<std::string> &RST) override;
   };
   struct SelectPiece : Piece {
+    SelectPiece() {}
+    SelectPiece(SelectPiece &&O) LLVM_NOEXCEPT : Options(std::move(O.Options)) {
+    }
     std::vector<DiagText> Options;
     void print(std::vector<std::string> &RST) override;
   };
 
-  // FIXME: This should be a unique_ptr, but I can't figure out how to get MSVC
-  // to not issue errors on that.
-  std::vector<std::shared_ptr<Piece>> Pieces;
+  std::vector<std::unique_ptr<Piece>> Pieces;
 
   DiagText();
   DiagText(DiagText &&O) LLVM_NOEXCEPT : Pieces(std::move(O.Pieces)) {}
@@ -943,7 +944,7 @@ struct DiagText {
   DiagText(StringRef Kind, StringRef Text);
 
   template<typename P> void add(P Piece) {
-    Pieces.push_back(std::make_shared<P>(std::move(Piece)));
+    Pieces.push_back(llvm::make_unique<P>(std::move(Piece)));
   }
   void print(std::vector<std::string> &RST);
 };
@@ -1040,7 +1041,8 @@ DiagText::DiagText(StringRef Kind, StringRef Text) : DiagText(parseDiagText(Text
   Prefix.Role = Kind;
   Prefix.Text = Kind;
   Prefix.Text += ": ";
-  Pieces.insert(Pieces.begin(), std::make_shared<TextPiece>(std::move(Prefix)));
+  Pieces.insert(Pieces.begin(),
+                llvm::make_unique<TextPiece>(std::move(Prefix)));
 }
 
 void escapeRST(StringRef Str, std::string &Out) {