Depends on: * https://github.com/llvm/llvm-project/pull/166917 * https://github.com/llvm/llvm-project/pull/166940 While these errors can contribute to an expression failing, they are never *the* reason the expression failed. I.e., they are always just 'note:' diagnostics that we hand-emit. Because they are quite noisy (and we potentially have many of them if we auto-load all modules in a CU), this patch logs the errors to the `expr` log, instead of the console. Previously these errors would only get omitted when the expression itself failed. Meaning if the expression failed, we'd dump these 'note' module load errors in next to the actual expression error, obscuring the output. Moreover, if the expression succeeded, any module load errors would be dropped. Now we always log all module loading errors to the expression log, regardless of whether the expression fails or not.
63 lines
1.5 KiB
Plaintext
63 lines
1.5 KiB
Plaintext
## Tests the case where we fail to load a submodule. We force this by removing
|
|
## the submodule '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 baz/module qux/' %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;
|
|
@import bar;
|
|
|
|
int main() { __builtin_debugtrap(); }
|
|
|
|
#--- foo.h
|
|
struct foo {};
|
|
|
|
#--- bar.h
|
|
struct bar {};
|
|
|
|
#--- baz.h
|
|
struct baz {};
|
|
|
|
#--- module.modulemap
|
|
module foo {
|
|
header "foo.h"
|
|
export *
|
|
|
|
module baz {
|
|
header "baz.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 'baz' of module 'foo'
|
|
|
|
#--- 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 'baz' of module 'foo'
|