// XFAIL: *
// Incorrect location for variable "parama", see PR48719.

// REQUIRES: lldb
// UNSUPPORTED: system-windows
// RUN: %dexter --fail-lt 0.1 -w --debugger lldb \
// RUN:     --builder 'clang-c'  --cflags "-O3 -glldb" -- %s
// See NOTE at end for more info about the RUN command.

// 1. SROA/mem2reg fully promotes parama.
// 2. parama's value in the final block is the merge of values for it coming
//    out of entry and if.then. If the variable were used later in the function
//    mem2reg would insert a PHI here and add a dbg.value to track the merged
//    value in debug info. Because it is not used there is no PHI (the merged
//    value is implicit) and subsequently no dbg.value.
// 3. SimplifyCFG later folds the blocks together (if.then does nothing besides
//    provide debug info so it is removed and if.end is folded into the entry
//    block).

// The debug info is not updated to account for the implicit merged value prior
// to (e.g. during mem2reg) or during SimplifyCFG so we end up seeing parama=5
// for the entire function, which is incorrect.

__attribute__((optnone))
void fluff() {}

__attribute__((noinline))
int fun(int parama, int paramb) {
  if (parama)
    parama = paramb;
  fluff();            // DexLabel('s0')
  return paramb;
}

int main() {
  return fun(5, 20);
}

// DexExpectWatchValue('parama', 20, on_line='s0')
//
// NOTE: the dexter command uses --fail-lt 0.1 (instead of the standard 1.0)
// because seeing 'optimized out' would still be a win; it's the best we can do
// without using conditional DWARF operators in the location expression. Seeing
// 'optimized out' should result in a score higher than 0.1.
