Fix an incorrect 'Throws' in the regex code. Add a test for the new behavior. Reviewed as https://reviews.llvm.org/D61828. Thanks to Mark for the catch and the fix.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@361887 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Marshall Clow 2019-05-28 22:42:32 +00:00
parent bfea7307ae
commit feb0e9afd4
2 changed files with 39 additions and 1 deletions

View File

@ -2306,7 +2306,7 @@ public:
else
{
if (__b.size() != 1 || __e.size() != 1)
__throw_regex_error<regex_constants::error_collate>();
__throw_regex_error<regex_constants::error_range>();
if (__icase_)
{
__b[0] = __traits_.translate_nocase(__b[0]);

View File

@ -0,0 +1,38 @@
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// UNSUPPORTED: libcpp-no-exceptions
// <regex>
// template <class charT, class traits = regex_traits<charT>> class basic_regex;
// template <class ST, class SA>
// basic_regex(const basic_string<charT, ST, SA>& s);
#include <regex>
#include <cassert>
#include "test_macros.h"
static bool error_range_thrown(const char *pat)
{
bool result = false;
try {
std::regex re(pat);
} catch (const std::regex_error &ex) {
result = (ex.code() == std::regex_constants::error_range);
}
return result;
}
int main(int, char**)
{
assert(error_range_thrown(R"([\w-a])"));
assert(error_range_thrown(R"([a-\w])"));
return 0;
}