// { dg-options "-std=gnu++0x" }
// Copyright (C) 2007, 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.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// .
#include
#include
#include
// test copy ctors, assignment operators, and persistence of member string data
// libstdc++/1972
// via Greg Bumgardner
void allocate_on_stack(void)
{
const size_t num = 512;
__extension__ char array[num];
for (size_t i = 0; i < num; i++)
array[i]=0;
// Suppress unused warnings.
for (size_t i = 0; i < num; i++)
array[i]=array[i];
}
void test04()
{
bool test __attribute__((unused)) = true;
const std::string s("CA ISO emergency once again:immediate power down");
const char* strlit1 = "wish I lived in Palo Alto";
const char* strlit2 = "...or Santa Barbara";
std::system_error obj1(std::error_code(), s);
// block 01
{
const std::string s2(strlit1);
std::system_error obj2(std::error_code(), s2);
obj1 = obj2;
}
allocate_on_stack();
VERIFY( std::string(obj1.what()).find(strlit1) != std::string::npos );
// block 02
{
const std::string s3(strlit2);
std::system_error obj3 = std::system_error(std::error_code(), s3);
obj1 = obj3;
}
allocate_on_stack();
VERIFY( std::string(obj1.what()).find(strlit2) != std::string::npos );
}
int main(void)
{
test04();
return 0;
}