diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f550f8fe109..9ffb299d30c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,18 @@ +2011-10-14 Jonathan Yong + + * configure.host: Use config/os/mingw32-w64 instead of + config/os/mingw32 if vendor key is "w64". + * config/os/mingw32-w64: Duplicate from config/os/mingw32. + * config/os/mingw32-w64/os_defines.h: Enable + _GLIBCXX_FULLY_DYNAMIC_STRING if undefined. + * acinclude.m4: Set fully-dynamic-string to 1 when enabled, + 0 when disabled or undefined if unset by user. + * include/bits/basic_string.h: Check if + _GLIBCXX_FULLY_DYNAMIC_STRING is set to 0 instead of undefined. + include/bits/basic_string.tcc: Likewise. + * configure: Regenerated. + * config.h.in: Likewise. + 2011-10-13 Paolo Carlini PR libstdc++/50714 diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 1b9d025efc3..7196acfc374 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -564,17 +564,21 @@ dnl be turned on, that does not put empty objects in per-process static dnl memory (mostly useful together with shared memory allocators, see PR dnl libstdc++/16612 for details). dnl -dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING -dnl --disable-fully-dynamic-string leaves _GLIBCXX_FULLY_DYNAMIC_STRING undefined +dnl --enable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 1 +dnl --disable-fully-dynamic-string defines _GLIBCXX_FULLY_DYNAMIC_STRING to 0 +dnl otherwise undefined dnl + Usage: GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING[(DEFAULT)] dnl Where DEFAULT is either `yes' or `no'. dnl AC_DEFUN([GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING], [ GLIBCXX_ENABLE(fully-dynamic-string,$1,,[do not put empty strings in per-process static memory]) if test $enable_fully_dynamic_string = yes; then - AC_DEFINE(_GLIBCXX_FULLY_DYNAMIC_STRING, 1, - [Define if a fully dynamic basic_string is wanted.]) + enable_fully_dynamic_string_def=1 + else + enable_fully_dynamic_string_def=0 fi + AC_DEFINE_UNQUOTED([_GLIBCXX_FULLY_DYNAMIC_STRING], [${enable_fully_dynamic_string_def}], + [Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, undefined for platform defaults]) ]) diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index 82470c8cec9..df7effb6a6b 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -707,7 +707,8 @@ /* Define to use concept checking code from the boost libraries. */ #undef _GLIBCXX_CONCEPT_CHECKS -/* Define if a fully dynamic basic_string is wanted. */ +/* Define to 1 if a fully dynamic basic_string is wanted, 0 to disable, + undefined for platform defaults */ #undef _GLIBCXX_FULLY_DYNAMIC_STRING /* Define if gthreads library is available. */ diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_base.h b/libstdc++-v3/config/os/mingw32-w64/ctype_base.h new file mode 100644 index 00000000000..5fbdff8e7f0 --- /dev/null +++ b/libstdc++-v3/config/os/mingw32-w64/ctype_base.h @@ -0,0 +1,64 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 1997, 1998, 1999, 2007, 2009 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This 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 General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +// +// ISO C++ 14882: 22.1 Locales +// + +// We don't use the C-locale masks defined in mingw/include/ctype.h +// because those masks do not conform to the requirements of 22.2.1. +// In particular, a separate 'print' bitmask does not exist (isprint(c) +// relies on a combination of flags) and the '_ALPHA' mask is also a +// combination of simple bitmasks. Thus, we define libstdc++-specific +// masks here, based on the generic masks, and the corresponding +// classic_table in ctype_noninline.h. + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @brief Base class for ctype. + struct ctype_base + { + // Non-standard typedefs. + typedef const int* __to_type; + + // NB: Offsets into ctype::_M_table force a particular size + // on the mask type. Because of this, we don't use an enum. + typedef unsigned short mask; + static const mask upper = 1 << 0; + static const mask lower = 1 << 1; + static const mask alpha = 1 << 2; + static const mask digit = 1 << 3; + static const mask xdigit = 1 << 4; + static const mask space = 1 << 5; + static const mask print = 1 << 6; + static const mask graph = (1 << 2) | (1 << 3) | (1 << 9); // alnum|punct + static const mask cntrl = 1 << 8; + static const mask punct = 1 << 9; + static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc b/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc new file mode 100644 index 00000000000..12184075d77 --- /dev/null +++ b/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc @@ -0,0 +1,243 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This 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 General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file ctype_configure_char.cc */ + +// +// ISO C++ 14882: 22.1 Locales +// + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // The classic table used in libstdc++ is *not* the C _ctype table + // used by mscvrt, but is based on the ctype masks defined for libstdc++ + // in ctype_base.h. + + const ctype_base::mask* + ctype::classic_table() throw() + { + static const ctype_base::mask _S_classic_table[256] = + { + cntrl /* null */, + cntrl /* ^A */, + cntrl /* ^B */, + cntrl /* ^C */, + cntrl /* ^D */, + cntrl /* ^E */, + cntrl /* ^F */, + cntrl /* ^G */, + cntrl /* ^H */, + ctype_base::mask(space | cntrl) /* tab */, + ctype_base::mask(space | cntrl) /* LF */, + ctype_base::mask(space | cntrl) /* ^K */, + ctype_base::mask(space | cntrl) /* FF */, + ctype_base::mask(space | cntrl) /* ^M */, + cntrl /* ^N */, + cntrl /* ^O */, + cntrl /* ^P */, + cntrl /* ^Q */, + cntrl /* ^R */, + cntrl /* ^S */, + cntrl /* ^T */, + cntrl /* ^U */, + cntrl /* ^V */, + cntrl /* ^W */, + cntrl /* ^X */, + cntrl /* ^Y */, + cntrl /* ^Z */, + cntrl /* esc */, + cntrl /* ^\ */, + cntrl /* ^] */, + cntrl /* ^^ */, + cntrl /* ^_ */, + ctype_base::mask(space | print) /* */, + ctype_base::mask(punct | print) /* ! */, + ctype_base::mask(punct | print) /* " */, + ctype_base::mask(punct | print) /* # */, + ctype_base::mask(punct | print) /* $ */, + ctype_base::mask(punct | print) /* % */, + ctype_base::mask(punct | print) /* & */, + ctype_base::mask(punct | print) /* ' */, + ctype_base::mask(punct | print) /* ( */, + ctype_base::mask(punct | print) /* ) */, + ctype_base::mask(punct | print) /* * */, + ctype_base::mask(punct | print) /* + */, + ctype_base::mask(punct | print) /* , */, + ctype_base::mask(punct | print) /* - */, + ctype_base::mask(punct | print) /* . */, + ctype_base::mask(punct | print) /* / */, + ctype_base::mask(digit | xdigit | print) /* 0 */, + ctype_base::mask(digit | xdigit | print) /* 1 */, + ctype_base::mask(digit | xdigit | print) /* 2 */, + ctype_base::mask(digit | xdigit | print) /* 3 */, + ctype_base::mask(digit | xdigit | print) /* 4 */, + ctype_base::mask(digit | xdigit | print) /* 5 */, + ctype_base::mask(digit | xdigit | print) /* 6 */, + ctype_base::mask(digit | xdigit | print) /* 7 */, + ctype_base::mask(digit | xdigit | print) /* 8 */, + ctype_base::mask(digit | xdigit | print) /* 9 */, + ctype_base::mask(punct | print) /* : */, + ctype_base::mask(punct | print) /* ; */, + ctype_base::mask(punct | print) /* < */, + ctype_base::mask(punct | print) /* = */, + ctype_base::mask(punct | print) /* > */, + ctype_base::mask(punct | print) /* ? */, + ctype_base::mask(punct | print) /* ! */, + ctype_base::mask(alpha | upper | xdigit | print) /* A */, + ctype_base::mask(alpha | upper | xdigit | print) /* B */, + ctype_base::mask(alpha | upper | xdigit | print) /* C */, + ctype_base::mask(alpha | upper | xdigit | print) /* D */, + ctype_base::mask(alpha | upper | xdigit | print) /* E */, + ctype_base::mask(alpha | upper | xdigit | print) /* F */, + ctype_base::mask(alpha | upper | print) /* G */, + ctype_base::mask(alpha | upper | print) /* H */, + ctype_base::mask(alpha | upper | print) /* I */, + ctype_base::mask(alpha | upper | print) /* J */, + ctype_base::mask(alpha | upper | print) /* K */, + ctype_base::mask(alpha | upper | print) /* L */, + ctype_base::mask(alpha | upper | print) /* M */, + ctype_base::mask(alpha | upper | print) /* N */, + ctype_base::mask(alpha | upper | print) /* O */, + ctype_base::mask(alpha | upper | print) /* P */, + ctype_base::mask(alpha | upper | print) /* Q */, + ctype_base::mask(alpha | upper | print) /* R */, + ctype_base::mask(alpha | upper | print) /* S */, + ctype_base::mask(alpha | upper | print) /* T */, + ctype_base::mask(alpha | upper | print) /* U */, + ctype_base::mask(alpha | upper | print) /* V */, + ctype_base::mask(alpha | upper | print) /* W */, + ctype_base::mask(alpha | upper | print) /* X */, + ctype_base::mask(alpha | upper | print) /* Y */, + ctype_base::mask(alpha | upper | print) /* Z */, + ctype_base::mask(punct | print) /* [ */, + ctype_base::mask(punct | print) /* \ */, + ctype_base::mask(punct | print) /* ] */, + ctype_base::mask(punct | print) /* ^ */, + ctype_base::mask(punct | print) /* _ */, + ctype_base::mask(punct | print) /* ` */, + ctype_base::mask(alpha | lower | xdigit | print) /* a */, + ctype_base::mask(alpha | lower | xdigit | print) /* b */, + ctype_base::mask(alpha | lower | xdigit | print) /* c */, + ctype_base::mask(alpha | lower | xdigit | print) /* d */, + ctype_base::mask(alpha | lower | xdigit | print) /* e */, + ctype_base::mask(alpha | lower | xdigit | print) /* f */, + ctype_base::mask(alpha | lower | print) /* g */, + ctype_base::mask(alpha | lower | print) /* h */, + ctype_base::mask(alpha | lower | print) /* i */, + ctype_base::mask(alpha | lower | print) /* j */, + ctype_base::mask(alpha | lower | print) /* k */, + ctype_base::mask(alpha | lower | print) /* l */, + ctype_base::mask(alpha | lower | print) /* m */, + ctype_base::mask(alpha | lower | print) /* n */, + ctype_base::mask(alpha | lower | print) /* o */, + ctype_base::mask(alpha | lower | print) /* p */, + ctype_base::mask(alpha | lower | print) /* q */, + ctype_base::mask(alpha | lower | print) /* r */, + ctype_base::mask(alpha | lower | print) /* s */, + ctype_base::mask(alpha | lower | print) /* t */, + ctype_base::mask(alpha | lower | print) /* u */, + ctype_base::mask(alpha | lower | print) /* v */, + ctype_base::mask(alpha | lower | print) /* w */, + ctype_base::mask(alpha | lower | print) /* x */, + ctype_base::mask(alpha | lower | print) /* y */, + ctype_base::mask(alpha | lower | print) /* x */, + ctype_base::mask(punct | print) /* { */, + ctype_base::mask(punct | print) /* | */, + ctype_base::mask(punct | print) /* } */, + ctype_base::mask(punct | print) /* ~ */, + cntrl /* del (0x7f)*/, + /* The next 128 entries are all 0. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + return _S_classic_table; + } + + ctype::ctype(__c_locale, const mask* __table, bool __del, + size_t __refs) + : facet(__refs), _M_del(__table != 0 && __del), + _M_toupper(NULL), _M_tolower(NULL), + _M_table(__table ? __table : classic_table()) + { + memset(_M_widen, 0, sizeof(_M_widen)); + _M_widen_ok = 0; + memset(_M_narrow, 0, sizeof(_M_narrow)); + _M_narrow_ok = 0; + } + + ctype::ctype(const mask* __table, bool __del, size_t __refs) + : facet(__refs), _M_del(__table != 0 && __del), + _M_toupper(NULL), _M_tolower(NULL), + _M_table(__table ? __table : classic_table()) + { + memset(_M_widen, 0, sizeof(_M_widen)); + _M_widen_ok = 0; + memset(_M_narrow, 0, sizeof(_M_narrow)); + _M_narrow_ok = 0; + } + + char + ctype::do_toupper(char __c) const + { return (this->is(ctype_base::lower, __c) ? (__c - 'a' + 'A') : __c); } + + const char* + ctype::do_toupper(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = this->do_toupper(*__low); + ++__low; + } + return __high; + } + + char + ctype::do_tolower(char __c) const + { return (this->is(ctype_base::upper, __c) ? (__c - 'A' + 'a') : __c); } + + const char* + ctype::do_tolower(char* __low, const char* __high) const + { + while (__low < __high) + { + *__low = this->do_tolower(*__low); + ++__low; + } + return __high; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_inline.h b/libstdc++-v3/config/os/mingw32-w64/ctype_inline.h new file mode 100644 index 00000000000..f1b9f6c6617 --- /dev/null +++ b/libstdc++-v3/config/os/mingw32-w64/ctype_inline.h @@ -0,0 +1,75 @@ +// Locale support -*- C++ -*- + +// Copyright (C) 2000, 2009, 2010 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This 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 General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/ctype_inline.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{locale} + */ + +// +// ISO C++ 14882: 22.1 Locales +// + +// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) +// functions go in ctype.cc + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + bool + ctype:: + is(mask __m, char __c) const + { return (_M_table[static_cast(__c) ] & __m); } + + + const char* + ctype:: + is(const char* __low, const char* __high, mask* __vec) const + { + while (__low < __high) + *__vec++ = _M_table[static_cast(*__low++)]; + return __high; + } + + const char* + ctype:: + scan_is(mask __m, const char* __low, const char* __high) const + { + while (__low < __high && !this->is(__m, *__low)) + ++__low; + return __low; + } + + const char* + ctype:: + scan_not(mask __m, const char* __low, const char* __high) const + { + while (__low < __high && this->is(__m, *__low) != 0) + ++__low; + return __low; + } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/libstdc++-v3/config/os/mingw32-w64/error_constants.h b/libstdc++-v3/config/os/mingw32-w64/error_constants.h new file mode 100644 index 00000000000..da2d311762c --- /dev/null +++ b/libstdc++-v3/config/os/mingw32-w64/error_constants.h @@ -0,0 +1,142 @@ +// Specific definitions for mingw32 platform -*- C++ -*- + +// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This 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 General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/error_constants.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{system_error} + */ + +#ifndef _GLIBCXX_ERROR_CONSTANTS +# define _GLIBCXX_ERROR_CONSTANTS + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +// Most of the commented-out error codes are socket-related and could be +// 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, + 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, + device_or_resource_busy = EBUSY, + directory_not_empty = ENOTEMPTY, + executable_format_error = ENOEXEC, + file_exists = EEXIST, + file_too_large = EFBIG, + filename_too_long = ENAMETOOLONG, + function_not_supported = ENOSYS, +// host_unreachable = EHOSTUNREACH, +// identifier_removed = EIDRM, + illegal_byte_sequence = EILSEQ, + inappropriate_io_control_operation = ENOTTY, + interrupted = EINTR, + invalid_argument = EINVAL, + 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, +#ifdef _GLIBCXX_HAVE_ECHILD + no_child_process = ECHILD, +#endif +// no_link = ENOLINK, + no_lock_available = ENOLCK, +// no_message_available = ENODATA, +// no_message = ENOMSG, +// no_protocol_option = ENOPROTOOPT, +#ifdef _GLIBCXX_HAVE_ENOSPC + no_space_on_device = ENOSPC, +#endif +// no_stream_resources = ENOSR, + no_such_device_or_address = ENXIO, + no_such_device = ENODEV, + no_such_file_or_directory = ENOENT, + no_such_process = ESRCH, + not_a_directory = ENOTDIR, +// not_a_socket = ENOTSOCK, +// not_a_stream = ENOSTR, +// not_connected = ENOTCONN, + not_enough_memory = ENOMEM, +#ifdef _GLIBCXX_HAVE_ENOTSUP + not_supported = ENOTSUP, +#endif +// operation_canceled = ECANCELED, +// operation_in_progress = EINPROGRESS, +#ifdef _GLIBCXX_HAVE_EPERM + operation_not_permitted = EPERM, +#endif +// operation_not_supported = EOPNOTSUPP, +#ifdef _GLIBCXX_HAVE_EWOULDBLOCK + operation_would_block = EWOULDBLOCK, +#endif +// owner_dead = EOWNERDEAD, + permission_denied = EACCES, +// protocol_error = EPROTO, +// protocol_not_supported = EPROTONOSUPPORT, + read_only_file_system = EROFS, + resource_deadlock_would_occur = EDEADLK, + resource_unavailable_try_again = EAGAIN, + result_out_of_range = ERANGE, +// state_not_recoverable = ENOTRECOVERABLE, +// stream_timeout = ETIME, +// text_file_busy = ETXTBSY, +#ifdef _GLIBCXX_HAVE_ETIMEDOUT + timed_out = ETIMEDOUT, +#endif + too_many_files_open_in_system = ENFILE, + too_many_files_open = EMFILE, + too_many_links = EMLINK +// too_many_symbolic_link_levels = ELOOP, +#ifdef _GLIBCXX_HAVE_EOVERFLOW + , + value_too_large = EOVERFLOW +#endif +// wrong_protocol_type = EPROTOTYPE + }; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace + +#endif diff --git a/libstdc++-v3/config/os/mingw32-w64/os_defines.h b/libstdc++-v3/config/os/mingw32-w64/os_defines.h new file mode 100644 index 00000000000..c483a92e6da --- /dev/null +++ b/libstdc++-v3/config/os/mingw32-w64/os_defines.h @@ -0,0 +1,68 @@ +// Specific definitions for generic platforms -*- C++ -*- + +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +// 2009, 2010 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This 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 General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +/** @file bits/os_defines.h + * This is an internal header file, included by other library headers. + * Do not attempt to use it directly. @headername{iosfwd} + */ + +#ifndef _GLIBCXX_OS_DEFINES +# define _GLIBCXX_OS_DEFINES + +// System-specific #define, typedefs, corrections, etc, go here. This +// file will come before all others. + +// Define as 0, if you want, to enable inlining of gthread functions. +// By default, don't pollute libstdc++ with win32api names. +#if !defined (__GTHREAD_HIDE_WIN32API) +# define __GTHREAD_HIDE_WIN32API 1 +#endif + +// Don't let win32api windef.h define min and max as macros +// if included after c++config.h. +#undef NOMINMAX +#define NOMINMAX 1 + +#if defined (_GLIBCXX_DLL) +#define _GLIBCXX_PSEUDO_VISIBILITY_default __attribute__ ((__dllimport__)) +#else +#define _GLIBCXX_PSEUDO_VISIBILITY_default +#endif +#define _GLIBCXX_PSEUDO_VISIBILITY_hidden + +#define _GLIBCXX_PSEUDO_VISIBILITY(V) _GLIBCXX_PSEUDO_VISIBILITY_ ## V + +// See libstdc++/20806. +#define _GLIBCXX_HAVE_DOS_BASED_FILESYSTEM 1 + +// See libstdc++/37522. +#define _GLIBCXX_HAVE_BROKEN_VSWPRINTF 1 + +// See libstdc++/43738 +// On native windows targets there is no ioctl function. And the existing +// ioctlsocket function doesn't work for normal file-descriptors. +#define _GLIBCXX_NO_IOCTL 1 + +#endif diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index ef663beee0c..87579d9c7c7 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -17240,11 +17240,16 @@ fi if test $enable_fully_dynamic_string = yes; then - -$as_echo "#define _GLIBCXX_FULLY_DYNAMIC_STRING 1" >>confdefs.h - + enable_fully_dynamic_string_def=1 + else + enable_fully_dynamic_string_def=0 fi +cat >>confdefs.h <<_ACEOF +#define _GLIBCXX_FULLY_DYNAMIC_STRING ${enable_fully_dynamic_string_def} +_ACEOF + + # Check whether --enable-extern-template was given. diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host index 799cec2f412..4da4508fa4f 100644 --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -260,8 +260,16 @@ case "${host_os}" in atomic_word_dir=os/irix ;; mingw32*) - os_include_dir="os/mingw32" - error_constants_dir="os/mingw32" + case "$host" in + *-w64-*) + os_include_dir="os/mingw32-w64" + error_constants_dir="os/mingw32-w64" + ;; + *) + os_include_dir="os/mingw32" + error_constants_dir="os/mingw32" + ;; + esac OPT_LDFLAGS="${OPT_LDFLAGS} \$(lt_host_flags)" ;; netbsd*) diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 55513ea910f..5708194bd01 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -201,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void _M_set_length_and_sharable(size_type __n) { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (__builtin_expect(this != &_S_empty_rep(), false)) #endif { @@ -231,7 +231,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void _M_dispose(const _Alloc& __a) { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (__builtin_expect(this != &_S_empty_rep(), false)) #endif { @@ -252,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _CharT* _M_refcopy() throw() { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (__builtin_expect(this != &_S_empty_rep(), false)) #endif __gnu_cxx::__atomic_add_dispatch(&this->_M_refcount, 1); @@ -430,7 +430,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @brief Default constructor creates an empty string. */ basic_string() -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 : _M_dataplus(_S_empty_rep()._M_refdata(), _Alloc()) { } #else : _M_dataplus(_S_construct(size_type(), _CharT(), _Alloc()), _Alloc()){ } @@ -502,7 +502,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_string(basic_string&& __str) noexcept : _M_dataplus(__str._M_dataplus) { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 __str._M_data(_S_empty_rep()._M_refdata()); #else __str._M_data(_S_construct(size_type(), _CharT(), get_allocator())); diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index 056e2657390..7eff81819f6 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, input_iterator_tag) { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (__beg == __end && __a == _Alloc()) return _S_empty_rep()._M_refdata(); #endif @@ -126,7 +126,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, forward_iterator_tag) { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (__beg == __end && __a == _Alloc()) return _S_empty_rep()._M_refdata(); #endif @@ -154,7 +154,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_string<_CharT, _Traits, _Alloc>:: _S_construct(size_type __n, _CharT __c, const _Alloc& __a) { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (__n == 0 && __a == _Alloc()) return _S_empty_rep()._M_refdata(); #endif @@ -456,7 +456,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_string<_CharT, _Traits, _Alloc>:: _M_leak_hard() { -#ifndef _GLIBCXX_FULLY_DYNAMIC_STRING +#if _GLIBCXX_FULLY_DYNAMIC_STRING == 0 if (_M_rep() == &_S_empty_rep()) return; #endif