Implement LWG Issues #2329 and #2332 - disallow iterators into temporary regexes and regexes into temporary strings
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@201717 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
38
test/re/re.alg/re.alg.match/basic.fail.cpp
Normal file
38
test/re/re.alg/re.alg.match/basic.fail.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// template <class ST, class SA, class Allocator, class charT, class traits>
|
||||
// bool regex_match(const basic_string<charT, ST, SA>&&,
|
||||
// match_results<
|
||||
// typename basic_string<charT, ST, SA>::const_iterator,
|
||||
// Allocator>&,
|
||||
// const basic_regex<charT, traits>&,
|
||||
// regex_constants::match_flag_type =
|
||||
// regex_constants::match_default) = delete;
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::smatch m;
|
||||
std::regex re{"*"};
|
||||
std::regex_match(std::string("abcde"), m, re);
|
||||
}
|
||||
}
|
||||
#endif
|
38
test/re/re.alg/re.alg.search/basic.fail.cpp
Normal file
38
test/re/re.alg/re.alg.search/basic.fail.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// template <class ST, class SA, class Allocator, class charT, class traits>
|
||||
// bool regex_search(const basic_string<charT, ST, SA>&&,
|
||||
// match_results<
|
||||
// typename basic_string<charT, ST, SA>::const_iterator,
|
||||
// Allocator>&,
|
||||
// const basic_regex<charT, traits>&,
|
||||
// regex_constants::match_flag_type =
|
||||
// regex_constants::match_default) = delete;
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::smatch m;
|
||||
std::regex re{"*"};
|
||||
std::regex_search(std::string("abcde"), m, re);
|
||||
}
|
||||
}
|
||||
#endif
|
38
test/re/re.iter/re.regiter/re.regiter.cnstr/cnstr.fail.cpp
Normal file
38
test/re/re.iter/re.regiter/re.regiter.cnstr/cnstr.fail.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||
|
||||
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
// const regex_type&& re,
|
||||
// int submatch = 0,
|
||||
// regex_constants::match_flag_type m =
|
||||
// regex_constants::match_default) = delete;
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
const char phone_book[] = "555-1234, 555-2345, 555-3456";
|
||||
std::cregex_iterator i(
|
||||
std::begin(phone_book), std::end(phone_book),
|
||||
std::regex("\\d{3}-\\d{4}"));
|
||||
}
|
||||
}
|
||||
#endif
|
41
test/re/re.iter/re.tokiter/re.tokiter.cnstr/array.fail.cpp
Normal file
41
test/re/re.iter/re.tokiter/re.tokiter.cnstr/array.fail.cpp
Normal file
@@ -0,0 +1,41 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||
|
||||
// template <size_t N>
|
||||
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
// const regex_type&& re,
|
||||
// const int (&submatches)[N],
|
||||
// regex_constants::match_flag_type m =
|
||||
// regex_constants::match_default);
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <vector>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::regex phone_numbers("\\d{3}-(\\d{4})");
|
||||
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||
const int indices[] = {-1, 0, 1};
|
||||
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||
std::regex("\\d{3}-\\d{4}"), indices);
|
||||
}
|
||||
}
|
||||
#endif
|
38
test/re/re.iter/re.tokiter/re.tokiter.cnstr/init.fail.cpp
Normal file
38
test/re/re.iter/re.tokiter/re.tokiter.cnstr/init.fail.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||
|
||||
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
// const regex_type&& re,
|
||||
// initializer_list<int> submatches,
|
||||
// regex_constants::match_flag_type m =
|
||||
// regex_constants::match_default);
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::regex phone_numbers("\\d{3}-(\\d{4})");
|
||||
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||
std::regex("\\d{3}-\\d{4}"), {-1, 0, 1});
|
||||
}
|
||||
}
|
||||
#endif
|
37
test/re/re.iter/re.tokiter/re.tokiter.cnstr/int.fail.cpp
Normal file
37
test/re/re.iter/re.tokiter/re.tokiter.cnstr/int.fail.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||
|
||||
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
// const regex_type&& re, int submatch = 0,
|
||||
// regex_constants::match_flag_type m =
|
||||
// regex_constants::match_default);
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::regex phone_numbers("\\d{3}-\\d{4}");
|
||||
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||
std::regex("\\d{3}-\\d{4}"), -1);
|
||||
}
|
||||
}
|
||||
#endif
|
42
test/re/re.iter/re.tokiter/re.tokiter.cnstr/vector.fail.cpp
Normal file
42
test/re/re.iter/re.tokiter/re.tokiter.cnstr/vector.fail.cpp
Normal file
@@ -0,0 +1,42 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// class regex_iterator<BidirectionalIterator, charT, traits>
|
||||
|
||||
// template <std::size_t N>
|
||||
// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
|
||||
// const regex_type&& re,
|
||||
// const std::vector<int>& submatches,
|
||||
// regex_constants::match_flag_type m =
|
||||
// regex_constants::match_default);
|
||||
|
||||
#include <__config>
|
||||
|
||||
#if _LIBCPP_STD_VER <= 11
|
||||
#error
|
||||
#else
|
||||
|
||||
#include <regex>
|
||||
#include <cassert>
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
std::regex phone_numbers("\\d{3}-(\\d{4})");
|
||||
const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
|
||||
std::vector<int> v;
|
||||
v.push_back(-1);
|
||||
v.push_back(-1);
|
||||
std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
|
||||
std::regex("\\d{3}-\\d{4}"), v);
|
||||
}
|
||||
}
|
||||
#endif
|
Reference in New Issue
Block a user