## Tests the case where the DW_AT_LLVM_include_path of the module is invalid.
## We forces this by just removing that directory (which in our case is 'sources').
#
# REQUIRES: system-darwin
#
# RUN: split-file %s %t/sources
# RUN: %clang_host -g %t/sources/main.m -fmodules -fcxx-modules \
# RUN:             -fmodule-map-file=%t/sources/module.modulemap \
# RUN:             -fmodules-cache-path=%t/ModuleCache -o %t.out
#
# RUN: cp %t/sources/commands.input %t/commands.input
# RUN: cp %t/sources/commands-with-log.input %t/commands-with-log.input
# RUN: rm -r %t/sources
#
# RUN: %lldb -x -o "settings set interpreter.stop-command-source-on-error false" \
# RUN:       -s %t/commands.input %t.out -o exit 2>&1 | FileCheck %s --check-prefix=NO_LOG
#
# RUN: %lldb -x -o "settings set interpreter.stop-command-source-on-error false" \
# RUN:       -s %t/commands-with-log.input %t.out -o exit 2>&1 | FileCheck %s --check-prefix=LOG

#--- main.m
@import foo;
@import bar;

int main() { __builtin_debugtrap(); }

#--- foo.h
struct foo {};

#--- bar.h
struct bar {};

#--- module.modulemap
module foo {
    header "foo.h"
    export *
}

module bar {
    header "bar.h"
    export *
}

#--- commands.input
run
## Make sure expression fails so the 'note' diagnostics get printed.
expr blah

# NO_LOG-NOT: couldn't find module search path directory {{.*}}sources
# NO_LOG-NOT: couldn't find module search path directory {{.*}}sources

#--- commands-with-log.input
log enable lldb expr
run
## Make sure expression fails so the 'note' diagnostics get printed.
expr blah

# LOG: couldn't find module search path directory {{.*}}sources
# LOG: couldn't find module search path directory {{.*}}sources
