// File: halfflat[P]tinyopt/test/googletest/googletest/src/gtest.cc
// Function: testing::AssertionResult testing::(anonymous namespace)::IsSubstringImpl<char const*>(bool, char const*, char const*, char const* const&, char const* const&)
AssertionResult IsSubstringImpl(bool expected_to_be_substring,
                                const char* needle_expr,
                                const char* haystack_expr,
                                const StringType& needle,
                                const StringType& haystack) {
  if (IsSubstringPred(needle, haystack) == expected_to_be_substring)
    return AssertionSuccess();

  const bool is_wide_string = sizeof(needle[0]) > 1;
  const char* const begin_string_quote = is_wide_string ? "L\"" : "\"";
  return AssertionFailure()
         << "Value of: " << needle_expr << "\n"
         << "  Actual: " << begin_string_quote << needle << "\"\n"
         << "Expected: " << (expected_to_be_substring ? "" : "not ")
         << "a substring of " << haystack_expr << "\n"
         << "Which is: " << begin_string_quote << haystack << "\"";
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdi, -0x78(%rbp)
movb %sil, %al
movq %rdi, %rsi
movq %rsi, -0x70(%rbp)
movq %rdi, -0x8(%rbp)
andb $0x1, %al
movb %al, -0x9(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x30(%rbp), %rax
movq (%rax), %rsi
callq 0x9ff60
andb $0x1, %al
movzbl %al, %eax
movb -0x9(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x86d25
movq -0x78(%rbp), %rdi
callq 0x75c30
jmp 0x86f39
movb $0x0, -0x31(%rbp)
leaq 0x4839c(%rip), %rax     # 0xcf0cc
movq %rax, -0x40(%rbp)
leaq -0x50(%rbp), %rdi
movq %rdi, -0x88(%rbp)
callq 0x75c60
movq -0x88(%rbp), %rdi
leaq 0x477d6(%rip), %rsi     # 0xce528
callq 0xb1300
movq %rax, -0x80(%rbp)
jmp 0x86d5d
movq -0x80(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0x90(%rbp)
jmp 0x86d73
movq -0x90(%rbp), %rdi
leaq 0x44675(%rip), %rsi     # 0xcb3f6
callq 0xa65c0
movq %rax, -0x98(%rbp)
jmp 0x86d8f
movq -0x98(%rbp), %rdi
leaq 0x42d2a(%rip), %rsi     # 0xc9ac7
callq 0xb1300
movq %rax, -0xa0(%rbp)
jmp 0x86dab
movq -0xa0(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0xa8(%rbp)
jmp 0x86dc4
movq -0xa8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0xb0(%rbp)
jmp 0x86ddd
movq -0xb0(%rbp), %rdi
leaq 0x482f4(%rip), %rsi     # 0xcf0df
callq 0xa62c0
movq %rax, -0xb8(%rbp)
jmp 0x86df9
movq -0xb8(%rbp), %rdi
leaq 0x4772d(%rip), %rsi     # 0xce534
callq 0xb1300
movq %rax, -0xc0(%rbp)
jmp 0x86e15
movq -0xc0(%rbp), %rdi
movb -0x9(%rbp), %dl
leaq 0x444e1(%rip), %rcx     # 0xcb307
leaq 0x492af(%rip), %rax     # 0xd00dc
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, -0x68(%rbp)
leaq -0x68(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0xc8(%rbp)
jmp 0x86e4a
movq -0xc8(%rbp), %rdi
leaq 0x49289(%rip), %rsi     # 0xd00e1
callq 0xbf1e0
movq %rax, -0xd0(%rbp)
jmp 0x86e66
movq -0xd0(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0xd8(%rbp)
jmp 0x86e7f
movq -0xd8(%rbp), %rdi
leaq 0x44569(%rip), %rsi     # 0xcb3f6
callq 0xa65c0
movq %rax, -0xe0(%rbp)
jmp 0x86e9b
movq -0xe0(%rbp), %rdi
leaq 0x47658(%rip), %rsi     # 0xce501
callq 0xb1300
movq %rax, -0xe8(%rbp)
jmp 0x86eb7
movq -0xe8(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0xf0(%rbp)
jmp 0x86ed0
movq -0xf0(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0xa5fc0
movq %rax, -0xf8(%rbp)
jmp 0x86ee9
movq -0xf8(%rbp), %rdi
leaq 0x481d5(%rip), %rsi     # 0xcf0cc
callq 0xa65c0
movq %rax, -0x100(%rbp)
jmp 0x86f05
movq -0x100(%rbp), %rsi
movq -0x78(%rbp), %rdi
callq 0x75a60
jmp 0x86f17
leaq -0x50(%rbp), %rdi
callq 0x1d520
jmp 0x86f39
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x1d520
jmp 0x86f46
movq -0x70(%rbp), %rax
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x58(%rbp), %rdi
callq 0x10e00
nop