https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97050
Bug ID: 97050 Summary: ICE with segfault in lambda overload resolution Product: gcc Version: og10 (devel/omp/gcc-10) Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: numerical.simulation at web dot de Target Milestone: --- This issue can be observed in several varainst of gcc-trunk and 10.2. --- 8< --- #include <utility> #include <type_traits> #include <tuple> // See https://arne-mertz.de/2018/05/overload-build-a-variant-visitor-on-the-fly/ template <class ...Fs> struct overload : Fs... { template <class ...Ts> overload(Ts&& ...ts) : Fs{std::forward<Ts>(ts)}... {} using Fs::operator()...; }; template <class ...Ts> overload(Ts&&...) -> overload<std::remove_reference_t<Ts>...>; struct get_operator {}; struct get_operands {}; struct plus {}; template<typename T1, typename T2> auto operator+(T1 const & t1, T2 const & t2) { auto && operands_ = [&](auto tag) requires std::is_same_v<decltype(tag), get_operands> { return std::make_tuple(t1, t2); }; auto && operator_ = [&](auto tag) requires std::is_same_v<decltype(tag), get_operator> { return plus{}; }; return overload(operator_, operands_); } int main() { struct A{}; struct B{}; struct C{}; A a; B b; C c; auto sum = a + b + c; static_assert(std::is_same_v<decltype(sum(get_operator{})), plus>); } --- 8< --- yields <source>: In instantiation of 'operator+<overload<operator+<main()::A, main()::B>::<lambda(auto:12)>, operator+<main()::A, main()::B>::<lambda(auto:11)> >, main()::C>::<lambda(auto:11)> [with auto:11 = get_operator]': <source>:47:61: required from here <source>:47:61: internal compiler error: Segmentation fault 47 | static_assert(std::is_same_v<decltype(sum(get_operator{})), plus>); | ^ Please submit a full bug report Weblink for quick check: https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAM1QDsCBlZAQwBtMQBGAFlICsupVs1qhkAUgBMAISnTSAZ0ztkBPHUqZa6AMKpWAVwC2tQVvQAZPLUwA5YwCNMxLgA5SAB1QLC62nsMTQS8fNTorG3sjJxdOdyUVMNoGAmZiAgDjU05FZUxVPxS0ggi7R2c3RVT0zKCchWqS6zLoiriASkVUA2JkDgByKQBma2RDLABqcSGdAzVWQgBPaexxAAYAQWHR8cwpmYJFj0wAfQJiZkIFFfWtyRHaMYNJ6Z0CAw92G83bgHpfiYMTB7BAEAgeBQgf5pGwAWiMzgIAC8AHRYX6SNZxX5rACsv1QADdnKxUMx0LCHAY8KwKcxYYS0ngRAQGXhQiRYXRYQQEJhYVRWItfrdbgRMEZPsxxfsdGNmAoFBMUSqAGLXIarTYNYgGVQTIkksnoCYgCbqlUoqYAdlkmwmE3FkuEMte8sVypVABUNVqNg7DcRSeSID6pAA2COelEEBTtU3m662hroEAgGjEADuaXQrzDmogsfa4mtABFLbcHSXZGWpj97RMDD5RIm06hjhciMQIO0K0M7Vsy9MB2KJVLXTN3UrLfm/YHg%2BhQ9dJJGV5b47CVgbiUHja8U2niBLDScj1RnFo%2Bmc876%2B6t%2B6Ltec9QQJsBMAQTu3nNKSDaa6Ww63DqL5vh%2BX4diI6BKtWJaAQ%2B9YbCB%2BqfE2/5wUBiFOuOmCvIcxy0MwCITF6OSOkcWhEXsXqSFuzBzKgBqQV2cihpwExoLQDRTCujpkTRHF0NxUYEJI8awQ2Dr0UQPGruGTE/toCgnPspZ1v6DqaVWuKyCu4i4qWEDSYxqTAOJklaRMR4AI7UkeSoHiA7InAoVEnISrxYGM%2BGYIWzBmaQYGft%2BFxKVulaWVWtoRZFllHu8xC0BMjlGMwADWpzvJ8vkEGRonFv26mxTa8HSFWiFacZslRiFv7ECp0xqTFln6bpkYGUZDGOv55kaZFNl2ZgDkEKmTnKa5CLuZ5%2BSsD5fkBUFEE/ixmrNVpEl9cVVkfj0SWoUmAGYZt61DghWwWfFu3bkaIa1V2JyBbVSknAVZWikOiHWK%2BqXWD26EWchr6DodhWAxMNYg2VYM6LBp0Dlp/rMMO4MTA4yM6BxR3NVVCjGKpEzMDxZUOETmNnVpDTSngyAnAqSjpBAjnORNpweTMXmzRRjPGNA4F3SQsOlu0nQTPtKyve9pb9J0rAgP0uL9KQpj9GsiuoHLMMyHIyXdL0ezDJwisEHLqvC6QaUgLiQwotaazWri1pxFiuLhuGuLuLL/TcIryuq6Q6v9IrkJrKQxsq9LpBwLAMCICgqCSjSzjkJQaAJ%2BwLjAJwaySKQVA0uKxCQhADgm4rDjWGkixy4bpCpwi9AAPK0EKpekFgqWiOwrf4EeBTEpC4ekJgAAe%2BRzAMNdfcorcLA4FzEIsehYNXRvEHgRgr50ND0EwbAcDw/CCMIogoHIchCHgDiQpAnTtkkA%2BwrCKaNRIWsyJiQd5AUGgQOYtTZEPbQpQogxGCN4XwdB/5gNCH4YB5RYi5ESIURoUD6hfySEUdIcDWgIMpjUfQWRBB4KaJEeBXBOgKF1n0chQg5YKyVq3AOw9XDhlhOGbgb5kDIAmFnFEkgJgQFwIQP8BtAp6DTs4HiQxODxk1rpaQRtS5mwtriEOntvakA3qohhg8A5BxACHMOptI4xwgEgbo4I5jJwgKnDwicEGYHwF2QQ29GAsC7gfTMFwPCb1ofLH2jC5YGwmJmQgCAJjMNYewzh3DeGSEUeHM2fJyQVB7H4jRWiQ6%2BzVnLfRhilGdAttwcMfCACckhuCSFcJwUprhuBDCGPUvxQwAm6NyaHApfj4k6L9nojpiTOg7h8BobgQA