PR68307 points out that config/os/mingw32-w64/error_constants.h fails to define a number of errc constants which correspond to EXXX macros that are supported on mingw-w64.
Does anyone know why we test explicitly for these macros but not others? m4_foreach([syserr], [EOWNERDEAD, ENOTRECOVERABLE, ENOLINK, EPROTO, ENODATA, ENOSR, ENOSTR, ETIME, EBADMSG, ECANCELED, EOVERFLOW, ENOTSUP, EIDRM, ETXTBSY, ECHILD, ENOSPC, EPERM, ETIMEDOUT, EWOULDBLOCK], Why do we even test for these in configure, instead of just checking whether they exist directly using #ifdef in error_constants.h ? (This was discussed in https://gcc.gnu.org/ml/libstdc++/2011-08/msg00125.html where Paolo questioned the value of these checks, but indicated a preference for consistency). A bit of (incomplete) archaeology suggests that at one time we defined all of these in <system_error>, but later split them out into OS-specific error_constants.h files. If we have a file specific to mingw-w64 can we just uncomment the constants known to be supported by that target? This patch uncomments all the constants with a corresponding macro in mingw-w64-headers/crt/errno.h in the mingw-w64 sources. 2015-11-12 Jonathan Wakely <jwak...@redhat.com> PR libstdc++/68307 * config/os/mingw32-w64/error_constants.h: Uncomment all error codes supported by mingw-w64. Is there any problem doing this?
diff --git a/libstdc++-v3/config/os/mingw32-w64/error_constants.h b/libstdc++-v3/config/os/mingw32-w64/error_constants.h index 0168b5f..e0211bf 100644 --- a/libstdc++-v3/config/os/mingw32-w64/error_constants.h +++ b/libstdc++-v3/config/os/mingw32-w64/error_constants.h @@ -41,22 +41,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // replaced by Winsock WSA-prefixed equivalents. enum class errc { -// address_family_not_supported = EAFNOSUPPORT, -// address_in_use = EADDRINUSE, -// address_not_available = EADDRNOTAVAIL, -// already_connected = EISCONN, + address_family_not_supported = EAFNOSUPPORT, + address_in_use = EADDRINUSE, + address_not_available = EADDRNOTAVAIL, + already_connected = EISCONN, argument_list_too_long = E2BIG, argument_out_of_domain = EDOM, bad_address = EFAULT, bad_file_descriptor = EBADF, // bad_message = EBADMSG, broken_pipe = EPIPE, -// connection_aborted = ECONNABORTED, -// connection_already_in_progress = EALREADY, -// connection_refused = ECONNREFUSED, -// connection_reset = ECONNRESET, -// cross_device_link = EXDEV, -// destination_address_required = EDESTADDRREQ, + connection_aborted = ECONNABORTED, + connection_already_in_progress = EALREADY, + connection_refused = ECONNREFUSED, + connection_reset = ECONNRESET, + cross_device_link = EXDEV, + destination_address_required = EDESTADDRREQ, device_or_resource_busy = EBUSY, directory_not_empty = ENOTEMPTY, executable_format_error = ENOEXEC, @@ -64,7 +64,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION file_too_large = EFBIG, filename_too_long = ENAMETOOLONG, function_not_supported = ENOSYS, -// host_unreachable = EHOSTUNREACH, + host_unreachable = EHOSTUNREACH, // identifier_removed = EIDRM, illegal_byte_sequence = EILSEQ, inappropriate_io_control_operation = ENOTTY, @@ -73,11 +73,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION invalid_seek = ESPIPE, io_error = EIO, is_a_directory = EISDIR, -// message_size = EMSGSIZE, -// network_down = ENETDOWN, -// network_reset = ENETRESET, -// network_unreachable = ENETUNREACH, -// no_buffer_space = ENOBUFS, + message_size = EMSGSIZE, + network_down = ENETDOWN, + network_reset = ENETRESET, + network_unreachable = ENETUNREACH, + no_buffer_space = ENOBUFS, #ifdef _GLIBCXX_HAVE_ECHILD no_child_process = ECHILD, #endif @@ -85,7 +85,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION no_lock_available = ENOLCK, // no_message_available = ENODATA, // no_message = ENOMSG, -// no_protocol_option = ENOPROTOOPT, + no_protocol_option = ENOPROTOOPT, #ifdef _GLIBCXX_HAVE_ENOSPC no_space_on_device = ENOSPC, #endif @@ -95,26 +95,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION no_such_file_or_directory = ENOENT, no_such_process = ESRCH, not_a_directory = ENOTDIR, -// not_a_socket = ENOTSOCK, + not_a_socket = ENOTSOCK, // not_a_stream = ENOSTR, -// not_connected = ENOTCONN, + not_connected = ENOTCONN, not_enough_memory = ENOMEM, #ifdef _GLIBCXX_HAVE_ENOTSUP not_supported = ENOTSUP, #endif -// operation_canceled = ECANCELED, -// operation_in_progress = EINPROGRESS, + operation_canceled = ECANCELED, + operation_in_progress = EINPROGRESS, #ifdef _GLIBCXX_HAVE_EPERM operation_not_permitted = EPERM, #endif -// operation_not_supported = EOPNOTSUPP, + operation_not_supported = EOPNOTSUPP, #ifdef _GLIBCXX_HAVE_EWOULDBLOCK operation_would_block = EWOULDBLOCK, #endif -// owner_dead = EOWNERDEAD, + owner_dead = EOWNERDEAD, permission_denied = EACCES, -// protocol_error = EPROTO, -// protocol_not_supported = EPROTONOSUPPORT, + protocol_error = EPROTO, + protocol_not_supported = EPROTONOSUPPORT, read_only_file_system = EROFS, resource_deadlock_would_occur = EDEADLK, resource_unavailable_try_again = EAGAIN, @@ -127,13 +127,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #endif too_many_files_open_in_system = ENFILE, too_many_files_open = EMFILE, - too_many_links = EMLINK -// too_many_symbolic_link_levels = ELOOP, + too_many_links = EMLINK, + too_many_symbolic_link_levels = ELOOP, #ifdef _GLIBCXX_HAVE_EOVERFLOW - , - value_too_large = EOVERFLOW + value_too_large = EOVERFLOW, #endif -// wrong_protocol_type = EPROTOTYPE + wrong_protocol_type = EPROTOTYPE }; _GLIBCXX_END_NAMESPACE_VERSION