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
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp
index c191b19..1dbbd85 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/divides.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::divides<int> F;
     const F f = F();
@@ -37,4 +37,6 @@
     constexpr double bar = std::divides<> () (3.0, 2);
     static_assert ( bar == 1.5, "" ); // exact in binary
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp
index 54ab577..186695f 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/minus.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::minus<int> F;
     const F f = F();
@@ -37,4 +37,6 @@
     constexpr double bar = std::minus<> () (3.0, 2);
     static_assert ( bar == 1.0, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp
index f426c57..3679a2d 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/modulus.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::modulus<int> F;
     const F f = F();
@@ -37,4 +37,6 @@
     constexpr int bar = std::modulus<> () (3L, 2);
     static_assert ( bar == 1, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp
index 5ef4791..a09e59c 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::multiplies<int> F;
     const F f = F();
@@ -37,4 +37,6 @@
     constexpr double bar = std::multiplies<> () (3.0, 2);
     static_assert ( bar == 6.0, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp
index d7346c7..553bf83 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/negate.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::negate<int> F;
     const F f = F();
@@ -36,4 +36,6 @@
     constexpr double bar = std::negate<> () (3.0);
     static_assert ( bar == -3.0, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp
index 6bca266..b2614f4 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/plus.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::plus<int> F;
     const F f = F();
@@ -37,4 +37,6 @@
     constexpr double bar = std::plus<> () (3.0, 2);
     static_assert ( bar == 5.0, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/arithmetic.operations/transparent.pass.cpp b/libcxx/test/std/utilities/function.objects/arithmetic.operations/transparent.pass.cpp
index ca57c22..154a0f8 100644
--- a/libcxx/test/std/utilities/function.objects/arithmetic.operations/transparent.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/arithmetic.operations/transparent.pass.cpp
@@ -22,7 +22,7 @@
 };
 
 
-int main ()
+int main(int, char**)
 {
     static_assert ( !is_transparent<std::plus<int>>::value, "" );
     static_assert ( !is_transparent<std::plus<std::string>>::value, "" );
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp
index 4c025d1..931778f 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/PR23141_invoke_not_constexpr.pass.cpp
@@ -28,7 +28,9 @@
   }
 };
 
-int main()
+int main(int, char**)
 {
     std::bind(Fun{}, std::placeholders::_1, 42)("hello");
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/bind_return_type.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/bind_return_type.pass.cpp
index fc089e1..7010b33 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/bind_return_type.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/bind_return_type.pass.cpp
@@ -115,7 +115,7 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     do_test<int>(return_value);
     do_test<int&>(return_lvalue);
@@ -129,4 +129,6 @@
     do_test_r<long>(return_rvalue);
     do_test_r<long>(return_const_rvalue);
 
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/copy.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/copy.pass.cpp
index ccc6c27..8beeb33 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/copy.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/copy.pass.cpp
@@ -26,11 +26,13 @@
     return std::pow(a, b);
 }
 
-int main()
+int main(int, char**)
 {
     std::function<float(float, float)> fnc = _pow;
     auto task = std::bind(fnc, 2.f, 4.f);
     auto task2(task);
     assert(task() == 16);
     assert(task2() == 16);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_function_object.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_function_object.pass.cpp
index b386b99..b87918d 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_function_object.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_function_object.pass.cpp
@@ -38,7 +38,7 @@
     }
 };
 
-int main()
+int main(int, char**)
 {
     // Check that BadUnaryFunction::operator()(S const &) is not
     // instantiated when checking if BadUnaryFunction is a nested bind
@@ -47,4 +47,6 @@
     b(0);
     auto b2 = std::bind<long>(DummyUnaryFunction(), BadUnaryFunction());
     b2(0);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp
index 8d6bc70e..a77e189 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp
@@ -40,7 +40,7 @@
     int operator()() const {return 5;}
 };
 
-int main()
+int main(int, char**)
 {
     test(std::bind(f), 1);
     test(std::bind(&f), 1);
@@ -51,4 +51,6 @@
     test(std::bind<int>(&f), 1);
     test(std::bind<int>(A_int_0()), 4);
     test_const(std::bind<int>(A_int_0()), 5);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp
index 92f65af..9b81d33 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp
@@ -280,10 +280,12 @@
     assert(b);
 }
 
-int main()
+int main(int, char**)
 {
     test_void_1();
     test_int_1();
     test_void_2();
     test3();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp
index b7facb3..10d2ce0 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp
@@ -258,10 +258,12 @@
     assert(std::bind(f_nested, std::bind(g_nested, _1))(3) == 31);
 }
 
-int main()
+int main(int, char**)
 {
     test_void_1();
     test_int_1();
     test_void_2();
     test_nested();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp
index cc982d1..2c8e56f 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp
@@ -54,7 +54,7 @@
     int operator()() const {count += 2; return 5;}
 };
 
-int main()
+int main(int, char**)
 {
     test(std::bind(f));
     test(std::bind(&f));
@@ -70,4 +70,6 @@
     test(std::bind<void>(&g));
     test(std::bind<void>(A_int_0()));
     test_const(std::bind<void>(A_int_0()));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp
index c4d8294..0d5be34 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.bind/nested.pass.cpp
@@ -41,11 +41,13 @@
   }
 };
 
-int main()
+int main(int, char**)
 {
     using std::placeholders::_1;
 
     auto g = std::bind(power(), 2, _1);
     assert(g(5) == 32);
     assert(std::bind(plus_one(), g)(5) == 33);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp
index cf065e4..8314dbe 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp
@@ -27,11 +27,13 @@
 
 struct C {};
 
-int main()
+int main(int, char**)
 {
     test<true>(std::bind(C()));
     test<true>(std::bind(C(), std::placeholders::_2));
     test<true>(std::bind<int>(C()));
     test<false>(1);
     test<false>(std::placeholders::_2);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp
index da7880f..c1af159 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression_03.pass.cpp
@@ -24,7 +24,7 @@
 
 struct C {};
 
-int main() {
+int main(int, char**) {
     test<int>();
     test<void>();
     test<C>();
@@ -35,4 +35,6 @@
     test<int(*)()>();
     test<int (C::*)()>();
     test<decltype(std::placeholders::_2)>();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp
index ecaa45b..d2ccf1f 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp
@@ -25,7 +25,7 @@
 
 struct C {};
 
-int main()
+int main(int, char**)
 {
     test<1>(std::placeholders::_1);
     test<2>(std::placeholders::_2);
@@ -41,4 +41,6 @@
     test<0>(5.5);
     test<0>('a');
     test<0>(C());
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp
index 8e4ec60..b71aae8 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp
@@ -80,7 +80,7 @@
 #endif
 }
 
-int main()
+int main(int, char**)
 {
     use_placeholders_to_prevent_unused_warning();
     test(std::placeholders::_1);
@@ -93,4 +93,6 @@
     test(std::placeholders::_8);
     test(std::placeholders::_9);
     test(std::placeholders::_10);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp
index f77636c..1f764da 100644
--- a/libcxx/test/std/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp
@@ -6,6 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main()
+int main(int, char**)
 {
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bind/nothing_to_do.pass.cpp b/libcxx/test/std/utilities/function.objects/bind/nothing_to_do.pass.cpp
index f77636c..1f764da 100644
--- a/libcxx/test/std/utilities/function.objects/bind/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bind/nothing_to_do.pass.cpp
@@ -6,6 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main()
+int main(int, char**)
 {
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp
index 664e3f2..aa53246 100644
--- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_and.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::bit_and<int> F;
     const F f = F();
@@ -57,4 +57,6 @@
     constexpr int bar = std::bit_and<> () (0x58D3L, 0xEA95);
     static_assert ( bar == 0x4891, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp
index e18139b..8bfa48f 100644
--- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_not.pass.cpp
@@ -15,7 +15,7 @@
 #include <type_traits>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     typedef std::bit_not<int> F;
     const F f = F();
@@ -42,4 +42,6 @@
 
     constexpr int bar = std::bit_not<> () (0xEA95) & 0xFFFF;
     static_assert ( bar == 0x156A, "" );
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp
index 19bd1a7..8abcd63 100644
--- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_or.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::bit_or<int> F;
     const F f = F();
@@ -57,4 +57,6 @@
     constexpr int bar = std::bit_or<> () (0x58D3L, 0xEA95);
     static_assert ( bar == 0xFAD7, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp
index 757417a..070bd4c 100644
--- a/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     {
     typedef std::bit_xor<int> F;
@@ -61,4 +61,6 @@
     static_assert ( bar == 0xB246, "" );
     }
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/bitwise.operations/transparent.pass.cpp b/libcxx/test/std/utilities/function.objects/bitwise.operations/transparent.pass.cpp
index c360a51..5ad0f23 100644
--- a/libcxx/test/std/utilities/function.objects/bitwise.operations/transparent.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/bitwise.operations/transparent.pass.cpp
@@ -22,7 +22,7 @@
 };
 
 
-int main () {
+int main(int, char**) {
     static_assert ( !is_transparent<std::bit_and<int>>::value, "" );
     static_assert ( !is_transparent<std::bit_and<std::string>>::value, "" );
     static_assert (  is_transparent<std::bit_and<void>>::value, "" );
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/constexpr_init.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/constexpr_init.pass.cpp
index 7632dc5..a0c4143 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/constexpr_init.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/constexpr_init.pass.cpp
@@ -42,6 +42,8 @@
 static_assert(test_constexpr_context<void>(), "");
 
 
-int main() {
+int main(int, char**) {
 
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp
index 7ec8f66..beed574 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/equal_to.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::equal_to<int> F;
     const F f = F();
@@ -39,4 +39,6 @@
     constexpr bool bar = std::equal_to<> () (36.0, 36);
     static_assert ( bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp
index 12111ef..35c0575 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/greater.pass.cpp
@@ -17,7 +17,7 @@
 #include "test_macros.h"
 #include "pointer_comparison_test_helper.hpp"
 
-int main()
+int main(int, char**)
 {
     typedef std::greater<int> F;
     const F f = F();
@@ -49,4 +49,6 @@
     constexpr bool bar = std::greater<> () (36.0, 36);
     static_assert ( !bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp
index 1ac67ea..9a6d36c 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/greater_equal.pass.cpp
@@ -17,7 +17,7 @@
 #include "test_macros.h"
 #include "pointer_comparison_test_helper.hpp"
 
-int main()
+int main(int, char**)
 {
     typedef std::greater_equal<int> F;
     const F f = F();
@@ -49,4 +49,6 @@
     constexpr bool bar = std::greater_equal<> () (36.0, 36);
     static_assert ( bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp
index abfe09a..31a2f97 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/less.pass.cpp
@@ -17,7 +17,7 @@
 #include "test_macros.h"
 #include "pointer_comparison_test_helper.hpp"
 
-int main()
+int main(int, char**)
 {
     typedef std::less<int> F;
     const F f = F();
@@ -48,4 +48,6 @@
     constexpr bool bar = std::less<> () (36.0, 36);
     static_assert ( !bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp
index 2e73304..31cbed1 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/less_equal.pass.cpp
@@ -17,7 +17,7 @@
 #include "test_macros.h"
 #include "pointer_comparison_test_helper.hpp"
 
-int main()
+int main(int, char**)
 {
     typedef std::less_equal<int> F;
     const F f = F();
@@ -49,4 +49,6 @@
     constexpr bool bar = std::less_equal<> () (36.0, 36);
     static_assert ( bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp
index fd32915..0e405de 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/not_equal_to.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::not_equal_to<int> F;
     const F f = F();
@@ -41,4 +41,6 @@
     constexpr bool bar = std::not_equal_to<> () (36.0, 36);
     static_assert ( !bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/comparisons/transparent.pass.cpp b/libcxx/test/std/utilities/function.objects/comparisons/transparent.pass.cpp
index f389677..4be8192 100644
--- a/libcxx/test/std/utilities/function.objects/comparisons/transparent.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/comparisons/transparent.pass.cpp
@@ -22,7 +22,7 @@
 };
 
 
-int main ()
+int main(int, char**)
 {
     static_assert ( !is_transparent<std::less<int>>::value, "" );
     static_assert ( !is_transparent<std::less<std::string>>::value, "" );
diff --git a/libcxx/test/std/utilities/function.objects/func.def/nothing_to_do.pass.cpp b/libcxx/test/std/utilities/function.objects/func.def/nothing_to_do.pass.cpp
index f77636c..1f764da 100644
--- a/libcxx/test/std/utilities/function.objects/func.def/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.def/nothing_to_do.pass.cpp
@@ -6,6 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main()
+int main(int, char**)
 {
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp b/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp
index b0a4144..57350f1 100644
--- a/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.invoke/invoke.pass.cpp
@@ -340,9 +340,11 @@
     }
 }
 
-int main() {
+int main(int, char**) {
     bullet_one_two_tests();
     bullet_three_four_tests();
     bullet_five_tests();
     noexcept_test();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp b/libcxx/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp
index f7f63a0..b040465 100644
--- a/libcxx/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.invoke/invoke_feature_test_macro.pass.cpp
@@ -31,8 +31,10 @@
 
 int foo(int) { return 42; }
 
-int main() {
+int main(int, char**) {
 #if defined(__cpp_lib_invoke)
   assert(std::invoke(foo, 101) == 42);
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.memfn/member_data.fail.cpp b/libcxx/test/std/utilities/function.objects/func.memfn/member_data.fail.cpp
index 483f7a3..130644f 100644
--- a/libcxx/test/std/utilities/function.objects/func.memfn/member_data.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.memfn/member_data.fail.cpp
@@ -35,7 +35,9 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test(std::mem_fn(&A::data_));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.memfn/member_data.pass.cpp b/libcxx/test/std/utilities/function.objects/func.memfn/member_data.pass.cpp
index 75211ba..5258188 100644
--- a/libcxx/test/std/utilities/function.objects/func.memfn/member_data.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.memfn/member_data.pass.cpp
@@ -36,7 +36,9 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test(std::mem_fn(&A::data_));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.memfn/member_function.pass.cpp b/libcxx/test/std/utilities/function.objects/func.memfn/member_function.pass.cpp
index a04e49e..a271c06 100644
--- a/libcxx/test/std/utilities/function.objects/func.memfn/member_function.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.memfn/member_function.pass.cpp
@@ -65,7 +65,7 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test0(std::mem_fn(&A::test0));
     test1(std::mem_fn(&A::test1));
@@ -73,4 +73,6 @@
 #if TEST_STD_VER >= 11
     static_assert((noexcept(std::mem_fn(&A::test0))), ""); // LWG#2489
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const.pass.cpp b/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const.pass.cpp
index 9ea6531..dc93196 100644
--- a/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const.pass.cpp
@@ -69,9 +69,11 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test0(std::mem_fn(&A::test0));
     test1(std::mem_fn(&A::test1));
     test2(std::mem_fn(&A::test2));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp b/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp
index 9258c0a..594e1de 100644
--- a/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp
@@ -69,9 +69,11 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test0(std::mem_fn(&A::test0));
     test1(std::mem_fn(&A::test1));
     test2(std::mem_fn(&A::test2));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp b/libcxx/test/std/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp
index c22baec..0443938 100644
--- a/libcxx/test/std/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp
@@ -69,9 +69,11 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test0(std::mem_fn(&A::test0));
     test1(std::mem_fn(&A::test1));
     test2(std::mem_fn(&A::test2));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.not_fn/not_fn.pass.cpp b/libcxx/test/std/utilities/function.objects/func.not_fn/not_fn.pass.cpp
index c3adbf7..a1c7784 100644
--- a/libcxx/test/std/utilities/function.objects/func.not_fn/not_fn.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.not_fn/not_fn.pass.cpp
@@ -602,7 +602,7 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     constructor_tests();
     return_type_tests();
@@ -612,4 +612,6 @@
     call_operator_forwarding_test();
     call_operator_noexcept_test();
     test_lwg2767();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.require/INVOKE_tested_elsewhere.pass.cpp b/libcxx/test/std/utilities/function.objects/func.require/INVOKE_tested_elsewhere.pass.cpp
index 2bb9cb5..00b7d53 100644
--- a/libcxx/test/std/utilities/function.objects/func.require/INVOKE_tested_elsewhere.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.require/INVOKE_tested_elsewhere.pass.cpp
@@ -12,4 +12,6 @@
 // since they require calling the implementation specific "__invoke" and
 // "__invoke_constexpr" functions.
 
-int main() {}
+int main(int, char**) {
+  return 0;
+}
diff --git a/libcxx/test/std/utilities/function.objects/func.require/binary_function.pass.cpp b/libcxx/test/std/utilities/function.objects/func.require/binary_function.pass.cpp
index 76ba44f..79a4855 100644
--- a/libcxx/test/std/utilities/function.objects/func.require/binary_function.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.require/binary_function.pass.cpp
@@ -15,10 +15,12 @@
 #include <functional>
 #include <type_traits>
 
-int main()
+int main(int, char**)
 {
     typedef std::binary_function<int, short, bool> bf;
     static_assert((std::is_same<bf::first_argument_type, int>::value), "");
     static_assert((std::is_same<bf::second_argument_type, short>::value), "");
     static_assert((std::is_same<bf::result_type, bool>::value), "");
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.require/unary_function.pass.cpp b/libcxx/test/std/utilities/function.objects/func.require/unary_function.pass.cpp
index 0d178b0..f68b4b3 100644
--- a/libcxx/test/std/utilities/function.objects/func.require/unary_function.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.require/unary_function.pass.cpp
@@ -15,9 +15,11 @@
 #include <functional>
 #include <type_traits>
 
-int main()
+int main(int, char**)
 {
     typedef std::unary_function<int, bool> uf;
     static_assert((std::is_same<uf::argument_type, int>::value), "");
     static_assert((std::is_same<uf::result_type, bool>::value), "");
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/default.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/default.pass.cpp
index 3293a32..55cde8f 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/default.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/default.pass.cpp
@@ -122,7 +122,9 @@
     do_search(Iter1(ij), Iter1(ij+sj), Iter2(ik), Iter2(ik+sk), Iter1(ij+6));
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pass.cpp
index d0ce11b..106b0d3 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pass.cpp
@@ -118,7 +118,9 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pred.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pred.pass.cpp
index 59178deb..be4db4e 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pred.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/hash.pred.pass.cpp
@@ -136,7 +136,9 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/pred.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/pred.pass.cpp
index 7f3e837..3656caa 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/pred.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bm/pred.pass.cpp
@@ -127,7 +127,9 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/default.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/default.pass.cpp
index 04adb17..0b345de 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/default.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/default.pass.cpp
@@ -122,7 +122,9 @@
     do_search(Iter1(ij), Iter1(ij+sj), Iter2(ik), Iter2(ik+sk), Iter1(ij+6));
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pass.cpp
index dca6911..4106c5d 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pass.cpp
@@ -117,7 +117,9 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pred.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pred.pass.cpp
index 6a5c215..757bcc7 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pred.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/hash.pred.pass.cpp
@@ -130,7 +130,9 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/pred.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/pred.pass.cpp
index 27c3d0c..3a20b88 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/pred.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.bmh/pred.pass.cpp
@@ -124,7 +124,9 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
     test2<random_access_iterator<const char*>, random_access_iterator<const char*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pass.cpp
index 098b8ac..eaf5eeb 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pass.cpp
@@ -82,7 +82,7 @@
     do_search(Iter1(ij), Iter1(ij+sj), Iter2(ik), Iter2(ik+sk), Iter1(ij+6));
 }
 
-int main() {
+int main(int, char**) {
     test<forward_iterator<const int*>, forward_iterator<const int*> >();
     test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
     test<forward_iterator<const int*>, random_access_iterator<const int*> >();
@@ -92,4 +92,6 @@
     test<random_access_iterator<const int*>, forward_iterator<const int*> >();
     test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pred.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pred.pass.cpp
index 4b0f016..773336f 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pred.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/func.search.default/default.pred.pass.cpp
@@ -89,7 +89,7 @@
     do_search(Iter1(ih), Iter1(ih+sh), Iter2(ii), Iter2(ii+3), Iter1(ih+3),  sh*3);
 }
 
-int main() {
+int main(int, char**) {
     test<forward_iterator<const int*>, forward_iterator<const int*> >();
     test<forward_iterator<const int*>, bidirectional_iterator<const int*> >();
     test<forward_iterator<const int*>, random_access_iterator<const int*> >();
@@ -99,4 +99,6 @@
     test<random_access_iterator<const int*>, forward_iterator<const int*> >();
     test<random_access_iterator<const int*>, bidirectional_iterator<const int*> >();
     test<random_access_iterator<const int*>, random_access_iterator<const int*> >();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.search/nothing_to_do.pass.cpp b/libcxx/test/std/utilities/function.objects/func.search/nothing_to_do.pass.cpp
index 02fe32e..779762e 100644
--- a/libcxx/test/std/utilities/function.objects/func.search/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.search/nothing_to_do.pass.cpp
@@ -7,6 +7,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main()
+int main(int, char**)
 {
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp
index 2ec1d53..eb223b8 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp
@@ -19,7 +19,9 @@
 #include <functional>
 #include <type_traits>
 
-int main()
+int main(int, char**)
 {
     static_assert((std::is_base_of<std::exception, std::bad_function_call>::value), "");
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp
index 6b6ee8a..3859192 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp
@@ -13,7 +13,9 @@
 #include <functional>
 #include <type_traits>
 
-int main()
+int main(int, char**)
 {
     std::bad_function_call ex;
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.fail.cpp
index 50fb4f1..2a34eff 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.fail.cpp
@@ -18,7 +18,9 @@
 
 struct S : public std::function<void()> { using function::function; };
 
-int main() {
+int main(int, char**) {
    S f1( [](){} );
    S f2(std::allocator_arg, std::allocator<int>{}, f1);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp
index 8c50c28..70f68d2 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/derive_from.pass.cpp
@@ -20,10 +20,12 @@
 using Fn = std::function<void()>;
 struct S : public std::function<void()> { using function::function; };
 
-int main() {
+int main(int, char**) {
     S s( [](){} );
     S f1( s );
 #if TEST_STD_VER <= 14
     S f2(std::allocator_arg, std::allocator<int>{}, s);
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp
index b6dbcab..ec25bdf 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp
@@ -57,7 +57,7 @@
 int g(int) {return 0;}
 int h(int) {return 1;}
 
-int main()
+int main(int, char**)
 {
     assert(globalMemCounter.checkOutstandingNewEq(0));
     {
@@ -132,4 +132,6 @@
     }
     assert(A::count == 0);
     assert(globalMemCounter.checkOutstandingNewEq(0));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp
index 1b55baa..ab5eef3 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp
@@ -17,7 +17,7 @@
 
 int g(int) {return 0;}
 
-int main()
+int main(int, char**)
 {
     {
     std::function<int(int)> f;
@@ -25,4 +25,6 @@
     f = g;
     assert(f);
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp
index c32baeb..fe5d248 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp
@@ -60,7 +60,7 @@
 };
 #endif
 
-int main()
+int main(int, char**)
 {
     assert(globalMemCounter.checkOutstandingNewEq(0));
     {
@@ -111,4 +111,6 @@
         static_assert(!std::is_constructible<Fn, RValueCallable>::value, "");
     }
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
index abff663..f70a208 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp
@@ -63,7 +63,7 @@
 };
 #endif
 
-int main()
+int main(int, char**)
 {
     assert(globalMemCounter.checkOutstandingNewEq(0));
     {
@@ -115,4 +115,6 @@
         static_assert(!std::is_assignable<Fn&, RValueCallable>::value, "");
     }
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_incomplete.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_incomplete.pass.cpp
index 1598486..21c2f21 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_incomplete.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_incomplete.pass.cpp
@@ -58,6 +58,8 @@
   }
 }
 
-int main() {
+int main(int, char**) {
   test_pr34298();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_nullptr.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_nullptr.pass.cpp
index 89b7876..ebea3d0 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_nullptr.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_nullptr.pass.cpp
@@ -239,8 +239,10 @@
     test_imp<int MemData::*, int(MemData&)>();
 }
 
-int main() {
+int main(int, char**) {
     test_func();
     test_mf();
     test_md();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.fail.cpp
index acbeb9f..50a11fb 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.fail.cpp
@@ -18,7 +18,9 @@
 
 #include "min_allocator.h"
 
-int main()
+int main(int, char**)
 {
     std::function<int(int)> f(std::allocator_arg, std::allocator<int>());
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.pass.cpp
index b048109..3b37ce6 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc.pass.cpp
@@ -20,10 +20,12 @@
 
 #include "min_allocator.h"
 
-int main()
+int main(int, char**)
 {
     {
     std::function<int(int)> f(std::allocator_arg, bare_allocator<int>());
     assert(!f);
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.fail.cpp
index bddc927..c31c0a2 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.fail.cpp
@@ -22,7 +22,9 @@
 
 void foo(int) {}
 
-int main()
+int main(int, char**)
 {
     std::function<void(int)> f(std::allocator_arg, std::allocator<int>(), foo);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.pass.cpp
index 4d49434..6fa0d6f 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_F.pass.cpp
@@ -106,7 +106,7 @@
     test_MemFunClass<int(MemFunClass::*)(int, int) const, int(MemFunClass&, int, int)>(alloc);
 }
 
-int main()
+int main(int, char**)
 {
     {
         bare_allocator<DummyClass> bare_alloc;
@@ -126,4 +126,6 @@
     }
 #endif
 
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.fail.cpp
index b6703c0..621588f 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.fail.cpp
@@ -21,9 +21,11 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::function<void(int)> F;
     F f1;
     F f2(std::allocator_arg, std::allocator<int>(), f1);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.pass.cpp
index 39050e6..583ca162 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_function.pass.cpp
@@ -111,7 +111,7 @@
     test_MemFunClass<int(MemFunClass::*)(int, int) const, int(MemFunClass&, int, int)>(alloc);
 }
 
-int main()
+int main(int, char**)
 {
   {
     bare_allocator<DummyClass> alloc;
@@ -121,4 +121,6 @@
     non_default_test_allocator<DummyClass> alloc(42);
     test_for_alloc(alloc);
   }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.fail.cpp
index 32d19eb..52bc528 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.fail.cpp
@@ -20,7 +20,9 @@
 
 #include "min_allocator.h"
 
-int main()
+int main(int, char**)
 {
     std::function<int(int)> f(std::allocator_arg, std::allocator<int>(), nullptr);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.pass.cpp
index 6378a6c..653057f 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_nullptr.pass.cpp
@@ -20,8 +20,10 @@
 
 #include "min_allocator.h"
 
-int main()
+int main(int, char**)
 {
     std::function<int(int)> f(std::allocator_arg, bare_allocator<int>(), nullptr);
     assert(!f);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.fail.cpp
index 558b781..643cad8 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.fail.cpp
@@ -50,10 +50,12 @@
 
 int g(int) { return 0; }
 
-int main()
+int main(int, char**)
 {
     {
         std::function<int(int)> f = A();
         std::function<int(int)> f2(std::allocator_arg, std::allocator<A>(), std::move(f));
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp
index 8f379e3..064046d 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp
@@ -54,7 +54,7 @@
 
 int g(int) { return 0; }
 
-int main()
+int main(int, char**)
 {
     assert(globalMemCounter.checkOutstandingNewEq(0));
     {
@@ -105,4 +105,6 @@
         assert(f2.target<Ptr>());
         assert(f.target<Ptr>()); // f is unchanged because the target is small
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp
index df2a43a..d7b11ae 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp
@@ -48,7 +48,7 @@
 int g2(int, int) { return 2; }
 int g3(int, int, int) { return 3; }
 
-int main() {
+int main(int, char**) {
   assert(globalMemCounter.checkOutstandingNewEq(0));
   {
     std::function<int(int)> f = A();
@@ -134,4 +134,6 @@
     assert(f.target<int (*)(int)>() == 0);
   }
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_move.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_move.pass.cpp
index 9f03ee7..dbbde5c 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_move.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_move.pass.cpp
@@ -50,7 +50,7 @@
 
 int g(int) {return 0;}
 
-int main()
+int main(int, char**)
 {
     assert(globalMemCounter.checkOutstandingNewEq(0));
     {
@@ -161,4 +161,6 @@
         LIBCPP_ASSERT(f.target<Ptr>()); // f is unchanged because the target is small
     }
 #endif  // TEST_STD_VER >= 11
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp
index 06ea4e0..46c14ce 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp
@@ -15,8 +15,10 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     std::function<int(int)> f;
     assert(!f);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/move_reentrant.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/move_reentrant.pass.cpp
index 026cfc2..e15fbbaa 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/move_reentrant.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/move_reentrant.pass.cpp
@@ -33,7 +33,7 @@
 std::function<void()> A::global;
 bool A::cancel = false;
 
-int main()
+int main(int, char**)
 {
   A::global = A();
   assert(A::global.target<A>());
@@ -42,4 +42,6 @@
   A::cancel = true;
   A::global = std::function<void()>(nullptr);
   assert(!A::global.target<A>());
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp
index b685d53..d58e191 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp
@@ -15,8 +15,10 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     std::function<int(int)> f(nullptr);
     assert(!f);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp
index 7a8d3e3..ff81080 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp
@@ -46,7 +46,7 @@
 
 int g(int) {return 0;}
 
-int main()
+int main(int, char**)
 {
     assert(globalMemCounter.checkOutstandingNewEq(0));
     {
@@ -68,4 +68,6 @@
     assert(globalMemCounter.checkOutstandingNewEq(0));
     assert(f.target<int(*)(int)>() == 0);
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign_reentrant.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign_reentrant.pass.cpp
index c4006a7..def8608 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign_reentrant.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign_reentrant.pass.cpp
@@ -33,7 +33,7 @@
 std::function<void()> A::global;
 bool A::cancel = false;
 
-int main()
+int main(int, char**)
 {
   A::global = A();
   assert(A::global.target<A>());
@@ -42,4 +42,6 @@
   A::cancel = true;
   A::global = nullptr;
   assert(!A::global.target<A>());
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp
index 5f91e5c..0f8e051 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp
@@ -39,7 +39,9 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test_int_1();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp
index 7775cad..fb67a3a 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp
@@ -401,7 +401,7 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test_void_0();
     test_int_0();
@@ -409,4 +409,6 @@
     test_int_1();
     test_void_2();
     test_int_2();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/assign_F_alloc.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/assign_F_alloc.pass.cpp
index 5a6f503..8ddd1cd 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/assign_F_alloc.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/assign_F_alloc.pass.cpp
@@ -48,7 +48,7 @@
 
 int A::count = 0;
 
-int main()
+int main(int, char**)
 {
 #if TEST_STD_VER <= 14
     {
@@ -60,4 +60,6 @@
     }
     assert(A::count == 0);
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp
index a75aee3..93997a0 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp
@@ -57,7 +57,7 @@
 int g2(int, int) { return 2; }
 int g3(int, int, int) { return 3; }
 
-int main() {
+int main(int, char**) {
   assert(globalMemCounter.checkOutstandingNewEq(0));
   {
     std::function<int(int)> f1 = A(1);
@@ -189,4 +189,6 @@
   }
   assert(globalMemCounter.checkOutstandingNewEq(0));
   assert(A::count == 0);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp
index c68a1ca..698a461 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp
@@ -27,7 +27,7 @@
 
 int g(int) {return 0;}
 
-int main()
+int main(int, char**)
 {
     {
     std::function<int(int)> f;
@@ -37,4 +37,6 @@
     assert(f != nullptr);
     assert(nullptr != f);
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp
index 7b59b56..d5031ba 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp
@@ -55,7 +55,7 @@
 
 int g(int) {return 0;}
 
-int main()
+int main(int, char**)
 {
     {
     std::function<int(int)> f = A();
@@ -89,4 +89,6 @@
     assert(f.target<int>() == nullptr);
     }
     assert(A::count == 0);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp
index 52d07a4..d9c8fc4 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp
@@ -47,7 +47,7 @@
 
 int g(int) {return 0;}
 
-int main()
+int main(int, char**)
 {
     {
     std::function<int(int)> f = A();
@@ -57,4 +57,6 @@
     std::function<int(int)> f;
     assert(f.target_type() == typeid(void));
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp
index 496dee8..8083ad8 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp
@@ -98,10 +98,12 @@
     static_assert((!has_second_argument_type<F>::value), "" );
 }
 
-int main()
+int main(int, char**)
 {
     test_nullary_function<std::function<int()>, int>();
     test_unary_function  <std::function<double(int)>, double, int>();
     test_binary_function <std::function<double(int, char)>, double, int, char>();
     test_other_function  <std::function<double(int, char, double)>, double>();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp b/libcxx/test/std/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp
index f77636c..1f764da 100644
--- a/libcxx/test/std/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp
@@ -6,6 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-int main()
+int main(int, char**)
 {
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp
index 1b0a1c6..29767a5 100644
--- a/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/logical.operations/logical_and.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::logical_and<int> F;
     const F f = F();
@@ -48,4 +48,6 @@
     constexpr bool bar = std::logical_and<> () (36.0, 36);
     static_assert ( bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp
index 2c0c9f3..e93fd06 100644
--- a/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/logical.operations/logical_not.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::logical_not<int> F;
     const F f = F();
@@ -38,4 +38,6 @@
     constexpr bool bar = std::logical_not<> () (36);
     static_assert ( !bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp
index 497a9d9..abe5365 100644
--- a/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/logical.operations/logical_or.pass.cpp
@@ -16,7 +16,7 @@
 
 #include "test_macros.h"
 
-int main()
+int main(int, char**)
 {
     typedef std::logical_or<int> F;
     const F f = F();
@@ -47,4 +47,6 @@
     constexpr bool bar = std::logical_or<> () (36.0, 36);
     static_assert ( bar, "" );
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/logical.operations/transparent.pass.cpp b/libcxx/test/std/utilities/function.objects/logical.operations/transparent.pass.cpp
index 3aa24c4..eb590b3 100644
--- a/libcxx/test/std/utilities/function.objects/logical.operations/transparent.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/logical.operations/transparent.pass.cpp
@@ -22,7 +22,7 @@
 };
 
 
-int main ()
+int main(int, char**)
 {
     static_assert ( !is_transparent<std::logical_and<int>>::value, "" );
     static_assert ( !is_transparent<std::logical_and<std::string>>::value, "" );
diff --git a/libcxx/test/std/utilities/function.objects/negators/binary_negate.depr_in_cxx17.fail.cpp b/libcxx/test/std/utilities/function.objects/negators/binary_negate.depr_in_cxx17.fail.cpp
index ca8b767..713afc6 100644
--- a/libcxx/test/std/utilities/function.objects/negators/binary_negate.depr_in_cxx17.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/binary_negate.depr_in_cxx17.fail.cpp
@@ -28,7 +28,9 @@
     bool operator()(first_argument_type, second_argument_type) const { return true; }
 };
 
-int main() {
+int main(int, char**) {
     std::binary_negate<Predicate> f((Predicate())); // expected-error{{'binary_negate<Predicate>' is deprecated}}
     (void)f;
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp
index 1e7edcb..41541c1 100644
--- a/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/binary_negate.pass.cpp
@@ -14,7 +14,7 @@
 #include <type_traits>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     typedef std::binary_negate<std::logical_and<int> > F;
     const F f = F(std::logical_and<int>());
@@ -25,4 +25,6 @@
     assert( f(36, 0));
     assert( f(0, 36));
     assert( f(0, 0));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/not1.depr_in_cxx17.fail.cpp b/libcxx/test/std/utilities/function.objects/negators/not1.depr_in_cxx17.fail.cpp
index 9fbe6db6..407cbd4 100644
--- a/libcxx/test/std/utilities/function.objects/negators/not1.depr_in_cxx17.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/not1.depr_in_cxx17.fail.cpp
@@ -27,6 +27,8 @@
     bool operator()(argument_type) const { return true; }
 };
 
-int main() {
+int main(int, char**) {
     std::not1(Predicate()); // expected-error{{'not1<Predicate>' is deprecated}}
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp
index 3326822..07c160a 100644
--- a/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/not1.pass.cpp
@@ -13,9 +13,11 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     typedef std::logical_not<int> F;
     assert(std::not1(F())(36));
     assert(!std::not1(F())(0));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/not2.depr_in_cxx17.fail.cpp b/libcxx/test/std/utilities/function.objects/negators/not2.depr_in_cxx17.fail.cpp
index 032ce34..24178e0 100644
--- a/libcxx/test/std/utilities/function.objects/negators/not2.depr_in_cxx17.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/not2.depr_in_cxx17.fail.cpp
@@ -28,6 +28,8 @@
     bool operator()(first_argument_type, second_argument_type) const { return true; }
 };
 
-int main() {
+int main(int, char**) {
     std::not2(Predicate()); // expected-error{{'not2<Predicate>' is deprecated}}
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp
index 208d33b..d9f3c95 100644
--- a/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/not2.pass.cpp
@@ -13,11 +13,13 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     typedef std::logical_and<int> F;
     assert(!std::not2(F())(36, 36));
     assert( std::not2(F())(36, 0));
     assert( std::not2(F())(0, 36));
     assert( std::not2(F())(0, 0));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/unary_negate.depr_in_cxx17.fail.cpp b/libcxx/test/std/utilities/function.objects/negators/unary_negate.depr_in_cxx17.fail.cpp
index 99cdf13..15a0a27 100644
--- a/libcxx/test/std/utilities/function.objects/negators/unary_negate.depr_in_cxx17.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/unary_negate.depr_in_cxx17.fail.cpp
@@ -27,7 +27,9 @@
     bool operator()(argument_type) const { return true; }
 };
 
-int main() {
+int main(int, char**) {
     std::unary_negate<Predicate> f((Predicate())); // expected-error{{'unary_negate<Predicate>' is deprecated}}
     (void)f;
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp b/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp
index ec00c3e..54fd54f3 100644
--- a/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/negators/unary_negate.pass.cpp
@@ -14,7 +14,7 @@
 #include <type_traits>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     typedef std::unary_negate<std::logical_not<int> > F;
     const F f = F(std::logical_not<int>());
@@ -22,4 +22,6 @@
     static_assert((std::is_same<F::result_type, bool>::value), "" );
     assert(f(36));
     assert(!f(0));
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp
index 5e67db5..c15989f 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp
@@ -30,7 +30,7 @@
 
 void f() {}
 
-int main()
+int main(int, char**)
 {
     void (*fp)() = f;
     test(fp);
@@ -41,4 +41,6 @@
     test(i);
     const int j = 0;
     test(j);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp
index 16ce961..3ef0cdd 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp
@@ -42,7 +42,7 @@
     assert(&r2.get() == &f);
 }
 
-int main()
+int main(int, char**)
 {
     void (*fp)() = f;
     test(fp);
@@ -53,4 +53,6 @@
     test(i);
     const int j = 0;
     test(j);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp
index 64726b5..355047d 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp
@@ -30,7 +30,7 @@
 
 void f() {}
 
-int main()
+int main(int, char**)
 {
     void (*fp)() = f;
     test(fp);
@@ -41,4 +41,6 @@
     test(i);
     const int j = 0;
     test(j);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
index f7a6670..f02a997 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp
@@ -17,7 +17,9 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     std::reference_wrapper<const int> r(3);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp
index 2cbb1a0..a43d0fd 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp
@@ -29,7 +29,7 @@
 
 void f() {}
 
-int main()
+int main(int, char**)
 {
     void (*fp)() = f;
     test(fp);
@@ -40,4 +40,6 @@
     test(i);
     const int j = 0;
     test(j);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp
index b16a4b4..d4cb421 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp
@@ -15,9 +15,11 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     int i = 0;
     std::reference_wrapper<const int> r = std::cref(i);
     assert(&r.get() == &i);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp
index 3023f8d..093b7e2 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp
@@ -15,10 +15,12 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     const int i = 0;
     std::reference_wrapper<const int> r1 = std::cref(i);
     std::reference_wrapper<const int> r2 = std::cref(r1);
     assert(&r2.get() == &i);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
index 9e283d1..c07028d 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp
@@ -22,7 +22,9 @@
 
 const A source() {return A();}
 
-int main()
+int main(int, char**)
 {
     std::reference_wrapper<const A> r = std::ref(source());
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp
index a8af5aa..f64d8ad 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp
@@ -15,9 +15,11 @@
 #include <functional>
 #include <cassert>
 
-int main()
+int main(int, char**)
 {
     int i = 0;
     std::reference_wrapper<int> r = std::ref(i);
     assert(&r.get() == &i);
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp
index fee5009..4fdaf99 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp
@@ -22,7 +22,7 @@
 template <typename T>
 bool call_pred ( T pred ) { return pred(5); }
 
-int main()
+int main(int, char**)
 {
     {
     int i = 0;
@@ -39,4 +39,6 @@
     assert(call_pred(std::ref(cp)));
     assert(cp.count() == 2);
     }
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp
index 6302c51..d54d518 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp
@@ -45,7 +45,9 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test_int_1();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp
index 425bc6d..fd31041 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp
@@ -319,10 +319,12 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test_void_1();
     test_int_1();
     test_void_2();
     testint_2();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp
index 37d7cfc..67cf51f 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp
@@ -69,7 +69,9 @@
     }
 };
 
-int main()
+int main(int, char**)
 {
     test_int_0();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp
index 735bfd8..18e6553 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp
@@ -61,7 +61,9 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test_void_0();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/type.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/type.pass.cpp
index ef46e15..d17ab81 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/type.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/type.pass.cpp
@@ -17,7 +17,7 @@
 
 class C {};
 
-int main()
+int main(int, char**)
 {
     static_assert((std::is_same<std::reference_wrapper<C>::type,
                                                        C>::value), "");
@@ -33,4 +33,6 @@
                                                        int*(C::*)(double*)>::value), "");
     static_assert((std::is_same<std::reference_wrapper<int (C::*)(double*) const volatile>::type,
                                                        int (C::*)(double*) const volatile>::value), "");
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp
index 14a06a9..17eef26 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/type_properties.pass.cpp
@@ -52,7 +52,7 @@
 #endif
 }
 
-int main()
+int main(int, char**)
 {
     test<int>();
     test<double>();
@@ -60,4 +60,6 @@
 #if TEST_STD_VER >= 11
     test<MoveOnly>();
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/unwrap_ref_decay.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/unwrap_ref_decay.pass.cpp
index 9aaa282..1987898 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/unwrap_ref_decay.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/unwrap_ref_decay.pass.cpp
@@ -28,7 +28,7 @@
 
 struct T { };
 
-int main() {
+int main(int, char**) {
   check<T,             T>();
   check<T&,            T>();
   check<T const,       T>();
@@ -54,4 +54,6 @@
   check<std::reference_wrapper<T[3]>&,     T (&)[3]>();
   check<std::reference_wrapper<T ()>,      T (&)()>();
   check<std::reference_wrapper<T ()>&,     T (&)()>();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp
index f6d48a5..209d5e2 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/unwrap_reference.pass.cpp
@@ -39,7 +39,7 @@
 
 struct T { };
 
-int main() {
+int main(int, char**) {
   check<T>();
   check<int>();
   check<float>();
@@ -47,4 +47,6 @@
   check<T*>();
   check<int*>();
   check<float*>();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/refwrap/weak_result.pass.cpp b/libcxx/test/std/utilities/function.objects/refwrap/weak_result.pass.cpp
index 50cda11..5a6a41f 100644
--- a/libcxx/test/std/utilities/function.objects/refwrap/weak_result.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/refwrap/weak_result.pass.cpp
@@ -68,7 +68,7 @@
     static const bool value = sizeof(test<T>(0)) == 1;
 };
 
-int main()
+int main(int, char**)
 {
     static_assert((std::is_same<std::reference_wrapper<functor1>::result_type,
                                 char>::value), "");
@@ -93,4 +93,6 @@
     static_assert(has_result_type<std::reference_wrapper<functor3> >::value, "");
     static_assert(!has_result_type<std::reference_wrapper<functor4> >::value, "");
     static_assert(!has_result_type<std::reference_wrapper<C> >::value, "");
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/enabled_hashes.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/enabled_hashes.pass.cpp
index 90ab8e1..8f6c3e1 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/enabled_hashes.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/enabled_hashes.pass.cpp
@@ -17,6 +17,8 @@
 
 #include "poisoned_hash_helper.hpp"
 
-int main() {
+int main(int, char**) {
   test_library_hash_specializations_available();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/enum.fail.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/enum.fail.cpp
index b824b51..2e36b4c 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/enum.fail.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/enum.fail.cpp
@@ -16,8 +16,10 @@
 
 struct X {};
 
-int main()
+int main(int, char**)
 {
     X x;
     size_t h = std::hash<X>{} ( x );
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp
index 96c667f..e172bc2 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/enum.pass.cpp
@@ -49,7 +49,7 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test<Cardinals>();
 
@@ -59,4 +59,6 @@
     test<EightBitColors>();
 
     test<Fruits>();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp
index 1ab1643..31b1b2d 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/floating.pass.cpp
@@ -64,9 +64,11 @@
     assert(pinf != ninf);
 }
 
-int main()
+int main(int, char**)
 {
     test<float>();
     test<double>();
     test<long double>();
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp
index 761c76d..dbd44a8 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/integral.pass.cpp
@@ -46,7 +46,7 @@
     }
 }
 
-int main()
+int main(int, char**)
 {
     test<bool>();
     test<char>();
@@ -108,4 +108,6 @@
     test<__int128_t>();
     test<__uint128_t>();
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/non_enum.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/non_enum.pass.cpp
index 6efcebc..c47f8fa 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/non_enum.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/non_enum.pass.cpp
@@ -22,7 +22,7 @@
 
 struct X {};
 
-int main()
+int main(int, char**)
 {
     using H = std::hash<X>;
     static_assert(!std::is_default_constructible<H>::value, "");
@@ -34,4 +34,6 @@
     static_assert(!std::is_invocable<H, X&>::value, "");
     static_assert(!std::is_invocable<H, X const&>::value, "");
 #endif
+
+  return 0;
 }
diff --git a/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp b/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp
index cbf2c73..17dfdce 100644
--- a/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp
+++ b/libcxx/test/std/utilities/function.objects/unord.hash/pointer.pass.cpp
@@ -52,8 +52,10 @@
 #endif
 }
 
-int main()
+int main(int, char**)
 {
     test<int*>();
     test_nullptr();
+
+  return 0;
 }