commit 7d13a58f7e3d2e0fa70c58cab5bb73b206998c00 Author: Jason Merrill Date: Wed Nov 3 01:04:24 2010 -0400 PR c++/46277 * init.c (expand_default_init): Avoid ICE if we can't figure out which function is being called. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index d632816..982dc24 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1443,7 +1443,7 @@ expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags, if (exp == true_exp && TREE_CODE (rval) == CALL_EXPR) { tree fn = get_callee_fndecl (rval); - if (DECL_DECLARED_CONSTEXPR_P (fn)) + if (fn && DECL_DECLARED_CONSTEXPR_P (fn)) { tree e = maybe_constant_value (rval); if (TREE_CONSTANT (e)) diff --git a/gcc/testsuite/g++.dg/template/new9.C b/gcc/testsuite/g++.dg/template/new9.C new file mode 100644 index 0000000..24e40ee --- /dev/null +++ b/gcc/testsuite/g++.dg/template/new9.C @@ -0,0 +1,16 @@ +// PR c++/46277 + +class ggRGBE { +public: + ggRGBE(); +}; +template class ggIO +{ + void readbody(int); + ggRGBE *scanline; +}; +template void +ggIO::readbody(int width) +{ + scanline = new ggRGBE[width]; +}