From f69f887092914f6e1abcc2d622e4f5e56a6e1645 Mon Sep 17 00:00:00 2001 From: Stefan Liebler Date: Mon, 25 Jan 2016 12:44:46 +0100 Subject: S390: Fix build failure in test string/tst-endian.c with gcc 6. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Building string/tst-endian.c with gcc 6 produces an build warning/error on s390 (big endian machine): gcc tst-endian.c -c -std=gnu11 -fgnu89-inline -O2 or -O3 ... tst-endian.c: In function ‘do_test’: tst-endian.c:16:30: error: self-comparison always evaluates to false [-Werror=tautological-compare] if (htobe16 (be16toh (i)) != i) ^~ ... See definitions of htobexx, bexxtoh in string/endian.h: ... This patch silences these warnings with DIAG_* macros if build with gcc 6 and newer. The same warnings occur on little endian machines with the "htoleXX (leXXtoh (i)) != i" if-statements. ChangeLog: * string/tst-endian.c: Include . (do_test): Ignore tautological-compare warnings around "htobeXX (beXXtoh (i)) != i" and "htoleXX (leXXtoh (i)) != i" if-statements. --- string/tst-endian.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'string/tst-endian.c') diff --git a/string/tst-endian.c b/string/tst-endian.c index 8684bb232b..7d39131a68 100644 --- a/string/tst-endian.c +++ b/string/tst-endian.c @@ -3,6 +3,20 @@ #include #include #include +#include + +#if __GNUC_PREREQ (6, 0) +/* GCC 6.0 warns on big endian systems about: + htobeXX (beXXtoh (i)) != i + warning: self-comparison always evaluates to false [-Wtautological-compare] + because htobeXX(x) and beXXtoh(x) is defined to (x) + in string/endian.h on big endian systems. + The same applies to htoleXX/leXXtoh on little endian systems. */ +# define DIAG_IGNORE_NEEDS_COMMENT_TAUTOLOGICAL_COMPARE() \ + DIAG_IGNORE_NEEDS_COMMENT (6, "-Wtautological-compare") +#else +# define DIAG_IGNORE_NEEDS_COMMENT_TAUTOLOGICAL_COMPARE() +#endif static int do_test (void) @@ -13,6 +27,8 @@ do_test (void) { if (i < UINT64_C (65536)) { + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT_TAUTOLOGICAL_COMPARE (); if (htobe16 (be16toh (i)) != i) { printf ("htobe16 (be16toh (%" PRIx64 ")) == %" PRIx16 "\n", @@ -25,6 +41,7 @@ do_test (void) i, (uint16_t) htole16 (le16toh (i))); result = 1; } + DIAG_POP_NEEDS_COMMENT; uint16_t n[2]; n[__BYTE_ORDER == __LITTLE_ENDIAN] = bswap_16 (i); @@ -45,6 +62,8 @@ do_test (void) if (i < UINT64_C (4294967296)) { + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT_TAUTOLOGICAL_COMPARE (); if (htobe32 (be32toh (i)) != i) { printf ("htobe32 (be32toh (%" PRIx64 ")) == %" PRIx32 "\n", @@ -57,6 +76,7 @@ do_test (void) i, (uint32_t) htole32 (le32toh (i))); result = 1; } + DIAG_POP_NEEDS_COMMENT; uint32_t n[2]; n[__BYTE_ORDER == __LITTLE_ENDIAN] = bswap_32 (i); @@ -75,6 +95,8 @@ do_test (void) } } + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT_TAUTOLOGICAL_COMPARE (); if (htobe64 (be64toh (i)) != i) { printf ("htobe64 (be64toh (%" PRIx64 ")) == %" PRIx64 "\n", @@ -87,6 +109,7 @@ do_test (void) i, htole64 (le64toh (i))); result = 1; } + DIAG_POP_NEEDS_COMMENT; uint64_t n[2]; n[__BYTE_ORDER == __LITTLE_ENDIAN] = bswap_64 (i); -- cgit v1.2.3