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

llvm-svn: 209305
This commit is contained in:
Marshall Clow 2014-05-21 16:02:20 +00:00
parent f3a11c1051
commit ef0e8c391e
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;
}
// Stage 3
__a[sizeof(__a)-1] = 0;
__buf.resize(__a_end - __a);
#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
if (__sscanf_l(__a, __cloc(), "%p", &__v) != 1)
if (__sscanf_l(__buf.c_str(), __cloc(), "%p", &__v) != 1)
#endif
__err = ios_base::failbit;
// EOF checked

View File

@ -76,4 +76,22 @@ int main()
assert(!is.eof());
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());
}
}