https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94808
Bug ID: 94808 Summary: [ICE] [Regression] Segfault during diagnostics from concept check failure Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: eric.niebler at gmail dot com Target Milestone: --- Created attachment 48385 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48385&action=edit Unreduced, preprocessed source This problem reproduces on trunk built today (4/27/2020). Compile the attached preprocessed source with the attached script (flags: -std=gnu++2a). I expect to see a diagnostic since the program should not satisfy the concept checks. Instead, during diagnostic reporting I see the following: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp: In member function ‘virtual void P0443_connect_with_executor_Test::TestBody()’: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:81:53: error: no match for call to ‘(const unifex::_connect::_fn) ({anonymous}::inline_executor, P0443_connect_with_executor_Test::TestBody()::_receiver)’ 81 | auto op = connect(inline_executor{}, _receiver{&i}); | ^ In file included from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/executor_concepts.hpp:174, from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:17: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:224:10: note: candidate: ‘template<class Sender, class Receiver> requires (receiver<Receiver, std::__exception_ptr::exception_ptr>) && ((sender<Sender>) && (tag_invocable<unifex::_connect::_fn, Sender, Receiver>)) unifex::_tag_invoke::tag_invoke_result_t<unifex::_connect::_fn, Sender, Receiver> unifex::_connect::_fn::operator()(Sender&&, Receiver&&) const’ 224 | auto operator()(Sender&& s, Receiver&& r) const | ^~~~~~~~ /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:224:10: note: template argument deduction/substitution failed: In file included from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/executor_concepts.hpp:20, from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:17: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/tag_invoke.hpp: In substitution of ‘template<class CPO, class ... Args> using tag_invoke_result_t = decltype (unifex::_tag_invoke::tag_invoke(static_cast<CPO&& (*)() noexcept>(nullptr)(), static_cast<Args&& (*)()noexcept (true)>(nullptr)()...)) [with CPO = unifex::_connect::_fn; Args = {{anonymous}::inline_executor, P0443_connect_with_executor_Test::TestBody()::_receiver}]’: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:224:10: required by substitution of ‘template<class Sender, class Receiver> requires (receiver<Receiver, std::__exception_ptr::exception_ptr>) && ((sender<Sender>) && (tag_invocable<unifex::_connect::_fn, Sender, Receiver>)) unifex::_tag_invoke::tag_invoke_result_t<unifex::_connect::_fn, Sender, Receiver> unifex::_connect::_fn::operator()(Sender&&, Receiver&&) const [with Sender = {anonymous}::inline_executor; Receiver = P0443_connect_with_executor_Test::TestBody()::_receiver]’ /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:81:53: required from here /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/tag_invoke.hpp:39:19: error: too many arguments to function ‘void unifex::_tag_invoke::tag_invoke()’ 39 | tag_invoke(UNIFEX_DECLVAL(CPO && ), UNIFEX_DECLVAL(Args && )...)); | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/tag_invoke.hpp:26:10: note: declared here 26 | void tag_invoke(); | ^~~~~~~~~~ In file included from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/executor_concepts.hpp:174, from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:17: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:233:10: note: candidate: ‘template<class Sender, class Receiver> requires (receiver<Receiver, std::__exception_ptr::exception_ptr>) && !((sender<Sender>) && (tag_invocable<unifex::_connect::_fn, Sender, Receiver>)) && ((sender<Sender>) && (_has_member_connect<Sender, Receiver>)) unifex::_connect::_member_connect_result_t<Sender, Receiver> unifex::_connect::_fn::operator()(Sender&&, Receiver&&) const’ 233 | auto operator()(Sender&& s, Receiver&& r) const | ^~~~~~~~ /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:233:10: note: template argument deduction/substitution failed: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp: In substitution of ‘template<class Sender, class Receiver> using _member_connect_result_t = decltype (static_cast<Sender&& (*)() noexcept>(nullptr)().connect(static_cast<Receiver&& (*)() noexcept>(nullptr)())) [with Sender = {anonymous}::inline_executor; Receiver = P0443_connect_with_executor_Test::TestBody()::_receiver]’: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:233:10: required by substitution of ‘template<class Sender, class Receiver> requires (receiver<Receiver, std::__exception_ptr::exception_ptr>) && !((sender<Sender>) && (tag_invocable<unifex::_connect::_fn, Sender, Receiver>)) && ((sender<Sender>) && (_has_member_connect<Sender, Receiver>)) unifex::_connect::_member_connect_result_t<Sender, Receiver> unifex::_connect::_fn::operator()(Sender&&, Receiver&&) const [with Sender = {anonymous}::inline_executor; Receiver = P0443_connect_with_executor_Test::TestBody()::_receiver]’ /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:81:53: required from here /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:189:64: error: ‘struct {anonymous}::inline_executor’ has no member named ‘connect’ 189 | decltype((UNIFEX_DECLVAL(Sender&&)).connect( | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ In file included from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/executor_concepts.hpp:174, from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:17: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:243:10: note: candidate: ‘unifex::_connect::_fn::_as_operation<Executor, Receiver> unifex::_connect::_fn::operator()(Executor&&, Receiver&&) const [with Executor = {anonymous}::inline_executor; Receiver = P0443_connect_with_executor_Test::TestBody()::_receiver; unifex::_connect::_fn::_as_operation<Executor, Receiver> = unifex::_connect::_fn::_as_op<{anonymous}::inline_executor, P0443_connect_with_executor_Test::TestBody()::_receiver>::type]’ 243 | auto operator()(Executor&& e, Receiver&& r) const | ^~~~~~~~ /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:243:10: note: constraints not satisfied ‘ In file included from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/sender_concepts.hpp:22, from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/executor_concepts.hpp:174, from /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:17: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/receiver_concepts.hpp: In instantiation of ‘unifex::_connect::_fn::_as_operation<Executor, Receiver> unifex::_connect::_fn::operator()(Executor&&, Receiver&&) const [with Executor = {anonymous}::inline_executor; Receiver = P0443_connect_with_executor_Test::TestBody()::_receiver; unifex::_connect::_fn::_as_operation<Executor, Receiver> = unifex::_connect::_fn::_as_op<{anonymous}::inline_executor, P0443_connect_with_executor_Test::TestBody()::_receiver>::type]’: /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/test/P0443_test.cpp:81:53: required from here /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/receiver_concepts.hpp:218:9: required for the satisfaction of ‘_receiver_of<R, An ...>’ [with R = P0443_connect_with_executor_Test::TestBody::_receiver; An = {}] /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/receiver_concepts.hpp:227:3: required for the satisfaction of ‘receiver_of<Receiver>’ [with Receiver = P0443_connect_with_executor_Test::TestBody::_receiver] /Users/eniebler/Dropbox (Facebook)/home/Code/Code/libunifex/source/../include/unifex/receiver_concepts.hpp:218:24: in requirements with ‘unifex::remove_cvref_t<P0443_connect_with_executor_Test::TestBody()::_receiver>&& t’, Segmentation fault: 11 218 | UNIFEX_CONCEPT_FRAGMENT( | ^ libbacktrace could not find executable to open Please submit a full bug report, with preprocessed source if appropriate. See <https://gcc.gnu.org/bugs/> for instructions.