1// { dg-require-namedlocale "" } 2 3// Copyright (C) 2003, 2005 Free Software Foundation 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21// 22.1.1.2 locale constructors and destructors [lib.locale.cons] 22 23#include <locale> 24#include <stdexcept> 25#include <cstdlib> 26#include <testsuite_hooks.h> 27 28class MyFacet : public std::locale::facet 29{ 30public: 31 static std::locale::id id; 32}; 33 34std::locale::id MyFacet::id; 35 36// libstdc++/12438 37void test01(int iters) 38{ 39 using namespace std; 40 bool test __attribute__((unused)) = true; 41 42 for (int i = 0; i < iters; ++i) 43 { 44 try 45 { 46 locale loc1 = locale::classic(); 47 locale loc2 = locale(""); 48 VERIFY( !has_facet<MyFacet>(loc2) ); 49 50 loc1.combine<MyFacet>(loc2); 51 VERIFY( false ); 52 } 53 catch (std::runtime_error&) 54 { 55 } 56 } 57} 58 59int main(int argc, char* argv[]) 60{ 61 // We leaked ~400-500 bytes/iter. 62 __gnu_test::set_memory_limits(10.0); 63 int iters = 30000; 64 65 if (argc > 1) 66 iters = atoi(argv[1]); 67 if (iters < 1) 68 iters = 1; 69 test01(iters); 70 71 return 0; 72} 73