https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69903
Bug ID: 69903 Summary: Function template specialization with CRTP-class causes compiler segfault Product: gcc Version: 4.9.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: tolstokor at gmail dot com Target Milestone: --- Created attachment 37756 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37756&action=edit Preprocessed source file The bug exists in versions from 4.8.1 to latest 5.3.0, including ARM and ARM64 compiler versions, with any compiler flags and optimization level. Platform independent: most Linux distributives and MinGW (Windows) version crashes while compiling this code: // CRTP template <typename T> struct A { // Default behavior template <int i> inline static void f() { volatile int x = i; }; inline static void F() { T::template f<0>(); T::template f<1>(); T::template f<2>(); } }; struct B : A<B> { /* empty */ }; // Specification for i == 2 template<> void B::f<2>() { volatile int y = 777; }; int main() { B::F(); } Error messages like this: /tmp/gcc-explorer-compiler116122-74-ozif0b/example.cpp: In instantiation of 'static void A<T>::f() [with int i = 2; T = B]': 13 : required from 'static void A<T>::F() [with T = B]' 26 : required from here 7 : internal compiler error: Segmentation fault volatile int x = i; ^ **** Please submit a full bug report, with preprocessed source if appropriate. See <file:///usr/share/doc/gcc-4.8/README.Bugs> for instructions. Preprocessed source stored into /tmp/ccmxbU4L.out file, please attach this to your bugreport. Compilation failed