<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Thanks for doing this, I’ll take a look.<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Aug 15, 2019, at 3:13 AM, Russell Gallop <<a href="mailto:russell.gallop@gmail.com" class="">russell.gallop@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi,<div class=""><br class=""></div><div class="">I've reverted this in r368985 to get the Windows bots green again.</div><div class=""><br class=""></div><div class="">Regards</div><div class="">Russ</div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 15 Aug 2019 at 07:54, via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br class="">
<br class="">
The test that was added in this change with the removal of the LLVM_HAS_RVALUE_REFERENCE_THIS seems to be failing with run on Windows:<br class="">
<br class="">
<a href="http://lab.llvm.org:8011/builders/llvm-clang-x86_64-win-fast/builds/2727" rel="noreferrer" target="_blank" class="">http://lab.llvm.org:8011/builders/llvm-clang-x86_64-win-fast/builds/2727</a><br class="">
FAIL: LLVM-Unit :: ADT/./ADTTests.exe/OptionalTest.MoveGetValueOr (535 of 3846)<br class="">
******************** TEST 'LLVM-Unit :: ADT/./ADTTests.exe/OptionalTest.MoveGetValueOr' FAILED ********************<br class="">
Note: Google Test filter = OptionalTest.MoveGetValueOr<br class="">
<br class="">
[==========] Running 1 test from 1 test case.<br class="">
<br class="">
[----------] Global test environment set-up.<br class="">
<br class="">
[----------] 1 test from OptionalTest<br class="">
<br class="">
[ RUN      ] OptionalTest.MoveGetValueOr<br class="">
<br class="">
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm\unittests\ADT\OptionalTest.cpp(390): error:       Expected: 1u<br class="">
<br class="">
      Which is: 1<br class="">
<br class="">
To be equal to: MoveOnly::MoveConstructions<br class="">
<br class="">
      Which is: 2<br class="">
<br class="">
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm\unittests\ADT\OptionalTest.cpp(392): error:       Expected: 2u<br class="">
<br class="">
      Which is: 2<br class="">
<br class="">
To be equal to: MoveOnly::Destructions<br class="">
<br class="">
      Which is: 3<br class="">
<br class="">
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm\unittests\ADT\OptionalTest.cpp(397): error:       Expected: 1u<br class="">
<br class="">
      Which is: 1<br class="">
<br class="">
To be equal to: MoveOnly::MoveConstructions<br class="">
<br class="">
      Which is: 2<br class="">
<br class="">
C:\buildbot\as-builder-3\llvm-clang-x86_64-win-fast\llvm\unittests\ADT\OptionalTest.cpp(399): error:       Expected: 2u<br class="">
<br class="">
      Which is: 2<br class="">
<br class="">
To be equal to: MoveOnly::Destructions<br class="">
<br class="">
      Which is: 3<br class="">
<br class="">
[  FAILED  ] OptionalTest.MoveGetValueOr (0 ms)<br class="">
<br class="">
[----------] 1 test from OptionalTest (0 ms total)<br class="">
<br class="">
<br class="">
<br class="">
[----------] Global test environment tear-down<br class="">
<br class="">
[==========] 1 test from 1 test case ran. (0 ms total)<br class="">
<br class="">
[  PASSED  ] 0 tests.<br class="">
<br class="">
[  FAILED  ] 1 test, listed below:<br class="">
<br class="">
[  FAILED  ] OptionalTest.MoveGetValueOr<br class="">
<br class="">
<br class="">
<br class="">
 1 FAILED TEST<br class="">
<br class="">
Can you take a look?<br class="">
<br class="">
Douglas Yung<br class="">
<br class="">
-----Original Message-----<br class="">
From: llvm-commits <<a href="mailto:llvm-commits-bounces@lists.llvm.org" target="_blank" class="">llvm-commits-bounces@lists.llvm.org</a>> On Behalf Of JF Bastien via llvm-commits<br class="">
Sent: Wednesday, August 14, 2019 15:48<br class="">
To: <a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
Subject: [llvm] r368939 - Remove LVALUE / RVALUE workarounds<br class="">
<br class="">
Author: jfb<br class="">
Date: Wed Aug 14 15:48:12 2019<br class="">
New Revision: 368939<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=368939&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=368939&view=rev</a><br class="">
Log:<br class="">
Remove LVALUE / RVALUE workarounds<br class="">
<br class="">
Summary: LLVM_HAS_RVALUE_REFERENCE_THIS and LLVM_LVALUE_FUNCTION shouldn't be needed anymore because the minimum compiler versions support them.<br class="">
<br class="">
Subscribers: jkorous, dexonsmith, cfe-commits, llvm-commits, hans, thakis, chandlerc, rnk<br class="">
<br class="">
Tags: #clang, #llvm<br class="">
<br class="">
Differential Revision: <a href="https://reviews.llvm.org/D66240" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/D66240</a><br class="">
<br class="">
Modified:<br class="">
    llvm/trunk/include/llvm/ADT/Optional.h<br class="">
    llvm/trunk/include/llvm/Support/Compiler.h<br class="">
    llvm/trunk/unittests/ADT/OptionalTest.cpp<br class="">
<br class="">
Modified: llvm/trunk/include/llvm/ADT/Optional.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Optional.h?rev=368939&r1=368938&r2=368939&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Optional.h?rev=368939&r1=368938&r2=368939&view=diff</a><br class="">
==============================================================================<br class="">
--- llvm/trunk/include/llvm/ADT/Optional.h (original)<br class="">
+++ llvm/trunk/include/llvm/ADT/Optional.h Wed Aug 14 15:48:12 2019<br class="">
@@ -69,20 +69,18 @@ public:<br class="">
<br class="">
   bool hasValue() const noexcept { return hasVal; }<br class="">
<br class="">
-  T &getValue() LLVM_LVALUE_FUNCTION noexcept {<br class="">
+  T &getValue() & noexcept {<br class="">
     assert(hasVal);<br class="">
     return value;<br class="">
   }<br class="">
-  T const &getValue() const LLVM_LVALUE_FUNCTION noexcept {<br class="">
+  T const &getValue() const & noexcept {<br class="">
     assert(hasVal);<br class="">
     return value;<br class="">
   }<br class="">
-#if LLVM_HAS_RVALUE_REFERENCE_THIS<br class="">
   T &&getValue() && noexcept {<br class="">
     assert(hasVal);<br class="">
     return std::move(value);<br class="">
   }<br class="">
-#endif<br class="">
<br class="">
   template <class... Args> void emplace(Args &&... args) {<br class="">
     reset();<br class="">
@@ -169,20 +167,19 @@ public:<br class="">
<br class="">
   bool hasValue() const noexcept { return hasVal; }<br class="">
<br class="">
-  T &getValue() LLVM_LVALUE_FUNCTION noexcept {<br class="">
+  T &getValue() & noexcept {<br class="">
     assert(hasVal);<br class="">
     return value;<br class="">
   }<br class="">
-  T const &getValue() const LLVM_LVALUE_FUNCTION noexcept {<br class="">
+  T const &getValue() const & noexcept {<br class="">
     assert(hasVal);<br class="">
     return value;<br class="">
   }<br class="">
-#if LLVM_HAS_RVALUE_REFERENCE_THIS<br class="">
+<br class="">
   T &&getValue() && noexcept {<br class="">
     assert(hasVal);<br class="">
     return std::move(value);<br class="">
   }<br class="">
-#endif<br class="">
<br class="">
   template <class... Args> void emplace(Args &&... args) {<br class="">
     reset();<br class="">
@@ -252,22 +249,21 @@ public:<br class="">
<br class="">
   const T *getPointer() const { return &Storage.getValue(); }<br class="">
   T *getPointer() { return &Storage.getValue(); }<br class="">
-  const T &getValue() const LLVM_LVALUE_FUNCTION { return Storage.getValue(); }<br class="">
-  T &getValue() LLVM_LVALUE_FUNCTION { return Storage.getValue(); }<br class="">
+  const T &getValue() const & { return Storage.getValue(); }  T <br class="">
+ &getValue() & { return Storage.getValue(); }<br class="">
<br class="">
   explicit operator bool() const { return hasValue(); }<br class="">
   bool hasValue() const { return Storage.hasValue(); }<br class="">
   const T *operator->() const { return getPointer(); }<br class="">
   T *operator->() { return getPointer(); }<br class="">
-  const T &operator*() const LLVM_LVALUE_FUNCTION { return getValue(); }<br class="">
-  T &operator*() LLVM_LVALUE_FUNCTION { return getValue(); }<br class="">
+  const T &operator*() const & { return getValue(); }  T &operator*() & <br class="">
+ { return getValue(); }<br class="">
<br class="">
   template <typename U><br class="">
-  constexpr T getValueOr(U &&value) const LLVM_LVALUE_FUNCTION {<br class="">
+  constexpr T getValueOr(U &&value) const & {<br class="">
     return hasValue() ? getValue() : std::forward<U>(value);<br class="">
   }<br class="">
<br class="">
-#if LLVM_HAS_RVALUE_REFERENCE_THIS<br class="">
   T &&getValue() && { return std::move(Storage.getValue()); }<br class="">
   T &&operator*() && { return std::move(Storage.getValue()); }<br class="">
<br class="">
@@ -275,7 +271,6 @@ public:<br class="">
   T getValueOr(U &&value) && {<br class="">
     return hasValue() ? std::move(getValue()) : std::forward<U>(value);<br class="">
   }<br class="">
-#endif<br class="">
 };<br class="">
<br class="">
 template <typename T, typename U><br class="">
<br class="">
Modified: llvm/trunk/include/llvm/Support/Compiler.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=368939&r1=368938&r2=368939&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=368939&r1=368938&r2=368939&view=diff</a><br class="">
==============================================================================<br class="">
--- llvm/trunk/include/llvm/Support/Compiler.h (original)<br class="">
+++ llvm/trunk/include/llvm/Support/Compiler.h Wed Aug 14 15:48:12 2019<br class="">
@@ -83,26 +83,6 @@<br class="">
 #define LLVM_MSC_PREREQ(version) 0<br class="">
 #endif<br class="">
<br class="">
-/// Does the compiler support ref-qualifiers for *this?<br class="">
-///<br class="">
-/// Sadly, this is separate from just rvalue reference support because GCC -/// and MSVC implemented this later than everything else.<br class="">
-#if __has_feature(cxx_rvalue_references) || LLVM_GNUC_PREREQ(4, 8, 1) -#define LLVM_HAS_RVALUE_REFERENCE_THIS 1 -#else -#define LLVM_HAS_RVALUE_REFERENCE_THIS 0 -#endif<br class="">
-<br class="">
-/// Expands to '&' if ref-qualifiers for *this are supported.<br class="">
-///<br class="">
-/// This can be used to provide lvalue/rvalue overrides of member functions.<br class="">
-/// The rvalue override should be guarded by LLVM_HAS_RVALUE_REFERENCE_THIS -#if LLVM_HAS_RVALUE_REFERENCE_THIS -#define LLVM_LVALUE_FUNCTION & -#else -#define LLVM_LVALUE_FUNCTION -#endif<br class="">
-<br class="">
 /// LLVM_LIBRARY_VISIBILITY - If a class marked with this attribute is linked  /// into a shared library, then the class should be private to the library and  /// not accessible from outside it.  Can also be used to mark variables and<br class="">
<br class="">
Modified: llvm/trunk/unittests/ADT/OptionalTest.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/OptionalTest.cpp?rev=368939&r1=368938&r2=368939&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/OptionalTest.cpp?rev=368939&r1=368938&r2=368939&view=diff</a><br class="">
==============================================================================<br class="">
--- llvm/trunk/unittests/ADT/OptionalTest.cpp (original)<br class="">
+++ llvm/trunk/unittests/ADT/OptionalTest.cpp Wed Aug 14 15:48:12 2019<br class="">
@@ -382,8 +382,6 @@ TEST_F(OptionalTest, ImmovableEmplace) {<br class="">
   EXPECT_EQ(0u, Immovable::Destructions);  }<br class="">
<br class="">
-#if LLVM_HAS_RVALUE_REFERENCE_THIS<br class="">
-<br class="">
 TEST_F(OptionalTest, MoveGetValueOr) {<br class="">
   Optional<MoveOnly> A;<br class="">
<br class="">
@@ -401,8 +399,6 @@ TEST_F(OptionalTest, MoveGetValueOr) {<br class="">
   EXPECT_EQ(2u, MoveOnly::Destructions);  }<br class="">
<br class="">
-#endif // LLVM_HAS_RVALUE_REFERENCE_THIS<br class="">
-<br class="">
 struct EqualTo {<br class="">
   template <typename T, typename U> static bool apply(const T &X, const U &Y) {<br class="">
     return X == Y;<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
_______________________________________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
</blockquote></div>
</div></blockquote></div><br class=""></body></html>