[binutils-gdb] elf32-arc.c: Don't cast between function pointer and void pointer

Alan Modra amodra@sourceware.org
Fri Oct 16 00:05:46 GMT 2020


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e7f2f959e38e929ee04601abf97c4a637305771d

commit e7f2f959e38e929ee04601abf97c4a637305771d
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Oct 16 10:15:57 2020 +1030

    elf32-arc.c: Don't cast between function pointer and void pointer
    
    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.

Diff:
---
 bfd/ChangeLog   | 6 ++++++
 bfd/elf32-arc.c | 8 ++++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9595da0db3b..a7e0caea688 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
diff --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index 7d282f39ac2..a05f697b657 100644
--- a/bfd/elf32-arc.c
+++ b/bfd/elf32-arc.c
@@ -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


More information about the Binutils-cvs mailing list