# XFAIL: target-windows # XFAIL: system-linux # XFAIL: system-windows && remote-linux # Test that we can successfully locate decls in Clang modules for C++. # RUN: split-file %s %t # RUN: %clang_host -g -gdwarf %t/main.cpp -fmodules -fcxx-modules -o %t.out # RUN: %lldb -o "settings set interpreter.stop-command-source-on-error false" \ # RUN: -x -b -s %t/commands.input %t.out 2>&1 \ # RUN: | FileCheck %s #--- main.cpp #include "Module.h" int main() { foo(10); return 0; } #--- module.modulemap module Module { header "Module.h" export * } #--- Module.h // We use nodebug here ensures that LLDB tries to pick the decl out of the module. // If debug-info is available, it would use that to construct the decl instead. [[gnu::nodebug]] int foo(int x) { return x; } int bar(int x, int y) { return x + y; } #--- commands.input breakpoint set -n foo run expression foo(5) # FIXME: when we're stopped in a frame without debug-info, the ClangModulesDeclVendor # is initialized properly and none of the modules in the CU are compiled (and lookup # in the DeclVendor is not enabled). # CHECK: expression foo(5) # CHECK: error: 'foo' has unknown return type; cast the call to its declared return type breakpoint set -p return -X main continue expression foo(50) # However, once we're back in a frame with debug-info, the ClangModulesDeclVendor infrastructure # is back on track. # CHECK: expression foo(50) # CHECK-NEXT: (int) $0 = 5 target modules dump ast --filter foo # CHECK: (lldb) target modules dump ast --filter foo # CHECK-NOT: foo