# XFAIL: target-windows

# Test the ${function.formatted-arguments} frame-format variable.

# RUN: split-file %s %t
# RUN: %clangxx_host -g -gdwarf %t/main.cpp -o %t.out
# RUN: %lldb -x -b -s %t/commands.input %t.out -o exit 2>&1 \
# RUN:       | FileCheck %s
#
# RUN: %clangxx_host -O0 %t/main.cpp -o %t-nodebug.out
# RUN: %lldb -x -b -s %t/commands.input %t-nodebug.out -o exit 2>&1 \
# RUN:       | FileCheck %s --check-prefix=CHECK-NODEBUG

#--- main.cpp
struct Foo {
  void func() {}
};

void bar() {
  Foo{}.func();
}

void foo(int, int x) {
  bar();
}

void myFunc(char const * str,
          void (*fptr)(int, int)) {
  fptr(5, 10);
}

int main(int argc, char const *argv[]) {
    myFunc("hello", &foo);
    return 0;
}

#--- commands.input
settings set -f frame-format "custom-frame '${function.formatted-arguments}'\n"
break set -n func

run
bt

# CHECK: custom-frame '(this={{.*}})'
# CHECK: custom-frame '()'
# CHECK: custom-frame '({{.*}}=5, x=10)'
# CHECK: custom-frame '(str="hello", fptr=({{.*}}.out`{{.*}}foo(int,{{.*}}int) at main.cpp:{{[0-9]+}}))'
# CHECK: custom-frame '(argc=1, argv={{.*}})'

# CHECK-NODEBUG: custom-frame '()'
# CHECK-NODEBUG: custom-frame '()'
# CHECK-NODEBUG: custom-frame '(int, int)'
# CHECK-NODEBUG: custom-frame '(char const*, void (*)(int, int))'
