https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80534
--- Comment #6 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Here is a different reduction leading to a different ICE: trippels@gcc75 ~ % cat lowLevelInitialization.ii template <int, int> struct aligned_storage { struct type { char __data[0]; }; }; struct A {}; template <typename _Tp, typename = _Tp> struct unique_ptr; template <typename _Tp, typename _Dp> struct unique_ptr<_Tp[], _Dp> { int _M_t; void get() { _M_t; } }; struct B { using Association = A; using Storage = aligned_storage<sizeof(Association), alignof(Association)>::type; using StorageUniquePointer = unique_ptr<Storage[]>; void getAssociationsBegin() { storageUniquePointer_.get(); } StorageUniquePointer storageUniquePointer_; }; struct C {}; using MainThreadStaticSignalsReceiver = C; aligned_storage<sizeof(MainThreadStaticSignalsReceiver), alignof(MainThreadStaticSignalsReceiver)>::type mainThreadStaticSignalsReceiverStorage; trippels@gcc75 ~ % g++ -c lowLevelInitialization.ii lowLevelInitialization.ii: In instantiation of ‘void unique_ptr<_Tp [], _Dp>::get() [with _Tp = aligned_storage<1, 1>::type; _Dp = aligned_storage<1, 1>::type []]’: lowLevelInitialization.ii:17:59: required from here lowLevelInitialization.ii:10:16: internal compiler error: canonical types differ for identical types aligned_storage<1, 1>::type [] and aligned_storage<1, 1>::type [] void get() { _M_t; } ^~~~ 0x7b0f7f comptypes(tree_node*, tree_node*, int) ../../gcc/gcc/cp/typeck.c:1434 0x6ab3c1 template_args_equal(tree_node*, tree_node*, bool) ../../gcc/gcc/cp/pt.c:8300 0x6ab139 comp_template_args(tree_node*, tree_node*, tree_node**, tree_node**, bool) ../../gcc/gcc/cp/pt.c:8348 0x7b0637 structural_comptypes ../../gcc/gcc/cp/typeck.c:1290 0x7b0f3c comptypes(tree_node*, tree_node*, int) ../../gcc/gcc/cp/typeck.c:1426 0x7afc67 structural_comptypes ../../gcc/gcc/cp/typeck.c:1369 0x7b0f3c comptypes(tree_node*, tree_node*, int) ../../gcc/gcc/cp/typeck.c:1426 0x7b9ab9 cp_build_indirect_ref(tree_node*, ref_operator, int) ../../gcc/gcc/cp/typeck.c:3024 0x66175e build_new_op_1 ../../gcc/gcc/cp/call.c:5946 0x66200e build_new_op(unsigned int, tree_code, int, tree_node*, tree_node*, tree_node*, tree_node**, int) ../../gcc/gcc/cp/call.c:6027 0x7ba0fb build_x_indirect_ref(unsigned int, tree_node*, ref_operator, int) ../../gcc/gcc/cp/typeck.c:2990 0x6d8485 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/gcc/cp/pt.c:16696 0x6d7e0a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/gcc/cp/pt.c:17527 0x6cdd0e tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/gcc/cp/pt.c:16466 0x6cbc47 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/gcc/cp/pt.c:15731 0x6cd448 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/gcc/cp/pt.c:15943 0x6ca4f3 instantiate_decl(tree_node*, bool, bool) ../../gcc/gcc/cp/pt.c:22897 0x70388b instantiate_pending_templates(int) ../../gcc/gcc/cp/pt.c:23016 0x74e1eb c_parse_final_cleanups() ../../gcc/gcc/cp/decl2.c:4526