mips-relocs: Fix warning from gcc 6.3
authorPaul Burton <paul.burton@imgtec.com>
Tue, 25 Jul 2017 14:07:03 +0000 (15:07 +0100)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Tue, 25 Jul 2017 18:44:38 +0000 (20:44 +0200)
It seems that gcc 6.3 at least is smart enough to warn about the _val
variable being unassigned in the default case in the set_hdr_field()
macro, but not smart enough to figure out that the default case is never
taken. This results in warnings such as the following:

  pfx##hdr32[idx].field = _val;   \
                          ^
 ../tools/mips-relocs.c:51:11: note: _val was declared here
   uint64_t _val;      \
            ^
 ../tools/mips-relocs.c:88:2: note: in expansion of macro set_hdr_field
   set_hdr_field(p, idx, field, val)
   ^~~~~~~~~~~~~
 ../tools/mips-relocs.c:408:3: note: in expansion of macro set_phdr_field
    set_phdr_field(i, p_filesz, load_sz);
    ^~~~~~~~~~~~~~
 ../tools/mips-relocs.c: In function main:
 ../tools/mips-relocs.c:77:25: warning: _val may be used uninitialized
    in this function [-Wmaybe-uninitialized]

Avoid this by assigning _val = 0 in the default case, and asserting that
we didn't actually hit it for good measure.

For reference gcc 7.1.1 seems to be smart enough to not hit the above
warning without this patch.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Fixes: 011dd93ca97a ("MIPS: Stop building position independent code")
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: u-boot@lists.denx.de
tools/mips-relocs.c

index b690fa53c4be7137c256be1667f28c0646b1932f..8be69d320fb3f227d3c8d5144e969228e4fd88be 100644 (file)
@@ -6,6 +6,7 @@
  * SPDX-License-Identifier:    GPL-2.0+
  */
 
+#include <assert.h>
 #include <elf.h>
 #include <errno.h>
 #include <fcntl.h>
        case 8:                                                 \
                _val = is_be ? htobe64(val) : htole64(val);     \
                break;                                          \
+       default:                                                \
+               /* We should never reach here */                \
+               _val = 0;                                       \
+               assert(0);                                      \
+               break;                                          \
        }                                                       \
                                                                \
        if (is_64)                                              \