CaseyCarter updated this revision to Diff 80365.
CaseyCarter added a comment.

Address review comments:

- Annotate the clang bug which the conditional compilation is avoiding.
- Assure the expression in question is not noexcept when not a constant 
expression.
- Cover get_type


https://reviews.llvm.org/D27436

Files:
  test/std/utilities/variant/variant.get/get_index.pass.cpp
  test/std/utilities/variant/variant.get/get_type.pass.cpp


Index: test/std/utilities/variant/variant.get/get_type.pass.cpp
===================================================================
--- test/std/utilities/variant/variant.get/get_type.pass.cpp
+++ test/std/utilities/variant/variant.get/get_type.pass.cpp
@@ -30,16 +30,35 @@
   {
     using V = std::variant<int, const long>;
     constexpr V v(42);
-    ASSERT_NOT_NOEXCEPT(std::get<int>(v));
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<int>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
     static_assert(std::get<int>(v) == 42, "");
   }
   {
     using V = std::variant<int, const long>;
+    const V v(42);
+    ASSERT_NOT_NOEXCEPT(std::get<int>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
+    assert(std::get<int>(v) == 42);
+  }
+  {
+    using V = std::variant<int, const long>;
     constexpr V v(42l);
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<const long>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);
     static_assert(std::get<const long>(v) == 42, "");
   }
+  {
+    using V = std::variant<int, const long>;
+    const V v(42l);
+    ASSERT_NOT_NOEXCEPT(std::get<const long>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);
+    assert(std::get<const long>(v) == 42);
+  }
 // FIXME: Remove these once reference support is reinstated
 #if !defined(TEST_VARIANT_HAS_NO_REFERENCES)
   {
Index: test/std/utilities/variant/variant.get/get_index.pass.cpp
===================================================================
--- test/std/utilities/variant/variant.get/get_index.pass.cpp
+++ test/std/utilities/variant/variant.get/get_index.pass.cpp
@@ -36,16 +36,35 @@
   {
     using V = std::variant<int, const long>;
     constexpr V v(42);
-    ASSERT_NOT_NOEXCEPT(std::get<0>(v));
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<0>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
     static_assert(std::get<0>(v) == 42, "");
   }
   {
     using V = std::variant<int, const long>;
+    const V v(42);
+    ASSERT_NOT_NOEXCEPT(std::get<0>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
+    assert(std::get<0>(v) == 42);
+  }
+  {
+    using V = std::variant<int, const long>;
     constexpr V v(42l);
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<1>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);
     static_assert(std::get<1>(v) == 42, "");
   }
+  {
+    using V = std::variant<int, const long>;
+    const V v(42l);
+    ASSERT_NOT_NOEXCEPT(std::get<1>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);
+    assert(std::get<1>(v) == 42);
+  }
 // FIXME: Remove these once reference support is reinstated
 #if !defined(TEST_VARIANT_HAS_NO_REFERENCES)
   {


Index: test/std/utilities/variant/variant.get/get_type.pass.cpp
===================================================================
--- test/std/utilities/variant/variant.get/get_type.pass.cpp
+++ test/std/utilities/variant/variant.get/get_type.pass.cpp
@@ -30,16 +30,35 @@
   {
     using V = std::variant<int, const long>;
     constexpr V v(42);
-    ASSERT_NOT_NOEXCEPT(std::get<int>(v));
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<int>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
     static_assert(std::get<int>(v) == 42, "");
   }
   {
     using V = std::variant<int, const long>;
+    const V v(42);
+    ASSERT_NOT_NOEXCEPT(std::get<int>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
+    assert(std::get<int>(v) == 42);
+  }
+  {
+    using V = std::variant<int, const long>;
     constexpr V v(42l);
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<const long>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);
     static_assert(std::get<const long>(v) == 42, "");
   }
+  {
+    using V = std::variant<int, const long>;
+    const V v(42l);
+    ASSERT_NOT_NOEXCEPT(std::get<const long>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<const long>(v)), const long &);
+    assert(std::get<const long>(v) == 42);
+  }
 // FIXME: Remove these once reference support is reinstated
 #if !defined(TEST_VARIANT_HAS_NO_REFERENCES)
   {
Index: test/std/utilities/variant/variant.get/get_index.pass.cpp
===================================================================
--- test/std/utilities/variant/variant.get/get_index.pass.cpp
+++ test/std/utilities/variant/variant.get/get_index.pass.cpp
@@ -36,16 +36,35 @@
   {
     using V = std::variant<int, const long>;
     constexpr V v(42);
-    ASSERT_NOT_NOEXCEPT(std::get<0>(v));
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<0>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
     static_assert(std::get<0>(v) == 42, "");
   }
   {
     using V = std::variant<int, const long>;
+    const V v(42);
+    ASSERT_NOT_NOEXCEPT(std::get<0>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<0>(v)), const int &);
+    assert(std::get<0>(v) == 42);
+  }
+  {
+    using V = std::variant<int, const long>;
     constexpr V v(42l);
+#ifndef __clang__ // Avoid https://llvm.org/bugs/show_bug.cgi?id=15481
+    ASSERT_NOEXCEPT(std::get<1>(v));
+#endif
     ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);
     static_assert(std::get<1>(v) == 42, "");
   }
+  {
+    using V = std::variant<int, const long>;
+    const V v(42l);
+    ASSERT_NOT_NOEXCEPT(std::get<1>(v));
+    ASSERT_SAME_TYPE(decltype(std::get<1>(v)), const long &);
+    assert(std::get<1>(v) == 42);
+  }
 // FIXME: Remove these once reference support is reinstated
 #if !defined(TEST_VARIANT_HAS_NO_REFERENCES)
   {
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to