https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113814

            Bug ID: 113814
           Summary: [modules] ICE with imported partial specialization
                    matching existing template-id
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ppalka at gcc dot gnu.org
  Target Milestone: ---

Reduced from the hello-1 ICE tracked by PR113710:

$ cat header.h
template<int __i, typename _Tp>
struct tuple_element;

template<typename...>
struct tuple { };

template<int __i, typename... _Elements>
tuple_element<__i, tuple<_Elements...>>
get(tuple<_Elements...>);

$ cat testcase.H
#include "header.h"

template<int __i, typename... _Elements>
struct tuple_element<__i, tuple<_Elements...>> { };

$ cat testcase.C
#include "header.h"
import "testcase.H"

int main() {
  get<0>(tuple<int, int>{});
}

$ g++ -fmodules-ts testcase.H testcase.C
testcase.C: In function ‘int main()’:
testcase.C:5:3: internal compiler error: canonical types differ for identical
types ‘tuple_element<__i, tuple<_Elements ...> >’ and ‘tuple_element<__i,
tuple<_Elements ...> >’
    5 |   get<0>(tuple<int, int>{});
      |   ^~~

Reply via email to