This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

build_function_call and TREE_ADDRESSABLE


TREE_ADDRESSABLE comment says "In a FUNCTION_DECL, nonzero means its
address is needed".  However, as I point out in
http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01525.html, this flag
gets set when making normal calls.  It wasn't always like this.
gcc-4.0 was careful to not set TREE_ADDRESSABLE on FUNCTION_DECLs in
build_function_call, a feature lost in revision 100984.  I'd like to
have that feature back for the above patch.  Bootstrapped and
regression tested powerpc-linux.  OK for 4.6?

	* c-typeck.c (build_function_call_vec): Avoid setting TREE_ADDRESSABLE
	on normal function calls.

Index: gcc/c-typeck.c
===================================================================
--- gcc/c-typeck.c	(revision 170607)
+++ gcc/c-typeck.c	(working copy)
@@ -2715,7 +2715,20 @@ build_function_call_vec (location_t loc,
       fundecl = function;
     }
   if (TREE_CODE (TREE_TYPE (function)) == FUNCTION_TYPE)
-    function = function_to_pointer_conversion (loc, function);
+    {
+      if (fundecl)
+	{
+	  /* Don't set TREE_ADDRESSABLE for the implicit function
+	     pointer conversion in a function call.  This allows
+	     TREE_ADDRESSABLE to be used to detect explicit function
+	     address operations.  */
+	  bool addressable = TREE_ADDRESSABLE (fundecl);
+	  function = function_to_pointer_conversion (loc, function);
+	  TREE_ADDRESSABLE (fundecl) = addressable;
+	}
+      else
+	function = function_to_pointer_conversion (loc, function);
+    }
 
   /* For Objective-C, convert any calls via a cast to OBJC_TYPE_REF
      expressions, like those used for ObjC messenger dispatches.  */

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]