r281363 - Work around a GCC 4.7-specific issue: due to implementing older rules for

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 13 11:35:34 PDT 2016


Author: rsmith
Date: Tue Sep 13 13:35:34 2016
New Revision: 281363

URL: http://llvm.org/viewvc/llvm-project?rev=281363&view=rev
Log:
Work around a GCC 4.7-specific issue: due to implementing older rules for
implicit declarations of move operations, GCC 4.7 would find that SelectPiece
has neither a move constructor nor a copy constructor. The copy constructor was
(correctly) deleted because the class has a member of move-only type, and the
move constructor was (incorrectly, per current C++ rules) not provided because
the class has a copy-only base class (in turn because it explicitly declares a
destructor).

Modified:
    cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp

Modified: cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp?rev=281363&r1=281362&r2=281363&view=diff
==============================================================================
--- cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp (original)
+++ cfe/trunk/utils/TableGen/ClangDiagnosticsEmitter.cpp Tue Sep 13 13:35:34 2016
@@ -910,6 +910,11 @@ namespace {
 /// Diagnostic text, parsed into pieces.
 struct DiagText {
   struct Piece {
+    // This type and its derived classes are move-only.
+    Piece() = default;
+    Piece(Piece &&O) = default;
+    Piece &operator=(Piece &&O) = default;
+
     virtual void print(std::vector<std::string> &RST) = 0;
     virtual ~Piece() {}
   };




More information about the cfe-commits mailing list