// File: dsharlet[P]array/test/array_lifetime.cpp
// Function: void nda::test_copy_lifetime<std::allocator<nda::lifetime_counter>>()
void test_copy_lifetime() {
  lifetime_array<Alloc> source(lifetime_shape);
  lifetime_counter::reset();
  { lifetime_array<Alloc> copy(source); }
  ASSERT_EQ(lifetime_counter::copy_constructs, lifetime_shape.size());
  ASSERT_EQ(lifetime_counter::destructs, lifetime_shape.size());
  
  lifetime_counter::reset();
  {
    lifetime_array<Alloc> dest(lifetime_subshape);
    copy(source, dest);
  }
  ASSERT_EQ(lifetime_counter::copy_assigns, lifetime_subshape.size());
  ASSERT_EQ(lifetime_counter::destructs, lifetime_subshape.size());
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x9b0, %rsp            # imm = 0x9B0
leaq 0x235a86(%rip), %rsi    # 0x292258
leaq -0x50(%rbp), %rdi
movq %rdi, -0x808(%rbp)
callq 0x7f7e0
callq 0x7f630
movq -0x808(%rbp), %rsi
leaq -0xa0(%rbp), %rdi
callq 0x86350
jmp 0x5c7fc
leaq -0xa0(%rbp), %rdi
callq 0x7f870
leaq 0x235b29(%rip), %rax    # 0x292338
movq (%rax), %rax
movq %rax, -0x818(%rbp)
leaq 0x235a38(%rip), %rdi    # 0x292258
callq 0x1a900
movq %rax, -0x810(%rbp)
jmp 0x5c82e
movq -0x810(%rbp), %rcx
movq -0x818(%rbp), %rax
subq %rcx, %rax
sete %al
movb %al, -0x821(%rbp)
leaq -0x261(%rbp), %rdi
movq %rdi, -0x820(%rbp)
callq 0x33b0
movq -0x820(%rbp), %rdx
leaq 0x187770(%rip), %rsi    # 0x1e3fd9
leaq -0x260(%rbp), %rdi
callq 0x10a90
jmp 0x5c877
movb -0x821(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x240(%rbp), %rdi
leaq -0x260(%rbp), %rdx
callq 0x10f80
jmp 0x5c898
leaq 0x17ff46(%rip), %rsi    # 0x1dc7e5
leaq -0x240(%rbp), %rdi
callq 0x34320
movq %rax, -0x830(%rbp)
jmp 0x5c8b4
movq -0x830(%rbp), %rdi
leaq 0x187752(%rip), %rsi    # 0x1e4014
callq 0x85630
movq %rax, -0x838(%rbp)
jmp 0x5c8d0
movq -0x838(%rbp), %rdi
leaq 0x183ece(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x840(%rbp)
jmp 0x5c8ec
movq -0x840(%rbp), %rdi
leaq 0x235a3e(%rip), %rsi    # 0x292338
callq 0x355c0
movq %rax, -0x848(%rbp)
jmp 0x5c908
movq -0x848(%rbp), %rdi
leaq 0x17fecf(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x850(%rbp)
jmp 0x5c924
movq -0x850(%rbp), %rdi
leaq 0x188d72(%rip), %rsi    # 0x1e56a4
callq 0x34ba0
movq %rax, -0x858(%rbp)
jmp 0x5c940
movq -0x858(%rbp), %rdi
leaq 0x183e5e(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x860(%rbp)
jmp 0x5c95c
leaq 0x2358f5(%rip), %rdi    # 0x292258
callq 0x1a900
movq %rax, -0x868(%rbp)
jmp 0x5c971
movq -0x860(%rbp), %rdi
movq -0x868(%rbp), %rax
movq %rax, -0x270(%rbp)
leaq -0x270(%rbp), %rsi
callq 0x355c0
movq %rax, -0x870(%rbp)
jmp 0x5c99b
movq -0x870(%rbp), %rdi
leaq 0x199ad2(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x5c9b0
leaq -0x240(%rbp), %rdi
callq 0x10ff0
jmp 0x5c9be
leaq -0x260(%rbp), %rdi
callq 0x3100
leaq -0x261(%rbp), %rdi
callq 0x3290
leaq 0x23597b(%rip), %rax    # 0x292358
movq (%rax), %rax
movq %rax, -0x880(%rbp)
leaq 0x23586a(%rip), %rdi    # 0x292258
callq 0x1a900
movq %rax, -0x878(%rbp)
jmp 0x5c9fc
movq -0x878(%rbp), %rcx
movq -0x880(%rbp), %rax
subq %rcx, %rax
sete %al
movb %al, -0x889(%rbp)
leaq -0x421(%rbp), %rdi
movq %rdi, -0x888(%rbp)
callq 0x33b0
movq -0x888(%rbp), %rdx
leaq 0x184e72(%rip), %rsi    # 0x1e18a9
leaq -0x420(%rbp), %rdi
callq 0x10a90
jmp 0x5ca45
movb -0x889(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x400(%rbp), %rdi
leaq -0x420(%rbp), %rdx
callq 0x10f80
jmp 0x5ca66
leaq 0x17fd78(%rip), %rsi    # 0x1dc7e5
leaq -0x400(%rbp), %rdi
callq 0x34320
movq %rax, -0x898(%rbp)
jmp 0x5ca82
movq -0x898(%rbp), %rdi
leaq 0x184e4e(%rip), %rsi    # 0x1e18de
callq 0x7f8f0
movq %rax, -0x8a0(%rbp)
jmp 0x5ca9e
movq -0x8a0(%rbp), %rdi
leaq 0x183d00(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x8a8(%rbp)
jmp 0x5caba
movq -0x8a8(%rbp), %rdi
leaq 0x235890(%rip), %rsi    # 0x292358
callq 0x355c0
movq %rax, -0x8b0(%rbp)
jmp 0x5cad6
movq -0x8b0(%rbp), %rdi
leaq 0x17fd01(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x8b8(%rbp)
jmp 0x5caf2
movq -0x8b8(%rbp), %rdi
leaq 0x188ba4(%rip), %rsi    # 0x1e56a4
callq 0x34ba0
movq %rax, -0x8c0(%rbp)
jmp 0x5cb0e
movq -0x8c0(%rbp), %rdi
leaq 0x183c90(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x8c8(%rbp)
jmp 0x5cb2a
leaq 0x235727(%rip), %rdi    # 0x292258
callq 0x1a900
movq %rax, -0x8d0(%rbp)
jmp 0x5cb3f
movq -0x8c8(%rbp), %rdi
movq -0x8d0(%rbp), %rax
movq %rax, -0x430(%rbp)
leaq -0x430(%rbp), %rsi
callq 0x355c0
movq %rax, -0x8d8(%rbp)
jmp 0x5cb69
movq -0x8d8(%rbp), %rdi
leaq 0x199904(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x5cb7e
leaq -0x400(%rbp), %rdi
callq 0x10ff0
jmp 0x5cb8c
leaq -0x420(%rbp), %rdi
callq 0x3100
leaq -0x421(%rbp), %rdi
callq 0x3290
callq 0x7f630
leaq 0x2356d8(%rip), %rsi    # 0x292288
leaq -0x480(%rbp), %rdi
callq 0x7f7e0
jmp 0x5cbbe
leaq -0x50(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0x863e0
jmp 0x5cbd0
leaq -0x480(%rbp), %rdi
callq 0x7f870
leaq 0x235765(%rip), %rax    # 0x292348
movq (%rax), %rax
movq %rax, -0x8e8(%rbp)
leaq 0x235694(%rip), %rdi    # 0x292288
callq 0x1a900
movq %rax, -0x8e0(%rbp)
jmp 0x5cc02
movq -0x8e0(%rbp), %rcx
movq -0x8e8(%rbp), %rax
subq %rcx, %rax
sete %al
movb %al, -0x8f1(%rbp)
leaq -0x631(%rbp), %rdi
movq %rdi, -0x8f0(%rbp)
callq 0x33b0
movq -0x8f0(%rbp), %rdx
leaq 0x187a29(%rip), %rsi    # 0x1e4666
leaq -0x630(%rbp), %rdi
callq 0x10a90
jmp 0x5cc4b
movb -0x8f1(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x610(%rbp), %rdi
leaq -0x630(%rbp), %rdx
callq 0x10f80
jmp 0x5cc6c
leaq 0x17fb72(%rip), %rsi    # 0x1dc7e5
leaq -0x610(%rbp), %rdi
callq 0x34320
movq %rax, -0x900(%rbp)
jmp 0x5cc88
movq -0x900(%rbp), %rdi
leaq 0x187a0b(%rip), %rsi    # 0x1e46a1
callq 0x7f760
movq %rax, -0x908(%rbp)
jmp 0x5cca4
movq -0x908(%rbp), %rdi
leaq 0x183afa(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x910(%rbp)
jmp 0x5ccc0
movq -0x910(%rbp), %rdi
leaq 0x23567a(%rip), %rsi    # 0x292348
callq 0x355c0
movq %rax, -0x918(%rbp)
jmp 0x5ccdc
movq -0x918(%rbp), %rdi
leaq 0x17fafb(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x920(%rbp)
jmp 0x5ccf8
movq -0x920(%rbp), %rdi
leaq 0x188ab9(%rip), %rsi    # 0x1e57bf
callq 0x86430
movq %rax, -0x928(%rbp)
jmp 0x5cd14
movq -0x928(%rbp), %rdi
leaq 0x183a8a(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x930(%rbp)
jmp 0x5cd30
leaq 0x235551(%rip), %rdi    # 0x292288
callq 0x1a900
movq %rax, -0x938(%rbp)
jmp 0x5cd45
movq -0x930(%rbp), %rdi
movq -0x938(%rbp), %rax
movq %rax, -0x640(%rbp)
leaq -0x640(%rbp), %rsi
callq 0x355c0
movq %rax, -0x940(%rbp)
jmp 0x5cd6f
movq -0x940(%rbp), %rdi
leaq 0x1996fe(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x5cd84
leaq -0x610(%rbp), %rdi
callq 0x10ff0
jmp 0x5cd92
leaq -0x630(%rbp), %rdi
callq 0x3100
leaq -0x631(%rbp), %rdi
callq 0x3290
leaq 0x2355a7(%rip), %rax    # 0x292358
movq (%rax), %rax
movq %rax, -0x950(%rbp)
leaq 0x2354c6(%rip), %rdi    # 0x292288
callq 0x1a900
movq %rax, -0x948(%rbp)
jmp 0x5cdd0
movq -0x948(%rbp), %rcx
movq -0x950(%rbp), %rax
subq %rcx, %rax
sete %al
movb %al, -0x959(%rbp)
leaq -0x7f1(%rbp), %rdi
movq %rdi, -0x958(%rbp)
callq 0x33b0
movq -0x958(%rbp), %rdx
leaq 0x1878b5(%rip), %rsi    # 0x1e46c0
leaq -0x7f0(%rbp), %rdi
callq 0x10a90
jmp 0x5ce19
movb -0x959(%rbp), %al
movzbl %al, %esi
andl $0x1, %esi
leaq -0x7d0(%rbp), %rdi
leaq -0x7f0(%rbp), %rdx
callq 0x10f80
jmp 0x5ce3a
leaq 0x17f9a4(%rip), %rsi    # 0x1dc7e5
leaq -0x7d0(%rbp), %rdi
callq 0x34320
movq %rax, -0x968(%rbp)
jmp 0x5ce56
movq -0x968(%rbp), %rdi
leaq 0x184a7a(%rip), %rsi    # 0x1e18de
callq 0x7f8f0
movq %rax, -0x970(%rbp)
jmp 0x5ce72
movq -0x970(%rbp), %rdi
leaq 0x18392c(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x978(%rbp)
jmp 0x5ce8e
movq -0x978(%rbp), %rdi
leaq 0x2354bc(%rip), %rsi    # 0x292358
callq 0x355c0
movq %rax, -0x980(%rbp)
jmp 0x5ceaa
movq -0x980(%rbp), %rdi
leaq 0x17f92d(%rip), %rsi    # 0x1dc7e5
callq 0x34320
movq %rax, -0x988(%rbp)
jmp 0x5cec6
movq -0x988(%rbp), %rdi
leaq 0x1888eb(%rip), %rsi    # 0x1e57bf
callq 0x86430
movq %rax, -0x990(%rbp)
jmp 0x5cee2
movq -0x990(%rbp), %rdi
leaq 0x1838bc(%rip), %rsi    # 0x1e07ac
callq 0x34320
movq %rax, -0x998(%rbp)
jmp 0x5cefe
leaq 0x235383(%rip), %rdi    # 0x292288
callq 0x1a900
movq %rax, -0x9a0(%rbp)
jmp 0x5cf13
movq -0x998(%rbp), %rdi
movq -0x9a0(%rbp), %rax
movq %rax, -0x800(%rbp)
leaq -0x800(%rbp), %rsi
callq 0x355c0
movq %rax, -0x9a8(%rbp)
jmp 0x5cf3d
movq -0x9a8(%rbp), %rdi
leaq 0x199530(%rip), %rsi    # 0x1f647b
callq 0x34320
jmp 0x5cf52
leaq -0x7d0(%rbp), %rdi
callq 0x10ff0
jmp 0x5cf60
leaq -0x7f0(%rbp), %rdi
callq 0x3100
leaq -0x7f1(%rbp), %rdi
callq 0x3290
leaq -0x50(%rbp), %rdi
callq 0x7f870
addq $0x9b0, %rsp            # imm = 0x9B0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d158
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5cff7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5cfeb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x10ff0
jmp 0x5cfe9
jmp 0x5cfeb
leaq -0x260(%rbp), %rdi
callq 0x3100
leaq -0x261(%rbp), %rdi
callq 0x3290
jmp 0x5d158
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d05e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d052
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x10ff0
jmp 0x5d050
jmp 0x5d052
leaq -0x420(%rbp), %rdi
callq 0x3100
leaq -0x421(%rbp), %rdi
callq 0x3290
jmp 0x5d158
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x7f870
jmp 0x5d158
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d0e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d0dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x610(%rbp), %rdi
callq 0x10ff0
jmp 0x5d0da
jmp 0x5d0dc
leaq -0x630(%rbp), %rdi
callq 0x3100
leaq -0x631(%rbp), %rdi
callq 0x3290
jmp 0x5d158
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d14c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
jmp 0x5d140
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa8(%rbp)
movl %eax, -0xac(%rbp)
leaq -0x7d0(%rbp), %rdi
callq 0x10ff0
jmp 0x5d13e
jmp 0x5d140
leaq -0x7f0(%rbp), %rdi
callq 0x3100
leaq -0x7f1(%rbp), %rdi
callq 0x3290
leaq -0x50(%rbp), %rdi
callq 0x7f870
movq -0xa8(%rbp), %rdi
callq 0x33a0
movq %rax, %rdi
callq 0x116d0
nopw %cs:(%rax,%rax)
nop