Fix a handful of tests that fail in C++03
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@243392 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bfb46e486d
commit
b47a434d60
@ -19,6 +19,7 @@
|
|||||||
#include <array>
|
#include <array>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
#include "test_macros.h"
|
||||||
#include "../suppress_array_warnings.h"
|
#include "../suppress_array_warnings.h"
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
@ -27,6 +28,11 @@ int main()
|
|||||||
typedef double T;
|
typedef double T;
|
||||||
typedef std::array<T, 3> C;
|
typedef std::array<T, 3> C;
|
||||||
C c = {1, 2, 3.5};
|
C c = {1, 2, 3.5};
|
||||||
std::get<3>(c) = 5.5; // expected-error@array:* {{static_assert failed "Index out of bounds in std::get<> (std::array)"}}
|
std::get<3>(c) = 5.5; // expected-note {{requested here}}
|
||||||
|
#if TEST_STD_VER >= 11
|
||||||
|
// expected-error@array:* {{static_assert failed "Index out of bounds in std::get<> (std::array)"}}
|
||||||
|
#else
|
||||||
|
// expected-error@array:* {{implicit instantiation of undefined template '__static_assert_test<false>'}}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ void f() {}
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
static_assert(std::is_same<std::new_handler, void(*)()>::value, "");
|
static_assert((std::is_same<std::new_handler, void(*)()>::value), "");
|
||||||
std::new_handler p = f;
|
std::new_handler p = f;
|
||||||
assert(p == &f);
|
assert(p == &f);
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ void f() {}
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
static_assert(std::is_same<std::terminate_handler, void(*)()>::value, "");
|
static_assert((std::is_same<std::terminate_handler, void(*)()>::value), "");
|
||||||
std::terminate_handler p = f;
|
std::terminate_handler p = f;
|
||||||
assert(p == &f);
|
assert(p == &f);
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,8 @@ template <class TestType, class IntType>
|
|||||||
void test_div_struct() {
|
void test_div_struct() {
|
||||||
TestType obj;
|
TestType obj;
|
||||||
static_assert(sizeof(obj) >= sizeof(IntType) * 2, ""); // >= to account for alignment.
|
static_assert(sizeof(obj) >= sizeof(IntType) * 2, ""); // >= to account for alignment.
|
||||||
static_assert(std::is_same<decltype(obj.quot), IntType>::value, "");
|
static_assert((std::is_same<decltype(obj.quot), IntType>::value), "");
|
||||||
static_assert(std::is_same<decltype(obj.rem), IntType>::value, "");
|
static_assert((std::is_same<decltype(obj.rem), IntType>::value), "");
|
||||||
((void) obj);
|
((void) obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ int main()
|
|||||||
{
|
{
|
||||||
std::size_t s = 0;
|
std::size_t s = 0;
|
||||||
((void)s);
|
((void)s);
|
||||||
static_assert(std::is_same<std::size_t, decltype(sizeof(int))>::value, "");
|
static_assert((std::is_same<std::size_t, decltype(sizeof(int))>::value), "");
|
||||||
test_div_struct<std::div_t, int>();
|
test_div_struct<std::div_t, int>();
|
||||||
test_div_struct<std::ldiv_t, long>();
|
test_div_struct<std::ldiv_t, long>();
|
||||||
test_div_struct<std::lldiv_t, long long>();
|
test_div_struct<std::lldiv_t, long long>();
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// UNSUPPORTED: libcpp-has-no-threads
|
// UNSUPPORTED: libcpp-has-no-threads
|
||||||
|
// UNSUPPORTED: c++98, c++03
|
||||||
|
|
||||||
// NOTE: std::terminate is called so the destructors are not invoked and the
|
// NOTE: std::terminate is called so the destructors are not invoked and the
|
||||||
// memory is not freed. This will cause ASAN to fail.
|
// memory is not freed. This will cause ASAN to fail.
|
||||||
@ -38,12 +39,7 @@ public:
|
|||||||
G(const G& g) : alive_(g.alive_) {++n_alive;}
|
G(const G& g) : alive_(g.alive_) {++n_alive;}
|
||||||
~G() {alive_ = 0; --n_alive;}
|
~G() {alive_ = 0; --n_alive;}
|
||||||
|
|
||||||
void operator()()
|
|
||||||
{
|
|
||||||
assert(alive_ == 1);
|
|
||||||
assert(n_alive >= 1);
|
|
||||||
op_run = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator()(int i, double j)
|
void operator()(int i, double j)
|
||||||
{
|
{
|
||||||
@ -60,7 +56,7 @@ bool G::op_run = false;
|
|||||||
|
|
||||||
void f1()
|
void f1()
|
||||||
{
|
{
|
||||||
std::exit(0);
|
std::_Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
#include "test_macros.h"
|
||||||
#include "count_new.hpp"
|
#include "count_new.hpp"
|
||||||
|
|
||||||
int A_constructed = 0;
|
int A_constructed = 0;
|
||||||
@ -34,30 +35,22 @@ struct A
|
|||||||
|
|
||||||
int move_only_constructed = 0;
|
int move_only_constructed = 0;
|
||||||
|
|
||||||
|
#if TEST_STD_VER >= 11
|
||||||
class move_only
|
class move_only
|
||||||
{
|
{
|
||||||
int data;
|
int data;
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
move_only(const move_only&);
|
move_only(const move_only&) = delete;
|
||||||
move_only& operator=(const move_only&);
|
move_only& operator=(const move_only&)= delete;
|
||||||
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
move_only(move_only&);
|
|
||||||
move_only& operator=(move_only&);
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
move_only(move_only&&) {++move_only_constructed;}
|
move_only(move_only&&) {++move_only_constructed;}
|
||||||
move_only& operator=(move_only&&) {return *this;}
|
move_only& operator=(move_only&&) {return *this;}
|
||||||
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
operator std::__rv<move_only> () {return std::__rv<move_only>(*this);}
|
|
||||||
move_only(std::__rv<move_only>) {++move_only_constructed;}
|
|
||||||
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
|
||||||
|
|
||||||
move_only() {++move_only_constructed;}
|
move_only() {++move_only_constructed;}
|
||||||
~move_only() {--move_only_constructed;}
|
~move_only() {--move_only_constructed;}
|
||||||
};
|
};
|
||||||
|
#endif // TEST_STD_VER >= 11
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
@ -108,6 +101,7 @@ int main()
|
|||||||
assert(globalMemCounter.checkOutstandingNewEq(0));
|
assert(globalMemCounter.checkOutstandingNewEq(0));
|
||||||
assert(A_constructed == 0);
|
assert(A_constructed == 0);
|
||||||
}
|
}
|
||||||
|
#if TEST_STD_VER >= 11
|
||||||
{
|
{
|
||||||
std::allocator<move_only> a;
|
std::allocator<move_only> a;
|
||||||
assert(globalMemCounter.checkOutstandingNewEq(0));
|
assert(globalMemCounter.checkOutstandingNewEq(0));
|
||||||
@ -139,4 +133,5 @@ int main()
|
|||||||
assert(globalMemCounter.checkOutstandingNewEq(0));
|
assert(globalMemCounter.checkOutstandingNewEq(0));
|
||||||
assert(move_only_constructed == 0);
|
assert(move_only_constructed == 0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
#include "test_macros.h"
|
||||||
|
|
||||||
class A
|
class A
|
||||||
{
|
{
|
||||||
A(const A&);
|
A(const A&);
|
||||||
@ -22,9 +24,9 @@ class A
|
|||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
|
#if TEST_STD_VER >= 11
|
||||||
static_assert((std::is_same<decltype(std::declval<A>()), A&&>::value), "");
|
static_assert((std::is_same<decltype(std::declval<A>()), A&&>::value), "");
|
||||||
#else
|
#else
|
||||||
static_assert((std::is_same<decltype(std::declval<A>()), A>::value), "");
|
static_assert((std::is_same<decltype(std::declval<A>()), A&>::value), "");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -56,13 +56,14 @@ int main()
|
|||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(ca)), const A&&>::value), "");
|
static_assert((std::is_same<decltype(std::move_if_noexcept(ca)), const A&&>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(l)), const legacy&>::value), "");
|
static_assert((std::is_same<decltype(std::move_if_noexcept(l)), const legacy&>::value), "");
|
||||||
#else // C++ < 11
|
#else // C++ < 11
|
||||||
// libc++ defines decltype to be __typeof__ in C++03. __typeof__ does not
|
// In C++03 libc++ #define's decltype to be __decltype on clang and
|
||||||
// deduce the reference qualifiers.
|
// __typeof__ for other compilers. __typeof__ does not deduce the reference
|
||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(i)), const int>::value), "");
|
// qualifiers and will cause this test to fail.
|
||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(ci)), const int>::value), "");
|
static_assert((std::is_same<decltype(std::move_if_noexcept(i)), const int&>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(a)), const A>::value), "");
|
static_assert((std::is_same<decltype(std::move_if_noexcept(ci)), const int&>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(ca)), const A>::value), "");
|
static_assert((std::is_same<decltype(std::move_if_noexcept(a)), const A&>::value), "");
|
||||||
static_assert((std::is_same<decltype(std::move_if_noexcept(l)), const legacy>::value), "");
|
static_assert((std::is_same<decltype(std::move_if_noexcept(ca)), const A&>::value), "");
|
||||||
|
static_assert((std::is_same<decltype(std::move_if_noexcept(l)), const legacy&>::value), "");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TEST_STD_VER > 11
|
#if TEST_STD_VER > 11
|
||||||
|
Loading…
x
Reference in New Issue
Block a user