// File: halfflat[P]tinyopt/test/googletest/googletest/src/gtest.cc
// Function: testing::internal::TypeParameterizedTestSuiteRegistry::CheckForInstantiations()
void TypeParameterizedTestSuiteRegistry::CheckForInstantiations() {
  const auto& ignored = *GetIgnoredParameterizedTestSuites();
  for (const auto& testcase : suites_) {
    if (testcase.second.instantiated) continue;
    if (ignored.find(testcase.first) != ignored.end()) continue;

    std::string message =
        "Type parameterized test suite " + testcase.first +
        " is defined via REGISTER_TYPED_TEST_SUITE_P, but never instantiated "
        "via INSTANTIATE_TYPED_TEST_SUITE_P. None of the test cases will run."
        "\n\n"
        "Ideally, TYPED_TEST_P definitions should only ever be included as "
        "part of binaries that intend to use them. (As opposed to, for "
        "example, being placed in a library that may be linked in to get "
        "other "
        "utilities.)"
        "\n\n"
        "To suppress this error for this test suite, insert the following "
        "line "
        "(in a non-header) in the namespace it is defined in:"
        "\n\n"
        "GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(" +
        testcase.first + ");";

    std::string full_name =
        "UninstantiatedTypeParameterizedTestSuite<" + testcase.first + ">";
    RegisterTest(  //
        "GoogleTestVerification", full_name.c_str(),
        nullptr,  // No type parameter.
        nullptr,  // No value parameter.
        testcase.second.code_location.file.c_str(),
        testcase.second.code_location.line, [message, testcase] {
          return new FailureTest(testcase.second.code_location, message,
                                 kErrorOnUninstantiatedTypeParameterizedTest);
        });
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x188(%rbp)
callq 0x80c80
movq %rax, %rcx
movq -0x188(%rbp), %rax
movq %rcx, -0x10(%rbp)
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xa5110
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rdi
callq 0xa50c0
movq %rax, -0x28(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0xa5090
testb $0x1, %al
jne 0x81731
jmp 0x81a0d
leaq -0x20(%rbp), %rdi
callq 0xa5140
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
testb $0x1, 0x48(%rax)
je 0x8174d
jmp 0x81902
movq -0x10(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xa4f00
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rdi
callq 0xa4f30
movq %rax, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xa4ed0
testb $0x1, %al
jne 0x8177e
jmp 0x81783
jmp 0x81902
movq -0x30(%rbp), %rdx
leaq 0x4cade(%rip), %rsi     # 0xce26c
leaq -0xc0(%rbp), %rdi
movq %rdi, -0x190(%rbp)
callq 0x39dc0
movq -0x190(%rbp), %rsi
leaq 0x4cadc(%rip), %rdx     # 0xce28b
leaq -0xa0(%rbp), %rdi
callq 0xa2b40
jmp 0x817bd
movq -0x30(%rbp), %rdx
leaq -0x80(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3c8a0
jmp 0x817d3
leaq 0x4ca2b(%rip), %rdx     # 0xce205
leaq -0x60(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0xa2b40
jmp 0x817e9
leaq -0x80(%rbp), %rdi
callq 0x10fc8
leaq -0xa0(%rbp), %rdi
callq 0x10fc8
leaq -0xc0(%rbp), %rdi
callq 0x10fc8
movq -0x30(%rbp), %rdx
leaq 0x4cc7e(%rip), %rsi     # 0xce493
leaq -0x110(%rbp), %rdi
callq 0x39dc0
jmp 0x81823
leaq 0x4d743(%rip), %rdx     # 0xcef6d
leaq -0xf0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xa2b40
jmp 0x8183f
leaq -0x110(%rbp), %rdi
callq 0x10fc8
leaq -0xf0(%rbp), %rdi
callq 0x102c0
movq %rax, -0x1b0(%rbp)
movq -0x30(%rbp), %rdi
addq $0x20, %rdi
callq 0x102c0
movq %rax, -0x1a8(%rbp)
movq -0x30(%rbp), %rax
movl 0x40(%rax), %eax
movl %eax, -0x19c(%rbp)
leaq -0x180(%rbp), %rdi
movq %rdi, -0x198(%rbp)
leaq -0x60(%rbp), %rsi
callq 0x102f0
jmp 0x81898
leaq -0x160(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xa5160
jmp 0x818aa
movl -0x19c(%rbp), %r9d
movq -0x1a8(%rbp), %r8
movq -0x1b0(%rbp), %rsi
movq %rsp, %rax
leaq -0x180(%rbp), %rcx
movq %rcx, (%rax)
leaq 0x4c95b(%rip), %rdi     # 0xce22e
xorl %eax, %eax
movl %eax, %ecx
movq %rcx, %rdx
callq 0x81a30
jmp 0x818e1
leaq -0x180(%rbp), %rdi
callq 0x81ca0
leaq -0xf0(%rbp), %rdi
callq 0x10fc8
leaq -0x60(%rbp), %rdi
callq 0x10fc8
leaq -0x20(%rbp), %rdi
callq 0xa51c0
jmp 0x8171b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x8195f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x81953
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x10fc8
leaq -0xa0(%rbp), %rdi
callq 0x10fc8
leaq -0xc0(%rbp), %rdi
callq 0x10fc8
jmp 0x81a16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x81a02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x10fc8
jmp 0x81a02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
jmp 0x819f6
movq -0x198(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
callq 0x10fc8
jmp 0x819f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc8(%rbp)
movl %eax, -0xcc(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x81ca0
leaq -0xf0(%rbp), %rdi
callq 0x10fc8
leaq -0x60(%rbp), %rdi
callq 0x10fc8
jmp 0x81a16
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq -0xc8(%rbp), %rdi
callq 0x10e00
nopw %cs:(%rax,%rax)