mirror of git://gcc.gnu.org/git/gcc.git
Pretty printer test fixes and improvements
Test that StdUniquePtrPrinter correctly prints std::unique_ptr objects using the old layout, prior to the PR libstdc++/77990 changes. The printer test for a valueless std::variant started to fail because the PR libstdc++/87431 fix meant it no longer became valueless. Change the test to use a type that is not trivially copyable, so that the exception causes it to become valueless. * testsuite/libstdc++-prettyprinters/compat.cc: Test printer support for old std::unique_ptr layout. * testsuite/libstdc++-prettyprinters/cxx17.cc: Fix std::variant test to become valueless. Add filesystem::path tests. From-SVN: r267743
This commit is contained in:
parent
d942bc80e4
commit
416f555930
|
|
@ -1,5 +1,10 @@
|
||||||
2019-01-08 Jonathan Wakely <jwakely@redhat.com>
|
2019-01-08 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
|
* testsuite/libstdc++-prettyprinters/compat.cc: Test printer support
|
||||||
|
for old std::unique_ptr layout.
|
||||||
|
* testsuite/libstdc++-prettyprinters/cxx17.cc: Fix std::variant test
|
||||||
|
to become valueless. Add filesystem::path tests.
|
||||||
|
|
||||||
PR libstdc++/87855
|
PR libstdc++/87855
|
||||||
* include/std/optional (_Optional_payload_base): New class template
|
* include/std/optional (_Optional_payload_base): New class template
|
||||||
for common code hoisted from _Optional_payload specializations. Use
|
for common code hoisted from _Optional_payload specializations. Use
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,22 @@
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
|
template<typename T, typename U>
|
||||||
|
struct tuple
|
||||||
|
{
|
||||||
|
T _M_head_impl;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename T> struct default_delete { };
|
||||||
|
|
||||||
|
template<typename T, typename D = default_delete<T>>
|
||||||
|
struct unique_ptr
|
||||||
|
{
|
||||||
|
unique_ptr(T* p) { _M_t._M_head_impl = p; }
|
||||||
|
|
||||||
|
tuple<T*, D> _M_t;
|
||||||
|
};
|
||||||
|
|
||||||
// Old representation of std::optional, before GCC 9
|
// Old representation of std::optional, before GCC 9
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct _Optional_payload
|
struct _Optional_payload
|
||||||
|
|
@ -58,6 +74,12 @@ namespace std
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
struct datum { };
|
||||||
|
std::unique_ptr<datum> uptr (new datum);
|
||||||
|
// { dg-final { regexp-test uptr {std::unique_ptr.datum. = {get\(\) = 0x.*}} } }
|
||||||
|
std::unique_ptr<datum> &ruptr = uptr;
|
||||||
|
// { dg-final { regexp-test ruptr {std::unique_ptr.datum. = {get\(\) = 0x.*}} } }
|
||||||
|
|
||||||
using std::optional;
|
using std::optional;
|
||||||
|
|
||||||
optional<int> o;
|
optional<int> o;
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
// Type printers only recognize the old std::string for now.
|
// Type printers only recognize the old std::string for now.
|
||||||
#define _GLIBCXX_USE_CXX11_ABI 0
|
#define _GLIBCXX_USE_CXX11_ABI 0
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
#include <any>
|
#include <any>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <variant>
|
#include <variant>
|
||||||
|
|
@ -41,6 +42,11 @@ using std::unordered_set;
|
||||||
using std::shared_ptr;
|
using std::shared_ptr;
|
||||||
using std::weak_ptr;
|
using std::weak_ptr;
|
||||||
|
|
||||||
|
struct X {
|
||||||
|
X(int) { }
|
||||||
|
X(const X&) { } // not trivially-copyable
|
||||||
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
|
@ -84,11 +90,11 @@ main()
|
||||||
// { dg-final { note-test v0 {std::variant<float, int, std::string_view> [index 0] = {0}} } }
|
// { dg-final { note-test v0 {std::variant<float, int, std::string_view> [index 0] = {0}} } }
|
||||||
variant<float, int, string_view> v1{ 0.5f };
|
variant<float, int, string_view> v1{ 0.5f };
|
||||||
// { dg-final { note-test v1 {std::variant<float, int, std::string_view> [index 0] = {0.5}} } }
|
// { dg-final { note-test v1 {std::variant<float, int, std::string_view> [index 0] = {0.5}} } }
|
||||||
variant<float, int, string_view> v2;
|
variant<float, X, string_view> v2;
|
||||||
try {
|
try {
|
||||||
v2.emplace<1>(S());
|
v2.emplace<1>(S());
|
||||||
} catch (int) { }
|
} catch (int) { }
|
||||||
// { dg-final { note-test v2 {std::variant<float, int, std::string_view> [no contained value]} } }
|
// { dg-final { note-test v2 {std::variant<float, X, std::string_view> [no contained value]} } }
|
||||||
variant<float, int, string_view> v3{ 3 };
|
variant<float, int, string_view> v3{ 3 };
|
||||||
// { dg-final { note-test v3 {std::variant<float, int, std::string_view> [index 1] = {3}} } }
|
// { dg-final { note-test v3 {std::variant<float, int, std::string_view> [index 1] = {3}} } }
|
||||||
variant<float, int, string_view> v4{ str };
|
variant<float, int, string_view> v4{ str };
|
||||||
|
|
@ -118,6 +124,13 @@ main()
|
||||||
// { dg-final { regexp-test q {std::shared_ptr.int \[2\]. \(use count 2, weak count 1\) = {get\(\) = 0x.*}} } }
|
// { dg-final { regexp-test q {std::shared_ptr.int \[2\]. \(use count 2, weak count 1\) = {get\(\) = 0x.*}} } }
|
||||||
// { dg-final { regexp-test wq {std::weak_ptr.int \[2\]. \(use count 2, weak count 1\) = {get\(\) = 0x.*}} } }
|
// { dg-final { regexp-test wq {std::weak_ptr.int \[2\]. \(use count 2, weak count 1\) = {get\(\) = 0x.*}} } }
|
||||||
|
|
||||||
|
std::filesystem::path p0;
|
||||||
|
// { dg-final { note-test p0 {filesystem::path ""} } }
|
||||||
|
std::filesystem::path p1("filename");
|
||||||
|
// { dg-final { note-test p1 {filesystem::path "filename"} } }
|
||||||
|
std::filesystem::path p2("/dir/.");
|
||||||
|
// { dg-final { note-test p2 {filesystem::path "/dir/file" = {[root-directory] = "/", [1] = "dir", [2] = "."}} } }
|
||||||
|
|
||||||
std::cout << "\n";
|
std::cout << "\n";
|
||||||
return 0; // Mark SPOT
|
return 0; // Mark SPOT
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue