Depends on: * https://github.com/llvm/llvm-project/pull/166917 When loading all Clang modules for a CU, we stop on first error. This means benign module loading errors may stop us from importing actually useful modules. There's no good reason to bail on the first one. The pathological case would be if we try to load a large number of Clang modules but all fail to load for the same reason. That could happen, but in practice I've always seen only a handful of modules failing to load out of a large number. Particularly system modules are useful and usually don't fail to load. Whereas project-specific Clang modules are more likely to fail because the build system moves the modulemap/sources around. This patch accumulates all module loading errors and doesn't stop when an error is encountered.
50 lines
1.3 KiB
Plaintext
50 lines
1.3 KiB
Plaintext
## Tests the case where a module fails to load. We force this by
|
|
## replacing the contents of the 'module foo' declaration with garbage.
|
|
#
|
|
# 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/foo\.h/baz\.h/' %t/sources/module.modulemap
|
|
# RUN: sed -i '' -e 's/bar\.h/qux\.h/' %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
|
|
|
|
#--- 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
|
|
|
|
# CHECK: note: couldn't load top-level module foo
|
|
## FIXME: clang error diagnostic shouldn't be dumped to the console.
|
|
# CHECK: error:
|
|
# CHECK: note: couldn't load top-level module bar
|
|
## FIXME: clang error diagnostic shouldn't be dumped to the console.
|
|
# CHECK: error:
|