Split any_invocable_test to avoid GCC OOM compiler crashes in CMake builds.

PiperOrigin-RevId: 936797574
Change-Id: Ib1305a79390d961ee646925dcaae7ecf44f1ea21
diff --git a/absl/functional/BUILD.bazel b/absl/functional/BUILD.bazel
index 5e85523..d61eef6 100644
--- a/absl/functional/BUILD.bazel
+++ b/absl/functional/BUILD.bazel
@@ -53,7 +53,9 @@
 cc_test(
     name = "any_invocable_test",
     srcs = [
-        "any_invocable_test.cc",
+        "any_invocable_test.h",
+        "any_invocable_test_inst1.cc",
+        "any_invocable_test_inst2.cc",
         "internal/any_invocable.h",
     ],
     copts = ABSL_TEST_COPTS,
diff --git a/absl/functional/CMakeLists.txt b/absl/functional/CMakeLists.txt
index 362c149..03a7596 100644
--- a/absl/functional/CMakeLists.txt
+++ b/absl/functional/CMakeLists.txt
@@ -36,8 +36,9 @@
   NAME
     any_invocable_test
   SRCS
-    "any_invocable_test.cc"
-    "internal/any_invocable.h"
+    "any_invocable_test.h"
+    "any_invocable_test_inst1.cc"
+    "any_invocable_test_inst2.cc"
   COPTS
     ${ABSL_TEST_COPTS}
   DEPS
diff --git a/absl/functional/any_invocable_test.cc b/absl/functional/any_invocable_test.h
similarity index 91%
rename from absl/functional/any_invocable_test.cc
rename to absl/functional/any_invocable_test.h
index 1ad6d7b..868ac88 100644
--- a/absl/functional/any_invocable_test.cc
+++ b/absl/functional/any_invocable_test.h
@@ -12,6 +12,17 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+// To prevent compiler memory exhaustion (OOM / Killed signal terminates
+// cc1plus) during parallel builds with GCC, the test suite instantiations have
+// been split into two separate compilation units: any_invocable_test_inst1.cc
+// and any_invocable_test_inst2.cc. The test definitions remain here in this
+// header.
+
+// SKIP_ABSL_INLINE_NAMESPACE_CHECK
+
+#ifndef ABSL_FUNCTIONAL_ANY_INVOCABLE_TEST_H_
+#define ABSL_FUNCTIONAL_ANY_INVOCABLE_TEST_H_
+
 #include "absl/functional/any_invocable.h"
 
 #include <cstddef>
@@ -33,7 +44,7 @@
               "These tests assume that the small object storage is at least "
               "the size of a pointer.");
 
-namespace {
+namespace absl_any_invocable_test {
 
 // A dummy type we use when passing qualifiers to metafunctions
 struct _ {};
@@ -283,11 +294,15 @@
 };
 
 // Actual non-member functions rather than function objects
-Int add_function(Int&& a, int b, int c) noexcept { return a.value + b + c; }
+inline Int add_function(Int&& a, int b, int c) noexcept {
+  return a.value + b + c;
+}
 
-Int mult_function(Int&& a, int b, int c) noexcept { return a.value * b * c; }
+inline Int mult_function(Int&& a, int b, int c) noexcept {
+  return a.value * b * c;
+}
 
-Int square_function(Int const&& a) noexcept { return a.value * a.value; }
+inline Int square_function(Int const&& a) noexcept { return a.value * a.value; }
 
 template <class Sig>
 using AnyInvocable = absl::AnyInvocable<Sig>;
@@ -1525,24 +1540,6 @@
     MoveConstructionFromNonEmpty, ComparisonWithNullptrEmpty,
     ComparisonWithNullptrNonempty, ResultType);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(
-    NonRvalueCallMayThrow, AnyInvTestBasic,
-    TestParameterListNonRvalueQualifiersCallMayThrow);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestBasic,
-                               TestParameterListRvalueQualifiersCallMayThrow);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestBasic,
-                               TestParameterListRemoteMovable);
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestBasic,
-                               TestParameterListRemoteNonMovable);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestBasic, TestParameterListLocal);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestBasic,
-                               TestParameterListNonRvalueQualifiersNothrowCall);
-INSTANTIATE_TYPED_TEST_SUITE_P(CallNothrowRvalue, AnyInvTestBasic,
-                               TestParameterListRvalueQualifiersNothrowCall);
-
 // Tests for functions that take two operands.
 REGISTER_TYPED_TEST_SUITE_P(
     AnyInvTestCombinatoric, MoveAssignEmptyEmptyLhsRhs,
@@ -1562,25 +1559,6 @@
     SwapEmptyLhsNonemptyRhs, SwapNonemptyLhsEmptyRhs,
     SwapNonemptyLhsNonemptyRhs);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(
-    NonRvalueCallMayThrow, AnyInvTestCombinatoric,
-    TestParameterListNonRvalueQualifiersCallMayThrow);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestCombinatoric,
-                               TestParameterListRvalueQualifiersCallMayThrow);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestCombinatoric,
-                               TestParameterListRemoteMovable);
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestCombinatoric,
-                               TestParameterListRemoteNonMovable);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestCombinatoric,
-                               TestParameterListLocal);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestCombinatoric,
-                               TestParameterListNonRvalueQualifiersNothrowCall);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallNothrow, AnyInvTestCombinatoric,
-                               TestParameterListRvalueQualifiersNothrowCall);
-
 REGISTER_TYPED_TEST_SUITE_P(AnyInvTestMovable,
                             ConversionConstructionUserDefinedType,
                             ConversionConstructionVoidCovariance,
@@ -1588,71 +1566,20 @@
                             ConversionAssignUserDefinedTypeNonemptyLhs,
                             ConversionAssignVoidCovariance);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(
-    NonRvalueCallMayThrow, AnyInvTestMovable,
-    TestParameterListNonRvalueQualifiersCallMayThrow);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestMovable,
-                               TestParameterListRvalueQualifiersCallMayThrow);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestMovable,
-                               TestParameterListRemoteMovable);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestMovable,
-                               TestParameterListLocal);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestMovable,
-                               TestParameterListNonRvalueQualifiersNothrowCall);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallNothrow, AnyInvTestMovable,
-                               TestParameterListRvalueQualifiersNothrowCall);
-
 REGISTER_TYPED_TEST_SUITE_P(AnyInvTestNoexceptFalse,
                             ConversionConstructionConstraints,
                             ConversionAssignConstraints);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(
-    NonRvalueCallMayThrow, AnyInvTestNoexceptFalse,
-    TestParameterListNonRvalueQualifiersCallMayThrow);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestNoexceptFalse,
-                               TestParameterListRvalueQualifiersCallMayThrow);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestNoexceptFalse,
-                               TestParameterListRemoteMovable);
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestNoexceptFalse,
-                               TestParameterListRemoteNonMovable);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestNoexceptFalse,
-                               TestParameterListLocal);
-
 REGISTER_TYPED_TEST_SUITE_P(AnyInvTestNoexceptTrue,
                             ConversionConstructionConstraints,
                             ConversionAssignConstraints);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestNoexceptTrue,
-                               TestParameterListNonRvalueQualifiersNothrowCall);
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallNothrow, AnyInvTestNoexceptTrue,
-                               TestParameterListRvalueQualifiersNothrowCall);
-
 REGISTER_TYPED_TEST_SUITE_P(AnyInvTestNonRvalue,
                             ConversionConstructionReferenceWrapper,
                             NonMoveableResultType,
                             ConversionAssignReferenceWrapperEmptyLhs,
                             ConversionAssignReferenceWrapperNonemptyLhs);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(
-    NonRvalueCallMayThrow, AnyInvTestNonRvalue,
-    TestParameterListNonRvalueQualifiersCallMayThrow);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestNonRvalue,
-                               TestParameterListRemoteMovable);
-INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestNonRvalue,
-                               TestParameterListRemoteNonMovable);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestNonRvalue,
-                               TestParameterListLocal);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestNonRvalue,
-                               TestParameterListNonRvalueQualifiersNothrowCall);
-
 REGISTER_TYPED_TEST_SUITE_P(AnyInvTestRvalue,
                             ConversionConstructionReferenceWrapper,
                             NonMoveableResultType,
@@ -1660,16 +1587,12 @@
                             NonConstCrashesOnSecondCall,
                             QualifierIndependentObjectLifetime);
 
-INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestRvalue,
-                               TestParameterListRvalueQualifiersCallMayThrow);
-
-INSTANTIATE_TYPED_TEST_SUITE_P(CallNothrowRvalue, AnyInvTestRvalue,
-                               TestParameterListRvalueQualifiersNothrowCall);
-
 // Minimal SFINAE testing for platforms where we can't run the tests, but we can
 // build binaries for.
 static_assert(std::is_convertible_v<void (*)(), absl::AnyInvocable<void() &&>>,
               "");
 static_assert(!std::is_convertible_v<void*, absl::AnyInvocable<void() &&>>, "");
 
-}  // namespace
+}  // namespace absl_any_invocable_test
+
+#endif  // ABSL_FUNCTIONAL_ANY_INVOCABLE_TEST_H_
diff --git a/absl/functional/any_invocable_test_inst1.cc b/absl/functional/any_invocable_test_inst1.cc
new file mode 100644
index 0000000..a15722a
--- /dev/null
+++ b/absl/functional/any_invocable_test_inst1.cc
@@ -0,0 +1,117 @@
+// Copyright 2022 The Abseil Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// To prevent compiler memory exhaustion (OOM / Killed signal terminates
+// cc1plus) during parallel builds with GCC, the test suite instantiations have
+// been split into two separate compilation units: any_invocable_test_inst1.cc
+// and any_invocable_test_inst2.cc.
+
+// SKIP_ABSL_INLINE_NAMESPACE_CHECK
+
+#include "absl/functional/any_invocable_test.h"
+
+namespace absl_any_invocable_test {
+
+INSTANTIATE_TYPED_TEST_SUITE_P(
+    NonRvalueCallMayThrow, AnyInvTestBasic,
+    TestParameterListNonRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestBasic,
+                               TestParameterListRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestBasic,
+                               TestParameterListRemoteNonMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestBasic, TestParameterListLocal);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestBasic,
+                               TestParameterListNonRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(CallNothrowRvalue, AnyInvTestBasic,
+                               TestParameterListRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(
+    NonRvalueCallMayThrow, AnyInvTestCombinatoric,
+    TestParameterListNonRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestCombinatoric,
+                               TestParameterListRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestCombinatoric,
+                               TestParameterListRemoteNonMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestCombinatoric,
+                               TestParameterListLocal);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestCombinatoric,
+                               TestParameterListNonRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallNothrow, AnyInvTestCombinatoric,
+                               TestParameterListRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(
+    NonRvalueCallMayThrow, AnyInvTestMovable,
+    TestParameterListNonRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestMovable,
+                               TestParameterListRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestMovable,
+                               TestParameterListLocal);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestMovable,
+                               TestParameterListNonRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallNothrow, AnyInvTestMovable,
+                               TestParameterListRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(
+    NonRvalueCallMayThrow, AnyInvTestNoexceptFalse,
+    TestParameterListNonRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestNoexceptFalse,
+                               TestParameterListRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestNoexceptFalse,
+                               TestParameterListRemoteNonMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestNoexceptFalse,
+                               TestParameterListLocal);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestNoexceptTrue,
+                               TestParameterListNonRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallNothrow, AnyInvTestNoexceptTrue,
+                               TestParameterListRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(
+    NonRvalueCallMayThrow, AnyInvTestNonRvalue,
+    TestParameterListNonRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteNonMovable, AnyInvTestNonRvalue,
+                               TestParameterListRemoteNonMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(Local, AnyInvTestNonRvalue,
+                               TestParameterListLocal);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(NonRvalueCallNothrow, AnyInvTestNonRvalue,
+                               TestParameterListNonRvalueQualifiersNothrowCall);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RvalueCallMayThrow, AnyInvTestRvalue,
+                               TestParameterListRvalueQualifiersCallMayThrow);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(CallNothrowRvalue, AnyInvTestRvalue,
+                               TestParameterListRvalueQualifiersNothrowCall);
+
+}  // namespace absl_any_invocable_test
diff --git a/absl/functional/any_invocable_test_inst2.cc b/absl/functional/any_invocable_test_inst2.cc
new file mode 100644
index 0000000..366e1d2
--- /dev/null
+++ b/absl/functional/any_invocable_test_inst2.cc
@@ -0,0 +1,41 @@
+// Copyright 2022 The Abseil Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// To prevent compiler memory exhaustion (OOM / Killed signal terminates
+// cc1plus) during parallel builds with GCC, the test suite instantiations have
+// been split into two separate compilation units: any_invocable_test_inst1.cc
+// and any_invocable_test_inst2.cc.
+
+// SKIP_ABSL_INLINE_NAMESPACE_CHECK
+
+#include "absl/functional/any_invocable_test.h"
+
+namespace absl_any_invocable_test {
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestBasic,
+                               TestParameterListRemoteMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestCombinatoric,
+                               TestParameterListRemoteMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestMovable,
+                               TestParameterListRemoteMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestNoexceptFalse,
+                               TestParameterListRemoteMovable);
+
+INSTANTIATE_TYPED_TEST_SUITE_P(RemoteMovable, AnyInvTestNonRvalue,
+                               TestParameterListRemoteMovable);
+
+}  // namespace absl_any_invocable_test