[sanitizer] one more output test for the deadlock detector
llvm-svn: 204036
This commit is contained in:
parent
b9cb473fb8
commit
779ccf3b2c
|
@ -417,9 +417,9 @@ class LockTest {
|
|||
fprintf(stderr, "Starting Test16: detailed output test with two locks\n");
|
||||
// CHECK: Starting Test16
|
||||
// CHECK: WARNING: ThreadSanitizer: lock-order-inversion
|
||||
// CHECK: LockTest::Acquire_1
|
||||
// CHECK: LockTest::Acquire1
|
||||
// CHECK-NEXT: LockTest::Acquire_0_then_1
|
||||
// CHECK: LockTest::Acquire_0
|
||||
// CHECK: LockTest::Acquire0
|
||||
// CHECK-NEXT: LockTest::Acquire_1_then_0
|
||||
Init(5);
|
||||
Acquire_0_then_1();
|
||||
|
@ -428,17 +428,35 @@ class LockTest {
|
|||
U(0); U(1);
|
||||
}
|
||||
|
||||
__attribute__((noinline)) void Acquire_1() { L(1); }
|
||||
__attribute__((noinline)) void Acquire_0() { L(0); }
|
||||
__attribute__((noinline)) void Acquire_1_then_0() {
|
||||
Acquire_1();
|
||||
Acquire_0();
|
||||
}
|
||||
__attribute__((noinline)) void Acquire_0_then_1() {
|
||||
Acquire_0();
|
||||
Acquire_1();
|
||||
// More detailed output test.
|
||||
void Test17() {
|
||||
if (test_number > 0 && test_number != 17) return;
|
||||
fprintf(stderr, "Starting Test17: detailed output test with three locks\n");
|
||||
// CHECK: Starting Test17
|
||||
// CHECK: WARNING: ThreadSanitizer: lock-order-inversion
|
||||
// CHECK: LockTest::Acquire1
|
||||
// CHECK-NEXT: LockTest::Acquire_0_then_1
|
||||
// CHECK: LockTest::Acquire2
|
||||
// CHECK-NEXT: LockTest::Acquire_1_then_2
|
||||
// CHECK: LockTest::Acquire0
|
||||
// CHECK-NEXT: LockTest::Acquire_2_then_0
|
||||
Init(5);
|
||||
Acquire_0_then_1();
|
||||
U(0); U(1);
|
||||
Acquire_1_then_2();
|
||||
U(1); U(2);
|
||||
Acquire_2_then_0();
|
||||
U(0); U(2);
|
||||
}
|
||||
|
||||
__attribute__((noinline)) void Acquire2() { L(2); }
|
||||
__attribute__((noinline)) void Acquire1() { L(1); }
|
||||
__attribute__((noinline)) void Acquire0() { L(0); }
|
||||
__attribute__((noinline)) void Acquire_1_then_0() { Acquire1(); Acquire0(); }
|
||||
__attribute__((noinline)) void Acquire_0_then_1() { Acquire0(); Acquire1(); }
|
||||
__attribute__((noinline)) void Acquire_1_then_2() { Acquire1(); Acquire2(); }
|
||||
__attribute__((noinline)) void Acquire_2_then_0() { Acquire2(); Acquire0(); }
|
||||
|
||||
private:
|
||||
void Lock2(size_t l1, size_t l2) { L(l1); L(l2); U(l2); U(l1); }
|
||||
void Lock_0_1() { Lock2(0, 1); }
|
||||
|
@ -527,6 +545,7 @@ int main(int argc, char **argv) {
|
|||
LockTest().Test14();
|
||||
LockTest().Test15();
|
||||
LockTest().Test16();
|
||||
LockTest().Test17();
|
||||
fprintf(stderr, "ALL-DONE\n");
|
||||
// CHECK: ALL-DONE
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue