about summary refs log tree commit diff
path: root/string
diff options
context:
space:
mode:
Diffstat (limited to 'string')
-rw-r--r--string/Makefile6
-rw-r--r--string/test-endian-file-scope.c44
-rw-r--r--string/test-endian-sign-conversion.c48
3 files changed, 96 insertions, 2 deletions
diff --git a/string/Makefile b/string/Makefile
index 1bcc9bb5d8..680431f921 100644
--- a/string/Makefile
+++ b/string/Makefile
@@ -24,7 +24,7 @@ include ../Makeconfig
 
 headers		:= string.h bits/string_fortified.h			\
 		   strings.h bits/strings_fortified.h			\
-		   byteswap.h bits/byteswap.h bits/byteswap-16.h	\
+		   byteswap.h bits/byteswap.h				\
 		   endian.h bits/endian.h bits/uintn-identity.h		\
 		   memory.h argz.h envz.h
 
@@ -58,7 +58,8 @@ tests		:= tester inl-tester noinl-tester testcopy test-ffs	\
 		   bug-strtok1 $(addprefix test-,$(strop-tests))	\
 		   bug-envz1 tst-strxfrm2 tst-endian tst-svc2		\
 		   tst-strtok_r bug-strcoll2 tst-cmp tst-xbzero-opt	\
-		   test-endian-types
+		   test-endian-types test-endian-file-scope		\
+		   test-endian-sign-conversion
 
 # This test allocates a lot of memory and can run for a long time.
 xtests = tst-strcoll-overflow
@@ -76,6 +77,7 @@ CFLAGS-stratcliff.c += -fno-builtin
 CFLAGS-test-ffs.c += -fno-builtin
 CFLAGS-tst-inlcall.c += -fno-builtin
 CFLAGS-tst-xbzero-opt.c += -O3
+CFLAGS-test-endian-sign-conversion.c += -Werror -Wsign-conversion
 # BZ 21006: Resolve all functions but at least explicit_bzero at startup.
 # Otherwise the test fails on s390x as the memcpy in prepare_test_buffer is
 # done by loading r4 / r5 with the test_pattern and using store multiple
diff --git a/string/test-endian-file-scope.c b/string/test-endian-file-scope.c
new file mode 100644
index 0000000000..e03063cfbb
--- /dev/null
+++ b/string/test-endian-file-scope.c
@@ -0,0 +1,44 @@
+/* Test endian.h endian-conversion macros accepted at file scope.
+   Copyright (C) 2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <endian.h>
+#include <stddef.h>
+
+int i;
+
+size_t s0 = sizeof (htobe16 (i));
+size_t s1 = sizeof (htole16 (i));
+size_t s2 = sizeof (be16toh (i));
+size_t s3 = sizeof (le16toh (i));
+size_t s4 = sizeof (htobe32 (i));
+size_t s5 = sizeof (htole32 (i));
+size_t s6 = sizeof (be32toh (i));
+size_t s7 = sizeof (le32toh (i));
+size_t s8 = sizeof (htobe64 (i));
+size_t s9 = sizeof (htole64 (i));
+size_t s10 = sizeof (be64toh (i));
+size_t s11 = sizeof (le64toh (i));
+
+static int
+do_test (void)
+{
+  /* This is a compilation test.  */
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/string/test-endian-sign-conversion.c b/string/test-endian-sign-conversion.c
new file mode 100644
index 0000000000..cc6b5168b6
--- /dev/null
+++ b/string/test-endian-sign-conversion.c
@@ -0,0 +1,48 @@
+/* Test endian.h endian-conversion macros work with -Wsign-conversion.
+   Copyright (C) 2018 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <endian.h>
+#include <stdint.h>
+
+uint16_t u16;
+uint32_t u32;
+uint64_t u64;
+
+static int
+do_test (void)
+{
+  /* This is a compilation test.  */
+  u16 = (htobe16 (u16));
+  u16 = (htole16 (u16));
+  u16 = (be16toh (u16));
+  u16 = (le16toh (u16));
+  u32 = (htobe32 (u32));
+  u32 = (htole32 (u32));
+  u32 = (be32toh (u32));
+  u32 = (le32toh (u32));
+  u64 = (htobe64 (u64));
+  u64 = (htole64 (u64));
+  u64 = (be64toh (u64));
+  u64 = (le64toh (u64));
+  (void) u16;
+  (void) u32;
+  (void) u64;
+  return 0;
+}
+
+#include <support/test-driver.c>