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>{});
| ^~~