1 | // REQUIRES: !asan, compiler-rt, lldb |
2 | // UNSUPPORTED: system-windows |
3 | // Zorg configures the ASAN stage2 bots to not build the asan |
4 | // compiler-rt. Only run this test on non-asanified configurations. |
5 | // UNSUPPORTED: apple-lldb-pre-1000 |
6 | |
7 | // XFAIL: lldb |
8 | // lldb-8, even outside of dexter, will sometimes trigger an asan fault in |
9 | // the debugged process and generally freak out. |
10 | |
11 | // RUN: %clang -std=gnu++11 -O1 -glldb -fsanitize=address -arch x86_64 %s -o %t |
12 | // RUN: %dexter --fail-lt 1.0 -w \ |
13 | // RUN: --binary %t --debugger 'lldb' -- %s |
14 | #include <deque> |
15 | |
16 | struct A { |
17 | int a; |
18 | A(int a) : a(a) {} |
19 | A() : a(0) {} |
20 | }; |
21 | |
22 | using deq_t = std::deque<A>; |
23 | |
24 | template class std::deque<A>; |
25 | |
26 | static void __attribute__((noinline, optnone)) escape(deq_t &deq) { |
27 | static volatile deq_t *sink; |
28 | sink = &deq; |
29 | } |
30 | |
31 | int main() { |
32 | deq_t deq; |
33 | deq.push_back(x: 1234); |
34 | deq.push_back(x: 56789); |
35 | escape(deq); // DexLabel('first') |
36 | while (!deq.empty()) { |
37 | auto record = deq.front(); |
38 | deq.pop_front(); |
39 | escape(deq); // DexLabel('second') |
40 | } |
41 | } |
42 | |
43 | // DexExpectWatchValue('deq[0].a', '1234', on_line=ref('first')) |
44 | // DexExpectWatchValue('deq[1].a', '56789', on_line=ref('first')) |
45 | |
46 | // DexExpectWatchValue('deq[0].a', '56789', '0', on_line=ref('second')) |
47 | |
48 | |