diff options
Diffstat (limited to 'debuginfo-tests/dexter-tests/dbg-arg.c')
-rw-r--r-- | debuginfo-tests/dexter-tests/dbg-arg.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/debuginfo-tests/dexter-tests/dbg-arg.c b/debuginfo-tests/dexter-tests/dbg-arg.c new file mode 100644 index 00000000000..7d0ef7b6b70 --- /dev/null +++ b/debuginfo-tests/dexter-tests/dbg-arg.c @@ -0,0 +1,58 @@ +// REQUIRES: system-linux, lldb +// +// This test case checks debug info during register moves for an argument. +// RUN: %dexter --fail-lt 1.0 -w \ +// RUN: --builder clang-c --debugger 'lldb' \ +// RUN: --cflags "-m64 -mllvm -fast-isel=false -g" -- %s +// +// Radar 8412415 + +struct _mtx +{ + long unsigned int ptr; + int waiters; + struct { + int tag; + int pad; + } mtxi; +}; + + +int foobar(struct _mtx *mutex) { + int r = 1; + int l = 0; // DexLabel('l_assign') + int j = 0; + do { + if (mutex->waiters) { + r = 2; + } + j = bar(r, l); + ++l; + } while (l < j); + return r + j; +} + +int bar(int i, int j) { + return i + j; +} + +int main() { + struct _mtx m; + m.waiters = 0; + return foobar(&m); +} + + +/* +DexExpectProgramState({ + 'frames': [ + { + 'location': { 'lineno': 'l_assign' }, + 'watches': { + '*mutex': { 'is_irretrievable': False } + } + } + ] +}) +*/ + |