diff options
Diffstat (limited to 'string')
-rw-r--r-- | string/Makefile | 6 | ||||
-rw-r--r-- | string/test-endian-file-scope.c | 44 | ||||
-rw-r--r-- | string/test-endian-sign-conversion.c | 48 |
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> |