tree.c (get_callee_fndecl): Call lang_hooks.lang_get_callee_fndecl.
authorAndrew Haley <aph@redhat.com>
Mon, 6 Oct 2003 13:50:41 +0000 (13:50 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Mon, 6 Oct 2003 13:50:41 +0000 (13:50 +0000)
2003-10-06  Andrew Haley  <aph@redhat.com>

* tree.c (get_callee_fndecl): Call
lang_hooks.lang_get_callee_fndecl.
* langhooks-def.h (LANG_HOOKS_GET_CALLEE_FNDECL): New.
(lhd_get_callee_fndecl): New.

From-SVN: r72150

gcc/ChangeLog
gcc/langhooks-def.h
gcc/langhooks.h
gcc/tree.c

index 401de258290732e4b03b72aeb51187d48de3646b..d36ae3aa8fa6c3c57848e63b02af2774005d13d7 100644 (file)
@@ -1,3 +1,10 @@
+2003-10-06  Andrew Haley  <aph@redhat.com>
+
+       * tree.c (get_callee_fndecl): Call
+       lang_hooks.lang_get_callee_fndecl.
+       * langhooks-def.h (LANG_HOOKS_GET_CALLEE_FNDECL): New.
+       (lhd_get_callee_fndecl): New.
+
 2003-10-06  Andrew Pinski  <apinski@apple.com>
 
        * config/darwin.c (machopic_non_lazy_ptr_name): Fix off by one
index f8ecc8bdcb7685b3d87afbfaa5a93f64f040bb50..cf241602f440cab6212bfbc476e604680c531c2a 100644 (file)
@@ -67,6 +67,7 @@ extern void lhd_register_builtin_type (tree, const char *);
 extern bool lhd_decl_ok_for_sibcall (tree);
 extern tree lhd_expr_size (tree);
 extern bool lhd_decl_uninit (tree);
+extern tree lhd_get_callee_fndecl (tree);
 extern size_t lhd_tree_size (enum tree_code);
 
 /* Declarations of default tree inlining hooks.  */
@@ -119,6 +120,7 @@ extern tree lhd_callgraph_analyze_expr (tree *, int *, tree);
 #define LANG_HOOKS_PRINT_IDENTIFIER    lhd_print_tree_nothing
 #define LANG_HOOKS_PRINT_ERROR_FUNCTION lhd_print_error_function
 #define LANG_HOOKS_DECL_PRINTABLE_NAME lhd_decl_printable_name
+#define LANG_HOOKS_GET_CALLEE_FNDECL   lhd_return_null_tree
 #define LANG_HOOKS_EXPR_SIZE           lhd_expr_size
 #define LANG_HOOKS_DECL_UNINIT         lhd_decl_uninit
 #define LANG_HOOKS_TREE_SIZE           lhd_tree_size
@@ -297,6 +299,7 @@ extern int lhd_tree_dump_type_quals (tree);
   LANG_HOOKS_PRINT_TYPE, \
   LANG_HOOKS_PRINT_IDENTIFIER, \
   LANG_HOOKS_DECL_PRINTABLE_NAME, \
+  LANG_HOOKS_GET_CALLEE_FNDECL, \
   LANG_HOOKS_PRINT_ERROR_FUNCTION, \
   LANG_HOOKS_EXPR_SIZE, \
   LANG_HOOKS_DECL_UNINIT, \
index 4887f6dcd44473abd1346937fb993b3bc640a178..cb5941ff3eb37766e6a2fa3f2cd10762b8c6bcb3 100644 (file)
@@ -378,6 +378,9 @@ struct lang_hooks
      types in C++.  */
   const char *(*decl_printable_name) (tree decl, int verbosity);
 
+  /* Given a CALL_EXPR, return a function decl that is its target.  */
+  tree (*lang_get_callee_fndecl) (tree);
+
   /* Called by report_error_function to print out function name.  */
   void (*print_error_function) (struct diagnostic_context *, const char *);
 
index 896636a5e2b4fa9ae2d3d39adbeb4e900ac2391f..dcbf74d790fecc0f893f3c73c399fb75e996cf36 100644 (file)
@@ -4449,9 +4449,10 @@ get_callee_fndecl (tree call)
   if (TREE_CODE (addr) == ADDR_EXPR
       && TREE_CODE (TREE_OPERAND (addr, 0)) == FUNCTION_DECL)
     return TREE_OPERAND (addr, 0);
-
-  /* We couldn't figure out what was being called.  */
-  return NULL_TREE;
+  
+  /* We couldn't figure out what was being called.  Maybe the front
+     end has some idea.  */
+  return (*lang_hooks.lang_get_callee_fndecl) (call);
 }
 
 /* Print debugging information about tree nodes generated during the compile,