This patch reworks the fix to avoid a compile time warning so that it will work

with later versions of gcc.

	PR ld/16821
	* peXXigen.c (_bfd_XXi_swap_sym_out): Rework fix to avoid compile
	time warning.
This commit is contained in:
Nick Clifton 2014-04-28 09:34:02 +01:00
parent e3e163dbb0
commit 40af4a3636
2 changed files with 12 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2014-04-28 Nick Clifton <nickc@redhat.com>
PR ld/16821
* peXXigen.c (_bfd_XXi_swap_sym_out): Rework fix to avoid compile
time warning.
2014-04-26 Alan Modra <amodra@gmail.com>
* po/SRC-POTFILES.in: Regenerate.

View File

@ -236,15 +236,12 @@ _bfd_XXi_swap_sym_out (bfd * abfd, void * inp, void * extp)
reduce the absolute value to < 1^32, and then transforming the
symbol into a section relative symbol. This of course is a hack. */
if (sizeof (in->n_value) > 4
/* GCC 4.6.x erroneously complains about the next test always being
false when compiled on a 32-bit host. (The sizeof test above
should have made the warning unnecessary). Hence we have to
predicate the test. It should not matter if the test is omitted
since the worst that can happen is that some absolute symbols
are needlessly converted to equivalent section relative symbols. */
#if defined BFD64 || ! defined __GNUC__ || __GNUC__ > 4 || __GNUC_MINOR__ > 6
&& in->n_value > ((1ULL << 32) - 1)
#endif
/* The strange computation of the shift amount is here in order to
avoid a compile time warning about the comparison always being
false. It does not matter if this test fails to work as expected
as the worst that can happen is that some absolute symbols are
needlessly converted into section relative symbols. */
&& in->n_value > ((1ULL << (sizeof (in->n_value) > 4 ? 32 : 31)) - 1)
&& in->n_scnum == -1)
{
asection * sec;