[libc++][test] Add tuple trivial destructor test

There is only compile-time tests in `dtor.pass.cpp`, so it could be made a
`dtor.compile.pass.cpp`. Instead, add a runtime test for testing the trivial
destructor behavior for `tuple`.

Differential Revision: https://reviews.llvm.org/D109298
This commit is contained in:
Joe Loser 2022-06-11 18:11:04 -06:00
parent 5f57ca208b
commit c115e760c2
No known key found for this signature in database
GPG Key ID: 1CDBEBC050EA230D

View File

@ -25,18 +25,37 @@
#include "test_macros.h"
struct TrackDtor {
int* count_;
constexpr explicit TrackDtor(int* count) : count_(count) {}
TEST_CONSTEXPR_CXX14 TrackDtor(TrackDtor&& that) : count_(that.count_) { that.count_ = nullptr; }
TEST_CONSTEXPR_CXX20 ~TrackDtor() { if(count_) ++*count_; }
};
static_assert(!std::is_trivially_destructible<TrackDtor>::value, "");
static_assert(std::is_trivially_destructible<std::tuple<>>::value, "");
static_assert(std::is_trivially_destructible<std::tuple<void*>>::value, "");
static_assert(std::is_trivially_destructible<std::tuple<int, float>>::value, "");
static_assert(!std::is_trivially_destructible<std::tuple<std::string>>::value, "");
static_assert(!std::is_trivially_destructible<std::tuple<int, std::string>>::value, "");
TEST_CONSTEXPR_CXX20 bool test() {
int count = 0;
{
std::tuple<TrackDtor> tuple{TrackDtor(&count)};
assert(count == 0);
}
assert(count == 1);
return true;
}
int main(int, char**)
{
static_assert(std::is_trivially_destructible<
std::tuple<> >::value, "");
static_assert(std::is_trivially_destructible<
std::tuple<void*> >::value, "");
static_assert(std::is_trivially_destructible<
std::tuple<int, float> >::value, "");
static_assert(!std::is_trivially_destructible<
std::tuple<std::string> >::value, "");
static_assert(!std::is_trivially_destructible<
std::tuple<int, std::string> >::value, "");
test();
#if TEST_STD_VER > 17
static_assert(test());
#endif
return 0;
}