summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/dexter-tests/dbg-arg.c
diff options
context:
space:
mode:
Diffstat (limited to 'debuginfo-tests/dexter-tests/dbg-arg.c')
-rw-r--r--debuginfo-tests/dexter-tests/dbg-arg.c58
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 }
+ }
+ }
+ ]
+})
+*/
+
OpenPOWER on IntegriCloud