diff --git a/libcxx/include/regex b/libcxx/include/regex index bbc21e244dd17..9bbc3a69021b9 100644 --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -2120,7 +2120,7 @@ public: __ranges_.push_back( std::make_pair(__traits_.transform(__b.begin(), __b.end()), __traits_.transform(__e.begin(), __e.end()))); } else { - if (__b.size() != 1 || __e.size() != 1) + if (__b.size() != 1 || __e.size() != 1 || char_traits::lt(__e[0], __b[0])) std::__throw_regex_error(); if (__icase_) { __b[0] = __traits_.translate_nocase(__b[0]); diff --git a/libcxx/test/std/re/re.regex/re.regex.construct/bad_range.pass.cpp b/libcxx/test/std/re/re.regex/re.regex.construct/bad_range.pass.cpp index 023bc0ee79f44..ecfdaee2eed66 100644 --- a/libcxx/test/std/re/re.regex/re.regex.construct/bad_range.pass.cpp +++ b/libcxx/test/std/re/re.regex/re.regex.construct/bad_range.pass.cpp @@ -14,6 +14,8 @@ // template // basic_regex(const basic_string& s); +// XFAIL: FROZEN-CXX03-HEADERS-FIXME + #include #include #include "test_macros.h" @@ -33,6 +35,7 @@ int main(int, char**) { assert(error_range_thrown("([\\w-a])")); assert(error_range_thrown("([a-\\w])")); + assert(error_range_thrown("([w-a])")); - return 0; + return 0; }