[llvm] 61242c0 - Revert "[ADT] Add makeVisitor to STLExtras.h"

Scott Linder via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 28 12:52:26 PDT 2021


Author: Scott Linder
Date: 2021-06-28T19:51:25Z
New Revision: 61242c0addb120294211d24a97ed89837418cb36

URL: https://github.com/llvm/llvm-project/commit/61242c0addb120294211d24a97ed89837418cb36
DIFF: https://github.com/llvm/llvm-project/commit/61242c0addb120294211d24a97ed89837418cb36.diff

LOG: Revert "[ADT] Add makeVisitor to STLExtras.h"

This reverts commit 14a8aa615597ef0aa424ac9545906bf8b9865063.

Mistakenly landed this before a patch it should depend on was accepted.

Added: 
    

Modified: 
    llvm/include/llvm/ADT/STLExtras.h
    llvm/unittests/ADT/STLExtrasTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 372907be8a11d..430da0f42348b 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -1299,58 +1299,6 @@ using is_one_of = disjunction<std::is_same<T, Ts>...>;
 template <typename T, typename... Ts>
 using are_base_of = conjunction<std::is_base_of<T, Ts>...>;
 
-namespace detail {
-template <typename... Ts> struct Visitor;
-
-template <typename HeadT, typename... TailTs>
-struct Visitor<HeadT, TailTs...> : remove_cvref_t<HeadT>, Visitor<TailTs...> {
-  explicit constexpr Visitor(HeadT &&Head, TailTs &&...Tail)
-      : remove_cvref_t<HeadT>(std::forward<HeadT>(Head)),
-        Visitor<TailTs...>(std::forward<TailTs>(Tail)...) {}
-  using remove_cvref_t<HeadT>::operator();
-  using Visitor<TailTs...>::operator();
-};
-
-template <typename HeadT> struct Visitor<HeadT> : remove_cvref_t<HeadT> {
-  explicit constexpr Visitor(HeadT &&Head)
-      : remove_cvref_t<HeadT>(std::forward<HeadT>(Head)) {}
-  using remove_cvref_t<HeadT>::operator();
-};
-} // namespace detail
-
-/// Returns an opaquely-typed Callable object whose operator() overload set is
-/// the sum of the operator() overload sets of each CallableT in CallableTs.
-///
-/// The type of the returned object derives from each CallableT in CallableTs.
-/// The returned object is constructed by invoking the appropriate copy or move
-/// constructor of each CallableT, as selected by overload resolution on the
-/// corresponding argument to makeVisitor.
-///
-/// Example:
-///
-/// \code
-/// auto visitor = makeVisitor([](auto) { return "unhandled type"; },
-///                            [](int i) { return "int"; },
-///                            [](std::string s) { return "str"; });
-/// auto a = visitor(42);    // `a` is now "int".
-/// auto b = visitor("foo"); // `b` is now "str".
-/// auto c = visitor(3.14f); // `c` is now "unhandled type".
-/// \endcode
-///
-/// Example of making a visitor with a lambda which captures a move-only type:
-///
-/// \code
-/// std::unique_ptr<FooHandler> FH = /* ... */;
-/// auto visitor = makeVisitor(
-///     [FH{std::move(FH)}](Foo F) { return FH->handle(F); },
-///     [](int i) { return i; },
-///     [](std::string s) { return atoi(s); });
-/// \endcode
-template <typename... CallableTs>
-constexpr decltype(auto) makeVisitor(CallableTs &&...Callables) {
-  return detail::Visitor<CallableTs...>(std::forward<CallableTs>(Callables)...);
-}
-
 //===----------------------------------------------------------------------===//
 //     Extra additions for arrays
 //===----------------------------------------------------------------------===//

diff  --git a/llvm/unittests/ADT/STLExtrasTest.cpp b/llvm/unittests/ADT/STLExtrasTest.cpp
index eb87670700f7d..512c594d86322 100644
--- a/llvm/unittests/ADT/STLExtrasTest.cpp
+++ b/llvm/unittests/ADT/STLExtrasTest.cpp
@@ -764,151 +764,4 @@ TEST(STLExtras, Unique) {
   EXPECT_EQ(3, V[3]);
 }
 
-TEST(STLExtrasTest, TypesAreDistinct) {
-  EXPECT_TRUE((llvm::TypesAreDistinct<>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int>::value));
-  EXPECT_FALSE((llvm::TypesAreDistinct<int, int>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int, float>::value));
-  EXPECT_FALSE((llvm::TypesAreDistinct<int, float, int>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int, float, double>::value));
-  EXPECT_FALSE((llvm::TypesAreDistinct<int, float, double, float>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int, int *>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int, int &>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int, int &&>::value));
-  EXPECT_TRUE((llvm::TypesAreDistinct<int, const int>::value));
-}
-
-TEST(STLExtrasTest, FirstIndexOfType) {
-  EXPECT_EQ((llvm::FirstIndexOfType<int, int>::value), 0u);
-  EXPECT_EQ((llvm::FirstIndexOfType<int, int, int>::value), 0u);
-  EXPECT_EQ((llvm::FirstIndexOfType<int, float, int>::value), 1u);
-  EXPECT_EQ((llvm::FirstIndexOfType<int const *, float, int, int const *,
-                                    const int>::value),
-            2u);
-}
-
-TEST(STLExtrasTest, TypeAtIndex) {
-  EXPECT_TRUE((std::is_same<int, llvm::TypeAtIndex<0, int>>::value));
-  EXPECT_TRUE((std::is_same<int, llvm::TypeAtIndex<0, int, float>>::value));
-  EXPECT_TRUE((std::is_same<float, llvm::TypeAtIndex<1, int, float>>::value));
-  EXPECT_TRUE(
-      (std::is_same<float, llvm::TypeAtIndex<1, int, float, double>>::value));
-  EXPECT_TRUE(
-      (std::is_same<float, llvm::TypeAtIndex<1, int, float, double>>::value));
-  EXPECT_TRUE(
-      (std::is_same<double, llvm::TypeAtIndex<2, int, float, double>>::value));
-}
-
-TEST(STLExtrasTest, MakeVisitorOneCallable) {
-  auto IdentityLambda = [](auto X) { return X; };
-  auto IdentityVisitor = makeVisitor(IdentityLambda);
-  EXPECT_EQ(IdentityLambda(1), IdentityVisitor(1));
-  EXPECT_EQ(IdentityLambda(2.0f), IdentityVisitor(2.0f));
-  EXPECT_TRUE((std::is_same<decltype(IdentityLambda(IdentityLambda)),
-                            decltype(IdentityLambda)>::value));
-  EXPECT_TRUE((std::is_same<decltype(IdentityVisitor(IdentityVisitor)),
-                            decltype(IdentityVisitor)>::value));
-}
-
-TEST(STLExtrasTest, MakeVisitorTwoCallables) {
-  auto Visitor =
-      makeVisitor([](int) { return "int"; }, [](std::string) { return "str"; });
-  EXPECT_EQ(Visitor(42), "int");
-  EXPECT_EQ(Visitor("foo"), "str");
-}
-
-TEST(STLExtrasTest, MakeVisitorCallableMultipleOperands) {
-  auto Second = makeVisitor([](int I, float F) { return F; },
-                            [](float F, int I) { return I; });
-  EXPECT_EQ(Second(1.f, 1), 1);
-  EXPECT_EQ(Second(1, 1.f), 1.f);
-}
-
-TEST(STLExtrasTest, MakeVisitorDefaultCase) {
-  {
-    auto Visitor = makeVisitor([](int I) { return I + 100; },
-                               [](float F) { return F * 2; },
-                               [](auto) { return "unhandled type"; });
-    EXPECT_EQ(Visitor(24), 124);
-    EXPECT_EQ(Visitor(2.f), 4.f);
-    EXPECT_EQ(Visitor(2.), "unhandled type");
-    EXPECT_EQ(Visitor(Visitor), "unhandled type");
-  }
-  {
-    auto Visitor = makeVisitor([](auto) { return "unhandled type"; },
-                               [](int I) { return I + 100; },
-                               [](float F) { return F * 2; });
-    EXPECT_EQ(Visitor(24), 124);
-    EXPECT_EQ(Visitor(2.f), 4.f);
-    EXPECT_EQ(Visitor(2.), "unhandled type");
-    EXPECT_EQ(Visitor(Visitor), "unhandled type");
-  }
-}
-
-template <bool Moveable, bool Copyable>
-struct Functor : Counted<Moveable, Copyable> {
-  using Counted<Moveable, Copyable>::Counted;
-  void operator()() {}
-};
-
-TEST(STLExtrasTest, MakeVisitorLifetimeSemanticsPRValue) {
-  int Copies = 0;
-  int Moves = 0;
-  int Destructors = 0;
-  {
-    auto V = makeVisitor(Functor<true, false>(Copies, Moves, Destructors));
-    (void)V;
-    EXPECT_EQ(0, Copies);
-    EXPECT_EQ(1, Moves);
-    EXPECT_EQ(1, Destructors);
-  }
-  EXPECT_EQ(0, Copies);
-  EXPECT_EQ(1, Moves);
-  EXPECT_EQ(2, Destructors);
-}
-
-TEST(STLExtrasTest, MakeVisitorLifetimeSemanticsRValue) {
-  int Copies = 0;
-  int Moves = 0;
-  int Destructors = 0;
-  {
-    Functor<true, false> F(Copies, Moves, Destructors);
-    {
-      auto V = makeVisitor(std::move(F));
-      (void)V;
-      EXPECT_EQ(0, Copies);
-      EXPECT_EQ(1, Moves);
-      EXPECT_EQ(0, Destructors);
-    }
-    EXPECT_EQ(0, Copies);
-    EXPECT_EQ(1, Moves);
-    EXPECT_EQ(1, Destructors);
-  }
-  EXPECT_EQ(0, Copies);
-  EXPECT_EQ(1, Moves);
-  EXPECT_EQ(2, Destructors);
-}
-
-TEST(STLExtrasTest, MakeVisitorLifetimeSemanticsLValue) {
-  int Copies = 0;
-  int Moves = 0;
-  int Destructors = 0;
-  {
-    Functor<true, true> F(Copies, Moves, Destructors);
-    {
-      auto V = makeVisitor(F);
-      (void)V;
-      EXPECT_EQ(1, Copies);
-      EXPECT_EQ(0, Moves);
-      EXPECT_EQ(0, Destructors);
-    }
-    EXPECT_EQ(1, Copies);
-    EXPECT_EQ(0, Moves);
-    EXPECT_EQ(1, Destructors);
-  }
-  EXPECT_EQ(1, Copies);
-  EXPECT_EQ(0, Moves);
-  EXPECT_EQ(2, Destructors);
-}
-
 } // namespace


        


More information about the llvm-commits mailing list