From a76c13bf23a6ccccbcf3abd18f07ab31444a5add Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 3 Nov 2010 11:33:05 -0400 Subject: [PATCH] re PR c++/46277 (Revision 166167 failed to build 252.eon in SPEC CPU 2000) PR c++/46277 * init.c (expand_default_init): Avoid ICE if we can't figure out which function is being called. From-SVN: r166254 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/init.c | 2 +- gcc/testsuite/g++.dg/template/new9.C | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/new9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 24783f5c435..34996fc47bd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-11-03 Jason Merrill + + PR c++/46277 + * init.c (expand_default_init): Avoid ICE if we can't figure out + which function is being called. + 2010-11-02 Nathan Froyd * class.c (build_base_path, add_vcall_offset): Use build_zero_cst diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 1f73d148ac1..ab834bf65ef 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 00000000000..24e40ee2398 --- /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]; +}