// REQUIRES: !asan, lldb
// UNSUPPORTED: system-windows
//           Zorg configures the ASAN stage2 bots to not build the asan
//           compiler-rt. Only run this test on non-asanified configurations.
// UNSUPPORTED: apple-lldb-pre-1000

// XFAIL: lldb
// lldb-8, even outside of dexter, will sometimes trigger an asan fault in
// the debugged process and generally freak out.

// RUN: %dexter --fail-lt 1.0 -w \
// RUN:     --builder 'clang' --debugger 'lldb' \
// RUN:     --cflags "-O1 -glldb -fsanitize=address -arch x86_64" \
// RUN:     --ldflags="-fsanitize=address" -- %s
#include <deque>

struct A {
  int a;
  A(int a) : a(a) {}
  A() : a(0) {}
};

using deq_t = std::deque<A>;

template class std::deque<A>;

static void __attribute__((noinline, optnone)) escape(deq_t &deq) {
  static volatile deq_t *sink;
  sink = &deq;
}

int main() {
  deq_t deq;
  deq.push_back(1234);
  deq.push_back(56789);
  escape(deq); // DexLabel('first')
  while (!deq.empty()) {
    auto record = deq.front();
    deq.pop_front();
    escape(deq); // DexLabel('second')
  }
}

// DexExpectWatchValue('deq[0].a', '1234', on_line='first')
// DexExpectWatchValue('deq[1].a', '56789', on_line='first')

// DexExpectWatchValue('deq[0].a', '56789', '0', on_line='second')

