Consider the following code: $ cat test.cc template<int> struct duration { constexpr duration() : r(0) {} template<int TPeriod> constexpr duration(duration<TPeriod> x) : r(x.count()) {} constexpr int count() { return 0; } int r; }; struct Config { duration<1> timeout { duration<2>() }; }; Config make_config() { return {}; } struct ConfigArray { ConfigArray(); Config all_configs[1]; }; ConfigArray::ConfigArray() { } When trying to compile it with GCC 5.1 or trunk r222403 using the following options: $ g++ -c -std=c++11 ./test.cc I get the following error: ./test.cc: In constructor 'ConfigArray::ConfigArray()': ./test.cc:28:26: in constexpr expansion of 'Config()' ./test.cc:28:26: in constexpr expansion of 'duration<1>(duration<2>())' ./test.cc:7:58: in constexpr expansion of 'x.duration<<anonymous> >::count<2>()' ./test.cc:28:26: internal compiler error: in cxx_eval_call_expression, at cp/constexpr.c:1331 ConfigArray::ConfigArray() ^ 0x7eb08e cxx_eval_call_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:1331 0x7ebf0c cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3038 0x7ef0ca cxx_eval_store_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:2651 0x7ec869 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3112 0x7ec052 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3365 0x7ec310 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229 0x7ec310 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229 0x7ebf64 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3406 0x7f229e cxx_eval_statement_list /home/miyuki/gcc/src/gcc/cp/constexpr.c:2828 0x7ec76c cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3400 0x7eb188 cxx_eval_call_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:1365 0x7ebf0c cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3038 0x7ecc94 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3097 0x7ef0ca cxx_eval_store_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:2651 0x7ec869 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3112 0x7ec052 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3365 0x7ec310 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229 0x7ec310 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3229 0x7ebf64 cxx_eval_constant_expression /home/miyuki/gcc/src/gcc/cp/constexpr.c:3406 0x7f229e cxx_eval_statement_list /home/miyuki/gcc/src/gcc/cp/constexpr.c:2828 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions.
Started with r220544.
Author: jason Date: Thu Apr 30 14:19:24 2015 New Revision: 222628 URL: https://gcc.gnu.org/viewcvs?rev=222628&root=gcc&view=rev Log: PR c++/65876 * constexpr.c (cxx_eval_call_expression): Fail gracefully if cgraph threw away DECL_SAVED_TREE. Added: branches/gcc-5-branch/gcc/testsuite/g++.dg/cpp0x/constexpr-array12.C Modified: branches/gcc-5-branch/gcc/cp/ChangeLog branches/gcc-5-branch/gcc/cp/constexpr.c
Fixed for 5.2.
GCC 5.2 is being released, adjusting target milestone to 5.3.
GCC 5.3 is being released, adjusting target milestone.
This seems to have been fixed for GCC 6 as well.