(Apologies to Richard for sending this twice -- I forgot to cc the list) > At which point during the compilation does it not work? I suppose > at the point where the qualified variants are already optimized away.
I've had some difficulty walking the DECL_INITIAL from within a separate pass but I've added this code to the execute function of pass_ipa_function_and_variable_visibility which should be about as close to pass_build_cgraph_edges as I can get. Also the record_references callback in cgraphbuild.c exhibits the same behavior. I get the same results with 4.3.4 and a recent checkout. Is there a way to disable the optimizing away of qualified variants? This seems to be a bug, especially with regard to record_references_in_initializer and record_references in cgraphbuild.c On Mon, Apr 5, 2010 at 10:20 AM, Richard Guenther <richard.guent...@gmail.com> wrote: > On Mon, Apr 5, 2010 at 3:50 PM, Ehren Metcalfe <ehre...@gmail.com> wrote: >> Hello, >> >> I'm trying to develop a dead code finder using gcc and mozilla's >> treehydra but I've hit a wall processing certain initializations of >> global variables. >> >> In order to mark a function declaration whenever its address is held >> in a file scope variable/table/structure I use code like this: >> >> ----- >> >> static tree find_funcs_callback(tree *tp, int *walk_subtrees, void *data) { >> tree t = *tp; >> >> if (TREE_CODE(t) == FUNCTION_DECL) { >> // dump function >> } >> >> return NULL_TREE; >> } >> >> static void find_funcs(tree decl) { >> walk_tree(&decl, find_funcs_callback, NULL, NULL); >> } >> >> // elsewhere >> struct varpool_node *vnode; >> FOR_EACH_STATIC_VARIABLE(vnode) >> find_funcs(DECL_INITIAL(vnode->decl)); >> >> ----- >> >> Unfortunately this doesn't work for code like this: >> >> ----- >> >> int foo() { >> return 0; >> } >> >> typedef struct { >> int (*p) (); >> } Table; >> >> const /* or static, or const static */ Table t[] = { >> { foo } >> }; >> >> ----- >> >> If I remove the qualifiers from my table the initialization is >> detected. Is this a bug or is there some other way of recovering the >> FUNCTION_DECL? It doesn't need to be modular, I just have to find a >> way to dump the function. > > At which point during the compilation does it not work? I suppose > at the point where the qualified variants are already optimized away. > > Richard. > >> Thanks, >> >> Ehren >> >