https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103265
Bug ID: 103265 Summary: Default initializer on [[no_unique_address]] member initialized by lambda invoking guaranteed copy elision crashes gcc Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: davidfromonline at gmail dot com Target Milestone: --- The following translation unit ``` struct non_movable { non_movable() = default; non_movable(non_movable &&) = delete; }; struct holder { holder() {} [[no_unique_address]] non_movable m = [] { return non_movable(); }(); }; auto x = holder{}; ``` causes gcc to crash with ``` during RTL pass: expand <source>: In constructor 'holder::holder()': <source>:7:18: internal compiler error: in assign_temp, at function.c:988 7 | holder() {} | ^ 0x205c6d9 internal_error(char const*, ...) ???:0 0x7d9c9f fancy_abort(char const*, int, char const*) ???:0 0xdf2dfc assign_temp(tree_node*, int, int) ???:0 0xc0a642 expand_call(tree_node*, rtx_def*, int) ???:0 0xd78607 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) ???:0 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Compiler returned: 1 ``` See it live: https://godbolt.org/z/8oPo1ba1f Related: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98995