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:
Paolo Carlini 2013-09-13 18:32:42 +00:00 committed by Paolo Carlini
parent 88b0e79e45
commit 4f03875418
4 changed files with 90 additions and 2 deletions

View File

@ -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

View File

@ -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

View 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;
}

View 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;
}