// File: /workspace/github_cpp_makefile_star2_O2/AMDmi3[P]dangling_ptr/tests/testing.h
// Function: void Tester::ExpectException<dangling::bad_access>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::function<void ()>&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int, Tester::DummyArgument)
void ExpectException(const std::string& expression_str, std::function<void()>&& func, const std::string& exception_str, const std::string& description, int flags, DummyArgument) {
		bool as_expected = false;
		bool thrown = false;
		bool std_exception = false;

		std::string what;

		try {
			func();
		} catch (E&) {
			as_expected = true;
			thrown = true;
		} catch (std::exception& e) {
			thrown = true;
			std_exception = true;
			what = e.what();
		} catch (...) {
			thrown = true;
		}

		std::string message;

		if (thrown && as_expected)
			message = Stylify(EXPRESSION, expression_str) + " has thrown " + Stylify(EXPRESSION, exception_str) + " as expected";
		else if (thrown && std_exception)
			message = Stylify(EXPRESSION, expression_str) + " has thrown unexpected exception derived from std::exception (what(): " + Stylify(LITERAL, what) + "), while expected " + Stylify(EXPRESSION, exception_str);
		else if (thrown)
			message = Stylify(EXPRESSION, expression_str) + " has thrown unexpected exception not derived from std::exception, while expected " + Stylify(EXPRESSION, exception_str);
		else
			message = Stylify(EXPRESSION, expression_str) + " hasn't thrown expected exception " + Stylify(EXPRESSION, exception_str);

		RegisterTest(thrown && as_expected, flags, message, description);
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movl %r9d, %ebp
movq %r8, %rbx
movq %rcx, %r15
movq %rsi, %r12
movq %rdi, %r14
leaq 0xd8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq %rdx, %rdi
callq 0x7460
xorl %eax, %eax
xorl %ecx, %ecx
xorl %r13d, %r13d
leaq 0xb8(%rsp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb $0x0, (%rdx)
andb %cl, %r13b
cmpb $0x1, %r13b
jne 0x70a3
leaq 0x8(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r12, %rcx
callq 0x68bc
leaq 0x1602(%rip), %rdx      # 0x860e
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x5e7f
leaq 0x68(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r15, %rcx
callq 0x68bc
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
leaq 0x68(%rsp), %rdx
callq 0x5dbd
leaq 0x14ae(%rip), %rdx      # 0x84f7
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x5e7f
leaq 0xa8(%rsp), %rdi
leaq 0x88(%rsp), %r15
movq %r15, %rsi
callq 0x2190
movq %r15, %rdi
callq 0x20b0
leaq 0x48(%rsp), %rdi
callq 0x20b0
leaq 0x68(%rsp), %rdi
callq 0x20b0
leaq 0x28(%rsp), %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
jmp 0x7295
andb %cl, %al
cmpb $0x1, %al
jne 0x71b0
leaq 0x68(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r12, %rcx
callq 0x68bc
leaq 0x1554(%rip), %rdx      # 0x861b
leaq 0x8(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x5e7f
leaq 0x108(%rsp), %rdi
pushq $0x3
popq %rdx
leaq 0xc8(%rsp), %rcx
movq %r14, %rsi
callq 0x68bc
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
leaq 0x108(%rsp), %rdx
callq 0x5dbd
leaq 0x1553(%rip), %rdx      # 0x8662
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5e7f
leaq 0xe8(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r15, %rcx
callq 0x68bc
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x5dbd
leaq 0xa8(%rsp), %rdi
leaq 0x88(%rsp), %r15
movq %r15, %rsi
callq 0x2190
movq %r15, %rdi
callq 0x20b0
leaq 0xe8(%rsp), %rdi
callq 0x20b0
leaq 0x48(%rsp), %rdi
callq 0x20b0
leaq 0x28(%rsp), %rdi
callq 0x20b0
leaq 0x108(%rsp), %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x20b0
leaq 0x68(%rsp), %rdi
jmp 0x7295
testb %cl, %cl
je 0x7209
leaq 0x28(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r12, %rcx
callq 0x68bc
leaq 0x14a7(%rip), %rdx      # 0x8675
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5e7f
leaq 0x8(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r15, %rcx
callq 0x68bc
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x8(%rsp), %rdx
callq 0x5dbd
jmp 0x725c
leaq 0x28(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r12, %rcx
callq 0x68bc
leaq 0x14a4(%rip), %rdx      # 0x86c7
leaq 0x48(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x5e7f
leaq 0x8(%rsp), %rdi
pushq $0x4
popq %rdx
movq %r14, %rsi
movq %r15, %rcx
callq 0x68bc
leaq 0x88(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0x8(%rsp), %rdx
callq 0x5dbd
leaq 0xa8(%rsp), %rdi
leaq 0x88(%rsp), %r15
movq %r15, %rsi
callq 0x2190
movq %r15, %rdi
callq 0x20b0
leaq 0x8(%rsp), %rdi
callq 0x20b0
leaq 0x48(%rsp), %rdi
callq 0x20b0
leaq 0x28(%rsp), %rdi
callq 0x20b0
movzbl %r13b, %esi
leaq 0xa8(%rsp), %rcx
movq %r14, %rdi
movl %ebp, %edx
movq %rbx, %r8
callq 0x6684
leaq 0xa8(%rsp), %rdi
callq 0x20b0
leaq 0xc8(%rsp), %rdi
callq 0x20b0
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x72e1
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20b0
jmp 0x72f5
jmp 0x72f2
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x20b0
jmp 0x7306
jmp 0x7303
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x73ac
jmp 0x73b5
jmp 0x73b5
movq %rax, %rbx
leaq 0xe8(%rsp), %rdi
callq 0x20b0
jmp 0x732f
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x20b0
jmp 0x733e
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x20b0
jmp 0x734d
movq %rax, %rbx
leaq 0x108(%rsp), %rdi
callq 0x20b0
jmp 0x735f
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20b0
leaq 0x68(%rsp), %rdi
jmp 0x73ac
movq %rax, %rbx
jmp 0x7369
jmp 0x73b5
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x20b0
jmp 0x7389
movq %rax, %rbx
leaq 0x68(%rsp), %rdi
callq 0x20b0
jmp 0x7398
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x20b0
jmp 0x73a7
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x20b0
jmp 0x73b8
jmp 0x73b5
movq %rax, %rbx
leaq 0xa8(%rsp), %rdi
callq 0x20b0
leaq 0xc8(%rsp), %rdi
callq 0x20b0
movq %rbx, %rdi
callq 0x2240
movq %rdx, %r13
movq %rax, %rdi
cmpl $0x3, %r13d
jne 0x73fc
callq 0x2080
callq 0x2210
movb $0x1, %cl
xorl %eax, %eax
movb $0x1, %r13b
jmp 0x6fd1
callq 0x2080
cmpl $0x2, %r13d
jne 0x7431
movq (%rax), %rcx
movq %rax, %rdi
callq *0x10(%rcx)
leaq 0xc8(%rsp), %rdi
movq %rax, %rsi
callq 0x2270
callq 0x2210
movb $0x1, %al
xorl %r13d, %r13d
movb $0x1, %cl
jmp 0x6fd1
callq 0x2210
movb $0x1, %cl
xorl %eax, %eax
jmp 0x6fce
jmp 0x7458
jmp 0x7458
movq %rax, %rbx
callq 0x2210
jmp 0x73c5
movq %rax, %rdi
callq 0x627c
movq %rax, %rbx
jmp 0x73c5