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.
42 lines
935 B
Plaintext
42 lines
935 B
Plaintext
# 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: rm %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 find modulemap file in {{.*}}sources
|
|
# CHECK: note: couldn't find modulemap file in {{.*}}sources
|