http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60600
Bug ID: 60600 Summary: ICE in ipa_get_indirect_edge_target_1 Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lucdanton at free dot fr Created attachment 32404 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32404&action=edit Testcase $ g++-trunk --version g++-trunk (GCC) 4.9.0 20140319 (experimental) $ cat main.cpp struct data { data(int); }; struct top { virtual int topf(); }; struct intermediate: top { int topf() /* override */ { return 0; } }; struct child1: top { void childf() { data d(topf()); } }; struct child2: intermediate {}; void test(top& t) { child1& c = static_cast<child1&>(t); c.childf(); child2 d; test(d); } $ g++-trunk main.cpp -O3 main.cpp:28:1: internal compiler error: in ipa_get_indirect_edge_target_1, at ipa-cp.c:1645 } ^ 0x10ac52e ipa_get_indirect_edge_target_1 ../../gcc/gcc/ipa-cp.c:1644 0xa1570c estimate_edge_devirt_benefit ../../gcc/gcc/ipa-inline-analysis.c:2955 0xa1570c estimate_edge_size_and_time ../../gcc/gcc/ipa-inline-analysis.c:2987 0xa1570c estimate_calls_size_and_time ../../gcc/gcc/ipa-inline-analysis.c:3040 0xa1602c estimate_node_size_and_time ../../gcc/gcc/ipa-inline-analysis.c:3127 0xa18016 estimate_ipcp_clone_size_and_time(cgraph_node*, vec<tree_node*, va_heap, vl_ptr>, vec<tree_node*, va_heap, vl_ptr>, vec<ipa_agg_jump_function*, va_heap, vl_ptr>, int*, int*, int*) ../../gcc/gcc/ipa-inline-analysis.c:3163 0x10b17fc estimate_local_effects ../../gcc/gcc/ipa-cp.c:2004 0x10b17fc propagate_constants_topo ../../gcc/gcc/ipa-cp.c:2229 0x10b17fc ipcp_propagate_stage ../../gcc/gcc/ipa-cp.c:2329 0x10b17fc ipcp_driver ../../gcc/gcc/ipa-cp.c:3707 0x10b17fc execute ../../gcc/gcc/ipa-cp.c:3806 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. ------------------------------------- This only happens with -O3, in all C++ modes. This may be a regression – the testcase was built from the preprocessed source of a third-party library, with stock settings. Presumably it built at some point before shipping.