aboutsummaryrefslogtreecommitdiff
path: root/ld/ldexp.c
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@ericsson.com>2018-02-01 13:21:41 +0000
committerNick Clifton <nickc@redhat.com>2018-02-01 13:21:41 +0000
commite99955cd8eca9ac8eff828e8c7b676955fd46e04 (patch)
treef602445e212781e97954fef0de22e366eabea098 /ld/ldexp.c
parentf2023ce7e8d70b0155cc6206c901e185260918f0 (diff)
downloadbinutils-e99955cd8eca9ac8eff828e8c7b676955fd46e04.zip
binutils-e99955cd8eca9ac8eff828e8c7b676955fd46e04.tar.gz
binutils-e99955cd8eca9ac8eff828e8c7b676955fd46e04.tar.bz2
Fix compile time warnings building the binutils with clang.
bfdI would like to fix instances of the following warning, when building with clang with no special CFLAGS other than -g3 -O0. /home/emaisin/src/binutils-gdb/bfd/elflink.c:5425:45: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic] return (struct elf_link_hash_entry *) 0 - 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ Replacing those with "(struct elf_link_hash_entry *) -1" gets rid of the warning. I wanted to check that it didn't change the resulting code, so I tried to build this: $ cat test.c int *before() { return (int *) 0 - 1; } int *after() { return (int *) - 1; } $ gcc -c test.c -g $ objdump -d test.o test.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <before>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 c7 c0 fc ff ff ff mov $0xfffffffffffffffc,%rax b: 5d pop %rbp c: c3 retq 000000000000000d <after>: d: 55 push %rbp e: 48 89 e5 mov %rsp,%rbp 11: 48 c7 c0 ff ff ff ff mov $0xffffffffffffffff,%rax 18: 5d pop %rbp 19: c3 retq This shows that the previous code doesn't actually return -1 as the function documentation says, but the new one does, so it's kind of a bugfix. bfd * elf64-ppc.c (ppc64_elf_archive_symbol_lookup): Avoid pointer arithmetic on NULL pointer. * elflink.c (_bfd_elf_archive_symbol_lookup, elf_link_add_archive_symbols): Likewise. ld * ldexp.c (fold_name, exp_fold_tree_1): Avoid pointer arithmetic on NULL pointer.
Diffstat (limited to 'ld/ldexp.c')
-rw-r--r--ld/ldexp.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ld/ldexp.c b/ld/ldexp.c
index a097205..bf0df44 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -782,7 +782,7 @@ fold_name (etree_type *tree)
if (expld.assign_src == NULL)
expld.assign_src = h;
else
- expld.assign_src = (struct bfd_link_hash_entry *) 0 - 1;
+ expld.assign_src = (struct bfd_link_hash_entry *) - 1;
}
break;
@@ -1207,7 +1207,7 @@ exp_fold_tree_1 (etree_type *tree)
false branches.) */
if (expld.assign_src != NULL
&& (expld.assign_src
- != (struct bfd_link_hash_entry *) 0 - 1))
+ != (struct bfd_link_hash_entry *) -1))
bfd_copy_link_hash_symbol_type (link_info.output_bfd, h,
expld.assign_src);
}