// File: halfflat[P]tinyopt/test/test_maybe.cc
// Function: maybe_conditional_assign_Test::TestBody()
TEST(maybe, conditional_assign) {
    int r = 0;

    EXPECT_TRUE(r << maybe<int>(0));
    EXPECT_EQ(0, r);

    EXPECT_TRUE(r << maybe<int>(4));
    EXPECT_EQ(4, r);

    EXPECT_TRUE(r << maybe<double>(5.3));
    EXPECT_EQ(5, r);

    EXPECT_FALSE(r << maybe<int>());
    EXPECT_EQ(5, r);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2b0, %rsp            # imm = 0x2B0
movq %rdi, -0x8(%rbp)
movl $0x0, -0xc(%rbp)
movl $0x0, -0x34(%rbp)
leaq -0x30(%rbp), %rdi
movq %rdi, -0x230(%rbp)
leaq -0x34(%rbp), %rsi
callq 0x20020
movq -0x230(%rbp), %rdx
leaq -0x28(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x294a0
jmp 0x25917
xorl %eax, %eax
movl %eax, %edx
leaq -0x20(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1d6b0
jmp 0x2592a
leaq -0x28(%rbp), %rdi
callq 0x1d710
leaq -0x30(%rbp), %rdi
callq 0x1d710
leaq -0x20(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x231(%rbp)
jmp 0x2594d
movb -0x231(%rbp), %al
testb $0x1, %al
jne 0x25959
jmp 0x259a0
jmp 0x25a68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25981
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x1d710
leaq -0x30(%rbp), %rdi
callq 0x1d710
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25acc
leaq -0x50(%rbp), %rdi
callq 0x84210
jmp 0x259ab
leaq 0xa3308(%rip), %rdx     # 0xc8cba
leaq 0xa2a96(%rip), %rcx     # 0xc844f
leaq 0xa2a95(%rip), %r8      # 0xc8455
leaq -0x78(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x7d210
jmp 0x259cf
leaq -0x78(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa31a9(%rip), %rdx     # 0xc8b8b
leaq -0x58(%rbp), %rdi
movl $0x1, %esi
movl $0x49, %ecx
callq 0x80580
jmp 0x259f7
leaq -0x58(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x7d370
jmp 0x25a06
leaq -0x58(%rbp), %rdi
callq 0x80600
leaq -0x78(%rbp), %rdi
callq 0x10fc8
leaq -0x50(%rbp), %rdi
callq 0x1d500
jmp 0x25a68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25a5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25a54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x80600
leaq -0x78(%rbp), %rdi
callq 0x10fc8
leaq -0x50(%rbp), %rdi
callq 0x1d500
jmp 0x25acc
leaq -0x20(%rbp), %rdi
callq 0x1d520
movl $0x0, -0x8c(%rbp)
leaq 0xa9cec(%rip), %rsi     # 0xcf76e
leaq 0xa4c58(%rip), %rdx     # 0xca6e1
leaq -0x88(%rbp), %rdi
movq %rdi, -0x240(%rbp)
leaq -0x8c(%rbp), %rcx
leaq -0xc(%rbp), %r8
callq 0x1d5d0
movq -0x240(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x232(%rbp)
jmp 0x25abb
movb -0x232(%rbp), %al
testb $0x1, %al
jne 0x25ac7
jmp 0x25aeb
jmp 0x25b9a
leaq -0x20(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25c39
leaq -0x98(%rbp), %rdi
callq 0x84210
jmp 0x25af9
leaq -0x88(%rbp), %rdi
callq 0x1d620
movq %rax, -0x248(%rbp)
jmp 0x25b0e
movq -0x248(%rbp), %r8
leaq 0xa306f(%rip), %rdx     # 0xc8b8b
leaq -0xa0(%rbp), %rdi
movl $0x1, %esi
movl $0x4a, %ecx
callq 0x80580
jmp 0x25b34
leaq -0xa0(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x7d370
jmp 0x25b49
leaq -0xa0(%rbp), %rdi
callq 0x80600
leaq -0x98(%rbp), %rdi
callq 0x1d500
jmp 0x25b9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25b89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x80600
leaq -0x98(%rbp), %rdi
callq 0x1d500
jmp 0x25c39
leaq -0x88(%rbp), %rdi
callq 0x1d520
movl $0x4, -0xc4(%rbp)
leaq -0xc0(%rbp), %rdi
movq %rdi, -0x250(%rbp)
leaq -0xc4(%rbp), %rsi
callq 0x20020
movq -0x250(%rbp), %rdx
leaq -0xb8(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x294a0
jmp 0x25be3
xorl %eax, %eax
movl %eax, %edx
leaq -0xb0(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x1d6b0
jmp 0x25bfc
leaq -0xb8(%rbp), %rdi
callq 0x1d710
leaq -0xc0(%rbp), %rdi
callq 0x1d710
leaq -0xb0(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x251(%rbp)
jmp 0x25c28
movb -0x251(%rbp), %al
testb $0x1, %al
jne 0x25c34
jmp 0x25c92
jmp 0x25d81
leaq -0x88(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25c70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x1d710
leaq -0xc0(%rbp), %rdi
callq 0x1d710
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25de8
leaq -0xd0(%rbp), %rdi
callq 0x84210
jmp 0x25ca0
leaq 0xa3026(%rip), %rdx     # 0xc8ccd
leaq 0xa27a1(%rip), %rcx     # 0xc844f
leaq 0xa27a0(%rip), %r8      # 0xc8455
leaq -0xf8(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x7d210
jmp 0x25cca
leaq -0xf8(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa2eab(%rip), %rdx     # 0xc8b8b
leaq -0xd8(%rbp), %rdi
movl $0x1, %esi
movl $0x4c, %ecx
callq 0x80580
jmp 0x25cf8
leaq -0xd8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x7d370
jmp 0x25d0d
leaq -0xd8(%rbp), %rdi
callq 0x80600
leaq -0xf8(%rbp), %rdi
callq 0x10fc8
leaq -0xd0(%rbp), %rdi
callq 0x1d500
jmp 0x25d81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25d73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25d67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x80600
leaq -0xf8(%rbp), %rdi
callq 0x10fc8
leaq -0xd0(%rbp), %rdi
callq 0x1d500
jmp 0x25de8
leaq -0xb0(%rbp), %rdi
callq 0x1d520
movl $0x4, -0x10c(%rbp)
leaq 0xa4fd3(%rip), %rsi     # 0xcad71
leaq 0xa493c(%rip), %rdx     # 0xca6e1
leaq -0x108(%rbp), %rdi
movq %rdi, -0x260(%rbp)
leaq -0x10c(%rbp), %rcx
leaq -0xc(%rbp), %r8
callq 0x1d5d0
movq -0x260(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x252(%rbp)
jmp 0x25dd7
movb -0x252(%rbp), %al
testb $0x1, %al
jne 0x25de3
jmp 0x25e0a
jmp 0x25eb9
leaq -0xb0(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25f5f
leaq -0x118(%rbp), %rdi
callq 0x84210
jmp 0x25e18
leaq -0x108(%rbp), %rdi
callq 0x1d620
movq %rax, -0x268(%rbp)
jmp 0x25e2d
movq -0x268(%rbp), %r8
leaq 0xa2d50(%rip), %rdx     # 0xc8b8b
leaq -0x120(%rbp), %rdi
movl $0x1, %esi
movl $0x4d, %ecx
callq 0x80580
jmp 0x25e53
leaq -0x120(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x7d370
jmp 0x25e68
leaq -0x120(%rbp), %rdi
callq 0x80600
leaq -0x118(%rbp), %rdi
callq 0x1d500
jmp 0x25eb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25ea8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x80600
leaq -0x118(%rbp), %rdi
callq 0x1d500
jmp 0x25f5f
leaq -0x108(%rbp), %rdi
callq 0x1d520
movabsq $0x4015333333333333, %rax # imm = 0x4015333333333333
movq %rax, -0x150(%rbp)
leaq -0x148(%rbp), %rdi
movq %rdi, -0x270(%rbp)
leaq -0x150(%rbp), %rsi
callq 0x21dc0
movq -0x270(%rbp), %rdx
leaq -0x138(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x29500
jmp 0x25f09
xorl %eax, %eax
movl %eax, %edx
leaq -0x130(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x1d6b0
jmp 0x25f22
leaq -0x138(%rbp), %rdi
callq 0x1d710
leaq -0x148(%rbp), %rdi
callq 0x21450
leaq -0x130(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x271(%rbp)
jmp 0x25f4e
movb -0x271(%rbp), %al
testb $0x1, %al
jne 0x25f5a
jmp 0x25fb8
jmp 0x260a7
leaq -0x108(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x25f96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x1d710
leaq -0x148(%rbp), %rdi
callq 0x21450
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2610e
leaq -0x158(%rbp), %rdi
callq 0x84210
jmp 0x25fc6
leaq 0xa2d13(%rip), %rdx     # 0xc8ce0
leaq 0xa247b(%rip), %rcx     # 0xc844f
leaq 0xa247a(%rip), %r8      # 0xc8455
leaq -0x180(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x7d210
jmp 0x25ff0
leaq -0x180(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa2b85(%rip), %rdx     # 0xc8b8b
leaq -0x160(%rbp), %rdi
movl $0x1, %esi
movl $0x4f, %ecx
callq 0x80580
jmp 0x2601e
leaq -0x160(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x7d370
jmp 0x26033
leaq -0x160(%rbp), %rdi
callq 0x80600
leaq -0x180(%rbp), %rdi
callq 0x10fc8
leaq -0x158(%rbp), %rdi
callq 0x1d500
jmp 0x260a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x26099
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x2608d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x80600
leaq -0x180(%rbp), %rdi
callq 0x10fc8
leaq -0x158(%rbp), %rdi
callq 0x1d500
jmp 0x2610e
leaq -0x130(%rbp), %rdi
callq 0x1d520
movl $0x5, -0x194(%rbp)
leaq 0xa2d05(%rip), %rsi     # 0xc8dc9
leaq 0xa4616(%rip), %rdx     # 0xca6e1
leaq -0x190(%rbp), %rdi
movq %rdi, -0x280(%rbp)
leaq -0x194(%rbp), %rcx
leaq -0xc(%rbp), %r8
callq 0x1d5d0
movq -0x280(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x272(%rbp)
jmp 0x260fd
movb -0x272(%rbp), %al
testb $0x1, %al
jne 0x26109
jmp 0x26130
jmp 0x261df
leaq -0x130(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x26281
leaq -0x1a0(%rbp), %rdi
callq 0x84210
jmp 0x2613e
leaq -0x190(%rbp), %rdi
callq 0x1d620
movq %rax, -0x288(%rbp)
jmp 0x26153
movq -0x288(%rbp), %r8
leaq 0xa2a2a(%rip), %rdx     # 0xc8b8b
leaq -0x1a8(%rbp), %rdi
movl $0x1, %esi
movl $0x50, %ecx
callq 0x80580
jmp 0x26179
leaq -0x1a8(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x7d370
jmp 0x2618e
leaq -0x1a8(%rbp), %rdi
callq 0x80600
leaq -0x1a0(%rbp), %rdi
callq 0x1d500
jmp 0x261df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x261ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x80600
leaq -0x1a0(%rbp), %rdi
callq 0x1d500
jmp 0x26281
leaq -0x190(%rbp), %rdi
callq 0x1d520
leaq -0x1cc(%rbp), %rdi
movq %rdi, -0x290(%rbp)
callq 0x1d640
movq -0x290(%rbp), %rdx
leaq -0x1c4(%rbp), %rdi
leaq -0xc(%rbp), %rsi
callq 0x294a0
jmp 0x26217
leaq -0x1c4(%rbp), %rdi
callq 0x1d690
xorb $0x1, %al
movb %al, -0x1b9(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x1b8(%rbp), %rdi
leaq -0x1b9(%rbp), %rsi
callq 0x1d4a0
jmp 0x26244
leaq -0x1c4(%rbp), %rdi
callq 0x1d710
leaq -0x1cc(%rbp), %rdi
callq 0x1d710
leaq -0x1b8(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x291(%rbp)
jmp 0x26270
movb -0x291(%rbp), %al
testb $0x1, %al
jne 0x2627c
jmp 0x262da
jmp 0x263c9
leaq -0x190(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x262b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1c4(%rbp), %rdi
callq 0x1d710
leaq -0x1cc(%rbp), %rdi
callq 0x1d710
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x26430
leaq -0x1d8(%rbp), %rdi
callq 0x84210
jmp 0x262e8
leaq 0xa2a09(%rip), %rdx     # 0xc8cf8
leaq 0xa215f(%rip), %rcx     # 0xc8455
leaq 0xa2152(%rip), %r8      # 0xc844f
leaq -0x200(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x7d210
jmp 0x26312
leaq -0x200(%rbp), %rdi
callq 0x102c0
movq %rax, %r8
leaq 0xa2863(%rip), %rdx     # 0xc8b8b
leaq -0x1e0(%rbp), %rdi
movl $0x1, %esi
movl $0x52, %ecx
callq 0x80580
jmp 0x26340
leaq -0x1e0(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x7d370
jmp 0x26355
leaq -0x1e0(%rbp), %rdi
callq 0x80600
leaq -0x200(%rbp), %rdi
callq 0x10fc8
leaq -0x1d8(%rbp), %rdi
callq 0x1d500
jmp 0x263c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x263bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x263af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x80600
leaq -0x200(%rbp), %rdi
callq 0x10fc8
leaq -0x1d8(%rbp), %rdi
callq 0x1d500
jmp 0x26430
leaq -0x1b8(%rbp), %rdi
callq 0x1d520
movl $0x5, -0x214(%rbp)
leaq 0xa29e3(%rip), %rsi     # 0xc8dc9
leaq 0xa42f4(%rip), %rdx     # 0xca6e1
leaq -0x210(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
leaq -0x214(%rbp), %rcx
leaq -0xc(%rbp), %r8
callq 0x1d5d0
movq -0x2a0(%rbp), %rdi
callq 0x1d4e0
movb %al, -0x292(%rbp)
jmp 0x2641f
movb -0x292(%rbp), %al
testb $0x1, %al
jne 0x2642b
jmp 0x26452
jmp 0x264fe
leaq -0x1b8(%rbp), %rdi
callq 0x1d520
jmp 0x2651f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x26513
leaq -0x220(%rbp), %rdi
callq 0x84210
jmp 0x26460
leaq -0x210(%rbp), %rdi
callq 0x1d620
movq %rax, -0x2a8(%rbp)
jmp 0x26475
movq -0x2a8(%rbp), %r8
leaq 0xa2708(%rip), %rdx     # 0xc8b8b
leaq -0x228(%rbp), %rdi
movl $0x1, %esi
movl $0x53, %ecx
callq 0x80580
jmp 0x2649b
leaq -0x228(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x7d370
jmp 0x264b0
leaq -0x228(%rbp), %rdi
callq 0x80600
leaq -0x220(%rbp), %rdi
callq 0x1d500
jmp 0x264fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x264f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x80600
leaq -0x220(%rbp), %rdi
callq 0x1d500
jmp 0x26513
leaq -0x210(%rbp), %rdi
callq 0x1d520
addq $0x2b0, %rsp            # imm = 0x2B0
popq %rbp
retq
leaq -0x210(%rbp), %rdi
callq 0x1d520
movq -0x40(%rbp), %rdi
callq 0x10e00
nopl (%rax,%rax)