// 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 }
      }
    }
  ]
})
*/

