> On 09/18/2017 11:08 AM, Evgeny Kudryashov wrote: > > Hello, > > > > The code below causes an internal compiler error in cc1plus (trunk on > > x86-64) if it is compiled with -fdump-ipa-cgraph. > > > > int foo () __attribute__ ((target ("default"))); > > int foo () __attribute__ ((target ("sse4.2"))); > > > > __attribute__ ((target ("sse4.2"))) > > int foo () > > { > > return 1; > > } > > > > The error occurs in cgraph_node::dump (gcc/cgraph.c:2065), particularly, in > > the following fragment: > > > > cgraph_function_version_info *vi = function_version (); > > if (vi != NULL) > > { > > fprintf (f, " Version info: "); > > if (vi->prev != NULL) > > { > > fprintf (f, "prev: "); > > fprintf (f, "%s ", vi->prev->this_node->dump_asm_name ()); > > } > > if (vi->next != NULL) > > { > > fprintf (f, "next: "); > > fprintf (f, "%s ", vi->next->this_node->dump_asm_name ()); > > } > > if (vi->dispatcher_resolver != NULL_TREE) > > fprintf (f, "dispatcher: %s", > > lang_hooks.decl_printable_name (vi->dispatcher_resolver, 2)); > > > > fprintf (f, "\n"); > > } > > > > > > The expression "vi->{prev,next}->this_node" can be null if it is a version > > of an unused symbol that was removed. > > > > Is it intentional that removing a cgraph node does not also remove versions? > > > > As a solution I suggest to delete the version of the node too during node > > removal. > > Hi. > > After reading and testing your patch, I think it's proper fix. Note that I'm > not reviewer, but I'm adding Honza > who is.
OK,, thanks! Honza > > Thanks, > Martin > > > > > Regards, > > Evgeny. > > > > * cgraph.c (delete_function_version): New, broken out from... > > (cgraph_node::delete_function_version): ...here. Rename to > > cgraph_node::delete_function_version_by_decl. Update all uses. > > (cgraph_node::remove): Call delete_function_version.