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

Reply via email to