<div dir="ltr">It can be helpful to mention the motivation for a revert in the commit message so others can follow along - I know this has had a few issues with buildbots and such - could you link to/quote the failure you were addressing by reverting this patch?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Feb 16, 2019 at 1:46 AM Serge Guelton via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: serge_sans_paille<br>
Date: Sat Feb 16 01:47:23 2019<br>
New Revision: 354200<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=354200&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=354200&view=rev</a><br>
Log:<br>
Revert r354199: Make Optional<T> Trivially Copyable when T is trivially copyable <br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/ADT/Optional.h<br>
    llvm/trunk/unittests/ADT/OptionalTest.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/ADT/Optional.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Optional.h?rev=354200&r1=354199&r2=354200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Optional.h?rev=354200&r1=354199&r2=354200&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/ADT/Optional.h (original)<br>
+++ llvm/trunk/include/llvm/ADT/Optional.h Sat Feb 16 01:47:23 2019<br>
@@ -108,59 +108,6 @@ template <typename T, bool = is_triviall<br>
     return reinterpret_cast<const T *>(storage.buffer);<br>
   }<br>
 };<br>
-template <typename T> struct OptionalStorage<T, true> {<br>
-  AlignedCharArrayUnion<T> storage;<br>
-  bool hasVal = false;<br>
-<br>
-  OptionalStorage() = default;<br>
-<br>
-  OptionalStorage(const T &y) : hasVal(true) { new (storage.buffer) T(y); }<br>
-  OptionalStorage(const OptionalStorage &O)  = default;<br>
-  OptionalStorage(T &&y) : hasVal(true) {<br>
-    new (storage.buffer) T(std::forward<T>(y));<br>
-  }<br>
-  OptionalStorage(OptionalStorage &&O) = default;<br>
-<br>
-  OptionalStorage &operator=(T &&y) {<br>
-    if (hasVal)<br>
-      *getPointer() = std::move(y);<br>
-    else {<br>
-      new (storage.buffer) T(std::move(y));<br>
-      hasVal = true;<br>
-    }<br>
-    return *this;<br>
-  }<br>
-  OptionalStorage &operator=(OptionalStorage &&O) = default;<br>
-<br>
-  OptionalStorage &operator=(const T &y) {<br>
-    if (hasVal)<br>
-      *getPointer() = y;<br>
-    else {<br>
-      new (storage.buffer) T(y);<br>
-      hasVal = true;<br>
-    }<br>
-    return *this;<br>
-  }<br>
-  OptionalStorage &operator=(const OptionalStorage &O) = default;<br>
-<br>
-  ~OptionalStorage() = default;<br>
-<br>
-  void reset() {<br>
-    if (hasVal) {<br>
-      (*getPointer()).~T();<br>
-      hasVal = false;<br>
-    }<br>
-  }<br>
-<br>
-  T *getPointer() {<br>
-    assert(hasVal);<br>
-    return reinterpret_cast<T *>(storage.buffer);<br>
-  }<br>
-  const T *getPointer() const {<br>
-    assert(hasVal);<br>
-    return reinterpret_cast<const T *>(storage.buffer);<br>
-  }<br>
-};<br>
<br>
 } // namespace optional_detail<br>
<br>
<br>
Modified: llvm/trunk/unittests/ADT/OptionalTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/OptionalTest.cpp?rev=354200&r1=354199&r2=354200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/OptionalTest.cpp?rev=354200&r1=354199&r2=354200&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/ADT/OptionalTest.cpp (original)<br>
+++ llvm/trunk/unittests/ADT/OptionalTest.cpp Sat Feb 16 01:47:23 2019<br>
@@ -14,15 +14,8 @@<br>
<br>
 #include <array><br>
<br>
-<br>
 using namespace llvm;<br>
<br>
-static_assert(llvm::is_trivially_copyable<Optional<int>>::value,<br>
-              "trivially copyable");<br>
-<br>
-static_assert(llvm::is_trivially_copyable<Optional<std::array<int, 3>>>::value,<br>
-              "trivially copyable");<br>
-<br>
 namespace {<br>
<br>
 struct NonDefaultConstructible {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>