# XFAIL: target-windows

# Test the ${function.basename} 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

#--- main.cpp
namespace ns {
template<typename T>
struct Bar {
  template<typename K>
  T bar(K k) const & { return 1.0f; }
};

template<typename T>
struct Foo {
  template<typename K>
  [[gnu::abi_tag("Test")]] void foo() const volatile && {
    Bar<float> b;
    b.bar(b);
  }
};

template<typename T>
T func() {
  ns::Foo<int>{}.foo<int>();
  return T{};
}
} // namespace ns

int main() {
  ns::func<ns::Foo<int>>();
  return 0;
}

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

run
bt

# CHECK: custom-frame 'bar'
# CHECK: custom-frame 'foo[abi:Test]'
# CHECK: custom-frame 'func'
