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.  */
