diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2009-07-18 22:58:10 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2009-07-18 22:58:10 +0000 |
commit | af90c8c9ae3b795f28cabd9f11e9f7c9a1ccccb4 (patch) | |
tree | 7563faaf990f548d8b0ebbb3e082086e798b7386 /libstdc++-v3/testsuite/22_locale | |
parent | 827f4079406b72fce7b49a29abe60ecb801462d5 (diff) | |
download | gcc-af90c8c9ae3b795f28cabd9f11e9f7c9a1ccccb4.zip gcc-af90c8c9ae3b795f28cabd9f11e9f7c9a1ccccb4.tar.gz gcc-af90c8c9ae3b795f28cabd9f11e9f7c9a1ccccb4.tar.bz2 |
re PR libstdc++/40712 (locale(const locale&, const char*, locale::category) can create broken locale)
2009-07-18 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/40712
* config/locale/gnu/numeric_members.cc (numpunct<>::
_M_initialize_numpunct): Dynamically allocate _M_data->_M_grouping
and copy the langinfo data into it.
(numpunct<>::~numpunct): Free the allocated memory.
* config/locale/gnu/monetary_members.cc (moneypunct<>::
_M_initialize_moneypunct): Dynamically allocate _M_data->_M_grouping,
_M_data->_M_positive_sign, _M_data->_M_negative_sign,
_M_data->_M_curr_symbol.
(moneypunct<>::~moneypunct): Free the allocated memory.
* testsuite/22_locale/moneypunct/40712.cc: New.
* include/bits/locale_facets.tcc (__numpunct_cache<>::_M_cache):
Do not leak memory if new throws.
* include/bits/locale_facets_nonio.tcc
(__moneypunct_cache<>::_M_cache): Likewise.
From-SVN: r149782
Diffstat (limited to 'libstdc++-v3/testsuite/22_locale')
-rw-r--r-- | libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc b/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc new file mode 100644 index 0000000..49eb21c --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/moneypunct/40712.cc @@ -0,0 +1,41 @@ +// { dg-require-namedlocale "" } + +// 2009-07-18 Paolo Carlini <paolo.carlini@oracle.com> + +// Copyright (C) 2009 Free Software Foundation +// +// 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. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// 22.2.6.3 Template class moneypunct + +#include <locale> + +// libstdc++/40712 +void test01() +{ + bool test __attribute__((unused)) = true; + using namespace std; + + locale loc(locale("C"), "en_US", locale::monetary); + + use_facet<moneypunct<char> >(loc).grouping(); +} + +int main() +{ + test01(); + return 0; +} |