elf32-arc.c: Don't cast between function pointer and void pointer
Alan Modra
amodra@gmail.com
Fri Oct 16 00:04:47 GMT 2020
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."
Also triggers an ICE on gcc at the moment.
* 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 --git a/bfd/elf32-arc.c b/bfd/elf32-arc.c
index 7d282f39ac..a05f697b65 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
--
Alan Modra
Australia Development Lab, IBM
More information about the Binutils
mailing list