elf32-arc.c: Don't cast between function pointer and void pointer
authorAlan Modra <amodra@gmail.com>
Thu, 15 Oct 2020 23:45:57 +0000 (10:15 +1030)
committerAlan Modra <amodra@gmail.com>
Fri, 16 Oct 2020 00:05:23 +0000 (10:35 +1030)
Casts should be avoided if at all possible, and in particular the C
standard doesn't promise that function pointers can be cast to void*
or vice-versa.  It is only mentioned under J.5 Common extensions,
saying "The following extensions are widely used in many systems, but
are not portable to all implementations."

* elf32-arc.c (replace_func): Correct return type.
(get_replace_function): Use a replace_func function pointer rather
than void*.  Update associated ARC_RELOC_HOWTO define.

bfd/ChangeLog
bfd/elf32-arc.c

index 9595da0db3b2bb19b5056c223fd3a518383c779f..a7e0caea688e91bee83610a046d6f39ed70aae0f 100644 (file)
@@ -1,3 +1,9 @@
+2020-10-16  Alan Modra  <amodra@gmail.com>
+
+       * elf32-arc.c (replace_func): Correct return type.
+       (get_replace_function): Use a replace_func function pointer rather
+       than void*.  Update associated ARC_RELOC_HOWTO define.
+
 2020-10-16  Alan Modra  <amodra@gmail.com>
 
        * elf32-cr16.c: Formatting.
index 7d282f39ac2667282e9b44fd0da14769f4c32113..a05f697b6575410328bb4f87d9d8e7be03e5337b 100644 (file)
@@ -391,17 +391,17 @@ static const struct arc_reloc_map arc_reloc_map[] =
 
 #undef ARC_RELOC_HOWTO
 
-typedef ATTRIBUTE_UNUSED bfd_vma (*replace_func) (unsigned, int ATTRIBUTE_UNUSED);
+typedef ATTRIBUTE_UNUSED unsigned (*replace_func) (unsigned, int ATTRIBUTE_UNUSED);
 
 #define ARC_RELOC_HOWTO(TYPE, VALUE, SIZE, BITSIZE, RELOC_FUNCTION, OVERFLOW, FORMULA) \
   case TYPE: \
-    func = (void *) RELOC_FUNCTION; \
+    func = RELOC_FUNCTION; \
     break;
 
 static replace_func
 get_replace_function (bfd *abfd, unsigned int r_type)
 {
-  void *func = NULL;
+  replace_func func = NULL;
 
   switch (r_type)
     {
@@ -411,7 +411,7 @@ get_replace_function (bfd *abfd, unsigned int r_type)
   if (func == replace_bits24 && bfd_big_endian (abfd))
     func = replace_bits24_be;
 
-  return (replace_func) func;
+  return func;
 }
 #undef ARC_RELOC_HOWTO