diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2019-03-11 16:28:11 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2019-03-11 16:28:11 +0000 |
commit | 187fdaea67b5f27f43a2c119b2a66cca7e6d7cb3 (patch) | |
tree | 8847a9acf155c8bc3fecb9dc1621522df9d6898f /libstdc++-v3 | |
parent | 93964ebd2fec8d9e2132e118b02f93bea074ebd2 (diff) | |
download | gcc-187fdaea67b5f27f43a2c119b2a66cca7e6d7cb3.zip gcc-187fdaea67b5f27f43a2c119b2a66cca7e6d7cb3.tar.gz gcc-187fdaea67b5f27f43a2c119b2a66cca7e6d7cb3.tar.bz2 |
PR libstdc++/89460 Fix Networking TS test failures on HP-UX
Check for availability of POSIX sockatmark before using it.
Rename _S_ntoh overloads that are ambiguous when passed an integral type
that is neither uint16_t nor uint32_t.
PR libstdc++/89460
* configure.ac: Check for sockatmark.
* crossconfig.m4: Check for sockatmark.
* config.h.in: Regenerate.
* configure: Regenerate.
* include/experimental/internet (address_v4::_S_hton): Rename
overloaded functions to _S_hton_16 and _S_ntoh_16.
(address_v4::_S_ntoh): Rename to _S_ntoh_16 and _S_ntoh_32.
(basic_endpoint): Adjust calls to _S_hton and _S_ntoh.
* include/experimental/socket (basic_socket::at_mark): Check
_GLIBCXX_HAVE_SOCKATMARK.
From-SVN: r269588
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 12 | ||||
-rw-r--r-- | libstdc++-v3/config.h.in | 3 | ||||
-rwxr-xr-x | libstdc++-v3/configure | 46 | ||||
-rw-r--r-- | libstdc++-v3/configure.ac | 3 | ||||
-rw-r--r-- | libstdc++-v3/crossconfig.m4 | 3 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/internet | 31 | ||||
-rw-r--r-- | libstdc++-v3/include/experimental/socket | 2 |
7 files changed, 84 insertions, 16 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9c5b1bb..5c0e968 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,17 @@ 2019-03-11 Jonathan Wakely <jwakely@redhat.com> + PR libstdc++/89460 + * configure.ac: Check for sockatmark. + * crossconfig.m4: Check for sockatmark. + * config.h.in: Regenerate. + * configure: Regenerate. + * include/experimental/internet (address_v4::_S_hton): Rename + overloaded functions to _S_hton_16 and _S_ntoh_16. + (address_v4::_S_ntoh): Rename to _S_ntoh_16 and _S_ntoh_32. + (basic_endpoint): Adjust calls to _S_hton and _S_ntoh. + * include/experimental/socket (basic_socket::at_mark): Check + _GLIBCXX_HAVE_SOCKATMARK. + * testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc: Use const variables instead of macros. diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 034d91b..3a6f180 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -390,6 +390,9 @@ /* Defined if sleep exists. */ #undef HAVE_SLEEP +/* Define to 1 if you have the `sockatmark' function. */ +#undef HAVE_SOCKATMARK + /* Define to 1 if you have the `sqrtf' function. */ #undef HAVE_SQRTF diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 8e9f818..7d134a0 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -28446,6 +28446,19 @@ fi done + # For Networking TS. + for ac_func in sockatmark +do : + ac_fn_c_check_func "$LINENO" "sockatmark" "ac_cv_func_sockatmark" +if test "x$ac_cv_func_sockatmark" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKATMARK 1 +_ACEOF + +fi +done + + # For iconv support. if test "X$prefix" = "XNONE"; then @@ -53641,6 +53654,17 @@ _ACEOF fi done + for ac_func in sockatmark +do : + ac_fn_c_check_func "$LINENO" "sockatmark" "ac_cv_func_sockatmark" +if test "x$ac_cv_func_sockatmark" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKATMARK 1 +_ACEOF + +fi +done + ;; *-fuchsia*) @@ -60268,6 +60292,17 @@ _ACEOF fi done + for ac_func in sockatmark +do : + ac_fn_c_check_func "$LINENO" "sockatmark" "ac_cv_func_sockatmark" +if test "x$ac_cv_func_sockatmark" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKATMARK 1 +_ACEOF + +fi +done + @@ -66592,6 +66627,17 @@ _ACEOF fi done + for ac_func in sockatmark +do : + ac_fn_c_check_func "$LINENO" "sockatmark" "ac_cv_func_sockatmark" +if test "x$ac_cv_func_sockatmark" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SOCKATMARK 1 +_ACEOF + +fi +done + ;; *-qnx6.1* | *-qnx6.2*) SECTION_FLAGS='-ffunction-sections -fdata-sections' diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 39b0b90..dadd882 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -268,6 +268,9 @@ if $GLIBCXX_IS_NATIVE; then # C11 functions for C++17 library AC_CHECK_FUNCS(timespec_get) + # For Networking TS. + AC_CHECK_FUNCS(sockatmark) + # For iconv support. AM_ICONV diff --git a/libstdc++-v3/crossconfig.m4 b/libstdc++-v3/crossconfig.m4 index 4a30300..344eec0 100644 --- a/libstdc++-v3/crossconfig.m4 +++ b/libstdc++-v3/crossconfig.m4 @@ -136,6 +136,7 @@ case "${host}" in AC_CHECK_FUNCS(__cxa_thread_atexit) AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) AC_CHECK_FUNCS(timespec_get) + AC_CHECK_FUNCS(sockatmark) ;; *-fuchsia*) @@ -196,6 +197,7 @@ case "${host}" in AC_CHECK_FUNCS(__cxa_thread_atexit_impl) AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) AC_CHECK_FUNCS(timespec_get) + AC_CHECK_FUNCS(sockatmark) AM_ICONV ;; *-mingw32*) @@ -224,6 +226,7 @@ case "${host}" in fi AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc) AC_CHECK_FUNCS(timespec_get) + AC_CHECK_FUNCS(sockatmark) ;; *-qnx6.1* | *-qnx6.2*) SECTION_FLAGS='-ffunction-sections -fdata-sections' diff --git a/libstdc++-v3/include/experimental/internet b/libstdc++-v3/include/experimental/internet index 80682ef..467bdfd 100644 --- a/libstdc++-v3/include/experimental/internet +++ b/libstdc++-v3/include/experimental/internet @@ -158,7 +158,7 @@ namespace ip { } explicit constexpr - address_v4(uint_type __val) : _M_addr(_S_hton(__val)) + address_v4(uint_type __val) : _M_addr(_S_hton_32(__val)) { #if UINT_LEAST32_MAX > 0xFFFFFFFF if (__val > 0xFFFFFFFF) @@ -191,7 +191,8 @@ namespace ip }; } - constexpr uint_type to_uint() const noexcept { return _S_ntoh(_M_addr); } + constexpr uint_type + to_uint() const noexcept { return _S_ntoh_32(_M_addr); } #ifdef _GLIBCXX_HAVE_ARPA_INET_H template<typename _Allocator = allocator<char>> @@ -224,22 +225,22 @@ namespace ip friend address_v4 make_address_v4(const char*, error_code&) noexcept; #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - static constexpr uint16_t _S_hton(uint16_t __h) { return __h; } - static constexpr uint16_t _S_ntoh(uint16_t __n) { return __n; } - static constexpr uint32_t _S_hton(uint32_t __h) { return __h; } - static constexpr uint32_t _S_ntoh(uint32_t __n) { return __n; } + static constexpr uint16_t _S_hton_16(uint16_t __h) { return __h; } + static constexpr uint16_t _S_ntoh_16(uint16_t __n) { return __n; } + static constexpr uint32_t _S_hton_32(uint32_t __h) { return __h; } + static constexpr uint32_t _S_ntoh_32(uint32_t __n) { return __n; } #else static constexpr uint16_t - _S_hton(uint16_t __h) { return __builtin_bswap16(__h); } + _S_hton_16(uint16_t __h) { return __builtin_bswap16(__h); } static constexpr uint16_t - _S_ntoh(uint16_t __n) { return __builtin_bswap16(__n); } + _S_ntoh_16(uint16_t __n) { return __builtin_bswap16(__n); } static constexpr uint32_t - _S_hton(uint32_t __h) { return __builtin_bswap32(__h); } + _S_hton_32(uint32_t __h) { return __builtin_bswap32(__h); } static constexpr uint32_t - _S_ntoh(uint32_t __n) { return __builtin_bswap32(__n); } + _S_ntoh_32(uint32_t __n) { return __builtin_bswap32(__n); } #endif in_addr_t _M_addr; // network byte order @@ -1396,7 +1397,7 @@ namespace ip || __proto == protocol_type::v6()); _M_data._M_v4.sin_family = __proto.family(); - _M_data._M_v4.sin_port = address_v4::_S_hton(__port_num); + _M_data._M_v4.sin_port = address_v4::_S_hton_16(__port_num); } constexpr @@ -1407,14 +1408,14 @@ namespace ip if (__addr.is_v4()) { _M_data._M_v4.sin_family = protocol_type::v4().family(); - _M_data._M_v4.sin_port = address_v4::_S_hton(__port_num); + _M_data._M_v4.sin_port = address_v4::_S_hton_16(__port_num); _M_data._M_v4.sin_addr.s_addr = __addr._M_v4._M_addr; } else { _M_data._M_v6 = {}; _M_data._M_v6.sin6_family = protocol_type::v6().family(); - _M_data._M_v6.sin6_port = address_v4::_S_hton(__port_num); + _M_data._M_v6.sin6_port = address_v4::_S_hton_16(__port_num); __builtin_memcpy(_M_data._M_v6.sin6_addr.s6_addr, __addr._M_v6._M_bytes.data(), 16); _M_data._M_v6.sin6_scope_id = __addr._M_v6._M_scope_id; @@ -1466,11 +1467,11 @@ namespace ip constexpr port_type port() const noexcept - { return address_v4::_S_ntoh(_M_data._M_v4.sin_port); } + { return address_v4::_S_ntoh_16(_M_data._M_v4.sin_port); } void port(port_type __port_num) noexcept - { _M_data._M_v4.sin_port = address_v4::_S_hton(__port_num); } + { _M_data._M_v4.sin_port = address_v4::_S_hton_16(__port_num); } void* data() noexcept { return &_M_data; } const void* data() const noexcept { return &_M_data; } diff --git a/libstdc++-v3/include/experimental/socket b/libstdc++-v3/include/experimental/socket index a2427f9..e806265 100644 --- a/libstdc++-v3/include/experimental/socket +++ b/libstdc++-v3/include/experimental/socket @@ -794,7 +794,7 @@ inline namespace v1 bool at_mark(error_code& __ec) const { -#ifdef _GLIBCXX_HAVE_SYS_SOCKET_H +#ifdef _GLIBCXX_HAVE_SOCKATMARK const int __result = ::sockatmark(native_handle()); if (__result == -1) { |