http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53401
Bug #: 53401 Summary: internal compiler error: Segmentation fault on infinite argument deduction of constexpr templates Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: ai.az...@gmail.com Created attachment 27434 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27434 Outputs from -v option (repeated error messages are snipped) and preprocessed source. The following invalid code causes an ICE with GCC 4.8.0 20120513 (experimental) and -std=c++11. ///////////////////////////////////////////// template<int I> struct index {}; constexpr int recursive_impl(index<0u>) { return 0; } template<int N> constexpr auto recursive_impl(index<N>) // Line 11 -> decltype(recursive_impl(index<N - 1>())) { return recursive_impl(index<N - 1>()); } template<int N> constexpr auto recursive() -> decltype(recursive_impl(index<N>())) { return recursive_impl(index<N>()); } void f(int i) { recursive<1>(); } ///////////////////////////////////////////// g++: internal compiler error: Segmentation fault (program cc1plus) Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. The above-mentioned code is invalid because there isn't anything to prevent the compiler from trying infinite template argument deduction in the second overload of `recursive_impl' (Line 11). So, I expect error messages like "template instantiation depth exceeds maximum...". However, the compiler dies in segmentation fault. `constexpr' is necessary to reproduce the ICE. Otherwise, the compiler outputs ordinary error messages as expected. 4.6.4 20120511 (prerelease) and 4.7.1 20120512 (prerelease) also cause the same problem, too.