summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/utilities/variant/variant.variant
diff options
context:
space:
mode:
authorJF Bastien <jfbastien@apple.com>2019-02-04 20:31:13 +0000
committerJF Bastien <jfbastien@apple.com>2019-02-04 20:31:13 +0000
commit2df59c50688c122bbcae7467d3eaf862c3ea3088 (patch)
tree29c9a3e1c54fe76a506ffecc0cc4d8fbaba5cb04 /libcxx/test/std/utilities/variant/variant.variant
parent6fd4e7fe0258ff71fe759535236883ea9060587c (diff)
downloadbcm5719-llvm-2df59c50688c122bbcae7467d3eaf862c3ea3088.tar.gz
bcm5719-llvm-2df59c50688c122bbcae7467d3eaf862c3ea3088.zip
Support tests in freestanding
Summary: Freestanding is *weird*. The standard allows it to differ in a bunch of odd manners from regular C++, and the committee would like to improve that situation. I'd like to make libc++ behave better with what freestanding should be, so that it can be a tool we use in improving the standard. To do that we need to try stuff out, both with "freestanding the language mode" and "freestanding the library subset". Let's start with the super basic: run the libc++ tests in freestanding, using clang as the compiler, and see what works. The easiest hack to do this: In utils/libcxx/test/config.py add: self.cxx.compile_flags += ['-ffreestanding'] Run the tests and they all fail. Why? Because in freestanding `main` isn't special. This "not special" property has two effects: main doesn't get mangled, and main isn't allowed to omit its `return` statement. The first means main gets mangled and the linker can't create a valid executable for us to test. The second means we spew out warnings (ew) and the compiler doesn't insert the `return` we omitted, and main just falls of the end and does whatever undefined behavior (if you're luck, ud2 leading to non-zero return code). Let's start my work with the basics. This patch changes all libc++ tests to declare `main` as `int main(int, char**` so it mangles consistently (enabling us to declare another `extern "C"` main for freestanding which calls the mangled one), and adds `return 0;` to all places where it was missing. This touches 6124 files, and I apologize. The former was done with The Magic Of Sed. The later was done with a (not quite correct but decent) clang tool: https://gist.github.com/jfbastien/793819ff360baa845483dde81170feed This works for most tests, though I did have to adjust a few places when e.g. the test runs with `-x c`, macros are used for main (such as for the filesystem tests), etc. Once this is in we can create a freestanding bot which will prevent further regressions. After that, we can start the real work of supporting C++ freestanding fairly well in libc++. <rdar://problem/47754795> Reviewers: ldionne, mclow.lists, EricWF Subscribers: christof, jkorous, dexonsmith, arphaman, miyuki, libcxx-commits Differential Revision: https://reviews.llvm.org/D57624 llvm-svn: 353086
Diffstat (limited to 'libcxx/test/std/utilities/variant/variant.variant')
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant_array.fail.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant_empty.fail.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant_reference.fail.cpp4
-rw-r--r--libcxx/test/std/utilities/variant/variant.variant/variant_void.fail.cpp4
23 files changed, 69 insertions, 23 deletions
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp
index 67deb3f2c62..6a4bb048627 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.assign/T.pass.cpp
@@ -254,10 +254,12 @@ void test_T_assignment_performs_assignment() {
#endif // TEST_HAS_NO_EXCEPTIONS
}
-int main() {
+int main(int, char**) {
test_T_assignment_basic();
test_T_assignment_performs_construction();
test_T_assignment_performs_assignment();
test_T_assignment_noexcept();
test_T_assignment_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp
index 6a59989ddad..c36375cf299 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.assign/copy.pass.cpp
@@ -590,7 +590,7 @@ void test_constexpr_copy_assignment() {
#endif // > C++17
}
-int main() {
+int main(int, char**) {
test_copy_assignment_empty_empty();
test_copy_assignment_non_empty_empty();
test_copy_assignment_empty_non_empty();
@@ -599,4 +599,6 @@ int main() {
test_copy_assignment_sfinae();
test_copy_assignment_not_noexcept();
test_constexpr_copy_assignment();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp
index 833883d294f..c213af4b2e7 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.assign/move.pass.cpp
@@ -506,7 +506,7 @@ void test_constexpr_move_assignment() {
#endif // > C++17
}
-int main() {
+int main(int, char**) {
test_move_assignment_empty_empty();
test_move_assignment_non_empty_empty();
test_move_assignment_empty_non_empty();
@@ -515,4 +515,6 @@ int main() {
test_move_assignment_sfinae();
test_move_assignment_noexcept();
test_constexpr_move_assignment();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp
index 7357b9b56c0..4ebfe052de1 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/T.pass.cpp
@@ -126,8 +126,10 @@ void test_T_ctor_basic() {
#endif
}
-int main() {
+int main(int, char**) {
test_T_ctor_basic();
test_T_ctor_noexcept();
test_T_ctor_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp
index b6471052f64..00c94ee33c3 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/copy.pass.cpp
@@ -260,7 +260,7 @@ void test_constexpr_copy_ctor() {
#endif // > C++17
}
-int main() {
+int main(int, char**) {
test_copy_ctor_basic();
test_copy_ctor_valueless_by_exception();
test_copy_ctor_sfinae();
@@ -274,4 +274,6 @@ int main() {
(void) v2;
}
#endif
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp
index ec6eb289ba6..1766ee1dbc0 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/default.pass.cpp
@@ -122,9 +122,11 @@ void test_default_ctor_basic() {
}
}
-int main() {
+int main(int, char**) {
test_default_ctor_basic();
test_default_ctor_sfinae();
test_default_ctor_noexcept();
test_default_ctor_throws();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp
index a268adcea50..cb7d68a659f 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_args.pass.cpp
@@ -104,7 +104,9 @@ void test_ctor_basic() {
}
}
-int main() {
+int main(int, char**) {
test_ctor_basic();
test_ctor_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp
index 9c7e3faf862..4b78bf5690a 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_index_init_list_args.pass.cpp
@@ -110,7 +110,9 @@ void test_ctor_basic() {
}
}
-int main() {
+int main(int, char**) {
test_ctor_basic();
test_ctor_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp
index 05b2a29ce8f..ab8fe068831 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_args.pass.cpp
@@ -114,7 +114,9 @@ void test_ctor_basic() {
}
}
-int main() {
+int main(int, char**) {
test_ctor_basic();
test_ctor_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp
index c3f3e58d346..4061cfb2528 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/in_place_type_init_list_args.pass.cpp
@@ -111,7 +111,9 @@ void test_ctor_basic() {
}
}
-int main() {
+int main(int, char**) {
test_ctor_basic();
test_ctor_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp
index ecb4a720755..f146e16d3c0 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.ctor/move.pass.cpp
@@ -331,10 +331,12 @@ void test_constexpr_move_ctor() {
#endif // > C++17
}
-int main() {
+int main(int, char**) {
test_move_ctor_basic();
test_move_ctor_valueless_by_exception();
test_move_noexcept();
test_move_ctor_sfinae();
test_constexpr_move_ctor();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp
index 8ced5321b69..b26ab0c29bf 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.dtor/dtor.pass.cpp
@@ -44,7 +44,7 @@ struct TDtor {
static_assert(!std::is_trivially_copy_constructible<TDtor>::value, "");
static_assert(std::is_trivially_destructible<TDtor>::value, "");
-int main() {
+int main(int, char**) {
{
using V = std::variant<int, long, TDtor>;
static_assert(std::is_trivially_destructible<V>::value, "");
@@ -71,4 +71,6 @@ int main() {
assert(NonTDtor::count == 0);
assert(NonTDtor1::count == 1);
}
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp
index ea84ac94072..b688c8e7a54 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_args.pass.cpp
@@ -159,7 +159,9 @@ void test_basic() {
#endif
}
-int main() {
+int main(int, char**) {
test_basic();
test_emplace_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp
index 13e3c927c28..9d96a1dc272 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_index_init_list_args.pass.cpp
@@ -92,7 +92,9 @@ void test_basic() {
assert(&ref3 == &std::get<1>(v));
}
-int main() {
+int main(int, char**) {
test_basic();
test_emplace_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp
index 7c9034f10a7..0719f5e7bdc 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_args.pass.cpp
@@ -159,7 +159,9 @@ void test_basic() {
#endif
}
-int main() {
+int main(int, char**) {
test_basic();
test_emplace_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp
index 85cd25d04de..49839eda4f3 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.mod/emplace_type_init_list_args.pass.cpp
@@ -92,7 +92,9 @@ void test_basic() {
assert(&ref3 == &std::get<InitList>(v));
}
-int main() {
+int main(int, char**) {
test_basic();
test_emplace_sfinae();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp
index 0afa10138e3..6d463ad2788 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.status/index.pass.cpp
@@ -25,7 +25,7 @@
#include "variant_test_helpers.hpp"
-int main() {
+int main(int, char**) {
{
using V = std::variant<int, long>;
constexpr V v;
@@ -57,4 +57,6 @@ int main() {
assert(v.index() == std::variant_npos);
}
#endif
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp
index 147f380a19f..2cb730cb0ff 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.status/valueless_by_exception.pass.cpp
@@ -25,7 +25,7 @@
#include "variant_test_helpers.hpp"
-int main() {
+int main(int, char**) {
{
using V = std::variant<int, long>;
constexpr V v;
@@ -50,4 +50,6 @@ int main() {
assert(v.valueless_by_exception());
}
#endif
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp
index e05cd13e69f..4e273f52e5e 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant.swap/swap.pass.cpp
@@ -589,10 +589,12 @@ void test_swap_noexcept() {
template class std::variant<int, NotSwappable>;
#endif
-int main() {
+int main(int, char**) {
test_swap_valueless_by_exception();
test_swap_same_alternative();
test_swap_different_alternatives();
test_swap_sfinae();
test_swap_noexcept();
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant_array.fail.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant_array.fail.cpp
index a9caeb8b2db..ce79e9c4254 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant_array.fail.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant_array.fail.cpp
@@ -23,10 +23,12 @@
#include "variant_test_helpers.hpp"
#include "test_convertible.hpp"
-int main()
+int main(int, char**)
{
// expected-error@variant:* 3 {{static_assert failed}}
std::variant<int, int[]> v; // expected-note {{requested here}}
std::variant<int, int[42]> v2; // expected-note {{requested here}}
std::variant<int, int[][42]> v3; // expected-note {{requested here}}
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant_empty.fail.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant_empty.fail.cpp
index 85a10eff9af..3b93cb0ab70 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant_empty.fail.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant_empty.fail.cpp
@@ -18,8 +18,10 @@
#include "test_macros.h"
#include "variant_test_helpers.hpp"
-int main()
+int main(int, char**)
{
// expected-error@variant:* 1 {{static_assert failed}}
std::variant<> v; // expected-note {{requested here}}
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant_reference.fail.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant_reference.fail.cpp
index e659f47600a..7c2c4669083 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant_reference.fail.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant_reference.fail.cpp
@@ -18,10 +18,12 @@
#include "test_macros.h"
#include "variant_test_helpers.hpp"
-int main()
+int main(int, char**)
{
// expected-error@variant:* 3 {{static_assert failed}}
std::variant<int, int&> v; // expected-note {{requested here}}
std::variant<int, const int &> v2; // expected-note {{requested here}}
std::variant<int, int&&> v3; // expected-note {{requested here}}
+
+ return 0;
}
diff --git a/libcxx/test/std/utilities/variant/variant.variant/variant_void.fail.cpp b/libcxx/test/std/utilities/variant/variant.variant/variant_void.fail.cpp
index ce0675d73c6..27e9c399f8d 100644
--- a/libcxx/test/std/utilities/variant/variant.variant/variant_void.fail.cpp
+++ b/libcxx/test/std/utilities/variant/variant.variant/variant_void.fail.cpp
@@ -23,10 +23,12 @@
#include "variant_test_helpers.hpp"
#include "test_convertible.hpp"
-int main()
+int main(int, char**)
{
// expected-error@variant:* 3 {{static_assert failed}}
std::variant<int, void> v; // expected-note {{requested here}}
std::variant<int, const void> v2; // expected-note {{requested here}}
std::variant<const volatile void, int> v3; // expected-note {{requested here}}
+
+ return 0;
}
OpenPOWER on IntegriCloud