https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121715
Bug ID: 121715 Summary: ICE with std::string = nullptr inside lambda within decltype under C++23 mode Product: gcc Version: 14.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jirehguo at tju dot edu.cn Target Milestone: --- The following C++ code causes an Internal Compiler Error (ICE) when compiled with -std=c++23 using GCC versions from 12.1 up to 14.3.0. However, no ICE with -std=c++20 using same version gcc. Notably, this ICE does not occur on the latest trunk version of GCC. Reproducer link: https://godbolt.org/z/r93Y5M6TG Code: ------------- #include <string> #include <vector> template <class T> void spam(decltype([] { const int size = 10; std::vector<std::string> array(size, "non-null"); try { array[5] = nullptr; } catch (const std::exception &e) { } }) (*s)[sizeof(T)]) {} int main() { spam<char>(nullptr); } Command: ------------- g++ test.cpp -std=c++23 Output: ------------- <source>: In substitution of 'template<class T> void spam(decltype (<lambda>) (*)[sizeof (T)]) [with T = char]': <source>:15:13: required from here 15 | spam<char>(nullptr); | ~~~~~~~~~~^~~~~~~~~ <source>:9:16: error: use of deleted function 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(std::nullptr_t) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::nullptr_t = std::nullptr_t]' 9 | array[5] = nullptr; | ^~~~~~~ In file included from /cefs/57/575cc65f13a9ae435d7c97e7_converted_gcc-14.3.0/include/c++/14.3.0/string:54, from <source>:1: /cefs/57/575cc65f13a9ae435d7c97e7_converted_gcc-14.3.0/include/c++/14.3.0/bits/basic_string.h:749:21: note: declared here 749 | basic_string& operator=(nullptr_t) = delete; | ^~~~~~~~ <source>:9:16: note: use '-fdiagnostics-all-candidates' to display considered candidates 9 | array[5] = nullptr; | ^~~~~~~ <source>:9:16: error: use of deleted function 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(std::nullptr_t) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::nullptr_t = std::nullptr_t]' /cefs/57/575cc65f13a9ae435d7c97e7_converted_gcc-14.3.0/include/c++/14.3.0/bits/basic_string.h:749:21: note: declared here 749 | basic_string& operator=(nullptr_t) = delete; | ^~~~~~~~ <source>:9:16: note: use '-fdiagnostics-all-candidates' to display considered candidates 9 | array[5] = nullptr; | ^~~~~~~ ' internal compiler error: error reporting routines re-entered. 0x202f985 diagnostic_context::report_diagnostic(diagnostic_info*) ???:0 0x203084d error(char const*, ...) ???:0 0x9637fc process_outer_var_ref(tree_node*, int, bool) ???:0 0x947636 tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*) ???:0 0x93d5e0 tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x2042cde pp_format(pretty_printer*, text_info*, urlifier const*) ???:0 0x2044225 pp_verbatim(pretty_printer*, char const*, ...) ???:0 0x202f5bd diagnostic_context::report_diagnostic(diagnostic_info*) ???:0 0x203084d error(char const*, ...) ???:0 0x833cf8 mark_used(tree_node*, int) ???:0 0x7a4540 build_new_op(op_location_t const&, tree_code, int, tree_node*, tree_node*, tree_node*, tree_node*, tree_node**, int) ???:0 0x9a2ac5 cp_build_modify_expr(unsigned int, tree_node*, tree_code, tree_node*, int) ???:0 0x9a3254 build_x_modify_expr(unsigned int, tree_node*, tree_code, tree_node*, tree_node*, int) ???:0 0x947636 tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*) ???:0 0x93d5e0 tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x93d10d tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x93d10d tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x935def instantiate_decl(tree_node*, bool, bool) ???:0 0x94ff93 instantiate_pending_templates(int) ???:0 0x8361b8 c_parse_final_cleanups() ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Compiler returned: 1