https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93711
Bug ID: 93711 Summary: ICE: [[no_unique_address] when constructing via template helper Product: gcc Version: 9.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: eteran at alum dot rit.edu Target Milestone: --- This is a little hard to explain clearly, but I'll do my best. I have a container class that I want to make properly allocator aware and ran into this ICE. When I don't use allocator_traits, and directly copy the allocator, it works just fine. But once I introduce the usage of allocator_traits<A>::select_on_container_copy_construction, I get an ICE. Example A (Works Properly): #include <memory> template <class T, class A = std::allocator<T>> struct MyType { MyType(const MyType &other) : a_(other.a_) { } MyType(const A &a = A()) : a_(a) { } T *p_; [[no_unique_address]] A a_; }; int main() { MyType<int> x; MyType<int> y(x); } Example B (ICE): #include <memory> template <class T, class A = std::allocator<T>> struct MyType { MyType(const MyType &other) : a_(std::allocator_traits<A>::select_on_container_copy_construction(other.a_)) { } MyType(const A &a = A()) : a_(std::allocator_traits<A>::select_on_container_copy_construction(a)) { } T *p_; [[no_unique_address]] A a_; }; int main() { MyType<int> x; MyType<int> y(x); } Both cases work correctly if I remove [[no_unique_address], so it seems to be an interaction between [[no_unique_address]] and a_(std::allocator_traits<A>::select_on_container_copy_construction(a)). Here is the complete backtrace for the failing example: g++ -std=c++17 test.cpp -o test during RTL pass: expand test.cpp: In constructor ‘MyType<T, A>::MyType(const A&) [with T = int; A = std::allocator<int>]’: test.cpp:12:74: internal compiler error: in assign_temp, at function.c:982 12 | : a_(std::allocator_traits<A>::select_on_container_copy_construction(a)) { | ^ 0x59a442 assign_temp(tree_node*, int, int) /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/function.c:982 0x7c050f expand_call(tree_node*, rtx_def*, int) /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/calls.c:3459 0x8c4a2d expand_expr_real_1(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/expr.c:11033 0x8d297b expand_normal /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/expr.h:285 0x8d297b store_field /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/expr.c:7022 0x8cff37 expand_assignment(tree_node*, tree_node*, bool) /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/expr.c:5296 0x7cc3f0 expand_call_stmt /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/cfgexpand.c:2722 0x7cc3f0 expand_gimple_stmt_1 /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/cfgexpand.c:3691 0x7cc3f0 expand_gimple_stmt /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/cfgexpand.c:3850 0x7d1237 expand_gimple_basic_block /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/cfgexpand.c:5890 0x7d35d7 execute /var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/cfgexpand.c:6513 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://bugs.gentoo.org/> for instructions.