re PR libstdc++/58415 (__sso_string_base move constructor does not null terminate local data when moving from empty string)
2013-09-13 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/58415 * include/ext/sso_string_base.h (__sso_string_base<>:: __sso_string_base(__sso_string_base&&)): Fix thinkos about _M_length vs _M_set_length. * testsuite/ext/vstring/cons/58415-1.cc: New. * testsuite/ext/vstring/cons/58415-2.cc: Likewise. From-SVN: r202574
This commit is contained in:
parent
88b0e79e45
commit
4f03875418
4 changed files with 90 additions and 2 deletions
|
@ -1,3 +1,12 @@
|
|||
2013-09-13 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/58415
|
||||
* include/ext/sso_string_base.h (__sso_string_base<>::
|
||||
__sso_string_base(__sso_string_base&&)): Fix thinkos about
|
||||
_M_length vs _M_set_length.
|
||||
* testsuite/ext/vstring/cons/58415-1.cc: New.
|
||||
* testsuite/ext/vstring/cons/58415-2.cc: Likewise.
|
||||
|
||||
2013-09-12 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/58403
|
||||
|
|
|
@ -361,9 +361,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
_M_capacity(__rcs._M_allocated_capacity);
|
||||
}
|
||||
|
||||
_M_length(__rcs._M_length());
|
||||
__rcs._M_length(0);
|
||||
_M_set_length(__rcs._M_length());
|
||||
__rcs._M_data(__rcs._M_local_data);
|
||||
__rcs._M_set_length(0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
41
libstdc++-v3/testsuite/ext/vstring/cons/58415-1.cc
Normal file
41
libstdc++-v3/testsuite/ext/vstring/cons/58415-1.cc
Normal file
|
@ -0,0 +1,41 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-string-conversions "" }
|
||||
|
||||
// Copyright (C) 2013 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <ext/vstring.h>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
typedef __gnu_cxx::__versa_string<char> string;
|
||||
|
||||
void test01()
|
||||
{
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
string s1("string");
|
||||
string s2("");
|
||||
std::swap(s1, s2);
|
||||
|
||||
VERIFY( s1.c_str()[0] == '\0' );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
38
libstdc++-v3/testsuite/ext/vstring/cons/58415-2.cc
Normal file
38
libstdc++-v3/testsuite/ext/vstring/cons/58415-2.cc
Normal file
|
@ -0,0 +1,38 @@
|
|||
// { dg-options "-std=gnu++11" }
|
||||
// { dg-require-string-conversions "" }
|
||||
|
||||
// Copyright (C) 2013 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
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <ext/vstring.h>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
typedef __gnu_cxx::__versa_string<char> string;
|
||||
|
||||
void test01()
|
||||
{
|
||||
string s1;
|
||||
string s2 = std::move(s1);
|
||||
|
||||
VERIFY( s2.c_str()[0] == '\0' );
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue