https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100010
--- Comment #8 from Xionghu Luo (luoxhu at gcc dot gnu.org) <yinyuefengyi at gmail dot com> --- At the ICE point, node->clone_of has value, but clone_of is NULL: (gdb) p clone_of $114 = (cgraph_node *) 0x0 (gdb) p node->clone_of $115 = (cgraph_node *) 0x7ffff6664bb0 (gdb) pnode node->clone_of _ZN12ErrorHandler8decorateERK6String/0 (decorate) Type: function Visibility: semantic_interposition virtual next sharing asm name: 0 References: Referring: Availability: not_available Function flags: Called by: Calls: (gdb) pnode node _ZN12ErrorHandler8decorateERK6String/0 (decorate) Type: function definition analyzed Visibility: semantic_interposition virtual previous sharing asm name: 0 References: Referring: Read from file: a-pr10010.o Function decorate/0 is inline copy in decorate/1 Clone of _ZN12ErrorHandler8decorateERK6String/0 Availability: local Unit id: 1 Function flags: count:1073741824 (estimated locally) local Called by: _ZN20LandmarkErrorHandler8decorateERK6String/1 (inlined) (1073741824 (estimated locally),1.00 per call) Calls: _ZN6StringD1Ev/37 (1073741824 (estimated locally),1.00 per call) _ZN6StringC1Ec/38 (1073741824 (estimated loca lly),1.00 per call) (can throw external) Polymorphic indirect call of type struct ErrorHandler token:0(1073741824 (estimated locally),1.00 per call) (can thr ow external) of param:0 (vptr maybe changed) num speculative call targets: 0 Outer type (dynamic):struct ErrorHandler (or a derived type) offset 0 This simple change could fix but not sure whether it is correct. diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc index 6d9c36ea8b6..44a33a2af23 100644 --- a/gcc/lto-cgraph.cc +++ b/gcc/lto-cgraph.cc @@ -448,7 +448,7 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node, if (clone_of && !lto_symtab_encoder_encode_body_p (encoder, ultimate_clone_of)) clone_of = NULL; - if (tag == LTO_symtab_analyzed_node) + if (tag == LTO_symtab_analyzed_node && !flag_ltrans_devirtualize) gcc_assert (clone_of || !node->clone_of); if (!clone_of) streamer_write_hwi_stream (ob->main_stream, LCC_NOT_FOUND);