summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/src/locale.cpp4
-rw-r--r--libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long.pass.cpp4
2 files changed, 5 insertions, 3 deletions
diff --git a/libcxx/src/locale.cpp b/libcxx/src/locale.cpp
index 00eb574ec45..ca0a1c9b15f 100644
--- a/libcxx/src/locale.cpp
+++ b/libcxx/src/locale.cpp
@@ -4379,7 +4379,9 @@ void
__check_grouping(const string& __grouping, unsigned* __g, unsigned* __g_end,
ios_base::iostate& __err)
{
- if (__grouping.size() != 0)
+// if the grouping pattern is empty _or_ there are no grouping bits, then do nothing
+// we always have at least a single entry in [__g, __g_end); the end of the input sequence
+ if (__grouping.size() >= 0 && __g_end - __g > 1)
{
reverse(__g, __g_end);
const char* __ig = __grouping.data();
diff --git a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long.pass.cpp b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long.pass.cpp
index 42126260d98..00b0c3a69b6 100644
--- a/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long.pass.cpp
+++ b/libcxx/test/std/localization/locale.categories/category.numeric/locale.num.get/facet.num.get.members/get_long.pass.cpp
@@ -162,14 +162,14 @@ int main(int, char**)
ios.imbue(std::locale(std::locale(), new my_numpunct));
{
v = -1;
- const char str[] = "123";
+ const char str[] = "123"; // no separators at all
std::ios_base::iostate err = ios.goodbit;
input_iterator<const char*> iter =
f.get(input_iterator<const char*>(str),
input_iterator<const char*>(str+sizeof(str)),
ios, err, v);
assert(iter.base() == str+sizeof(str)-1);
- assert(err == ios.failbit);
+ assert(err == ios.goodbit);
assert(v == 123);
}
{
OpenPOWER on IntegriCloud