зеркало из https://github.com/microsoft/clang-1.git
Ensure that we clean up after a failed module build and cope with the
results in libclang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149200 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
c5b2e58840
Коммит
85ae12db3b
|
@ -576,6 +576,9 @@ public:
|
|||
DiagnosticConsumer *clone(DiagnosticsEngine &Diags) const {
|
||||
// Just drop any diagnostics that come from cloned consumers; they'll
|
||||
// have different source managers anyway.
|
||||
// FIXME: We'd like to be able to capture these somehow, even if it's just
|
||||
// file/line/column, because they could occur when parsing module maps or
|
||||
// building modules on-demand.
|
||||
return new IgnoringDiagConsumer();
|
||||
}
|
||||
};
|
||||
|
|
|
@ -926,7 +926,7 @@ void LockFileManager::waitForUnlock() {
|
|||
const unsigned MaxSeconds = 3600;
|
||||
do {
|
||||
// Sleep for the designated interval, to allow the owning process time to
|
||||
// finish up and
|
||||
// finish up and remove the lock file.
|
||||
// FIXME: Should we hook in to system APIs to get a notification when the
|
||||
// lock file is deleted?
|
||||
#if LLVM_ON_WIN32
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// Produce a crash if CRASH is defined.
|
||||
#ifdef CRASH
|
||||
# pragma clang __debug crash
|
||||
#endif
|
||||
|
||||
const char *getCrashString();
|
|
@ -5,3 +5,6 @@ module LibA {
|
|||
}
|
||||
}
|
||||
|
||||
module Crash {
|
||||
header "crash.h"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
// Clear out the module cache entirely, so we start from nothing.
|
||||
// RUN: rm -rf %t
|
||||
|
||||
// Parse the file, such that building the module will cause Clang to crash.
|
||||
// RUN: not env CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source all -fmodules -fmodule-cache-path %t -Xclang -fdisable-module-hash -I %S/Inputs/Headers -DCRASH %s 2> %t.err
|
||||
// RUN: FileCheck < %t.err -check-prefix=CHECK-CRASH %s
|
||||
// CHECK-CRASH: crash-recovery-modules.m:15:9:{15:2-15:14}: fatal error: could not build module 'Crash'
|
||||
|
||||
// Parse the file again, without crashing, to make sure that
|
||||
// subsequent parses do the right thing.
|
||||
// RUN: env CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source all -fmodules -fmodule-cache-path %t -Xclang -fdisable-module-hash -I %S/Inputs/Headers %s
|
||||
|
||||
// REQUIRES: crash-recovery
|
||||
|
||||
@import Crash;
|
||||
|
||||
void test() {
|
||||
const char* error = getCrashString();
|
||||
}
|
Загрузка…
Ссылка в новой задаче