## Tests the case where we fail to load a submodule of a submodule. We force this
## by removing the submodule 'module qux' of 'module baz' from the modulemap.
#
# 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: sed -i '' -e 's/module qux/module quz/' %t/sources/module.modulemap
#
# RUN: %lldb -x -o "settings set interpreter.stop-command-source-on-error false" \
# RUN:       -s %t/sources/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/sources/commands-with-log.input %t.out -o exit 2>&1 | FileCheck %s --check-prefix=LOG

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

int main() { __builtin_debugtrap(); }

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

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

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

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

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

    module baz {
        header "baz.h"
        export *

        module qux {
            header "qux.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 load submodule 'qux' of module 'foo.baz'

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

# LOG: couldn't load submodule 'qux' of module 'foo.baz'
