Hi, cxx_callgraph_analyze_expr contains logic that should be obsolette now. PTRMEM_CST/BASELINK should be obsoletted by gimplification and VAR_DECL handling seems weird from very start and I think it is remainder from time we was not outputting function local vars from varpool but they needed a function decl.
Moreover cxx_callgraph_analyze_expr won't work with LTO. Bootstrapped/regtested x86_64-linux, OK? Honza * decl2.c (cxx_callgraph_analyze_expr): Remove. * cp-objcp-common.h (LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR): Remove. * cp-tree.h (cxx_callgraph_analyze_expr): Remove. Index: cp/decl2.c =================================================================== --- cp/decl2.c (revision 186627) +++ cp/decl2.c (working copy) @@ -3436,44 +3431,6 @@ generate_ctor_and_dtor_functions_for_pri return 0; } -/* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR. It is supposed to mark - decls referenced from front-end specific constructs; it will be called - only for language-specific tree nodes. - - Here we must deal with member pointers. */ - -tree -cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED) -{ - tree t = *tp; - - switch (TREE_CODE (t)) - { - case PTRMEM_CST: - if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t))) - cgraph_mark_address_taken_node ( - cgraph_get_create_node (PTRMEM_CST_MEMBER (t))); - break; - case BASELINK: - if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL) - cgraph_mark_address_taken_node ( - cgraph_get_create_node (BASELINK_FUNCTIONS (t))); - break; - case VAR_DECL: - if (DECL_CONTEXT (t) - && flag_use_repository - && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL) - /* If we need a static variable in a function, then we - need the containing function. */ - mark_decl_referenced (DECL_CONTEXT (t)); - break; - default: - break; - } - - return NULL; -} - /* Java requires that we be able to reference a local address for a method, and not be confused by PLT entries. If hidden aliases are supported, collect and return all the functions for which we should Index: cp/cp-objcp-common.h =================================================================== --- cp/cp-objcp-common.h (revision 186623) +++ cp/cp-objcp-common.h (working copy) @@ -110,9 +110,6 @@ extern void cp_common_init_ts (void); #undef LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN #define LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN cp_type_quals -#undef LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR -#define LANG_HOOKS_CALLGRAPH_ANALYZE_EXPR cxx_callgraph_analyze_expr - #undef LANG_HOOKS_MAKE_TYPE #define LANG_HOOKS_MAKE_TYPE cxx_make_type #undef LANG_HOOKS_TYPE_FOR_MODE Index: cp/cp-tree.h =================================================================== --- cp/cp-tree.h (revision 186623) +++ cp/cp-tree.h (working copy) @@ -5136,7 +5136,6 @@ extern tree cp_build_parm_decl (tree, extern tree get_guard (tree); extern tree get_guard_cond (tree); extern tree set_guard (tree); -extern tree cxx_callgraph_analyze_expr (tree *, int *); extern void mark_needed (tree); extern bool decl_needed_p (tree); extern void note_vague_linkage_fn (tree);