// File: halfflat[P]tinyopt/test/googletest/googletest/include/gtest/gtest.h
// Function: testing::TestInfo* testing::RegisterTest<testing::internal::TypeParameterizedTestSuiteRegistry::CheckForInstantiations()::$_0>(char const*, char const*, char const*, char const*, char const*, int, testing::internal::TypeParameterizedTestSuiteRegistry::CheckForInstantiations()::$_0)
TestInfo* RegisterTest(const char* test_suite_name, const char* test_name,
                       const char* type_param, const char* value_param,
                       const char* file, int line, Factory factory) {
  using TestT = typename std::remove_pointer<decltype(factory())>::type;

  class FactoryImpl : public internal::TestFactoryBase {
   public:
    explicit FactoryImpl(Factory f) : factory_(std::move(f)) {}
    Test* CreateTest() override { return factory_(); }

   private:
    Factory factory_;
  };

  return internal::MakeAndRegisterTestInfo(
      test_suite_name, test_name, type_param, value_param,
      internal::CodeLocation(file, line), internal::GetTypeId<TestT>(),
      internal::SuiteApiResolver<TestT>::GetSetUpCaseOrSuite(file, line),
      internal::SuiteApiResolver<TestT>::GetTearDownCaseOrSuite(file, line),
      new FactoryImpl{std::move(factory)});
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
movq 0x10(%rbp), %rax
movq %rax, -0x140(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movl %r9d, -0x2c(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x118(%rbp)
leaq -0x79(%rbp), %rdi
movq %rdi, -0x110(%rbp)
callq 0x10e10
movq -0x118(%rbp), %rsi
movq -0x110(%rbp), %rdx
leaq -0x78(%rbp), %rdi
callq 0x1d070
jmp 0x81abe
movl -0x2c(%rbp), %edx
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x1d120
jmp 0x81ad0
callq 0x9f6c0
movq %rax, -0x150(%rbp)
movq -0x28(%rbp), %rdi
movl -0x2c(%rbp), %esi
callq 0x9f6d0
movq %rax, -0x148(%rbp)
jmp 0x81af1
movq -0x28(%rbp), %rdi
movl -0x2c(%rbp), %esi
callq 0x9f810
movq %rax, -0x158(%rbp)
jmp 0x81b06
movl $0x78, %edi
callq 0x10740
movq %rax, -0x160(%rbp)
jmp 0x81b19
movq -0x140(%rbp), %rsi
movb $0x1, -0x101(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x9fd40
jmp 0x81b35
movq -0x160(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x9fda0
jmp 0x81b4a
movq -0x150(%rbp), %r9
movq -0x120(%rbp), %rcx
movq -0x128(%rbp), %rdx
movq -0x130(%rbp), %rsi
movq -0x138(%rbp), %rdi
movq -0x148(%rbp), %r8
movq -0x158(%rbp), %r10
movq -0x160(%rbp), %r11
movb $0x0, -0x101(%rbp)
movq %rsp, %rax
movq %r11, 0x10(%rax)
movq %r10, 0x8(%rax)
movq %r8, (%rax)
leaq -0x58(%rbp), %r8
callq 0x89e60
movq %rax, -0x168(%rbp)
jmp 0x81ba9
leaq -0x100(%rbp), %rdi
callq 0x81ca0
leaq -0x58(%rbp), %rdi
callq 0x1d430
leaq -0x78(%rbp), %rdi
callq 0x10fc8
leaq -0x79(%rbp), %rdi
callq 0x10810
movq -0x168(%rbp), %rax
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x81c81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x81c78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x81c6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x81c51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x81ca0
testb $0x1, -0x101(%rbp)
jne 0x81c5c
jmp 0x81c6d
movq -0x160(%rbp), %rdi
movl $0x78, %esi
callq 0x10770
jmp 0x81c6f
leaq -0x58(%rbp), %rdi
callq 0x1d430
leaq -0x78(%rbp), %rdi
callq 0x10fc8
leaq -0x79(%rbp), %rdi
callq 0x10810
movq -0x88(%rbp), %rdi
callq 0x10e00
nopw %cs:(%rax,%rax)