From 281703e67ffaee8e26efef86e0df3e145477f4cb Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Wed, 7 Oct 2020 16:36:38 +0200 Subject: [PATCH] Revert "[ADT] function_ref's constructor is unavailable if the argument is not callable." This reverts commit 4cae6228d129d4c4dfb156c043977bb6b5690031. Breaks GCC build: http://lab.llvm.org:8011/#/builders/8/builds/33/steps/6/logs/stdio --- llvm/include/llvm/ADT/STLExtras.h | 13 +------------ llvm/lib/AsmParser/LLParser.h | 4 ++-- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 4 +++- llvm/unittests/ADT/FunctionRefTest.cpp | 11 ----------- 4 files changed, 6 insertions(+), 26 deletions(-) diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h index b70a6f9..4be016b 100644 --- a/llvm/include/llvm/ADT/STLExtras.h +++ b/llvm/include/llvm/ADT/STLExtras.h @@ -186,27 +186,16 @@ class function_ref { std::forward(params)...); } - template ::type> - static constexpr bool IsCompatible = - std::is_void::value || std::is_convertible::value; - public: function_ref() = default; function_ref(std::nullptr_t) {} template - // Only allow this constructor if the object is actually callable - // and returns the correct type. function_ref( Callable &&callable, std::enable_if_t< - // This is not the copy-constructor. !std::is_same>, - function_ref>::value && - // Must be callable and return a suitable type. - IsCompatible> * = nullptr) + function_ref>::value> * = nullptr) : callback(callback_fn::type>), callable(reinterpret_cast(&callable)) {} diff --git a/llvm/lib/AsmParser/LLParser.h b/llvm/lib/AsmParser/LLParser.h index 5f581f0..a7fbcdd 100644 --- a/llvm/lib/AsmParser/LLParser.h +++ b/llvm/lib/AsmParser/LLParser.h @@ -166,8 +166,8 @@ namespace llvm { : Context(Context), Lex(F, SM, Err, Context), M(M), Index(Index), Slots(Slots), BlockAddressPFS(nullptr) {} bool Run( - bool UpgradeDebugInfo, DataLayoutCallbackTy DataLayoutCallback = - [](StringRef) { return None; }); + bool UpgradeDebugInfo, + DataLayoutCallbackTy DataLayoutCallback = [](Module *) {}); bool parseStandaloneConstantValue(Constant *&C, const SlotMapping *Slots); diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 15ca3a5..4d69dd7 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -579,7 +579,9 @@ public: /// \returns true if an error occurred. Error parseBitcodeInto( Module *M, bool ShouldLazyLoadMetadata = false, bool IsImporting = false, - DataLayoutCallbackTy DataLayoutCallback = [](StringRef) { return None; }); + DataLayoutCallbackTy DataLayoutCallback = [](std::string) { + return None; + }); static uint64_t decodeSignRotatedValue(uint64_t V); diff --git a/llvm/unittests/ADT/FunctionRefTest.cpp b/llvm/unittests/ADT/FunctionRefTest.cpp index f084aa7..669b87d 100644 --- a/llvm/unittests/ADT/FunctionRefTest.cpp +++ b/llvm/unittests/ADT/FunctionRefTest.cpp @@ -48,15 +48,4 @@ TEST(FunctionRefTest, BadCopy) { ASSERT_EQ(1, X()); } -// Test that overloads on function_refs are resolved as expected. -const char *returns(StringRef) { return "not a function"; } -const char *returns(function_ref F) { return "number"; } -const char *returns(function_ref F) { return "string"; } - -TEST(FunctionRefTest, SFINAE) { - EXPECT_EQ("not a function", returns("boo!")); - EXPECT_EQ("number", returns([] { return 42; })); - EXPECT_EQ("string", returns([] { return "hello"; })); -} - } // namespace -- 2.7.4