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 >