https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95878
Bug ID: 95878 Summary: ICE when compiling code that mixes an empty class, [[no_unique_address]] and non-trivial default and copy constructors Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: boris.staletic at gmail dot com Target Milestone: --- Hello, first, apologies for a bad title. I was unsure how to make it more descriptive. My repro case looks suspiciously like https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90432 However, the bug in 90432 has been fixed in 10.1 and 9.3. I've encountered a similar code that still triggers an ICE. Just like 90432, gcc 8 works fine. I've encountered a non-minimal version of this bug while working on the nanorange library. The minimal code that causes ICE: struct istream_iterator { istream_iterator() {} istream_iterator(const istream_iterator&) {} }; istream_iterator next(istream_iterator&& bound) { return static_cast<istream_iterator>(bound); } struct copy_result { [[no_unique_address]] istream_iterator in; }; int main() { copy_result result{next(istream_iterator{})}; } during RTL pass: expand <source>: In function 'int main()': <source>:15:45: internal compiler error: in assign_temp, at function.c:982 15 | copy_result result{next(istream_iterator{})}; | ^ Please submit a full bug report, with preprocessed source if appropriate. See <https://gcc.gnu.org/bugs/> for instructions. Compiler returned: 1