aboutsummaryrefslogtreecommitdiff
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 1bcc9bb..680431f 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 0000000..e03063c
--- /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 0000000..cc6b516
--- /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>