Fix bug 19740; round-tripping a pointer through a stream doesn't work

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@209305 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Marshall Clow 2014-05-21 16:02:20 +00:00
parent f33ffcc651
commit 117563c516
2 changed files with 21 additions and 3 deletions

View File

@ -1180,11 +1180,11 @@ num_get<_CharT, _InputIterator>::do_get(iter_type __b, iter_type __e,
break; break;
} }
// Stage 3 // Stage 3
__a[sizeof(__a)-1] = 0; __buf.resize(__a_end - __a);
#ifdef _LIBCPP_LOCALE__L_EXTENSIONS #ifdef _LIBCPP_LOCALE__L_EXTENSIONS
if (sscanf_l(__a, _LIBCPP_GET_C_LOCALE, "%p", &__v) != 1) if (sscanf_l(__buf.c_str(), _LIBCPP_GET_C_LOCALE, "%p", &__v) != 1)
#else #else
if (__sscanf_l(__a, __cloc(), "%p", &__v) != 1) if (__sscanf_l(__buf.c_str(), __cloc(), "%p", &__v) != 1)
#endif #endif
__err = ios_base::failbit; __err = ios_base::failbit;
// EOF checked // EOF checked

View File

@ -76,4 +76,22 @@ int main()
assert(!is.eof()); assert(!is.eof());
assert(!is.fail()); assert(!is.fail());
} }
{
testbuf<char> sb("12345678");
std::istream is(&sb);
void* n = 0;
is >> n;
assert(n == (void*)0x12345678);
assert( is.eof());
assert(!is.fail());
}
{
testbuf<wchar_t> sb(L"12345678");
std::wistream is(&sb);
void* n = 0;
is >> n;
assert(n == (void*)0x12345678);
assert( is.eof());
assert(!is.fail());
}
} }